gpt4 book ai didi

gdb - 如何使用 JLink 和 Cortex M4 从 gdb 设置堆栈指针?

转载 作者:行者123 更新时间:2023-12-02 12:48:50 28 4
gpt4 key购买 nike

我正在 Linux 上使用带有 gdb 的 Segger J-Link Base 来调试 Atmel SAM4S8C MCU。我在启动 gdb 时使用 --command 参数指定的 gdb 命令文件中有以下内容:

target remote localhost:2331
monitor flash device SAM4S8C

我还指定了我的 ELF 文件并在命令文件中加载程序。

我注意到,当我加载程序(使用load)时,堆栈指针未正确设置。 监视器重置也不会修改堆栈指针。

J-Link User Guide说(对于 Cortex-M3 设备):

Moreover, the user have to correct the Stack pointer (R13) and the PC (R15) manually, after reset in order to debug the application.

从 gdb 执行此操作的命令是什么?

奇怪的是我必须手动执行此操作。堆栈指针是重置向量的第一个条目。当我开发代码时,初始堆栈指针会发生变化(特别是在具有非常不同的初始堆栈指针的应用程序之间切换,这就是我第一次注意到这一点的方式)。

有没有办法让 gdb 在加载期间从 ELF 文件中读取此内容并自动设置它?

最佳答案

Cortex-M 的设计不需要汇编启动代码:
启动时,Cortex-M 会自动从 flash 的前两个 32 位字加载 sp 和 pc 寄存器。
就我的 LPC1788 而言,这意味着我需要加载内容为 0x00000000 的 r13/sp,以及加载内容为 0x00000004 的 r15/pc:

target remote localhost:2331
monitor interface SWD
monitor endian little
monitor speed auto
monitor reset
monitor halt
monitor flash device = LPC1788
monitor flash download = 1
monitor flash breakpoints = 1
file program.elf
load program.elf
break main
monitor reg r13 = (0x00000000)
monitor reg r15 = (0x00000004)
continue

关于gdb - 如何使用 JLink 和 Cortex M4 从 gdb 设置堆栈指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33400844/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com