Forum: Mikrocontroller und Digitale Elektronik Zu viele volatile Variablen möglich? STM32F4xx


von bibu (Gast)


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

von Ralf (Gast)


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

von holger (Gast)


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.

von bibu (Gast)


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

von Ralf (Gast)


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

von DirkZ (Gast)


Lesenswert?

@bibu

Legst Du Variablen vom "Typ" Strukturen an?

von bibu (Gast)


Lesenswert?

@ Ralf: Gute Idee. Werde ich mal machen und dann das Resultat posten.

@DirkZ: Nein mach ich nicht. Alles "normale".

von bibu (Gast)


Lesenswert?

@DirkZ: Oder meinst du auch schon Arrays?

von DirkZ (Gast)


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.

von bibu (Gast)


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

von (prx) A. K. (prx)


Lesenswert?

DirkZ schrieb:
> Globale Arrays landen auch auf'm Stack.

Nein.

: Wiederhergestellt durch User
von EFA (Gast)


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.

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.