Zu viele volatile Variablen möglich? STM32F4xx

Gast #3300812
Lesenswert?

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
Gast #3300817
Lesenswert?

> 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
Gast #3300818
Lesenswert?

>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.
Gast #3300829
Lesenswert?

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
Gast #3300844
Lesenswert?

> 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
Gast #3302191
Lesenswert?

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.
Gast #3313051
Lesenswert?

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
Gast #3313241
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren