mikrocontroller.net

Forum: Compiler & IDEs Interrupts unter C beim Atmel


Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Welche möglichkeit, aussen die Interrupts abzuschalten gibt es da?

Keine. Das ist genau so gedacht:
cli();
// mach was, was nicht unterbrochen werden darf
sei();

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Siehe Interrupt, atomare Zugriffe.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Neuerdings benutzt man
ATOMIC_BLOCK dafür.
http://www.nongnu.org/avr-libc/user-manual/group__...

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>ATOMIC_BLOCK dafür.

Sehr interessant. Danke für den Link

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wow, cool, das kannte ich noch nicht :)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.