Forum: Mikrocontroller und Digitale Elektronik STM32 Linkerscript, Startupcode


von Tobias P. (hubertus)


Angehängte Dateien:

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.

von Bernd K. (prof7bit)


Lesenswert?

Tobias P. schrieb:
> ich dachte immer,
> dass der Startupcode auch beim GCC beiliegt, aber das scheint nicht der
> Fall zu sein.

Der ist auch hochgradig herstellerspezifisch weil dort auch die 
Vektortabelle definiert wird. Die ist für jeden Controller anders.

von Evi (Gast)


Lesenswert?

Hallo,

eine frage hätte ich! Was macht dieses BugURL?

von pegel (Gast)


Lesenswert?

Wenn Du aus dem Nichts eine minimale STM32 Umgebung bis zur C++ 
Programmierung verstehen willst, gibt es schöne Anleitungen wie diese:

http://tty.uchuujin.de/2016/02/stm32-from-scratch-bare-minimals/

von Tobias P. (hubertus)


Lesenswert?

Bernd K. schrieb:
> Der ist auch hochgradig herstellerspezifisch weil dort auch die
> Vektortabelle definiert wird. Die ist für jeden Controller anders.

naja auch nur der obere Teil. Im Startupcode könnte nur eine minimale 
Vektortabelle sein, und per VTOR Register könnte man sie ändern.

Evi schrieb:
> Was macht dieses BugURL

wo ist das?

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.