我寫了一個非常簡單的程序來打開STM32L發現套件上的2個LED(GPIO端口B)。Openocd/GDB cortex-m3調試問題
我使用GNU工具鏈和openocd進行調試。
編譯和鏈接就OK了。我將代碼連接起來,使得LMA和VMA位於公羊區域。
我打開了GDB-洞察力.elf,插入一些斷點,並與'openocd-x64-0.7.0 -f stm32ldiscovery.cfg'
在gdb的提示OpenOCD的跑,我跑了以下內容:
(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
)...
我能夠逐步通過彙編指令,並看到寄存器(r0,r1 ...)正在更新到預期值...
但是當我來到str r2, [r1]
和str r2, [r1]
這基本上是寫入新值的外設寄存器,我發現這些外圍al存儲位置(0x40020400
和0x40020414
)未更新爲新值(0x55555555
和0x0000FFFF
)。
從gdb提示符下,我試着運行monitor mdw 0x40020400
並確認這個內存位置沒有新值0x55555555
。我也試過顯示器mww 0x40020400 0x55555555
寫內存的位置,但無濟於事...我也試過設置*0x40020400 = 0x55555555
,但也無濟於事...
任何人都可以幫我嗎?它是一些openocd/gdb配置或設置我錯了?