Interrupt frågor, AVR
Postat: 25 september 2008, 10:30:45
Vad är inte tillåtet att göra i en interrupt rutin?.
Jag har nämligen problem med att interruptrutinen ibland slumpvis fördärvar data i huvud programmet.
Och då frågar ni givetvis
Har du initierat Stackpekaren = Jepp
Programkoden startar en liten bit in i minnet, eftersom interrupt vectorerna ligger i början av minnet. = Jepp
Register som används under interrupt rutinen Ska först PUSH,as ner i stacken
& POP,as ur precis innan avslut med RETi. = Jepp
Har jag missat något utöver det?.
Är det ok att hoppa till subrutiner, som ligger i huvudprogrammet, förutsatt att alla register som kan tänkas påverkas push,as innan?.
Är det ok att använda hopp & jämförelse instruktioner i interrupt rutinen?.
t.ex.
push r16
push r17
...
CPI r16, r17
BREQ blabla ; om lika hoppa till blabla
reti
blabla:
Inc r16
...
Pop r17
Pop r16
reti
För när man gör sånna jämförelser, så sätts väll olika flaggor.?
Kan man sabba flaggorna i fall interruptet skulle komma mitt i en av huvudprogrammets jämförelse instruktion. & sen utför interrupt rutinen samma instruktion fast med annan data.
Och då när interrupt rutinen är avklarad & programmet återgå, så har flaggorna ändrat sig & fel beslut tas?.
Jag har nämligen problem med att interruptrutinen ibland slumpvis fördärvar data i huvud programmet.
Och då frågar ni givetvis
Har du initierat Stackpekaren = Jepp
Programkoden startar en liten bit in i minnet, eftersom interrupt vectorerna ligger i början av minnet. = Jepp
Register som används under interrupt rutinen Ska först PUSH,as ner i stacken
& POP,as ur precis innan avslut med RETi. = Jepp
Har jag missat något utöver det?.
Är det ok att hoppa till subrutiner, som ligger i huvudprogrammet, förutsatt att alla register som kan tänkas påverkas push,as innan?.
Är det ok att använda hopp & jämförelse instruktioner i interrupt rutinen?.
t.ex.
push r16
push r17
...
CPI r16, r17
BREQ blabla ; om lika hoppa till blabla
reti
blabla:
Inc r16
...
Pop r17
Pop r16
reti
För när man gör sånna jämförelser, så sätts väll olika flaggor.?
Kan man sabba flaggorna i fall interruptet skulle komma mitt i en av huvudprogrammets jämförelse instruktion. & sen utför interrupt rutinen samma instruktion fast med annan data.
Och då när interrupt rutinen är avklarad & programmet återgå, så har flaggorna ändrat sig & fel beslut tas?.