使用avr-gcc
它可以将数据存储在程序存储器中以节省 RAM。这是使用PROGMEM 属性完成的。AVR-libc 还提供了一个宏PSTR(),它可以用于文字字符串。
现在我正在尝试使用PSTR()
with__func__
或.__FUNCTION__
__PRETTY_FUNCTION__
以下代码按预期工作,
display.message(__func__, 2);
display.message(__FUNCTION__, 2);
display.message(__PRETTY_FUNCTION__, 2);
,而任何这些行的编译都失败了,
display.messageP(PSTR(__func__), 2);
display.messageP(PSTR(__FUNCTION__), 2);
display.messageP(PSTR(__PRETTY_FUNCTION__), 2);
,出现以下错误:
initializer fails to determine size of '__c'
PSTR 的定义来自 WinAVR/avr/include/avr,解释了错误消息中引用的变量:
# define PSTR(s) (__extension__({static char __c[] PROGMEM = (s); &__c[0];}))
这对宏来说不是通用的,因为__FILE__
编译和工作正常:
display.messageP(PSTR(__FILE__), 2);
关于导致此错误的原因以及是否可以使用 PSTR() 在程序内存中插入函数名称的任何想法?