Archiv verlassen und diese Seite im Standarddesign anzeigen : interrupts
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?
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
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, 18: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).
na das mit der optimierung ist doch schon mal ne hilfe. lässt sich glaube im AVR-Studio einstellen.
danke
SprinterSB
16.05.2006, 16: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.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.