pisze prosty program w avrstudio

Oct 10, 2005 5 Replies

Napisalem cos takiego: .include "m16def.inc"



ldi r16, high(RAMEND) out SPH, r16 ldi r16, low(RAMEND) out SPL, r16



rcall start rcall nic



start: ldi r16,5 ret



nic: ldi r16,0 ret



No i robie build i debug. Program dochodzi do "rcall start" i zamiast wejść do start przechodzi do "rcall nic". Dlaczego nie wykonuje podprogramu. Czy coś robię źle?


U¿ytkownik "skasuj" napisa³ w wiadomo¶ci

Ja tu widze dwa podprogramy, ale nie bardzo widze program ;) To zadziala wg mnie tak: zaladuje odpowiednia wartoscia SP skoczy do podprogramu start (zapamietujac LP na stosie) powroci w miejsce rcall nic (czyli nic) powroci... do rozkazu znajdujacego sie po rcall nic, czyli do tego ldi :) a pozniej juz sie moga dziac rozne cuda, zaleznie od tego co bedzie sie znajdowalo na stosie, z ktorego ten ret sciagnie wartosc do powrotu

proponuje napisac jakis fragment kodu, ktory zapetli program i dopiero w tej petli cos wykonywac:

main: ;twoj kod z wywoalenim funkcji

rjmp main ; no i to sie tutaj kreci w kolko

;twoje funkcje z powrotemi rozkazem ret

albo: rcall start rcall nic

main: ; to powyzej sie wykona, a nastepnie kontroler utknie w martwej petli rjmp main

tak tak wiem tylko chodzi o ten pierwszy podprogram. AVRstudio olewa instrukcję rcall start i idzie dalej (nie wskakuje do podprogramu). Nie wiem czemu się tak dzieje.

WINA JEST NIE W PROGRAMIE. JAK SYMULUJE SIE ZA POMOCA KLAWISZA F10 TO SYMULACJA OPUSZCZA PODPROGRAMY, A JEŻELI F11 TO WSZYSTKO DOBRZE. TO TAK JAKBY KTOŚ JESZCZE SIĘ NACIĄŁ.

skasuj napisał(a):

Trzeba doczytac roznice miedzy trace into i step over ;)

[...]

Pokaż listing. Może coś nietak wyszło z asemblacją? Zamieść też wynikowy plik hex (przy tak krótkim nikt chyba się nie obrazi, że to binaria).

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required