微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

寄存器在 GDB 中偏移 1 的可能原因是什么?

如何解决寄存器在 GDB 中偏移 1 的可能原因是什么?

微控制器是 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

结果:

register values

如您所见,r6 设置为 0xdeadbeef 而不是 r5,这是之前在代码中编写的内容。该偏移量与其他两个设置的寄存器相同。

我相信链接描述文件的值是正确的,所以我认为问题是其他地方配置不正确造成的。

所以,我有点不确定如何从这里开始,并询问是否有人对可能出现的问题有任何想法或建议。

解决方法

好吧,看到大多数评论表明这可能是 GDB 服务器的问题,我决定试一试另一台 GDB 服务器。

结果非常令人满意:

correct registers

对于:

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

这为我解决了问题。

本来,我在 Windows 上使用 stlink v1.6.1,但是我切换到了作为 part of the STM32CubeIDE 出现的 GDB。

看来问题确实出在 GDB 服务器上。

感谢大家的帮助和建议,非常感谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。