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


von micro1 (Gast)


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?

von Hc Z. (mizch)


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).

von Flo (Gast)


Lesenswert?

http://www.mikrocontroller.net/articles/Interrupt

Unter dem Abschnitt Atomarer Datenzugriff
;-)

von micro1 (Gast)


Lesenswert?

Ah tanks at all.

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

von Mark B. (markbrandis)


Lesenswert?

micro1 schrieb:
> Ah tanks at all.

Ah, überhaupt Panzer? verwirrt

von micro1 (Gast)


Lesenswert?

Nein
nicht tanks sondern thanks

von Heiko (Gast)


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__util__atomic.html

MfG, Heiko

von Stefan B. (stefan) Benutzerseite


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-Tutorial#Variablen_gr.C3.B6.C3.9Fer_1_Byte

von Heiko (Gast)


Lesenswert?

Oh, stimmt, das ist ja gar kein AVR-Interrupt-Artikel :=)

MfG, Heiko

von micro1 (Gast)


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

von Stefan B. (stefan) Benutzerseite


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.

von Peter D. (peda)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.