debugging Openocd/GDB cortex-m3调试问题

chhkpiq4  于 2023-08-06  发布在  其他
关注(0)|答案(1)|浏览(166)

我编写了一个非常简单的程序来打开STM32 L-发现套件上的2个LED(GPIO端口B)。
我正在使用GNU工具链和openocd进行调试。
编译和链接都很好。我链接代码,使LMA和VMA位于RAM区域。
我在GDB-insight中打开了.elf,插入了一些断点,并使用'openocd-x64-0.7.0 -f stm32ldiscovery.cfg'运行openocd
在gdb提示符下,我运行了以下命令:

(gdb)target remote localhost:3333

(gdb)monitor reset halt

(gdb)load

(gdb)continue

(gdb)stepi

...

字符串
Full source code and object files here
==......部分源代码......=

const1: .word 0x40020400    @@GPIOB base mode register

const2: .word 0x55555555

const3: .word 0x40020414    @@GPIOB base output register

const4: .word 0x0000FFFF

...
...
...

reset_handler:

    ldr r0, =const2
    ldr r2, [r0]    @r2=const2
    ldr r0, =const1
    ldr r1, [r0]    @r1=const1  
    str r2, [r1]                    @@set mode to output

    ldr r0, =const4
    ldr r2, [r0]    @r2=const4
    ldr r0, =const3
    ldr r1, [r0]    @r1=const3  
    str r2, [r1]                    @@set output register to 1

loop:
b loop

基本上,我将GPIO端口B(0x40020400)设置为输出模式(0x55555555),然后将'1'(0x0000FFFF)设置为端口B输出寄存器(0x40020414)...
我能够单步执行汇编指令,看到寄存器(r 0,r1...)正在更新到预期的值...
但是当我来到str r2, [r1]str r2, [r1]时,它们基本上正在向外围寄存器写入新值,我发现这些外围存储器位置(0x400204000x40020414)没有更新为新值(0x555555550x0000FFFF)。
在gdb提示符下,我尝试运行monitor mdw 0x40020400,并确认该内存位置没有新值0x55555555。我也试过监视器mww 0x40020400 0x55555555写内存位置,但无济于事。我也试过设置*0x40020400 = 0x55555555,但也无济于事。
有人能帮帮我吗?是不是一些openocd/gdb的配置或设置我错了?

rqqzpn5f

rqqzpn5f1#

好了,找到问题了。
我没有启用GPIOB时钟。
在访问/修改GPIOB寄存器之前,我通过RCC_AHBENR寄存器启用了它,如上面的代码...现在起作用了

相关问题