【发布时间】:2019-11-28 11:28:49
【问题描述】:
我在 Eclipse ( lpc1769 m3 cortex ) 上使用 gnu arm。我想用 sprintf 将浮点值转换为字符串,但它不起作用。
我将 -u_printf_float 添加到链接器选项,但它不起作用。 我该如何解决?
int main(void) {
InitBoard();
float flt = 1.1;
char msg[256];
sprintf(msg , "number is %.3f ", flt);
while (1){
KC_UART_sendstring(LPC_UART0, msg);
delay_ms(500);
}
}
这是我的链接器选项
-T "C:\Users**username**\Eclipse-workspace\Test_1\ldscript\LPC17xx.ld" -Xlinker --gc-sections -L"C:\Users**username**\AppData\漫游\xPacks@gnu-mcu-eclipse\arm-none-eabi-gcc\7.2.1-1.1.5.content\arm-none-eabi\lib\thumb\v7-m" -Wl,-Map,"Test_1 .map" --specs=nano.specs -u_printf_float
【问题讨论】:
-
它是否适用于
KC_UART_sendstring(LPC_UART0, "number is 1.100 ");? -
你怎么知道
sprintf()“不起作用”? -
程序无法执行 sprintf,如果我将 u_printf_float 添加到链接器选项,它将在此行停止。如果我评论 sprintf,它发送的数字是 1.100 与 uart。如果我删除链接器选项上的 u_printf_float,程序 didint 在 sprintf 行停止并执行 while(1),发送编号为 1.100。
-
您是否已将打印格式指定为
int_FP? (community.nxp.com/thread/44262#comment-375421)。一点安全注意事项:使用snprintf;-) -
只需将其转换为双倍:
sprintf(msg , "number is %.3f ", (double)flt);