我有以下用于Arduino草图的代码:
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
static FILE lcdout = {0} ;
static int lcd_putchar(char ch, FILE* stream)
{
lcd.write(ch) ;
return (0) ;
}
void setup() {
lcd.begin(16, 2);
fdev_setup_stream (&lcdout, lcd_putchar, NULL, _FDEV_SETUP_WRITE);
}
void loop()
{
stdout = &lcdout;
printf("%.2f Volts", 2.0);
}
问题出在代码的最后一行。这应该打印出“2.00 Volts”,但是,它打印出“?Volts”(问号而不是实际的浮点值)。如果我尝试格式化整数,则效果很好。
因此,基本上,如果我将printf行替换为以下内容,它将正常运行:
printf("%d Volts", 2); //prints correctly "2 Volts"
知道有什么问题吗?
最佳答案
用于AVR的GNU工具链(包含在Arduino IDE中)默认情况下使用C标准库的“精简版”,例如,其中浮点支持从格式化的I/O函数中减少/取消。 (只是为了使printf()
能够容纳几千字节的芯片存储空间。)
如果您想这样做,则必须使用printf()
链接器标志再次链接另一个包含-Wl,-u,vfprintf -lprintf_flt
普通版本的库。