Forum: Mikrocontroller und Digitale Elektronik China Arduino zu kleiner flash Speicher?


von Pindrei P. (pindrei)


Lesenswert?

Hallo,

ich habe gerade ein kleines Projekt, welches ich mit einem Arduino nano 
Nachbau aufgebaut habe.
Sobald die Größe des Projektes einen Speicherbedarf von ca 10000 byte 
überschreitet, funktioniert das Programm auf dem µC nicht mehr.

Ich habe die Vermutung, dass hier ein anderer Bootloader verwendet 
wurde, und daher nicht ausreichend Platz im Flash vorhanden ist. 
Eigentlich sollte der Bootloader ca 2kByte belegen und ca 30 kbyte frei 
sein.

Hat jemand bereits die gleiche Erfahrung gemacht?


MfG

Pindrei

von Karl M. (Gast)


Lesenswert?

Hallo Pindrei,

wo ist dein Programm, wo sehen wir die Fusebits ?
Hast Du mal den Flashspeicher per ISP programmiert ?

von Michael U. (amiga)


Lesenswert?

Hallo,

was sagt Dein Ram-Verbrauch?

Bootloader mit 20kB bauen nichtmal die Chinesen, warum sollten sie auch, 
die Boorloader sind ja fertig da.
Bisher weder mit Nano noch NodeMCU oder ProMini in mehreren 
Layoutvarianten irgendwelche Probleme.

Gruß aus Berlin
Michael

von Pindrei P. (pindrei)


Lesenswert?

Michael U. schrieb:
> Bootloader mit 20kB bauen nichtmal die Chinesen,

Naja, es bedeutet ja nicht das der Bootloader 20kbyte groß ist, nur das 
das Programm an dieser Speicherstelle beginnt

Karl M. schrieb:
> Hast Du mal den Flashspeicher per ISP programmiert ?

Mit dem ISP Programmer werde ich es als nächstes versuchen, ich wollte 
nur wissen, ob jemand das gleiche Problem bereits hatte.

von Rudolph R. (rudolph)


Lesenswert?

Die Bootloader Section Size kann auf dem Mega328 nur 4k gross sein.
Maximal 2k für den Mega88 und Mega168.

Hat der Nano vielleicht einen Mega168 statt einem Mega328?

von Karl M. (Gast)


Angehängte Dateien:

Lesenswert?

Michael U.,

abgesehen davon, sind die Bereich des Bootloades im Flashspeicher des 
Atmega festgelegt.

Siehe Fusebits: BOOTSZ1 und BOOTSZ0 und
Table 24-7. Boot Size Configuration

von Pindrei P. (pindrei)


Lesenswert?

Rudolph R. schrieb:
> Hat der Nano vielleicht einen Mega168 statt einem Mega328?

mmh, laut IC Beschriftung nicht.....

von Ulrich F. (Gast)


Lesenswert?

Pindrei P. schrieb:
> Sobald die Größe des Projektes einen Speicherbedarf von ca 10000 byte
> überschreitet, funktioniert das Programm auf dem µC nicht mehr.

Meine Glaskugel sagt:
Klarer Fall!
Der Fehler steckt in der zusätzlichen Funktionalität.

Anders:
Das Problem sitzt vor dem Monitor.

von Michael U. (amiga)


Lesenswert?

Hallo,
@ Karl M.: Danke fürs nachschauen, ich war zu faul dazu, die Anpielung 
mit den 20k war nur aus 32k Flash und seinen 10k Programm.

Ich vermute eher auf zu hohe Ram-Auslastung, aber dazu müßte er sich 
äußern.
"Funktioniert nicht mehr" ist mir zu vieldeutig.

Gruß aus Berlin
Michael

von Pindrei P. (pindrei)


Lesenswert?

Michael U. schrieb:
> Ich vermute eher auf zu hohe Ram-Auslastung,

Wie kann ich das Prüfen?

von Michael U. (amiga)


Lesenswert?

Hallo,

