summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorHa Thach <[email protected]>2026-06-10 18:04:54 +0700
committerGitHub <[email protected]>2026-06-10 18:04:54 +0700
commit575a8fbcd0e5880791ea5f834649149a8f787d95 (patch)
tree07b949eba780ba8cbcce27ab929d62d36e20dc7c /examples
parent474ea5684d3a096abc7b61f06b791cdc3879f2b6 (diff)
Merge pull request #3690 from hathach/claude/board-test-idle-park
hil: park boards with idle board_test instead of erasing flash
Diffstat (limited to 'examples')
-rw-r--r--examples/device/board_test/src/main.c34
1 files changed, 30 insertions, 4 deletions
diff --git a/examples/device/board_test/src/main.c b/examples/device/board_test/src/main.c
index 71e7e1da7..3d8cf9979 100644
--- a/examples/device/board_test/src/main.c
+++ b/examples/device/board_test/src/main.c
@@ -54,6 +54,11 @@ void tusb_time_delay_ms_api(uint32_t ms) {
//
//--------------------------------------------------------------------+
+// CI_BUILD (defined for all CI builds, see hw/bsp/family_support.cmake) skips the
+// blink/echo loop below: after HIL tests, this firmware is flashed to park the
+// board in a quiet, low-power idle state (no USB, LED, or UART activity).
+#ifndef CI_BUILD
+
// Task parameter type: ULONG for ThreadX, void* for FreeRTOS and noos
#if CFG_TUSB_OS == OPT_OS_THREADX
#define RTOS_PARAM ULONG
@@ -107,19 +112,37 @@ static void board_test_loop(RTOS_PARAM param) {
}
}
+#endif // CI_BUILD
+
int main(void) {
+#ifdef CI_BUILD
+ // Park the board in a quiet, low-power idle loop. board_init() is intentionally
+ // skipped: no clocks, peripherals, USB, LED, or UART are brought up, so the MCU
+ // just idles after CI flashes this over a board's previous test firmware.
+ while (1) {
+ #if defined(ESP_PLATFORM)
+ vTaskDelay(portMAX_DELAY); // ESP runs FreeRTOS: yield this task indefinitely
+ #elif defined(__ARM_ARCH) || defined(__arm__)
+ __asm volatile("wfe"); // Cortex-M: sleep until an event
+ #else
+ // other architectures (e.g. RISC-V): spin
+ #endif
+ }
+ // no return: the loop never exits (an unreachable return trips IAR's Pe111)
+#else
board_init();
board_led_write(true);
-#if CFG_TUSB_OS == OPT_OS_FREERTOS
+ #if CFG_TUSB_OS == OPT_OS_FREERTOS
freertos_init();
-#elif CFG_TUSB_OS == OPT_OS_THREADX
+ #elif CFG_TUSB_OS == OPT_OS_THREADX
tx_kernel_enter();
-#else
+ #else
board_test_loop(NULL);
-#endif
+ #endif
return 0;
+#endif
}
#ifdef ESP_PLATFORM
@@ -128,6 +151,7 @@ void app_main(void) {
}
#endif
+#ifndef CI_BUILD
//--------------------------------------------------------------------+
// FreeRTOS
//--------------------------------------------------------------------+
@@ -173,3 +197,5 @@ void tx_application_define(void *first_unused_memory) {
1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
}
#endif
+
+#endif // CI_BUILD