在嵌入式项目上工作时,我注意到sprintf()
以下代码的方法:
char ln2[16]; sprintf(ln2, "%f Volt", Data[Position].Voltage1);
生成问号字符作为输出。
从上面的代码生成的输出是:
? Volt
而输入声明为 double Voltage1 = 0.0;
尝试格式化整数时,似乎不存在相同的问题。
预期的工作如下:
char ln1[16]; sprintf(ln1, "POSITION %d", (Position + 1));
并输出POSITION 3
其中的Position
是全局变量并声明为int
。
实际保存数据的结构是:
struct data { int Position; double Voltage1; double Voltage2; };
以上全部针对VS Code 使用C / C ++ 和Platform.io扩展。
这是怎么了?
嵌入式版本的printf通常不实现浮点数处理。您需要让链接器链接正确版本的函数。例如,对于ARM gcc,它将为-u _printf_float
or / and-u _scanf_float