miksior napisał(a):
jesli wpisze "z palca" wartosci, tj tab[1], tab[2] wszystko dziala, ale tab[zmienna+1] juz nie, wyjasni mi ktos czemu?
Wartości elementów tablicy są stałe i znane w momencie kompilacji.
Kiedy użyjesz
tab[1], indeks tablicy jest stały i znany w momencie kompilacji, tak samo jak wartość elementu tablicy pod tym indeksem.
Kiedy sprawdzasz warunek
if (tab[1]==1), wyrażenie w nawiasie może być obliczone w momencie kompilacji, i najprawdopodobniej to właśnie robi kompilator optymalizując kod - kompilator wcale nie generuje kodu odczytującego wartość elementu tablicy, tylko w momencie kompilacji sprawdza, czy wyrażenie
tab[1]==1 jest prawdą, czy też nie.
Kiedy sprawdzasz warunek
if (tab[zmienna]==1), kompilator nie może przewidzieć w momencie kompilacji, jaka będzie wartość zmiennej
zmienna w trakcie wykonywania programu, musi więc faktycznie wygenerować kod pobierający wartość z tablicy
tab[]. Tablice zapisujesz w pamięci FLASH za pomocą atrybutu PROGMEM, jednak jak koledzy wyżej zwrócili Ci uwagę, nie odczytujesz elementów prawidłowo. W przypadku użycia atrybutu PROGMEM powinieneś do odczytu użyć makra
pgm_read_byte().
Alternatywnie możesz zrobić tak:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
_________________
AVR-GCC - dane w pamięci FLASH