Witam!
Jestem na etapie programowania dość dużego urządzania, program liczy w tej chwili ponad kilka tysięcy linii kodu i do pewnego czasu wszystko szło ok.
Całość działa w oparciu o Atmega2561.
Teraz, kiedy dodaję kolejne funkcje, program zaczyna zachowywać się w sposób nieprzewidywalny.
Przykładowo:
Instrukcje Print #2 wstawiłem w celu znalezienia problemu, wysyłają one jak widać słowo "TARGET" a następnie zawartość zmiennej Target. Samo "Target" jest aliasem do Ubuf(1).
Co się dzieje: kiedy linia
jest zakomentowana, działa poprawnie (w miarę).
W terminalu otrzymuję zawartość zmiennej Ubuf(1) (czyli Target).
Kiedy linię odkomentuję - w terminalu dostaje mnóstwo spacji (mnóstwo to znaczy tyle, że otrzymuje je przez kilkanaście sekund, przy transmisji 115200 bps), później trochę śmieci i na końcu zawartość zmiennej.
Nie potrafię dojść, dlaczego tak się dzieje.
Druga sprawa, to sama zawartość zmiennej Ubuf(1) (czyli Target).
Mam tak:
Disk_psu_node to stała o wartości 3.
Wysłanie jej wartości poprzez
potwierdza, że ma wartość 3.
Jak widać w kodzie, wpisuję ją do zmiennej Target, czyli w zmiennej Ubuf(1) powinno być 3. Wysyłam przez UART, otrzymuję 2 (jeśli dodatkowo wysyłam słowo "TARGET" to dostaję również wyżej opisane śmieci).
Nie potrafię dojść dlaczego zmienna ma inną wartość niż powinna mieć.
W innym miejscu kodu, gdzie stosuję identyczną konstrukcję, wszystko działa. Np.:
Moje podejrzenia leżą w stosach.
Deklaruje ich rozmiar w taki sposób (trochę na wyrost):
Niekiedy, w zależności od kompilacji lub dopisania czegokolwiek, pojawia się również problem w wywoływaniu podprocedury wyświetlającej tekst na LCD. Kontroler się zawiesza lub zapętla (w podprocedurze nie ma pętli które mogłyby się zapętlić, jedynie pętle For).
W urządzeniu mam LCD na sterowniku SED1330 i do niego własne procedury wyświetlania. Działały przez długi czas i nic w nich nie zmieniałem, dlatego nie szukałbym w nich samych problemu.
Problem jest zawiły i nie bardzo wiem za co się chwycić. Staram się nie zagnieżdżać sub-ów, najgłębiej wchodzi do drugiego poziomu:
Przerwania są dwa, jedno z RTC (ustawia jedynie flagę), drugie z klawiatury (również tylko ustawia flagę).
Będę bardzo wdzięczny za jakiekolwiek podpowiedzi które pomogą w diagnozie problemu.
Jeśli będą potrzebne dalsze informacje to proszę pisać. Cały kod jest niestety za długi i słabo okomentowany, dlatego raczej mija się z celem umieszczanie go tu w całości.
Pozdrawiam serdecznie,
aleexander
Jestem na etapie programowania dość dużego urządzania, program liczy w tej chwili ponad kilka tysięcy linii kodu i do pewnego czasu wszystko szło ok.
Całość działa w oparciu o Atmega2561.
Teraz, kiedy dodaję kolejne funkcje, program zaczyna zachowywać się w sposób nieprzewidywalny.
Przykładowo:
Kod: text
Instrukcje Print #2 wstawiłem w celu znalezienia problemu, wysyłają one jak widać słowo "TARGET" a następnie zawartość zmiennej Target. Samo "Target" jest aliasem do Ubuf(1).
Co się dzieje: kiedy linia
Kod: text
jest zakomentowana, działa poprawnie (w miarę).
W terminalu otrzymuję zawartość zmiennej Ubuf(1) (czyli Target).
Kiedy linię odkomentuję - w terminalu dostaje mnóstwo spacji (mnóstwo to znaczy tyle, że otrzymuje je przez kilkanaście sekund, przy transmisji 115200 bps), później trochę śmieci i na końcu zawartość zmiennej.
Nie potrafię dojść, dlaczego tak się dzieje.
Druga sprawa, to sama zawartość zmiennej Ubuf(1) (czyli Target).
Mam tak:
Kod: text
Disk_psu_node to stała o wartości 3.
Wysłanie jej wartości poprzez
Kod: text
potwierdza, że ma wartość 3.
Jak widać w kodzie, wpisuję ją do zmiennej Target, czyli w zmiennej Ubuf(1) powinno być 3. Wysyłam przez UART, otrzymuję 2 (jeśli dodatkowo wysyłam słowo "TARGET" to dostaję również wyżej opisane śmieci).
Nie potrafię dojść dlaczego zmienna ma inną wartość niż powinna mieć.
W innym miejscu kodu, gdzie stosuję identyczną konstrukcję, wszystko działa. Np.:
Kod: text
Moje podejrzenia leżą w stosach.
Deklaruje ich rozmiar w taki sposób (trochę na wyrost):
Kod: text
Niekiedy, w zależności od kompilacji lub dopisania czegokolwiek, pojawia się również problem w wywoływaniu podprocedury wyświetlającej tekst na LCD. Kontroler się zawiesza lub zapętla (w podprocedurze nie ma pętli które mogłyby się zapętlić, jedynie pętle For).
W urządzeniu mam LCD na sterowniku SED1330 i do niego własne procedury wyświetlania. Działały przez długi czas i nic w nich nie zmieniałem, dlatego nie szukałbym w nich samych problemu.
Problem jest zawiły i nie bardzo wiem za co się chwycić. Staram się nie zagnieżdżać sub-ów, najgłębiej wchodzi do drugiego poziomu:
Kod: text
Przerwania są dwa, jedno z RTC (ustawia jedynie flagę), drugie z klawiatury (również tylko ustawia flagę).
Będę bardzo wdzięczny za jakiekolwiek podpowiedzi które pomogą w diagnozie problemu.
Jeśli będą potrzebne dalsze informacje to proszę pisać. Cały kod jest niestety za długi i słabo okomentowany, dlatego raczej mija się z celem umieszczanie go tu w całości.
Pozdrawiam serdecznie,
aleexander
