STM32 startup kod
Jaroslav Buchta
jaroslav.buchta na hascomp.cz
Středa Srpen 14 08:51:53 CEST 2019
Zdravim, vzal jsem do ruky starsi projekt s procesorem STM32F101RBT6, v
CubeMX nakonfiguroval a vygeneroval projekt s HAL. Potud vse OK. Preklad
nesel, dokud jsem nevlozit do nastaveni projektu definici __SOFTFP__,
budiz, drobna chybka...
Ale program stejne nefunguje, zhavaruje volani fce ve startup kodu
bl __libc_init_array
ktera je ponekud nesmyslna (asi v sekci .preinit_array nic neni ale
funkce prilinkovana dle map souboru je) a vypada takto - druha instrukce
skace nekam doprostred fce... Kod i jinak nedava smysl.
__libc_init_array:
080013f0: adds r0, #112 ; 0x70
080013f2: b.n 0x8000f34 <HAL_RTC_SetDate+68> //!!!!! nesmysl?
080013f4: eors r0, r6
080013f6: stmdb sp!, {r12, lr}
080013fa: b.n 0x8001b3e
...
Sekce z .map souboru
.text.__libc_init_array
0x080013f0 0x88
c:/ac6/systemworkbench/plugins/fr.ac6.mcu.externaltools.arm-none.win32_1.17.0.201812190825/tools/compiler/bin/../lib/gcc/arm-none-eabi/7.3.1/../../../../arm-none-eabi/lib\libc_nano.a(lib_a-init.o)
0x080013f0 __libc_init_array
.preinit_array 0x080014d4 0x0
0x080014d4 PROVIDE
(__preinit_array_start = .)
*(.preinit_array*)
0x080014d4 PROVIDE (__preinit_array_end = .)
.init_array 0x080014d4 0x4
0x080014d4 PROVIDE (__init_array_start = .)
*(SORT_BY_NAME(.init_array.*))
*(.init_array*)
.init_array 0x080014d4 0x4
c:/ac6/systemworkbench/plugins/fr.ac6.mcu.externaltools.arm-none.win32_1.17.0.201812190825/tools/compiler/bin/../lib/gcc/arm-none-eabi/7.3.1/crtbegin.o
0x080014d8 PROVIDE (__init_array_end = .)
Prekladac je z SW4STM32 a SW je aktualni. Netusi nekdo, kde muze byt
chyba? Je snad pouziti techto starych MCU v kombinaci s novymi nastroji
nefunkcni?
A taky by me zajimalo, proc se mi vzdycky po vygenerovani novych
zdrojaku z CubeMX znici .LD soubor, zkrati se na delku 0. Staci jej
smazat a znovu vygenerovat projekt...
Další informace o konferenci Hw-list