mikrocontroller.net

Forum: Compiler & IDEs Atmega128 16 bit varible in interrupt schreiben und in main Lesen


Autor: micro1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

kann man eigentlich ohne besondere vorkehrungen ineinem Interrupt eine
16 bit variable schreibne und diese dann irgendwo inder mein auslesen?
Ohen das etwas schief geht?

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nicht ganz ohne Weiteres.  Da der Interrupt zu jeder Zeit kommen kann - 
also auch zwischen dem Lesen des ersten und des zweiten Bytes - sollten 
Interrupts während des Auslesens gesperrt sein (jedenfalls wenn es sich 
um eine CPU handelt, bei der 16-Bit-Operationen nicht atomar sind (also 
nicht in einem Rutsch gehen) wie den 8-Bit-AVRs).

Autor: Flo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://www.mikrocontroller.net/articles/Interrupt

Unter dem Abschnitt Atomarer Datenzugriff
;-)

Autor: micro1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah tanks at all.

Ich werde mir mal das Tutorial zu gemüte führen

Autor: Mark Brandis (markbrandis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
micro1 schrieb:
> Ah tanks at all.

Ah, überhaupt Panzer? verwirrt

Autor: micro1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein
nicht tanks sondern thanks

Autor: Heiko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

was in dem Artikel noch nicht drinsteht (ich werde es bei Gelegenheit 
mal ergänzen, wenn ich Zeit finde): Es gibt in der avr-libc mit 
<util/atomic.h> passende Definitionen, die genau das ermöglichen: 
http://www.nongnu.org/avr-libc/user-manual/group__...

MfG, Heiko

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Heiko schrieb:

> was in dem Artikel noch nicht drinsteht

Weil der Artikel Interrupt eigentlich nicht speziell für AVR 
geschrieben ist. Dass die Beispiele dann doch wieder von der 
AVR-Fraktion kommen... :)

Der AVR-spezifische Teil und C und inkl. ATOMIC... steht dann im 
AVR-GCC-Tutorial: 
http://www.mikrocontroller.net/articles/AVR-GCC-Tu...

Autor: Heiko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh, stimmt, das ist ja gar kein AVR-Interrupt-Artikel :=)

MfG, Heiko

Autor: micro1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann man eigentlich sagen das dann
bei einem 32 bit Prozessor 32 bit zugriffe atomar sind.
Z.B bei einem AVR32 müsst ja dann ein zugriff auf eine 32 bit varaible 
atomar sein oder

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Pauschal habe ich mit dieser Behauptung Bauchweh. Speziell, wenn nicht 
auf ASM-Ebene sondern in einer Hochsprache gearbeitet wird.

Wenn es darauf ankommt, würde ich immer prüfen, ob der Compiler bei der 
gewählten Optimierungsstufe aus der C-Anweisung mit dieser Variable eine 
nicht unterbrechbare ASM-Anweisung macht oder mehrere unterbrechbare.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
micro1 schrieb:
> Kann man eigentlich sagen das dann
> bei einem 32 bit Prozessor 32 bit zugriffe atomar sind.

Nein.
Kann sein oder auch nicht.
Z.B. i++; ist auf nem 32Bit RISC nicht atomar, außer es ist eine 
Registervariable.


Peter

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.