From 7307a86860e3b5b81c07c566842fcf2323efc671 Mon Sep 17 00:00:00 2001 From: Eyck-Alexander Jentzsch Date: Sat, 21 Mar 2026 20:27:16 +0100 Subject: [PATCH] adds ISR check that is closer to productive code This approach patches the existing trap handler to call the test routine --- port/moonlight/CMakeLists.txt | 6 +++++- test/CMakeLists.txt | 12 ++++++++++++ test/threadx/generate_trap_file.sh | 27 +++++++++++++++++++++++++++ 3 files changed, 44 insertions(+), 1 deletion(-) create mode 100755 test/threadx/generate_trap_file.sh diff --git a/port/moonlight/CMakeLists.txt b/port/moonlight/CMakeLists.txt index 5edf9da..ae2e4c6 100644 --- a/port/moonlight/CMakeLists.txt +++ b/port/moonlight/CMakeLists.txt @@ -3,11 +3,15 @@ set(THREADX4TGFS_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../..) set(MOONLIGHT_SRC_DIR ${MOONLIGHT_ROOT}/src) set(MOONLIGHT_INC_DIR ${MOONLIGHT_ROOT}/inc) +if(NOT DEFINED MOONLIGHT_TRAP_SOURCE) + set(MOONLIGHT_TRAP_SOURCE ${MOONLIGHT_SRC_DIR}/trap_non_vectored.c) +endif() + set(MOONLIGHT_PLATFORM_SOURCES ${THREADX4TGFS_ROOT}/port/picolibc/port.c ${MOONLIGHT_SRC_DIR}/bootup.c ${MOONLIGHT_SRC_DIR}/board.c - ${MOONLIGHT_SRC_DIR}/trap_non_vectored.c + ${MOONLIGHT_TRAP_SOURCE} ${MOONLIGHT_SRC_DIR}/exception.c ${MOONLIGHT_SRC_DIR}/vector_table.c) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 7c32ba0..53f201c 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -24,6 +24,18 @@ enable_testing() set(TARGET_MEM "ram_dram" CACHE STRING "memory map to use") set(CMAKE_EXECUTABLE_SUFFIX_C ".elf") +set(MOONLIGHT_TRAP_SOURCE_INPUT ${THREADX4TGFS_ROOT}/port/moonlight/src/trap_non_vectored.c) +set(MOONLIGHT_TRAP_SOURCE ${CMAKE_BINARY_DIR}/generated/trap_non_vectored.c) +execute_process( + COMMAND bash ${CMAKE_CURRENT_LIST_DIR}/threadx/generate_trap_file.sh + ${MOONLIGHT_TRAP_SOURCE_INPUT} + ${MOONLIGHT_TRAP_SOURCE} + RESULT_VARIABLE MOONLIGHT_TRAP_GENERATE_RESULT +) +if(NOT MOONLIGHT_TRAP_GENERATE_RESULT EQUAL 0) + message(FATAL_ERROR "Failed to generate regression trap source") +endif() + add_subdirectory(${THREADX4TGFS_ROOT}/port/moonlight ${CMAKE_BINARY_DIR}/port/moonlight) function(setup_target TARGET) diff --git a/test/threadx/generate_trap_file.sh b/test/threadx/generate_trap_file.sh new file mode 100755 index 0000000..2bce871 --- /dev/null +++ b/test/threadx/generate_trap_file.sh @@ -0,0 +1,27 @@ +#!/bin/bash +set -eu + +src="$1" +dst="$2" + +extern_anchor='extern void _tx_timer_interrupt(void);' +call_anchor='_tx_timer_interrupt();' + +line=$(grep -n -F "$extern_anchor" "$src" | head -n 1 | cut -d: -f1) +if [ -z "$line" ]; then + echo "failed to find _tx_timer_interrupt declaration anchor in trap source" >&2 + exit 1 +fi +sed "${line}a\\ +extern void test_interrupt_dispatch(void);" "$src" > "$dst.tmp1" + +line=$(grep -n -F "$call_anchor" "$dst.tmp1" | head -n 1 | cut -d: -f1) +if [ -z "$line" ]; then + echo "failed to find _tx_timer_interrupt call anchor in trap source" >&2 + rm -f "$dst.tmp1" + exit 1 +fi +mkdir -p "$(dirname "$dst")" +sed "${line}i\\ + test_interrupt_dispatch();" "$dst.tmp1" > "$dst" +rm -f "$dst.tmp1"