[AVR] Zmienna w pamięci FLASH
[AVR] Zmienna w pamięci FLASH
Cześć.
Mam małą zagwozdkę z pojęciu co to takiego fizycznie jest zmienna w pamięci FLASH dla AVRów.
O ile sprawą oczywistą jest co to takiego zmienna w pamięci RAM to już zupełnie pogubiłem się w pojęciu zmienne w pamięci FLASH?
Jak to ma niby wyglądać fizycznie i po co jest coś takiego?
Mam małą zagwozdkę z pojęciu co to takiego fizycznie jest zmienna w pamięci FLASH dla AVRów.
O ile sprawą oczywistą jest co to takiego zmienna w pamięci RAM to już zupełnie pogubiłem się w pojęciu zmienne w pamięci FLASH?
Jak to ma niby wyglądać fizycznie i po co jest coś takiego?
Niby tak, ale możemy zadeklarować nap coś takiego:
char *wsk PROGMEM="tekst";
To jest co prawda stała w takim sensie że nie możemy jej zmienić poprzez przypisanie w czasie pracy programu, ale z punktu widzenia składni języka jest to zmienna przechowująca adres łańcucha. Inny przykład to struktury z zapisanymi stałymi np poziomami MENU.
char *wsk PROGMEM="tekst";
To jest co prawda stała w takim sensie że nie możemy jej zmienić poprzez przypisanie w czasie pracy programu, ale z punktu widzenia składni języka jest to zmienna przechowująca adres łańcucha. Inny przykład to struktury z zapisanymi stałymi np poziomami MENU.
Nie pytałeś o to Mirka ?slawek55 pisze:Niby tak, ale możemy zadeklarować nap coś takiego:
char *wsk PROGMEM="tekst";
To jest co prawda stała w takim sensie że nie możemy jej zmienić poprzez przypisanie w czasie pracy programu, ale z punktu widzenia składni języka jest to zmienna przechowująca adres łańcucha. Inny przykład to struktury z zapisanymi stałymi np poziomami MENU.
Powiedz mi w takim razie jak fizycznie wygląda taka tablica wskaźników do funkcji
gdzie void parse_set_led(char *buf); oraz pozostałe są funkcjami
co dokładnie gdzie jest umieszczone?
Kod: Zaznacz cały
void (*parse_funk[3])(char *buf) PROGMEM = {
parse_set_led,
parse_get_led,
parse_set_lcd};gdzie void parse_set_led(char *buf); oraz pozostałe są funkcjami
co dokładnie gdzie jest umieszczone?
Aż tak dobrze C nie znam. Ale rodzi się pytanie. Po co ci to wiedzieć ? Dla ciebie jako programisty wysokiego poziomu, nie ma znaczenie gdzie fizycznie kompilator wrzuci dane. Istotne jest tylko to że używasz wskaźnika. Gdybyś pisał w ASM, to inna sprawa, ale w C, nie wiem czy warto aż tak wnikać, w szczegóły. Zresztą pewnie każdy kompilator zrobi to po swojemu.