在使用STM32CubeIDE v1.5.0时,打印int64_t值的结果错误。
使用sprintf来显示一些值以进行调试。得到了错误的结果,但在线GCC编译器中可以正常工作。
代码位于一个函数中,目前为了调试,我在函数内部重新赋值。以下是STM32CubeIDE中的代码:
void log_data(int16_t u, int16_t y, int64_t z, int16_t indx )
{
u = 50;
y= 100;
z= 4351234;
indx= 0;
static char msg[48];
sprintf(msg, "%d %d %lld %d \r\n>", u, y, z, indx);
HAL_UART_Transmit_IT(&huart3, (uint8_t *) msg, strlen(msg)); // &huart3 &hlpuart1
}
打印结果为50 100 ld 4351234
在在线GCC编译器中运行此程序时:
// Online C compiler to run C program online
#include <stdio.h>
#define int16_t __int16_t
#define int64_t __int64_t
int main() {
// Write C code here
int16_t u = 50;
int16_t y = 100;
int64_t z = 4351234;
int16_t indx = 0;
static char msg[48];
sprintf(msg, "%d %d %lld %d \r\n>", u, y, z, indx);
printf("Hello world %s" , msg);
return 0;
}
显示结果为:Hello world 50 100 4351234 0 符合预期。
需注意:STM32CubeIDE代码输出的第三位显示为字符'ld',且末位值(indx)本应为0却未显示。
若将z改为9876543210,在线编译器能正确输出结果,但STM32CubeIDE却显示:50 100 ld 1286608618
|