微控制器是STM32 F767ZI,其中包含一个32位ARM Cortex M7
在设置寄存器的值时,所有寄存器似乎都偏移了1个。
例如,以下代码:
core.S
.syntax unified
.cpu cortex-m7
.fpu softvfp
.thumb
// Global memory locations
.global vtable
.global reset_handler
.type vtable, %object
vtable:
.word _estack
.word reset_handler
.size vtable, .-vtable
/*
* The Reset handler
*/
.type reset_handler, %function
reset_handler:
// The '_estack' value is defined in the linker script
LDR sp, =_estack
// Dummy values
LDR r5, =0xDEADBEEF
MOV r3, #50
.size reset_handler, .-reset_handler
linkerScripts/stm32-767zi.ld
_estack = 0x20080000;
MEMORY
{
FLASH ( rx ) : ORIGIN = 0x08000000, LENGTH = 2048K
RAM ( rxw ) : ORIGIN = 0x20000000, LENGTH = 512K
}
在运行以下命令进行编译后:
arm-none-eabi-gcc -x assembler-with-cpp -c -O0 -mcpu=cortex-m7 -mthumb -Wall core.S -o core.o
然后...
arm-none-eabi-gcc core.o -mcpu=cortex-m7 -mthumb -Wall --specs=nosys.specs -nostdlib -lgcc -T./linkerScripts/stm32-767zi.ld -o main.elf
得到的结果如下:
可以看到,r6
的值设置为 0xdeadbeef
而不是之前代码中写的 r5
。另外两个寄存器的偏移量也相同。
我认为链接脚本的值是正确的,所以我会认为问题是由于其他地方的配置不正确导致的。
因此,我有点不确定接下来该怎么做,想问问其他人是否有任何想法或建议可以解决这个问题。
arm-none-eabi-as -mcpu=cortex-m7 -mthumb -g -c core.S -o core.o
编译它,然后使用arm-none-eabi-ld core.o -T linkerScripts/stm32-767zi.ld -o main.elf
,但仍然得到相同的结果。 - Starman