Zacznijmy od tego:
Tom92 napisał(a):
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Nie analizowałem dokładnie całego kodu, ale to co zauważyłem "na pierwszy rzut oka". Masz wewnątrz funkcji niezainicjowany wskaźnik
wsk i zapisujesz go do EEPROM? Raczej to nie zadziała tak jak zakładasz. Wskaźnik będzie zawierał przypadkowe dane. Kompilator nie zgłaszał zastrzeżeń?
W ogóle nie bardzo rozumiem co chcesz zrobić. Po co używasz funkcji
atoi()? Po co te warunki? Co tak naprawdę chcesz wpisać do tej struktury? Jeśli chcesz zapisać do EEPROM aktualną zawartość struktury
ram_cfg wywal zupełnie tę funkcję
RBG() i w jej miejscu użyj od razu funkcji
copy_ram_to_eem(), przykładowo:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
...a nawet można jej użyć tylko raz, po zakończeniu tych wszystkich instrukcji
if.
W pętli głównej, zamiast tego szeregu if'ów lepiej użyć
switch. Tak jak jest też będzie działać, ale ze
switch będzie czytelniej.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
EDIT:
Jeszcze nie zauważyłem jednej rzeczy. Przykładowo makro
DLEDR_ON masz zdefiniowane jako
PORTB &= ~LEDR_PIN.
Później używasz zapisu:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Co zostanie rozwinięte przez preprocesor (tak w uproszczeniu) do:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Niewykluczone, że to jakoś zadziała, ale nie sądzisz, że to dość dziwny zapis?
Do ustawienia koloru w strukturze używaj raczej wartości liczbowych (0 lub 1, bo zakładam, że nie sterujesz jasnością poszczególnych kolorów) np.:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
i dopiero później na podstawie tej wartości zmieniaj stan pinu, tak jak to masz na początku funkcji
main().