slodkimieciu napisał(a):
Dziala poprawnie - natomiast w petli jezeli zamiast liczby przekaze zmienna to juz nie

No to jest tak jak Ci tłumaczyłem wcześniej. Wystarczy że z definicji tablicy wskaźników to tablic tekstowych:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
usuniesz słówko PROGMEM, czyli wtedy ta tablica będzie w RAMie, a nie we FLASHu, zacznie Ci działać wszystko poprawnie. Sprawdź!
Napisy oczywiście dalej pozostają we FLASHu.
Jeżeli natomiast chcesz zaoszczędzić dodatkowego RAMu na tej tablicy wskaźników to ją również dodajesz poprzez dopisanie PROGMEM do FLASHa.
Wtedy, aby odczytać taki wskaźnik z tej tablicy w pętli trzeba użyć funkcji z pgm_read, bo inaczej dostaje się krzaki. Dlatego po dodaniu tego cuda zaczyna działać.
A dlaczego działa bez tej funkcji pgm_read jeżeli nie ma pętli, a jest stała wpisana np. stały index, albo zmienna, ale z niezmienianą nigdzie wartością? No to już Ci właśnie też mówiłem, że prawdopodobnie kompilator, który jest nastawiony na optymalizację wielkości kodu podstawia dane adresy podczas kompilacji bo je już wtedy zna i dopiero je wgrywa do procka. Sam procek już podczas swojej pracy uruchamia funkcję strlen_P czy jakąś inną i sięga do adresu wpisanego przez kompilator, a nie faktycznie do zmiennej tablicowej string_table[].
W momencie kiedy mamy pętle to sam procesor musi w swoim kodzie pobrać dynamicznie w danym momencie z tablicy string_table[] odpowiedni wskaźnik i dlatego potrzebuje do tego funkcji pgm_read bo inaczej dostaje krzaki.
Ogólnie jeżeli za każdym razem użyjesz tej funkcji pgm_read, czy to w pętli, czy to bez niej to powinno być poprawnie bo kompilator sam to zoptymalizuje po swojemu. W momencie jednak jak w przypadku wyżej gdzie są pętle i musi procesor sam dynamicznie pobierać z FLASHa dane to ta funkcja pgm_read powinna być.
Oczywiście nie jestem na 100% pewny tego co piszę więc jak ktoś bardziej świadomy wie to niech potwierdzi lub poprawi

Do takiego wniosku doszedłem na stan obecny mojej wiedzy czyli początkujący
