Interrupts unter C beim Atmel

Gast #1046608
Lesenswert?

Hallo Leute,
jetzt versuche ich mal mein ersten Projekt unter C mit dem Atmel, habe 
bis jetzt nur ASM gemacht.

Wenn ich in der main schreibe

PORTA = PORTA | (1 << PA5 );

dann, sind ja mehre ASM befehle. Auslesen des Port, Setzen des Bits und 
zurückschreiben.

Wass passiert jetzt wenn zwischen den Schritten ein Interrupt auftritt 
und auch den PORTA ändert? Also direkt nach dem Auslesen, damit wird die 
änderrung vom Interrupt ja wieder gelöscht.

Das gleiche kann auch bei variable++ passieren, welche auch im interrupt 
geändert wird.

Welche möglichkeit, aussen die Interrupts abzuschalten gibt es da?

Bei dem Port könnte ich mir noch mit inline asm und sbi behelfen.

mfg
Peter
Gast #1046643
Lesenswert?

Bei dem von dir genannten Beispiel mit dem Port ist es tatsächlich nur 
ein Assemblerbefehl (natürlich nur, wenn du mit Optimierung 
kompilierst), da die Portregister im bitadressierbaren Bereich liegen.
Gast #1046677
Lesenswert?

@Klaus
ja, das hatte ich auch gelesen, aber leider ist das ganze ist mir zu 
riskant, wenn man ein neuer compieler kommt und er sich dabei etwas 
anderes denkt geht es schief, wenn ich schon C mache dann sollte der 
code auch möglichst portabel sein. Also wird wohl nichts anderes 
übrigbleiben als die Interrupts abzuschalten.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren