Piszę sobie funkcję która ma przyjmować tekst w postaci łańcuch i wyświetlic go na LCD.
Niby prymitywne, ale napotakałem na kilka przykrych niespodzianek.
Funkcja wygląda tak:
Kod: Zaznacz cały
void lcd_p(prog_char *ptr)
{
char znak;
while( 0 != (znak = pgm_read_byte(ptr++)) )
lcd_data(znak);
}
Kod: Zaznacz cały
lcd_p("tekst");
to tak nie mogę bo pojawia mi sie to zarówno w RAM jak i we Flash. Pisząc jeszcze inaczej
Kod: Zaznacz cały
lcd_p(PSTR("tekst");
warning: passing arg 1 of `lcd_p' discards qualifiers from pointer target type
Dlaczego tak jest. DLaczego jak zmienię funkcję a dokładniej parametr funkcji i napiszę
Kod: Zaznacz cały
void lcd_p(const prog_char *ptr)
{ ...
To już nie pojawia sie ostrzeżenie. Co powoduje że dodając const to się zmieia.
Mam nadzieję że jakoś wyraźnie to opisałem i nie namieszałem. A oczywiście kompilator ARG-GCC