在主函数中,在nexti
指令之后bl
,gdb 调试器继续而不是停止。此问题不会发生在由 调用的函数中(例如,我可以跳过 中调用的函数init_pin_output
)。我在设置中缺少什么?
开始.s:
@ ...
@ vector_table
@ ...
.thumb_func
.global reset
.align 4
reset:
ldr r2, PPB_BASE
ldr r1, VTOR_OFFSET
add r1, r1, r2
ldr r0, =vector_table
str r0, [r1]
ldr r1, SRAM_STRIPED_END
mov sp, r1
platform_entry:
ldr r1, =main
blx r1
mov r0, r0
bkpt #0 @ should not return
电源:
.thumb_func
.global main
.align 4
main:
push {lr}
@ ...
.init_led:
movs r0, #25
bl init_pin_output
.init_lcd:
bl init_screen
@ ...
@ delay loop
@ ...
pop {pc}
.thumb_func
.global init_pin_output
.align 4
init_pin_output:
push {lr}
ldr r1, =out_pin
str r0, [r1]
ldr r0, out_pin
movs r1, #5 @ 5 - SIO
bl GPIO_function_select
ldr r0, out_pin
bl output_enable_pin
pop {pc}
.align 4
out_pin: .word 0
尝试从包装函数调用 main ,结果相同。
在 gdb 输出上
backtrace
:“回溯已停止:前一帧与此帧相同(堆栈损坏?)”。检查了 sdk 生成的 .elf 文件的反汇编后,我没有遇到帧指针修改(因为它在拇指模式下无效)。