Witam.
Mam pytanie do specjalistów od avr i gcc. Chcę zrobić sobie debuger do atmegi8, który będzie w stanie odczytywać lub ustawiać po rs232 wartości zmiennych oraz wywoływać funkcje. W zamyśle po zlinkowaniu kodu make wywoływać ma skrypt w pelru, który parsuje .map file w poszukiwaniu zmiennych statycznych i globalnych oraz adresów funkcji. Potem według scenariusza testowego wywoływać ma odpowiednie funkcje i ustawiać zmienne. O ile ze zmiennymi z sekcji .data - ich ustawianiem i odczytem - poszło łatwo, o tyle mam kłopot z wywołaniem funkcji.
Oto wycinek mapfile, z którego dowiaduję się jaki adres ma interesująca mnie funkcja:
Definiuję sobie wskaźnik na funkcję jako zmnienną globalną:
W mainie ładuję go wartością, póki co "ręcznie" odczytaną z mapfile i próbuję wywołać funkcję:
Skutek jest taki, że funkcja wywołuje się i wykonywane jest to co powinno być zrobione ale potem program idzie w przysłowiowe krzaki, i wymaga restartu. Wygląda jakby funkcja nie powracała z wywołania.
?
Mam pytanie do specjalistów od avr i gcc. Chcę zrobić sobie debuger do atmegi8, który będzie w stanie odczytywać lub ustawiać po rs232 wartości zmiennych oraz wywoływać funkcje. W zamyśle po zlinkowaniu kodu make wywoływać ma skrypt w pelru, który parsuje .map file w poszukiwaniu zmiennych statycznych i globalnych oraz adresów funkcji. Potem według scenariusza testowego wywoływać ma odpowiednie funkcje i ustawiać zmienne. O ile ze zmiennymi z sekcji .data - ich ustawianiem i odczytem - poszło łatwo, o tyle mam kłopot z wywołaniem funkcji.
Oto wycinek mapfile, z którego dowiaduję się jaki adres ma interesująca mnie funkcja:
.text.__dispToggleBacklight
0x000008e2 0xa ../disp/disp.oKod: C / C++
Definiuję sobie wskaźnik na funkcję jako zmnienną globalną:
Kod: C / C++
W mainie ładuję go wartością, póki co "ręcznie" odczytaną z mapfile i próbuję wywołać funkcję:
Kod: C / C++
Skutek jest taki, że funkcja wywołuje się i wykonywane jest to co powinno być zrobione ale potem program idzie w przysłowiowe krzaki, i wymaga restartu. Wygląda jakby funkcja nie powracała z wywołania.
?

![[avr-gcc][c][m8]Wywoływanie funkcji przez wskaźnik. Adresy w mapfile. [avr-gcc][c][m8]Wywoływanie funkcji przez wskaźnik. Adresy w mapfile.](https://obrazki.elektroda.pl/7030161600_1343673033.png)