我是C编程的新手,所以请帮助一个家伙。 在编译时我遇到了“无效的初始化程序”问题。这是相关的代码。
void lcd_writePString(char const* string) {
char c;
while ((c = (char)pgm_read_byte(string++)))
lcd_writeChar(c);
}
void os_errorPStr(char const* str) {
SREG &= 0b10111111; //Interrupts global deaktivieren
lcd_clear();
lcd_writePString(PSTR(str)); //THIS IS WHERE THE COMPILER THROWS OUT THE ERROR
while (os_getInput()!=0b10000001){
os_waitForInput();
}
lcd_clear();
SREG |= 0b01000000;
}
那么为什么我的编译器会抛出错误“invalid initializer”? PSTR将字符串写入我的微控制器的闪存中。
这就是PSTR的作用:
/** \ingroup avr_pgmspace
\def PSTR(s)
Used to declare a static pointer to a string in program space. */
# define PSTR(s) ((const PROGMEM char *)(s))
#else /* !DOXYGEN */
/* The real thing. */
# define PSTR(s) (__extension__({static const char __c[] PROGMEM = (s); &__c[0];}))
#endif /* DOXYGEN */
答案 0 :(得分:0)
lcd_writePString需要一个char const*
,但你通过一些不起眼的宏将参数转换为const PROGMEM char *
。要么不将其强制转换为此类型,要么更改lcd_writePString的原型。