gpt4 book ai didi

gdb - 使用JLink和GDB读取Cortex M0 MCU的外设寄存器

转载 作者:行者123 更新时间:2023-12-02 04:13:11 26 4
gpt4 key购买 nike

我正在尝试使用 GDB 读取 MCU ADC 寄存器,但我似乎找不到它是如何完成的。

gdb中使用x\10x 0x40012708只会返回零,我尝试读取的任何内存映射外设寄存器也是如此。

这可能吗?如果是的话,是怎么做到的?

谢谢!

最佳答案

我建议首先验证您的设置是否正常运行。例如,您可以尝试读取所有 Cortex-M0 处理器上存在的 CPUID 寄存器 - 请参阅 Cortex™-M0 DevicesGeneric User Guide 的第 4.3 节。 .

它位于地址0xE000ED00,并且应包含值0x410CC200。如果您能阅读它,这将是一个好兆头。

您可能应该首先尝试使用 J-Link Commander,然后使用 GDB-Server 和 GDB。我使用 LPC1114/301 Cortex-M0 在 Olimex 板上运行了此过程。我使用的是J-Link软件V5.10n和 arm-none-eabi-gdb 版本 7.10.1.20151217-cvs,它是 Linaro gcc 5.2 的一部分适用于 ARM Cortex-M 处理器包。

使用以下选项启动 JLink.exe:

jlink.exe -if SWD -speed 4000  -AutoConnect 1 -device Cortex-M0

您应该看到类似以下内容:

SEGGER J-Link Commander V5.10n (Compiled Feb 19 2016 18:39:46)
DLL version V5.10n, compiled Feb 19 2016 18:39:11<br/>
Connecting to J-Link via USB...O.K.
Firmware: J-Link ARM V8 compiled Nov 28 2014 13:44:46
Hardware version: V8.00
S/N: [My J-Link EDU Serial Number]
License(s): FlashBP, GDB
OEM: SEGGER-EDU
Emulator has Trace capability
VTref = 3.313V
Device "CORTEX-M0" selected.

Found SWD-DP with ID 0x0BB11477
Found Cortex-M0 r0p0, Little endian.
FPUnit: 4 code (BP) slots and 0 literal slots
CoreSight components:
ROMTbl 0 @ E00FF000
ROMTbl 0 [0]: FFF0F000, CID: B105E00D, PID: 000BB008 SCS
ROMTbl 0 [1]: FFF02000, CID: B105E00D, PID: 000BB00A DWT
ROMTbl 0 [2]: FFF03000, CID: B105E00D, PID: 000BB00B FPB
Cortex-M0 identified.
J-Link>

您现在可以使用 J-Link 命令 mem32 命令读取 CPUID 寄存器,并验证 CPUID 寄存器是否包含预期值:

J-Link>mem32  0xE000ED00,1

您应该得到:

E000ED00 = 410CC200

如果是这种情况,我想说您的 J-Link/Cortex-M0 设置可能可以正常工作。我们现在可以验证 GDB Server 和 GDB 也工作正常。

使用以下选项启动 JLinkGDBServerCL.exe:
JLinkGDBServerCL.exe -if SWD -speed 4000 -device Cortex-M0
SEGGER J-Link GDB Server V5.10n 命令行版本 JLinkARM.dll V5.10n(DLL编译于2016年2月19日18:39:11)

-----GDB Server start settings-----
GDBInit file: none
GDB Server Listening port: 2331
SWO raw output listening port: 2332
Terminal I/O port: 2333
Accept remote connection: localhost only
Generate logfile: off
Verify download: off
Init regs on start: off
Silent mode: off
Single run mode: off
Target connection timeout: 0 ms
------J-Link related settings------
J-Link Host interface: USB
J-Link script: none
J-Link settings file: none
------Target related settings------
Target device: Cortex-M0
Target interface: SWD
Target interface speed: 4000kHz
Target endian: little

Connecting to J-Link...
J-Link is connected.
Firmware: J-Link ARM V8 compiled Nov 28 2014 13:44:46
Hardware: V8.00
S/N: [My J-Link EDU Serial Number]
OEM: SEGGER-EDU
Feature(s): FlashBP, GDB
Checking target voltage...
Target voltage: 3.31 V
Listening on TCP/IP port 2331
Connecting to target...Connected to target
Waiting for GDB connection...

保持 GDB 服务器运行,并在其他 Windows 控制台 session 中启动 GDB:

arm-none-eabi-gdb
GNU gdb (GNU Tools for ARM Embedded Processors) 7.10.1.20151217-cvs
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=i686-w64-mingw32 --target=arm-none-eabi".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word".

我们现在可以连接到 GDB 服务器,并尝试再次显示 CPUID 寄存器的内容:

(gdb) target remote localhost:2331
Remote debugging using localhost:2331
0xfffffffe in ?? ()
(gdb) monitor halt
(gdb) monitor reset
Resetting target
(gdb) x/1xw 0xE000ED00
0xe000ed00: 0x410cc200
(gdb)

如果您再次获得 0x410cc200,则您的 J-Link/Cortex-m0/GDB 服务器/GDB 设置应该可以正常工作,您现在应该再次尝试使用以下命令读取 ADC 寄存器:

x/1xw 0x40012708

如果您能够读取 CPUID 寄存器,但不能读取 ADC 寄存器,并且 ADC 寄存器的地址正确,我现在不会对此行为做出解释 - 知道该设备的确切品牌/型号您正在使用的 MCU 当然可以提供更多帮助。

请注意,从现在开始,您应该指定 MCU 的确切型号作为 -device J-Link Commander/GDB Server 选项的参数,而不是 Cortex-M0。您可以通过输入命令 ? 来获取列表。在 J-Link Commander 命令提示符上。

关于gdb - 使用JLink和GDB读取Cortex M0 MCU的外设寄存器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35365105/

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