Probleme mit Interrupts

ATMega-Controller in BASIC programmieren

Postby kritias » Mon Jan 30, 2012 12:00 am

Hallo,

Ich habe da mal eine allgemeine Frage zu einem Problem das ich bisher zwar immer umschiffen konnte, das mich aber auch immer mal wieder ärgert.

Bascom übersetzt das:
C=A+B '(alles Long)
in Assembler zu diesem:

LDI R26,0x00 Load immediate
LDI R27,0x01 Load immediate
LD R16,X+ Load indirect and postincrement
LD R17,X+ Load indirect and postincrement
LD R18,X+ Load indirect and postincrement
LD R19,X Load indirect
LDI R26,0x04 Load immediate
LDI R27,0x01 Load immediate
LD R20,X+ Load indirect and postincrement
LD R21,X+ Load indirect and postincrement
LD R22,X+ Load indirect and postincrement
LD R23,X Load indirect
CALL 0x000000EA Call subroutine
LDI R26,0x08 Load immediate
LDI R27,0x01 Load immediate
ST X+,R16 Store indirect and postincrement
ST X+,R17 Store indirect and postincrement
ST X+,R18 Store indirect and postincrement
ST X+,R19 Store indirect and postincrement

Wenn jetzt irgendwo zwischen den LD Befehlen ein Interrupt zuschlägt der genau die betroffene Variable ändert, besteht die Variable für die weitere Berechnung zum Teil aus der alten und zum Teil aus der neuen Variablen.

Was ist die richtige Vorgehensweise um dieses Problem zu verhindern. Da wird sich doch sicher schonmal einer eine gute Lösung ausgedacht haben.
User avatar
kritias
 
Posts: 277
Joined: Fri Jan 03, 2014 1:47 pm

Return to BASCOM-AVR-Kurs

Who is online

Users browsing this forum: No registered users and 1 guest