STM32 Linkerscript, Startupcode

OP #6166237
Lesenswert?

Hallo Leute
ich hab da eine Frage zu C auf STM32. Ich habe mir da vor Jahren ein 
Makefile zusammenkopiert, und ein minimalistisches Linkerscript und 
einen Startupcode für STM32 geschrieben. Ich habe versucht, so viel wie 
nur geht weg zu lassen.
Startupcode, Linkerscript und Makefile scheinen wunderbar zusammen zu 
funktionieren für C. Was ich noch nicht getestet habe, ist malloc(), 
dafür müsste man wohl noch ein spezielles Symbol im Linkescript 
definieren (ist das richtig?).

Dazu 2 Fragen.
1) für malloc() und free() muss die Funktion sbrk definiert sein. Sollte 
nicht die Standardlibrary die beinhalten? ich habe ehrlich gesagt 
absolut keinen Schimmer, welche Library ich verwende, ich habe nur 
gcc-arm-none-eabi in der neuesten verfügbaren Version installiert:
1
$ arm-none-eabi-gcc -v
2
Using built-in specs.
3
COLLECT_GCC=arm-none-eabi-gcc
4
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/arm-none-eabi/9.2.0/lto-wrapper
5
Target: arm-none-eabi
6
Configured with: ../gcc-9.2.0/configure --prefix=/usr --mandir=/usr/share/man --with-pkgversion='Fedora 9.2.0-1.fc31' --with-bugurl=https://bugzilla.redhat.com/ --infodir=/usr/share/info --target=arm-none-eabi --enable-interwork --enable-multilib --with-python-dir=share/arm-none-eabi/gcc-9.2.0/python --with-multilib-list=rmprofile --enable-plugins --disable-decimal-float --disable-libffi --disable-libgomp --disable-libmudflap --disable-libquadmath --disable-libssp --disable-libstdcxx-pch --disable-nls --disable-shared --disable-threads --disable-tls --enable-languages=c,c++ --with-newlib --disable-nls --disable-shared --disable-threads --with-gnu-as --with-gnu-ld --with-gmp --with-mpfr --with-mpc --with-headers=yes --with-system-zlib --with-sysroot=/usr/arm-none-eabi
7
Thread model: single
8
gcc version 9.2.0

eventuell ist es die newlib, die benutzt wird?
Jedenfalls, was muss ich noch ändern, damit malloc funktioniert?

2) eventuell würde ich auch gern C++ verwenden, dazu bin ich aber nicht 
sicher, ob ich im Linkerscript die Sektionen .ctors/.dtors benötige, 
ODER das __preinit_array und __init_array. Man findet beide Varianten im 
Netz.
Und was muss im Startupcode noch hinzugefügt werden? ich dachte immer, 
dass der Startupcode auch beim GCC beiliegt, aber das scheint nicht der 
Fall zu sein.
Angehängte Dateien:

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