Пытаясь узнать больше о чипах ARM, и после успешного мигания с использованием ассемблера я хочу смешать функции C и ассемблера. Однако любая C -функция, которую я вызываю, вызывает Hardfault. Я думаю, что упускаю что-то очевидное.
Я компилирую, используя g cc, и эти флаги
-c -g -ggdb -Wall --specs=nosys.specs
Я использую следующие библиотеки lib c .a libg cc .a при компоновке
-L/usr/local/gnu-arm/arm-none-eabi/lib/thumb/v7e-m+fp/softfp -lc -L/usr/local/gnu-arm/lib/gcc/arm-none-eabi/9.2.1/thumb/v7e-m+fp/softfp
В objdump вот где происходит сбой:
80004d4: d3fb bcc.n 80004ce <FillZerobss>
80004d6: f7ff ff09 bl 80002ec <SystemInit>
Чип вызывает сбой при превышении abobe bl
Вот первые строки функции SystemInit
080002ec <SystemInit>:
80002ec: e52db004 push {fp} ; (str fp, [sp, #-4]!)
80002f0: e28db000 add fp, sp, #0, 0
80002f4: e59f3014 ldr r3, [pc, #20] ; 8000310 <SystemInit+0x24>
80002f8: e3a02302 mov r2, #134217728 ; 0x8000000
80002fc: e5832008 str r2, [r3, #8]
8000300: e1a00000 nop ; (mov r0, r0)
Вместо 080002e c я получаю:
08000298 <HardFault_Handler>
Я думаю, что упускаю что-то совершенно очевидное, но не вижу этого. Любая помощь или указатели будут оценены.