Aussetzer beim CC-Flag löschen?

Gast #2557792
Lesenswert?
• ▲
▼
Hallo, ich habe gerade festgestellt, dass mein Programm Aussetzer hat 
wenn ich das CC4 des Timers 2 Rücksetze. Gibt es da bekannte Probleme 
bzw. kann es sein dass beim Verwendeten Code andere CC des Timer 2 
beeiflusst werden?

Ich verwende den CC4 des Timers 2 momenten nirgendwo anders, weder in 
einer ISR noch in der main oder einer sonstigen Funktion. Weiterhin 
funktioniert alles bisherige wie gewohnt wenn ich das Flag nicht 
rücksetze. Ich kann auch noch etliche andere If-abfragen und was weiss 
ich hinter diese Funktion setzen ohne dass es zu Schwierigkeiten kommt, 
also sollte es auch nicht an der größe des Programms liegen.
1
if(TIM_GetFlagStatus(TIM2, TIM_FLAG_CC4) == SET)
2
{
3
   n_Anz_OF_T2 ++;        
4
   TIM_ClearFlag(TIM2, TIM_FLAG_CC4);
5
}
Gast #2557847
Lesenswert?
• ▲
▼
Wie verhalten sich diese Flags beim Bufferüberlauf?
Handelt es sich um Interruptbits? Werden die automatisch rückgesetzt?
Müsste der Codeblock nicht atomar sein?
Kann sich das was du tun willst vom Timing überhaupt ausgehn?

ansonsten - mehr Code, mehr Infos
Gast #2558015
Lesenswert?
• ▲
▼
Der Code ist umfangreich, ich merke es daran dass ich zwischendurch 
Signale ausgebe die durch einen anderen Timer im Interrupt ausgelöst 
werden. Freigegeben werden diese Interrupts allerdings in der Main. Die 
Flanken setzen nun ab und zu aus. Trotzdem habe ich weit über 1000 
durchläufe meiner Main ohne dass irgendwo gewartet wird wo es kritisch 
wäre. Das kann ich anhand eines Toggelbits feststellen dass nach jedem 
Durchlauf der Main seinen Zustand ändert. Das Flag um das es geht ist 
kein Interruptflag, (allerdings könnte ich mal versuchen dieses zu 
nutzen und einfach den Interrupt nicht frei geben, vielleicht spinnt der 
STM32 dann weniger). Bei diesem Controller werden weder die normalen 
Compare, noch die Interruptflags automatisch rückgesetzt. Und wie gesagt 
wenn ich diese Funktion rausnehem und stattdessen wesentlich mehr Code 
dahinter setze (auch andere Timer die das gleiche machen) dann 
funktioniert es alles.

Und entschuldigt die Schlampigkeit, ich habe ganz vergessen zu erwähnen 
dass es sich um einen stm32f107 handelt.

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.