我正在使用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>
我做错了吗?
答案 0 :(得分:5)
默认情况下,AVR-libc尝试通过不链接与浮点相关的内容来节省二进制文件中的空间。对于像atof
这样的函数很容易,因为如果你不调用它们,那么链接器就不会包含它们。但是对于printf
,链接器无法判断您是否计划将其用于浮点数。
相反,AVR-libc有多个定义printf
的库。默认库中的printf
具有完整功能,但它不支持浮点数。如果您想在二进制文件中节省空间并且没有使用printf
的更高级功能(即格式标志),则可以使用printf_min
链接以使用更小的版本替换它。如果要打印浮点数,则需要printf_flt
中定义的完整动力版本。
This page描述了选择这些替代版本的正确链接器选项。简而言之,将-Wl,-u,vfprintf -lprintf_flt -lm
添加到链接器选项中。
答案 1 :(得分:0)
好的,这是微控制器特有的。
与@Sneftel所说的类似,我只需在AtmelStudio中添加库libprintf_flt.a
和libm.a
。