ich kann nur vermuten, daß Du die ArduinoIDE benutztm Du bist mit Infos 
ja sehr sparsam. Die zeigt zumindest bei mir den verbleibenden Ram für 
dynamische Variablen nach dem Compilieren an.
Irgendwo gab es auch ein paar Zeilen Programm, daß man einfügen konnte, 
um sich die Belegung im Programm zur Laufzeit über die serielle 
mitteilen zu lassen, finde ich gerade nicht.

Zeig doch Dein Programm (als Detaianhang) wenn es kein großes Geheimnis 
ist.
Problem sind oft viele lokale Texte, die irgendwo ausgegeben werden und 
besser ins Flash sollten.

PS: meine Glaskugel-Software läuft nicht auf dem ProMini... ;-)

Gruß aus Berlin
Michael

von Pindrei P. (pindrei)


Angehängte Dateien:

Lesenswert?

Hallo,

im Anhang befindet sich das Arduino Projekt.
In der Setup und Loop Funktion befinden sich Funktionsaufrufe, die 
auskommentiert sind, sobald ich eine weiter Funktion aufrufe und sie 
damit mit kompiliert wird, Funktioniert das Programm nicht mehr und der 
Controller resetet durchgehend.

Den Speicherbedarf ermittelt man dḿit:

avr-size -x -A foo.elf

Jedoch habe ich noch nicht herausgefunden, wo die IDE die Dateien 
ablegt.

von Pindrei P. (pindrei)


Lesenswert?

Hab die .elf gefunden


pindrei@ThinkPad-X1:~$ avr-size -x -A 
/tmp/build8054757072674598525.tmp/Luftsensor.cpp.elf
/tmp/build8054757072674598525.tmp/Luftsensor.cpp.elf  :
section       size       addr
.data        0x264   0x800100
.text       0x1e28        0x0
.bss          0xc7   0x800364
.stab       0xa554        0x0
.stabstr    0xd3c0        0x0
.comment      0x11        0x0
Total      0x19a78


pindrei@ThinkPad-X1:~$

von Pindrei P. (pindrei)


Lesenswert?

bzw.

pindrei@ThinkPad-X1:~$ avr-size --mcu=atmega328p -C 
/tmp/build8054757072674598525.tmp/Luftsensor.cpp.elf
AVR Memory Usage
----------------
Device: atmega328p

Program:    8332 bytes (25.4% Full)
(.text + .data + .bootloader)

Data:        811 bytes (39.6% Full)
(.data + .bss + .noinit)

von Ulrich F. (Gast)


Lesenswert?

> fatal error: DHT.h: No such file or directory
> compilation terminated.
Und ja, bei den Arrays tippe ich auch auf Ram Mangel.

von Pindrei P. (pindrei)


Lesenswert?

OK, der Datenspeicherbedarf ist ein wenig zu groß.....
1
pindrei@ThinkPad-X1:~$ avr-size --mcu=atmega328p -C /tmp/build8054757072674598525.tmp/Luftsensor.cpp.elf
2
AVR Memory Usage
3
----------------
4
Device: atmega328p
5
6
Program:   10034 bytes (30.6% Full)
7
(.text + .data + .bootloader)
8
9
Data:       2341 bytes (114.3% Full)
10
(.data + .bss + .noinit)

Dann werde ich das Programm einmal anpassen, kann ich bei der Tollen IDE 
die Speichergrößen-Ausgabe nach dem Compilieren anhängen?

von Ulrich F. (Gast)


Lesenswert?

Pindrei P. schrieb:
> Dann werde ich das Programm einmal anpassen, kann ich bei der Tollen IDE
> die Speichergrößen-Ausgabe nach dem Compilieren anhängen?

Die 1.6.5 macht das automatisch.


Stopfe die Arrays ins Flash.

von chris (Gast)


Lesenswert?

Schau mal unter dem Stichwort PROGMEM fuer Avr.

von Pindrei P. (pindrei)


Lesenswert?

Ulrich F. schrieb:
> Stopfe die Arrays ins Flash.

Ja ich glaube das ist eine sinnvolle Lösung. Ich verwende die Arduino 
IDE 1.05.

Danke für eure Hilfe. Wenigstens hat es am Speicher gelegen und ich 
stehe nicht ganz so dämlich da. Hab halt nur an der falschen Stelle 
gesucht....

 :-)

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.