Fra*_*vão 4 c string floating-point microcontroller
我正在使用AtmelStudio在AVR XMEGA微控制器上编程.
我在将字符串转换为浮点数时遇到问题.该字符串被调用token2并具有值"8.604165"
我已经尝试了几个功能:
float lon = atof(token2); printf("lon=%f", lon); 回报 lon=?float lon = strtod(token2, NULL); printf("lon=%f", lon); 回报 lon=?float lon = strtof(token2, NULL); printf("lon=%f", lon);给出错误undefined reference to strtof,甚至包括<stdlib.h>难道我做错了什么?
默认情况下,AVR-libc尝试通过不链接浮点相关的东西来节省二进制文件中的空间.对于这样atof的函数很容易,因为如果你不调用它们,那么链接器将不包含它们.对于printf,不过,链接器不能告诉你是否打算使用它的浮点数.
相反,AVR-libc有多个定义的库printf.该printf默认库具有不同的是它不支持浮点数字全部功能.如果您想节省二进制文件中的空间并且您没有使用更高级的功能printf(即格式标志),则可以链接以printf_min使用更小的版本替换它.如果要打印浮点数,则需要定义完整的动力版本printf_flt.
此页面描述了用于选择这些替代版本的正确链接器选项.简而言之,添加-Wl,-u,vfprintf -lprintf_flt -lm到链接器选项.