将字符串转换为float

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>

难道我做错了什么?

Sne*_*tel 5

默认情况下,AVR-libc尝试通过不链接浮点相关的东西来节省二进制文件中的空间.对于这样atof的函数很容易,因为如果你不调用它们,那么链接器将不包含它们.对于printf,不过,链接器不能告诉你是否打算使用它的浮点数.

相反,AVR-libc有多个定义的库printf.该printf默认库具有不同的是它不支持浮点数字全部功能.如果您想节省二进制文件中的空间并且您没有使用更高级的功能printf(即格式标志),则可以链接以printf_min使用更小的版本替换它.如果要打印浮点数,则需要定义完整的动力版本printf_flt.

此页面描述了用于选择这些替代版本的正确链接器选项.简而言之,添加-Wl,-u,vfprintf -lprintf_flt -lm到链接器选项.