You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
2.7 KiB
67 lines
2.7 KiB
.. _debugmon: |
|
|
|
Cortex-M Debug Monitor |
|
###################### |
|
|
|
Monitor mode debugging is a Cortex-M feature, that provides a non-halting approach to |
|
debugging. With this it's possible to continue the execution of high-priority interrupts, |
|
even when waiting on a breakpoint. |
|
This strategy makes it possible to debug time-sensitive software, that would |
|
otherwise crash when the core halts (e.g. applications that need to keep |
|
communication links alive). |
|
|
|
Zephyr provides support for enabling and configuring the Debug Monitor exception. |
|
It also contains a ready implementation of the interrupt, which can be used with |
|
SEGGER J-Link debuggers. |
|
|
|
Configuration |
|
************* |
|
|
|
Configure this module using the following options. |
|
|
|
* :kconfig:option:`CONFIG_CORTEX_M_DEBUG_MONITOR_HOOK`: enable the module. This option, by itself, |
|
requires an implementation of debug monitor interrupt that will be executed |
|
every time the program enters a breakpoint. |
|
|
|
With a SEGGER debug probe, it's possible to use a ready, SEGGER-provided implementation |
|
of the interrupt. |
|
|
|
* :kconfig:option:`CONFIG_SEGGER_DEBUGMON`: enables SEGGER debug monitor interrupt. Can be |
|
used with SEGGER JLinkGDBServer and a SEGGER debug probe. |
|
|
|
|
|
Usage |
|
***** |
|
|
|
When monitor mode debuging is enabled, entering a breakpoint will not halt the |
|
processor, but rather generate an interrupt with ISR implemented under |
|
``z_arm_debug_monitor`` symbol. :kconfig:option:`CONFIG_CORTEX_M_DEBUG_MONITOR_HOOK` config configures this interrupt |
|
to be the lowest available priority, which will allow other interrupts to execute |
|
while processor spins on a breakpoint. |
|
|
|
Using SEGGER-provided ISR |
|
========================= |
|
|
|
The ready implementation provided with :kconfig:option:`CONFIG_SEGGER_DEBUGMON` provides functionality |
|
required to debug in the monitor mode using regular GDB commands. |
|
Steps to configure SEGGER debug monitor: |
|
|
|
1. Build a sample with :kconfig:option:`CONFIG_CORTEX_M_DEBUG_MONITOR_HOOK`` and :kconfig:option:`CONFIG_SEGGER_DEBUGMON` |
|
configs enabled. |
|
|
|
2. Attach JLink GDB server to the target. |
|
Example linux command: ``JLinkGDBServerCLExe -device <device> -if swd``. |
|
|
|
3. Connect to the server with your GDB installation. |
|
Example linux command: ``arm-none-eabi-gdb --ex="file build/zephyr.elf" --ex="target remote localhost:2331"``. |
|
|
|
4. Enable monitor mode debugging in GDB using command: ``monitor exec SetMonModeDebug=1``. |
|
|
|
After these steps use regular gdb commands to debug your program. |
|
|
|
|
|
Using other custom ISR |
|
====================== |
|
In order to provide a custom debug monitor interrupt, override ``z_arm_debug_monitor`` |
|
symbol. Additionally, manual configuration of some registers is required |
|
(see :ref:`debug monitor sample<debugmon-sample>`).
|
|
|