Nu isses passiert. Nächstes Problem. Ist es nur möglich in Interrupts globale Variablen zu verwenden wenn ich diese in main auswerten will? Gruß Axel
Ja natürlich, genau das ist ja Sinn und Zweck der globalen Variablen. Ist deine Variable global kannst du sie im ganzen Programm, egal ob nun main() oder eine Interrupt-Routine, schreiben und lesen.
Bitte beachten Falls man sowohl vom main oder Nicht-Interrupt-Routines als auch von Interrupt-Routinen auf globale variablen zugreifen will muss man sie als "volatile" deklarieren: static volatile uint8_t flag;
Das war klar. Aber Eure Aussagen beantworten meine Frage nicht. @Sascha mir ist die Bedeutung der globalen Variable schon geläufig. Meine Frage zielte eigentlich auf eine Antwort ab, ob es eine Alternative (pointer) gibt und ob diese effizienteren Code beim kompilieren ergibt. @Peter Ja, ich habe die FAQ gelesen, wird sonst wegoptimiert die Variable.
Nein, es gibt keine andere Variante als statische (Modul-lokale) oder globale Varianten, um ISRs mit dem Rest der Welt kommunizieren zu lassen. Schön, daß Du die FAQ auch gelesen hast. :-) Leider ist das noch nicht so die Norm, daß die Leute das tun, daher Peters Hinweis...
Was mir dazu noch eingefallen ist: man sollte natürlich mit »volatile« deklarierten Variablen sehr vorsichtig umgehen. Das Schlüsselwort verhindert jede Zugriffsoptimierung auf diesen Variablen, sie werden als jeses Mal im Speicher gelesen oder geschrieben. Typischer Fall: #include <inttypes.h> #include <avr/io.h> #include <avr/signal.h> volatile uint8_t timertick; SIGNAL(SIG_OVERFLOW0) { if (timertick++ == 8) timertick = 0; } Sieht doch vernünftig aus, oder? :-) Für einen AT90S8515 mit -O compiliert gibt das 23 Worte Code für die Interruptroutine. Alternative: SIGNAL(SIG_OVERFLOW0) { uint8_t t = timertick; if (t++ == 8) t = 0; timertick = t; } Hier wird die nicht optimierbare Variable timertick nur genau einmal gelesen und einmal geschrieben. Die Arithmetik erfolgt auf der optimierbaren Variable `t'. Das ergibt nur 20 Worte für die Routine.
Danke Jörg. Genau sowas meinte ich. Habe mich da vielleicht etwas doof ausgedrückt beim Fragen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.