Najpierw opiszę objaw, domniemaną przyczynę a potem poprosze o rade:
Mam program który pożera mi większość RAM, głównie za sprawą dużych buforów między innymi na dane pochodzące z 2 UART-ów (atmega 162) i innych zadeklarowanych tablic. Generalnie wszystko jest OK jednak kiedy powięszam wielkość zajętej pamieci RAM , tak gdzieś do zużycia jej w 80% program się wysypuje i uruchamia od nowa. Jest tam też sporo funkcji i procedur które pochłaniają stos oraz kilka przerwań. Eksperymentowanie z zajętością RAM i próby doprowadziły mnie do wniosku że winą jest rozmiar stosu a w zasadzie jego aktualne położenie tzn. program skacze sobie do jakiejś procedury, zmienia się wskaźnik stosu. W tym czasie pojawia się przerwanie które zmienia dane w jakimś buforze które nieopatrzenie zostały zajęte przez stos, przerwanie się kończy a program idzie w diabły. W sumie poradziłem sobie w ten sposób że zrobiłem tymczasowy bufor który jest ładowany ze zmiennych z pamięci stałej. Jednak ma to ten minus że pochłania dla odmiany pamięć programu. Pytamie jest takie, czy poprawnie zdjagnozowałem problem a co najważniejsze czy AVRStudio ma mechanizmy aby wyłowić miejsce w programie przy którym stos włazi na dane a dane na stos. Komplilacja poza komunikatem o zajętości pamięci coś tam wprawdzie daje do myślenia jednak praca programu zwłasza przy zagłębianiu się w podprogramy i obsłudze przerwań wiele informacji nie daje poza tym że wychwyciłem restart programu dobrze by było zmonitorować stos. Debuguje Jtagiem. PZDR
Mam program który pożera mi większość RAM, głównie za sprawą dużych buforów między innymi na dane pochodzące z 2 UART-ów (atmega 162) i innych zadeklarowanych tablic. Generalnie wszystko jest OK jednak kiedy powięszam wielkość zajętej pamieci RAM , tak gdzieś do zużycia jej w 80% program się wysypuje i uruchamia od nowa. Jest tam też sporo funkcji i procedur które pochłaniają stos oraz kilka przerwań. Eksperymentowanie z zajętością RAM i próby doprowadziły mnie do wniosku że winą jest rozmiar stosu a w zasadzie jego aktualne położenie tzn. program skacze sobie do jakiejś procedury, zmienia się wskaźnik stosu. W tym czasie pojawia się przerwanie które zmienia dane w jakimś buforze które nieopatrzenie zostały zajęte przez stos, przerwanie się kończy a program idzie w diabły. W sumie poradziłem sobie w ten sposób że zrobiłem tymczasowy bufor który jest ładowany ze zmiennych z pamięci stałej. Jednak ma to ten minus że pochłania dla odmiany pamięć programu. Pytamie jest takie, czy poprawnie zdjagnozowałem problem a co najważniejsze czy AVRStudio ma mechanizmy aby wyłowić miejsce w programie przy którym stos włazi na dane a dane na stos. Komplilacja poza komunikatem o zajętości pamięci coś tam wprawdzie daje do myślenia jednak praca programu zwłasza przy zagłębianiu się w podprogramy i obsłudze przerwań wiele informacji nie daje poza tym że wychwyciłem restart programu dobrze by było zmonitorować stos. Debuguje Jtagiem. PZDR