(我正在学习ARM调试,所以这可能是一个愚蠢的问题。(
我查阅了ARMv7-M架构参考手册。它表示重置矢量偏移存储在VTOR(矢量表偏移寄存器(中。
我使用的是Cortex-M特有的gdb。所以我希望gdb命令info registers
应该显示VTOR
寄存器。但它只显示了一些通用寄存器。
那么,有没有一种方法可以用gdb命令检查VTOR?
谢谢!
2022年3月2日上午1-7:43
VTOR
是根据ARMv7 ARM映射到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似乎不在这些区域内。
现在我正在研究如何解决这个问题。
不确定是谁决定的:
- 我可以配置什么
- 还是由卷筒板制造商决定
- 还是我闪到黑板上的二进制
添加时间:2022年5月3日下午2:46
Cannot access memory at address xxxx
错误的类似问题。这可能与优化有关。但还没有确切的答案。
https://github.com/adamgreen/gcc4mbed/issues/35
使用gdbmem
命令添加缺少的区域。
mem 0xE0000000 0xE00FFFFF
然后,您将能够在0xe000ed08访问VTOR。
要获得更持久的解决方案,请将该区域添加到目标内存映射配置中(https://sourceware.org/gdb/onlinedocs/gdb/Memory-Map-Format.html)
它是一个内存映射寄存器,因此您可以通过这种方式对其进行检查。
从您提到的手册中获取地址:
0xE000ED08 VTOR RW 0x00000000a Vector Table Offset Register, VTOR on page B3-601.
试试类似的东西(gdb) x/w 0xe000ed08