Hallo, ich habe folgendes Problem/Phänomen: Wenn ich über eine gewisse Anzahl an Volatile Variablen, in diesem Fall 12, komme, macht meine µC nicht mehr das was er soll. (z.B. werden andere Variablen verändert). Es ist egal ob ich die 13. Variable benutze oder auch nicht. Ich muss sie einfach nur deklarieren und schon hab ich Probleme. Ich habe das auch in anderen Projekten probiert. Immer das Gleiche. Gibt es einen Obergrenze? Vielen Dank schon mal. Gruß BiBu
> Gibt es einen Obergrenze?
Ja, und zwar der verfügbare RAM abzüglich dessen, was temporär verbraten
wird (z.B.Stack, Heap, etc.).
Es gibt auch eine Untergrenze, und zwar bei der Menge sinnvoller zur
Verfügung gestellter Informationen zu einem Problem ;)
Poste mal deinen Code.
Ralf
>Immer das Gleiche. Gibt >es einen Obergrenze? Ja sicher gibt es eine Obergrenze. Du kannst nicht mehr Variablen anlegen als du RAM hast. Über 12 volatiles lacht dein STM32F4 aber nur. Dein Programm ist vermutlich komplett verkorkst. Ich tip auf Zeile 42, 84 und 168. Viele Grüsse Stackoverflow.
Der Code würde ein bisschen viel werden. Zu dem darf ich den leider nicht öffentlich machen... Die Antworten halfen mir aber schon. Ich werde dann mal ein bisschen aufräumen und mal schauen wie es dann aussieht. Danke
> Ich habe das auch in anderen Projekten probiert. >> Zu dem darf ich den leider nicht öffentlich machen... Dann mach halt NOCH ein Dummy-Projekt, bei dem's auch nicht tut ;) Finden wir den Fehler im einen Programm, haben wir ihn zu 90% auch im anderen... Ralf
@bibu Legst Du Variablen vom "Typ" Strukturen an?
@ Ralf: Gute Idee. Werde ich mal machen und dann das Resultat posten. @DirkZ: Nein mach ich nicht. Alles "normale".
Globale Arrays landen auch auf'm Stack. vllt. noch sprintf? Benutzt Du ISR und und legst dort den µC wieder in den Schlafmodus? Darüber bin ich heute gestolpert: Im ISR-Timer Funktionsaufruf, dort den µC am Ende schlafen gelegt, das ganze iVm ein paar volatile-Vars. Nach zehn Durchläufen/Aufrufen war der Stack voll -> µC resettete sich selbst.
Ein paar ISR benutze ich schon und die hantieren auch mit den Variablen, aber in den Schlafmodus versetzte ich den µC nicht. Aber das werde ich mal im Auge behalten. Ich komm derzeit leider nicht zur weiteren Programmierung, aber wenn es weiter geht halte ich euch auf dem Laufenden. Grüße BiBu
Volatile ist immer erstmal die sicherere Variante und untersagt dem Compiler bestimmte Optimierungen. Du kannst auch alle Variablen volatile machen, am Verhalten des Codes ändert das nichts. Dein Fehler liegt woanders. Falls du den Compiler im Verdacht hast, schau in den Assemblercode. Und globale Variablen landen gerade nicht auf dem Stack.
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.