Forum: Mikrocontroller und Digitale Elektronik Speicherverbrauch der libc optimieren?


von Mike (Gast)


Lesenswert?

Hallo,

ich mache gerade meine ersten Gehversuche mit dem Atmel Studio 7 und 
einem SAM D Controller. Leider hat dieser nur 4k RAM und so stört es 
mich, dass die libc davon über 1k für sich reserviert. Auf der Suche 
nach dem Übeltäter stieß ich auf diese Zeile im .map -File:


.data.impure_data
                0x20000000      0x428 c:/program files 
(x86)/atmel/studio/7.0/toolchain/arm/arm-gnu-toolchain/bin/../lib/gcc/ar 
m-none-eabi/6.2.1/../../../../arm-none-eabi/lib/thumb/v6-m\libc.a(lib_a- 
impure.o)
                0x20000428                . = ALIGN (0x4)
                0x20000428                _erelocate = .

Anscheinend scheint libc einen statischen Puffer namens impure_data 
anzulegen, der entsprechend viel Speicher blockiert. Offenbar hat das 
irgend etwas mit der reentrance-Fähigkeit zu tun, ich kenne mich mit der 
libc aber nicht wirklich aus. Mein Bauchgefühl sagt mir, dass normale 
single-threaded Programme diesen Speicher nicht wirklich benötigen.

Weiss jemand, ob und wie sich der Speicherbedarf der libc reduzieren 
lässt?

von Jim M. (turboj)


Lesenswert?

Ich habe sowas wie "--specs=nano.specs" in den Linker Optionen mit drin. 
Damit sind es "nur" 0x60 Byte.

von Christopher J. (christopher_j23)


Lesenswert?

Mike schrieb:
> die libc

Das ist normalerweise die Newlib, ursprünglich mal entwickelt für Linux

Jim M. schrieb:
> sowas wie "--specs=nano.specs" in den Linker Optionen

Damit linkt man gegen die Newlib-Nano, die deutlich schlanker ist. Ein 
paar Funktionen, wie etwa printf mit float müssen aber explizit 
aktiviert werden.

Ein paar Infos findest du unter
http://stefanfrings.de/stm32/index.html#newlib

von Joschke (Gast)


Lesenswert?

Entsprechende Funktionen selber neu programmieren.

von Mike (Gast)


Lesenswert?

Besten Dank,

die Einbindung der newlib-nano sowie die Verkleinerung des Stacks auf 
512 Bytes (war nicht ganz leicht zu finden) hat mir 1.5kB Speicher 
freigegeben. Gibt es irgendwo eine Beschreibung, was die Einschränkungen 
der nano-lib gegenüber der vollen newlib sind? Multitasking werde ich 
nicht nutzen, macht auf einem ARM mit 4kB RAM auch nicht wirklich Sinn.

von Christopher J. (christopher_j23)


Lesenswert?

Hier gibt es eine relativ umfassende, wenn auch schon etwas ältere 
Übersicht:
https://github.com/32bitmicro/newlib-nano-1.0/blob/master/newlib/README.nano

Falls du dich doch für ein RTOS entscheiden solltest (evtl. auf einem 
anderen Controller) könnte das hier noch relevant sein:
https://developer.mbed.org/users/AdamGreen/notebook/newlib-nano/

Für den kleinen SAM könntest du vermutlich sogar noch ChibiOS-NIL 
vernünftig nutzen. Ob das für dich Sinn macht ist natürlich eine ganz 
andere Frage aber es braucht nur ca. 1kB Flash und sehr wenig RAM.

http://www.chibios.org/dokuwiki/doku.php?id=chibios:product:nil:features

von Pandur S. (jetztnicht)


Lesenswert?

> Leider hat dieser nur 4k RAM ..

Allenfalls sollte man sich ueberlegen, welche funktionen man wirklich 
benoetigt, diese Programmieren und die Library sein lassen. Von printf() 
und float sollte man nicht mal entfernt traeumen.

: Bearbeitet durch User
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.