Możecie mi wytłumaczyć taką zezc.
Jest sobie funkcja wyświetlająca na lcd napisy z pamięci Flash.
Kod: Zaznacz cały
void print(prog_char* str)
{
char znak;
while( 0 != (znak = pgm_read_byte(str++)) )
LCDdata(znak);
}Kod: Zaznacz cały
print(PSTR("napis"))warning: passing arg 1 of `print' discards qualifiers from pointer target type
Tylko dlaczego skoro makro PSTR zwraca wskażnik do obszaru Flash, który jest akceptowalny przez funkcję. Dlaczego rzutownie, skoro funkcja print przyjmuje wskaźnik prog_char *
Zmiana w funkcji void print(char* ptr){ ... (usunięto prog_ ) nic nie wprowadza daje ten sam efekt ostrzeżenia. Pomaga dopiero rzutowanie.
P.S.
Sprawdziłem też taką sytuację
Kod: Zaznacz cały
prog_char g_napispgm[] = "Lancuch ";Kod: Zaznacz cały
print(g_napispgm);I niezależnie czy funkcja jest zadeklarowania jako void print(char *ptr) czy jako void print(prog_char *ptr) to też jest ten sam komunikat