Nic*_*rdu 8 c printf arduino stdio
我有一个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);
}
Run Code Online (Sandbox Code Playgroud)
问题出现在代码的最后一行.这应该打印出"2.00伏特",而是打印"?伏特"(问号而不是实际的浮点值).如果我尝试格式化整数,这很有用.
所以基本上,如果我用以下内容替换printf行,它将正常工作:
printf("%d Volts", 2); //prints correctly "2 Volts"
Run Code Online (Sandbox Code Playgroud)
知道问题是什么?
小智 7
用于AVR的GNU工具链(包含在Arduino IDE中)默认使用C标准库的"缩小"版本,其中,例如,浮点支持减少/从格式化I/O函数中删除(只是为了printf()适应芯片的几千字节长存储空间.)
如果要使用此功能,则必须printf()使用-Wl,-u,vfprintf -lprintf_flt链接器标志再次链接包含正常版本的另一个库.