bei Interrupt, eine Zählvariable aus hauptprogramm behalten

Gast #354465
Lesenswert?
• ▲
▼
Guten Abend,


ich sitze schon länger an einem Problem was eigentlich gar nicht schwer
ist, dachte ich zumindest.

mC: atmega8

Im Hauptprogramm habe ich eine Schleife in der ich den Status des D
Ports ändere. Ich schalte in jedem Schritt einen Pin aus und den Rest
an.
Nun ist es wirklich wichtig, für das Programm und mich, das ich die
LaufID (0-7) behalte wenn ein Interrupt eintritt.
Zur Zeit liefert er mir immer eine 7.

Wird der Programmablauf nicht sofort beendet wenn ein Interrupt
eintrifft?

Ich habe als Idee, einfach in der INT-Routine eine globale Variable mit
der ID beschrieben um diese dann später, bei Bedarf zu verwenden. Aber
wie es scheint wird vor der INT-Routine immer die For-Schleife bis zum
Ende durchlaufen.

Ich hoffe meine Ausführungen waren verständlich.

Ich hoffe auf Hilfe, denn ich weiß nicht weiter.


Mit freundlichen Grüßen
Christian
Gast #354467
Lesenswert?
• ▲
▼
> Zumindest für mich: Nein

Hab ich mir gedacht.

Was kleines, nicht zwingend lauffähig.

1
volatile  int _lauf;
2

3
SIGNAL (SIG_OVERFLOW0)
4
{
5
  pin = _lauf;
6
}
7
// pin ist immer 7!
8

9
main(...) {
10

11
while(1) {
12

13
   // diesen Wert brauch ich!!!
14
   // _lauf
15
   for( _lauf=0; _lauf<7; _lauf++ ) {
16
  PORTD = port_addr[_lauf];
17
  _delay_ms(2);
18
   }
19

20
}
21

22
}


Hilft das?
#354470
Lesenswert?
• ▲
▼
Ok,ich bemüh mal meine Kristallkugel....

Wie/wo ist den pin definiert?Meinst du vielleicht PIND?Und hast du den
Timer+Überlauf-Interrupt+globale Interrupts überhaupt aktiviert?

Und,NEIN,das Programm wird beim auftreten eines Interrupts nich sofort
beendet.Es wird für die Dauer des Interrupts unterbrochen,dann gehts
normal weiter.Und wenn alles sauber programmiert ist,bemerkt das
Hauptprogramm davon überhaupt nix,ausser das vielleicht neue Werte in
einigen globalen (volatile!) Variablen stehen.

Nebenbei:

Es sollte auch ohne volatile funktionieren,da du im Interrupt _lauf
nicht veränderst.Ist aber gute Praxis globale Variablen die in
Interrupts genutzt werden so zu deklarieren.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.