Add some missed style fixes in inline comments and test README. Signed-off-by: Ioannis Glaropoulos <Ioannis.Glaropoulos@nordicsemi.no>
104 lines
4 KiB
Plaintext
104 lines
4 KiB
Plaintext
Title: Test to verify code fault handling in ISR execution context
|
|
and the behavior of irq_lock() and irq_unlock() when invoked
|
|
from User Mode. (ARM Only)
|
|
|
|
Description:
|
|
|
|
The first test verifies that we can handle system fault conditions
|
|
while running in handler mode (i.e. in an ISR). Only for ARM
|
|
Cortex-M targets.
|
|
|
|
The test also verifies
|
|
- the behavior of the spurious interrupt handler, as well as the
|
|
ARM spurious exception handler.
|
|
- the ability of the Cortex-M fault handling mechanism to detect
|
|
stack overflow errors explicitly due to exception frame context
|
|
stacking (that is when the processor reports only the Stacking
|
|
Error and not an additional Data Access Violation error with a
|
|
valid corresponding MMFAR address value).
|
|
|
|
The second test verifies that threads in user mode, despite being able to call
|
|
the irq_lock() and irq_unlock() functions without triggering a CPU fault,
|
|
they won't be able to read or modify the current IRQ locking status.
|
|
|
|
---------------------------------------------------------------------------
|
|
|
|
Building and Running Project:
|
|
|
|
This project outputs to the console. It can be built and executed on QEMU as
|
|
follows:
|
|
|
|
ninja/make run
|
|
|
|
---------------------------------------------------------------------------
|
|
|
|
Troubleshooting:
|
|
|
|
Problems caused by out-dated project information can be addressed by
|
|
issuing one of the following commands then rebuilding the project:
|
|
|
|
ninja/make clean # discard results of previous builds
|
|
# but keep existing configuration info
|
|
or
|
|
ninja/make pristine # discard results of previous builds
|
|
# and restore pre-defined configuration info
|
|
|
|
---------------------------------------------------------------------------
|
|
|
|
Sample Output:
|
|
*** Booting Zephyr OS build v2.3.0-rc1-295-g630f69889088 ***
|
|
Running test suite arm_interrupt
|
|
===================================================================
|
|
starting test - test_arm_interrupt
|
|
Available IRQ line: 70
|
|
E: >>> ZEPHYR FATAL ERROR 1: Unhandled interrupt on CPU 0
|
|
E: Current thread: 0x20400190 (unknown)
|
|
Caught system error -- reason 1
|
|
E: r0/a1: 0x00000003 r1/a2: 0x20401d6c r2/a3: 0x00000003
|
|
E: r3/a4: 0x20401af8 r12/ip: 0x0295a8d1 r14/lr: 0x00401ad3
|
|
E: xpsr: 0x61000056
|
|
E: Faulting instruction address (r15/pc): 0x00400622
|
|
E: >>> ZEPHYR FATAL ERROR 3: Kernel oops on CPU 0
|
|
E: Fault during interrupt handling
|
|
|
|
E: Current thread: 0x20400190 (unknown)
|
|
Caught system error -- reason 3
|
|
E: r0/a1: 0x00000004 r1/a2: 0x20401d6c r2/a3: 0x00000004
|
|
E: r3/a4: 0x20401af8 r12/ip: 0x00000000 r14/lr: 0x00401ad3
|
|
E: xpsr: 0x61000056
|
|
E: Faulting instruction address (r15/pc): 0x00400640
|
|
E: >>> ZEPHYR FATAL ERROR 4: Kernel panic on CPU 0
|
|
E: Fault during interrupt handling
|
|
|
|
E: Current thread: 0x20400190 (unknown)
|
|
Caught system error -- reason 4
|
|
ASSERTION FAIL [0] @ ../src/arm_interrupt.c:49
|
|
Intentional assert
|
|
|
|
E: r0/a1: 0x00000004 r1/a2: 0x00000031 r2/a3: 0x80000000
|
|
E: r3/a4: 0x00000056 r12/ip: 0x00000000 r14/lr: 0x00401ad3
|
|
E: xpsr: 0x41000056
|
|
E: Faulting instruction address (r15/pc): 0x00409b34
|
|
E: >>> ZEPHYR FATAL ERROR 4: Kernel panic on CPU 0
|
|
E: Fault during interrupt handling
|
|
|
|
E: Current thread: 0x20400190 (unknown)
|
|
Caught system error -- reason 4
|
|
E: ***** MPU FAULT *****
|
|
E: Stacking error (context area might be not valid)
|
|
E: r0/a1: 0x2e706106 r1/a2: 0x739e3f03 r2/a3: 0xf1c99979
|
|
E: r3/a4: 0xe9973b26 r12/ip: 0x87d3b16f r14/lr: 0x01c98b2b
|
|
E: xpsr: 0x80608800
|
|
E: Faulting instruction address (r15/pc): 0x885e4061
|
|
E: >>> ZEPHYR FATAL ERROR 2: Stack overflow on CPU 0
|
|
E: Current thread: 0x20400190 (unknown)
|
|
Caught system error -- reason 2
|
|
PASS - test_arm_interrupt
|
|
===================================================================
|
|
starting test - test_arm_user_interrupt
|
|
PASS - test_arm_user_interrupt
|
|
===================================================================
|
|
Test suite arm_interrupt succeeded
|
|
===================================================================
|
|
PROJECT EXECUTION SUCCESSFUL
|