Forum: Mikrocontroller und Digitale Elektronik Speicherplatz ausreichend?


von Daniela (Gast)


Lesenswert?

Hallo,
ich verwende einen AT90CAN128, und bekomme seltsame Fehler beim 
verhalten des Programms, kann es sein das mein Speicher schon zu voll 
ist?
Folgende Info bekomme ich beim kompilieren:

text     data      bss      dec      hex
24436      538     1762    26736     6870


Über einen Tip wie ich dies zu interpretieren habe, wäre ich dankbar... 
:-)

von Svenska (Gast)


Lesenswert?

Hallo,

> Folgende Info bekomme ich beim kompilieren:
>
> text     data      bss      dec      hex
> 24436      538     1762    26736     6870
  |          |       |
  |          |       +-- uninitialisierte Variablen
  |          +--- initialisierte Variablen
  +--- Code, PROGMEM und __flash

Dein Programm belegt also derzeit 24436 Bytes Flash, sowie statisch 2300 
Bytes (538+1762) im RAM. Das ergibt 26736 Bytes insgesamt, oder 0x6870 
Bytes in hexadezimaler Schreibweise.

Die Zahl für den Flash ist vertrauenswürdig.
Beim RAM kommt noch der dynamische Verbrauch (Stack und Heap) dazu. 
Lokale Variablen und Rücksprungadressen landen auf dem Stack, der Heap 
wird mit Funktionen wie malloc() oder brk() verwaltet.

Wieviel RAM hat der Controller?

Gruß,
Svenska

von Claude M. (stoner)


Lesenswert?

Hallo Daniela

Was die Compiler- oder viel mehr die Linker-Information bedeutet hat 
Svenska bereits erklärt.

Die Grösse Deines Programmes ist kein Problem, sonst würdest du es schon 
gar nicht auf den uC rauf bringen.

Ob Dir zur Laufzeit der Speicher (RAM) ausgeht, lässt sich anhand dieser 
Informationen nicht sagen. Dazu müsste man das Laufzeitverhalten anhand 
des Codes analysieren. Nur so lässt sich sagen, wieviel Speicher nebst 
dem statisch allozieren Memory während der Ausführung dynamisch 
alloziert wird.

Das folgende Beispiel würde schon mehr als Deinen gesamten Speicher 
aufbrauchen - egal wie gross der ist (dass das Programm niemals 
terminiert ist da noch das kleinere Problem).
1
void bad_code() {
2
   bad_code();
3
}
4
5
void main() {
6
   bad_code();
7
}


Gruss
Claude

von Pete K. (pete77)


Lesenswert?

Daniela schrieb:
> seltsame Fehler

Wie äußern sich diese Fehler?
Hardware nach Datenblättern aufgebaut? (z.B. Abblockkondensatoren, AVCC 
beschaltet, etc.)
Stromversorgung stabil und ausreichend dimensioniert?

von Thomas E. (thomase)


Lesenswert?

Daniela schrieb:
> Hallo,
> ich verwende einen AT90CAN128, und bekomme seltsame Fehler beim
> verhalten des Programms, kann es sein das mein Speicher schon zu voll
> ist?
> Folgende Info bekomme ich beim kompilieren:
>
> text     data      bss      dec      hex
> 24436      538     1762    26736     6870
>
>
> Über einen Tip wie ich dies zu interpretieren habe, wäre ich dankbar...
> :-)

Speicher hat dein Controller genug. Viel interessanter wäre es zu 
wissen, ob am Ende "Build succeeded with 0 Warnings..." zu lesen ist.

mfg.

von Daniela (Gast)


Lesenswert?

Pete K. schrieb:
> Wie äußern sich diese Fehler?

Ich sende zyklisch eine CAN-Nachricht, außerdem warte Ich auf eine 
bestimmte CAN-Nachricht um eine LED einzuschalten. Obwohl diese 
Nachricht auf dem Bus liegt, geht die LED nicht an. Die zyklische 
Nachricht kommt zwar, aber mit dem falschen Inhalt.
Wenn ich dann etwas ändere geht es plötzlich wieder.
Wie gesagt, ein sehr komisches verhalten... :-(

Vielleicht ist es der nicht ausrreichende bzw. überlaufende RAM? :-/
Wie kann ich da denn ansetzen???

von Daniela (Gast)


Lesenswert?

Daniela schrieb:
> Vielleicht ist es der nicht ausrreichende bzw. überlaufende RAM?

Der AT90CAN128 hat aber ja 4kB RAM.
Das sollte dann doch eigentlich ausreichen...

Was würde mir noch RAM "klauen"?

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.