Speicherverbrauch der libc optimieren?

Gast #5071049
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?
#5071385
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
Gast #5072065
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.
#5076833
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

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