如何使用 gdb 命令检查 Cortex-M4 VTOR 寄存器?
How to check the Cortex-M4 VTOR register with gdb command?
(我正在学习 ARM 调试,所以这可能是个愚蠢的问题。)
我查看了 ARMv7-M Arch 参考手册。它说复位向量偏移存储在 VTOR(向量 Table 偏移寄存器)中。
我正在使用特定于 Cortex-M 的 gdb。所以我希望 gdb 命令 info registers
应该显示 VTOR
寄存器。但它只显示了一些通用寄存器。
那么有没有办法用 gdb 命令检查 VTOR?
谢谢!
添加 1 - 7:43 2022 年 3 月 2 日上午
根据 ARMv7 ARM,VTOR
是内存映射到 0xe000ed08
。但是当我尝试使用 gdb 命令访问它时,它显示以下错误:
>>> x /4xb 0xe000ed08
0xe000ed08: Cannot access memory at address 0xe000ed08
并且根据,我检查了gdb客户端已知的内存区域:
>>> info mem
Using memory regions provided by the target.
Num Enb Low Addr High Addr Attrs
0 y 0x00000000 0x00100000 flash blocksize 0x1000 nocache
1 y 0x10001000 0x10001400 flash blocksize 0x400 nocache
2 y 0x20000000 0x20040000 rw nocache
似乎 VOTR 偏移量 0xe000ed08 不在这些区域中。
现在我正在研究如何解决这个问题。
不确定是哪个决定的:
- 我可以配置什么?
- 还是由reel board厂家决定?
- 还是我刷入开发板的二进制文件?
添加 2 - 4:46 2022 年 5 月 3 日下午
Cannot access memory at address xxxx
错误的类似问题。可能跟优化有关。但还没有确定的答案。
它是一个内存映射寄存器,所以你可以这样检查它。
从您提到的手册中获取地址:
0xE000ED08 VTOR RW 0x00000000a Vector Table Offset Register, VTOR on page B3-601.
尝试类似
(gdb) x/w 0xe000ed08
使用 gdb 添加缺失的区域 mem
command.
mem 0xE0000000 0xE00FFFFF
然后你就可以访问0xe000ed08的VTOR了。
要获得更永久的解决方案,请将区域添加到目标内存映射配置 (https://sourceware.org/gdb/onlinedocs/gdb/Memory-Map-Format.html)
(我正在学习 ARM 调试,所以这可能是个愚蠢的问题。)
我查看了 ARMv7-M Arch 参考手册。它说复位向量偏移存储在 VTOR(向量 Table 偏移寄存器)中。
我正在使用特定于 Cortex-M 的 gdb。所以我希望 gdb 命令 info registers
应该显示 VTOR
寄存器。但它只显示了一些通用寄存器。
那么有没有办法用 gdb 命令检查 VTOR?
谢谢!
添加 1 - 7:43 2022 年 3 月 2 日上午
根据 ARMv7 ARM,VTOR
是内存映射到 0xe000ed08
。但是当我尝试使用 gdb 命令访问它时,它显示以下错误:
>>> x /4xb 0xe000ed08
0xe000ed08: Cannot access memory at address 0xe000ed08
并且根据
>>> info mem
Using memory regions provided by the target.
Num Enb Low Addr High Addr Attrs
0 y 0x00000000 0x00100000 flash blocksize 0x1000 nocache
1 y 0x10001000 0x10001400 flash blocksize 0x400 nocache
2 y 0x20000000 0x20040000 rw nocache
似乎 VOTR 偏移量 0xe000ed08 不在这些区域中。
现在我正在研究如何解决这个问题。
不确定是哪个决定的:
- 我可以配置什么?
- 还是由reel board厂家决定?
- 还是我刷入开发板的二进制文件?
添加 2 - 4:46 2022 年 5 月 3 日下午
Cannot access memory at address xxxx
错误的类似问题。可能跟优化有关。但还没有确定的答案。
它是一个内存映射寄存器,所以你可以这样检查它。
从您提到的手册中获取地址:
0xE000ED08 VTOR RW 0x00000000a Vector Table Offset Register, VTOR on page B3-601.
尝试类似
(gdb) x/w 0xe000ed08
使用 gdb 添加缺失的区域 mem
command.
mem 0xE0000000 0xE00FFFFF
然后你就可以访问0xe000ed08的VTOR了。
要获得更永久的解决方案,请将区域添加到目标内存映射配置 (https://sourceware.org/gdb/onlinedocs/gdb/Memory-Map-Format.html)