wachcio napisał(a):
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Jeśli zrobisz w ten sposób, w momencie wywołania funkcji zostaje utworzona (na stosie) kopia struktury, którą przekazałeś jako argument
'sekcja'. Wszystkie zmiany dokonywane wewnątrz funkcji wykonywane są na tej kopii, a nie bezpośrednio na przekazanej strukturze. Kiedy funkcja się zakończy dane zawarte w zmiennej lokalnej funkcji
sprawdz_sekcje() (lub inaczej w argumencie)
'sekcja' zostają utracone, a wartości pól struktury przekazanej do funkcji pozostają niezmienione.
Jeśli chcesz, żeby funkcja zmieniała bezpośrednio pola struktury przekazanej jako argument, musisz zrobić to poprzez wskaźnik:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
wachcio napisał(a):
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Kiedy warunek
( datetime.ss == 0 ) jest spełniony zostają wykonane instrukcje wewnątrz bloku warunkowego, więc również m.in.
sekcja.stan = 1;W związku z tym
uart_putint( sekcja.stan, 10 ); zwróci prawidłowy wynik.
Jednak po wykonaniu tego bloku instrukcji warunek
( datetime.ss == 1 ) nie jest jeszcze spełniony.
Funkcja kończy swoje działanie i dane zmiennej lokalnej
sekcja zostają utracone.
Warunek ten będzie spełniony dopiero przy kolejnym obiegu pętli głównej i kolejnym wywołaniu funkcji
sprawdz_sekcje().
Wtedy jednak zmienna lokalna
sekcja ponownie zostanie zainicjowana danymi zmiennej globalnej z tablicy struktur
sekcja[i], która przecież w poprzednim wywołaniu funkcji nie została zmieniona, więc nadal będzie wynosiła -1.
Reasumując, jeśli zrobisz to tak jak pokazałem (poprzez wskaźnik), powinno być OK, choć nie analizowałem kodu szczegółowo, więc nie mogę wykluczyć innych błędów.