PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : interrupts



arser
14.05.2006, 22:19
hallo alle

in meinen ISR's werden variablen die ich im main() benutze nicht erkannt. hab auch schon mit "volatile" rumgespielt- auch kein effekt. woran liegts und was bedeutet volatile genau?

izaseba
14.05.2006, 22:44
schau mal hier (http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Unterbrechbare_Interuptroutinen),
und hier (https://www.roboternetz.de/wissen/index.php/Avr-gcc#Interrupts).

Da haben sich Leute Mühe gemacht, um Dir zu helfen.


woran liegts

*Glaskugel auspack*
Wahrscheinlich daran :


...werden variablen die ich im main() benutze nicht erkannt.

Du mußt Sie schon Global definieren, sonst wird es nicht klappen.

Gruß Sebastian

arser
15.05.2006, 16:12
OK!
hat funktioniert. danke schon mal.
was heisst denn nun volatile genau? denn es funktioniert auch mit stinknormalen typen wie int & char. aus deinen "hiers" werd ich nicht wirklich schlau.
pack die glaskugel aus BABA-JAGA!

SprinterSB
15.05.2006, 17:09
"volatile" bedeutet "flüchtig". D.h. der Wert einer Speicherstelle oder eines SFRs kann sich ohne zutun des Compilers ändern (etwa indem die Hardware ein SFR verändert oder eine ISR den Wert ändert (wann die zuschlägt, kann man nicht wissen)). Daher wird für bei jedem Zugriff auf eine volatile-Variable diese auch in/vom Speicher geschrieben/gelesen und nicht aus Optimierungsgründen in einem Register (GPR) gehalten. Ohne Optimierung (-O0) ist jede Variable implizit volatile (zumindest wird es von gcc so gehandhabt).

arser
16.05.2006, 12:42
na das mit der optimierung ist doch schon mal ne hilfe. lässt sich glaube im AVR-Studio einstellen.

danke

SprinterSB
16.05.2006, 15:06
Für normalen Betrieb empfiehlt sich "-Os" (optimiert auf Größe). Macht eigentlich nen ganz guten Code. Wenn's nicht sauber programmiert ist, nutzt es dir auch nix, Optimierung abzustellen -- du bekommst dann sogar eher Platzprobleme in Flash und SRAM.