试图将开发切换到Linux,但是遇到了一个(可能是简单的新手)问题。在Mac上,我可以使用ARM GDB(来自GNU ARM嵌入式工具链的arm-eabi-none-gdb
)将elf
加载到STM32L432,然后在断点处使用简单的i lo
(或检查或随便)给我当地的变量。但是,在Linux上,完全相同的代码为我提供了以下内容:
cr1 = <error reading variable cr1 (Cannot access memory at address 0x2000fff4)>
我应该做些其他事情来正确地映射内存吗?
编辑:我想今天从内存块的整个内存转储开始重新开始(数据手册RM0394第63页),看看是否只有一些偏移量(也许是我不知道的某种内存别名),但是即使dump
命令受阻:
(gdb) dump ihex memory result.bin 0x20000000 0x40000000
Cannot access memory at address 0x2000c000
这不是在Mac上发生的,我可以在示波器上看到所需的数据(没有像带示波器的调试软件那样),所以问题不在于SRAM,而在于{{ 1}}。
对于投票决定关闭的人,您能指出这是什么题外话吗?我正在使用gdb
逐步执行代码,并且我提到的几乎所有内容都有标签,这使我相信这是解决问题的适当位置。我不是在“调试特定代码的帮助”中寻求“调试帮助”,而是在某些通用设备上寻求使用非常广泛的调试器的帮助。
答案 0 :(得分:0)
对于将来有此问题的任何人(我自己是 sc。),问题在于gdb不会跟踪包含我的SRAM的内存区域( viz。 0x2000c000到0x40000000)。解决方法是手动设置存储区域。
之前:
(gdb) info mem
Using memory regions provided by the target.
Num Enb Low Addr High Addr Attrs
0 y 0x00000000 0x00040000 ro nocache
1 y 0x08000000 0x08040000 flash blocksize 0x800 nocache
2 y 0x1fff0000 0x1fff7000 ro nocache
3 y 0x1ffff800 0x1ffff810 ro nocache
4 y 0x20000000 0x2000c000 rw nocache
5 y 0x40000000 0x5fffffff rw nocache
6 y 0xe0000000 0xffffffff rw nocache
之后:
(gdb) mem 0x2000c000 0x40000000 32 rw
(gdb) info mem
Using user-defined memory regions.
Num Enb Low Addr High Addr Attrs
0 y 0x00000000 0x00040000 ro nocache
1 y 0x08000000 0x08040000 flash blocksize 0x800 nocache
2 y 0x1fff0000 0x1fff7000 ro nocache
3 y 0x1ffff800 0x1ffff810 ro nocache
4 y 0x20000000 0x2000c000 rw nocache
1 y 0x2000c000 0x40000000 rw 32 nocache
5 y 0x40000000 0x5fffffff rw nocache
6 y 0xe0000000 0xffffffff rw nocache
(gdb) x/x cr1
0x36c: 0x60f8af00
答案 1 :(得分:0)
当我使用st-util 1.3.0作为GDB服务器在STM32L432上进行调试时,遇到了相同的问题。看来这是该版本的问题,已在st-util 1.5.0中修复。目前只有该版本的源代码,因此,如果您碰巧遇到这种情况,请尝试从代码构建1.5.0并进行尝试。