Interrupts unter C beim Atmel

Gast #1046608
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 #1046612
>Welche möglichkeit, aussen die Interrupts abzuschalten gibt es da?

Keine. Das ist genau so gedacht:
1
cli();
2
// mach was, was nicht unterbrochen werden darf
3
sei();
Gast #1046643
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
@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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.