Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

łańcuchy w pamięci Flash i przekazywanie ich do funkcji

Sławek5
-
-
Posty:485
Rejestracja:15 sie 2003, o 16:40
Lokalizacja:Szczecin
Kontaktowanie:
łańcuchy w pamięci Flash i przekazywanie ich do funkcji

Postautor: Sławek5 » 6 lis 2007, o 07:23

Cześć.
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); }
No i jak piszę wywołanie funkcji np

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");
to koppia nie zostaje umieszczona w RAM ale pojawia się komunikat:
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

Wróć do „Projektowanie PCB, programy EDA, CAD, narzędziowe”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 40 gości