2014-11-11 6 views
-2

Я новичок в программировании на C, поэтому, пожалуйста, помогите мальчику. При компиляции у меня возникает проблема с недопустимым инициализатором. Это соответствующий код.Компилятор бросает «Неверный инициализатор» при записи char const *

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 */ 
+3

Какие библиотеки/аппаратные средства вы используете? Эти функции 'lcd_ *' и 'PSTR()' не являются частью стандарта C, поэтому вам нужно предоставить нам дополнительную информацию. – GoBusto

+0

Что такое 'PSTR'? Мы не можем ответить на этот вопрос, не зная об этом? –

+0

Эй, Андрей, комментарий показывает, где ошибка. Я добавил к своему сообщению, что делает PSTR exaclty =) Спасибо за ваши усилия до сих пор – zeldamania

ответ

0

lcd_writePString ожидает char const* пока вы приводите параметр в const PROGMEM char * через какой-то неясной макрос. Либо не бросайте его на этот тип, либо не изменяйте прототип lcd_writePString.

+0

Ну, я работаю над этим в Uni на макросах. Инструкции говорят мне написать что-то на ЖК-дисплее с этой точной командой: lcd_writePString (PSTR («Hello World»)); Поэтому я думаю, что мне нужно что-то сделать с помощью str, прежде чем использовать его в методе writePstring – zeldamania

+0

@zeldamania. Затем спросите человека, написавшего инструкции, почему они говорят вам сделать что-то, что вызывает конфликт типа ... – Lundin