Forum: Mikrocontroller und Digitale Elektronik Aussetzer beim CC-Flag löschen?


von STM (Gast)


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
}

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Das Problem liegt vermutlich auch in diesem Fall nicht im geposteten 
Code...

STM schrieb:
> dass mein Programm Aussetzer hat wenn ich das CC4 des Timers 2 Rücksetze.
Und wie stellst du das fest? Was setzt aus?

von me (Gast)


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

von STM (Gast)


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.

von STM (Gast)


Lesenswert?

Achso und was meinst du mit Bufferüberlauf? Den der Timer? Die fangen 
einfach bei Null wieder an und generieren ein Update-Flag, was ich auch 
problemlos mit der Selben Technik abfragen kann.

von STM (Gast)


Lesenswert?

Bzw, ich mache das auch, da ich das Updateflag auch brauche.

von STM (Gast)


Lesenswert?

Hmmm mist Entschuldigt, ich hatte mich verschrieben. Ich wollte CC2 
nutzen. Mit dem klapts auch. Habs ja auch nur 4 mal suchen lassen ... so 
ein %$'#!§....

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
Noch kein Account? Hier anmelden.