Flag gesetzt, aber nicht erkannt

Gast #1679289
Lesenswert?
• ▲
▼
Hallo

hab grad ein komisches Problem bei meinem Code und brauche deswegen 
bitte Hilfe.
Und zwar setze ich im Interrupt eine Flag, im main wird dies aber nich 
erkannt.
Im Anhang ist der betreffende Programmteil wo der Fehler auftritt.
Dass mein Programm in die Schleife springt, wo "signalInputCompleteFlag" 
gesetzt wird, weiß ich sicher. Aber im main bei der Abfrage der Flag 
wird sie nicht als gesetzt erkannt.

Wo liegt da das Problem?

mfg
jonny
Angehängte Dateien:
Gast #1679342
Lesenswert?
• ▲
▼
A. K. schrieb:
> Was soll eigentlich das cli() in der ISR? Ein langes Leben ist dem nicht
> beschieden, denn mit Ende der ISR wird es wieder gesetzt.

Hab zuerst versucht die Interrupts zu deaktivieren, weil das eventuell 
der Fehler sei. Hat aber auch nix geholfen.

mfg
jonny
#1679376
Lesenswert?
• ▲
▼
Wo ist index definiert (volatile)? Wie groß ist index? Und setzt du es 
je wieder auf 0? Wie viele Elemente hat signal? Du machst in deinem 
timer keine Überprüfung, ob du nicht (versehentlich) über die Grenze 
deines Arrays hinausschießt.

Als Beispiel:
1. index = 78, interrupt kommt, index++ --> flag setzten
2. hauptroutine fangt zu arbeiten an (analyze)
3. interrupt bevor analyze index auf 0 setzt --> beschreiben des 81. 
elements = nicht gut.

Kannst du a) mit einer Überprüfung im Interrupt abfangen oder b) 
interrupts für die Abarbeitung von alanyze() deaktivieren oder c) 
analyze 100% schneller als den Timer machen. Ansonsten, zu wenig code, 
wie die anderen es schon gesagt haben (Glaskugel ist grad in Reperatur 
;) ).

btw, deine "if(PINB...." geht kürzer:
1
  if(PINB & (1<<PINB2))
2
    signal[index] = 1;
3
  else
4
    signal[index] = 0;
5
  index++;
oder noch ein wenig kürzer
1
  signal[index] = (PINB & (1<<PINB2)) ? 1 : 0;
2
  index++;

lg
Mobius

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.