diff options
| author | hathach <[email protected]> | 2026-03-05 19:07:00 +0700 |
|---|---|---|
| committer | hathach <[email protected]> | 2026-03-05 20:48:30 +0700 |
| commit | 0c7a385cf873b9cbf93344187c033c176c37f7e2 (patch) | |
| tree | 6a31b488c4183953ef1e727450adcad7dd7b614f /examples | |
| parent | 70c93adc2f6264015cae597a9abe58ad2e1aaee6 (diff) | |
improve threadx support, add multi ROTS support for board_test and msc_dual_lun
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/device/board_test/src/main.c | 86 | ||||
| -rw-r--r-- | examples/device/msc_dual_lun/src/main.c | 2 |
2 files changed, 54 insertions, 34 deletions
diff --git a/examples/device/board_test/src/main.c b/examples/device/board_test/src/main.c index ddc9bba6b..71e7e1da7 100644 --- a/examples/device/board_test/src/main.c +++ b/examples/device/board_test/src/main.c @@ -39,8 +39,35 @@ enum { #define HELLO_STR "Hello from TinyUSB\r\n" -static void board_test_loop(void) { +// board test example does not use both device and host stack +#if CFG_TUSB_OS != OPT_OS_NONE +uint32_t tusb_time_millis_api(void) { + return osal_time_millis(); +} + +void tusb_time_delay_ms_api(uint32_t ms) { + osal_task_delay(ms); +} +#endif + +//--------------------------------------------------------------------+ +// +//--------------------------------------------------------------------+ + +// Task parameter type: ULONG for ThreadX, void* for FreeRTOS and noos +#if CFG_TUSB_OS == OPT_OS_THREADX + #define RTOS_PARAM ULONG +#elif CFG_TUSB_OS == OPT_OS_FREERTOS + #define RTOS_PARAM void* + static void freertos_init(void); +#else + #define RTOS_PARAM void* +#endif + +static void board_test_loop(RTOS_PARAM param) { + (void) param; uint32_t start_ms = 0; + (void) start_ms; bool led_state = false; while (1) { @@ -55,28 +82,31 @@ static void board_test_loop(void) { } // Blink and print every interval ms - if (!(tusb_time_millis_api() - start_ms < interval_ms)) { - start_ms = tusb_time_millis_api(); - - if (ch < 0) { - // skip if echoing - printf(HELLO_STR); + #if CFG_TUSB_OS == OPT_OS_FREERTOS + vTaskDelay(interval_ms / portTICK_PERIOD_MS); + #elif CFG_TUSB_OS == OPT_OS_THREADX + tx_thread_sleep(_osal_ms2tick(interval_ms)); + #else + if (tusb_time_millis_api() - start_ms < interval_ms) { + continue; // not enough time + } + #endif + start_ms = tusb_time_millis_api(); - #ifndef LOGGER_UART - board_uart_write(HELLO_STR, sizeof(HELLO_STR)-1); - #endif - } + if (ch < 0) { + // skip if echoing + printf(HELLO_STR); - board_led_write(led_state); - led_state = !led_state; // toggle + #ifndef LOGGER_UART + board_uart_write(HELLO_STR, sizeof(HELLO_STR)-1); + #endif } + + board_led_write(led_state); + led_state = !led_state; // toggle } } -#if CFG_TUSB_OS == OPT_OS_FREERTOS -static void freertos_init(void); -#endif - int main(void) { board_init(); board_led_write(true); @@ -86,7 +116,7 @@ int main(void) { #elif CFG_TUSB_OS == OPT_OS_THREADX tx_kernel_enter(); #else - board_test_loop(); + board_test_loop(NULL); #endif return 0; @@ -106,7 +136,7 @@ void app_main(void) { #ifdef ESP_PLATFORM #define MAIN_STACK_SIZE 4096 #else -#define MAIN_STACK_SIZE configMINIMAL_STACK_SIZE +#define MAIN_STACK_SIZE 512 #endif #if configSUPPORT_STATIC_ALLOCATION @@ -114,17 +144,13 @@ static StackType_t _main_stack[MAIN_STACK_SIZE]; static StaticTask_t _main_taskdef; #endif -static void board_test_task(void* param) { - (void) param; - board_test_loop(); -} - static void freertos_init(void) { #if configSUPPORT_STATIC_ALLOCATION - xTaskCreateStatic(board_test_task, "main", MAIN_STACK_SIZE, NULL, 1, _main_stack, &_main_taskdef); + xTaskCreateStatic(board_test_loop, "main", MAIN_STACK_SIZE, NULL, 1, _main_stack, &_main_taskdef); #else - xTaskCreate(board_test_task, "main", MAIN_STACK_SIZE, NULL, 1, NULL); + xTaskCreate(board_test_loop, "main", MAIN_STACK_SIZE, NULL, 1, NULL); #endif + #ifndef ESP_PLATFORM vTaskStartScheduler(); #endif @@ -138,17 +164,11 @@ static void freertos_init(void) { #define MAIN_TASK_STACK_SIZE 1024 static TX_THREAD _main_thread; static ULONG _main_thread_stack[MAIN_TASK_STACK_SIZE / sizeof(ULONG)]; -static void main_thread_entry(ULONG arg); - -static void main_thread_entry(ULONG arg) { - (void) arg; - board_test_loop(); -} void tx_application_define(void *first_unused_memory) { (void) first_unused_memory; static CHAR main_thread_name[] = "main"; - tx_thread_create(&_main_thread, main_thread_name, main_thread_entry, 0, + tx_thread_create(&_main_thread, main_thread_name, board_test_loop, 0, _main_thread_stack, MAIN_TASK_STACK_SIZE, 1, 1, TX_NO_TIME_SLICE, TX_AUTO_START); } diff --git a/examples/device/msc_dual_lun/src/main.c b/examples/device/msc_dual_lun/src/main.c index 9ca3a1f34..74a60aa6b 100644 --- a/examples/device/msc_dual_lun/src/main.c +++ b/examples/device/msc_dual_lun/src/main.c @@ -197,7 +197,7 @@ static void freertos_init(void) { #elif CFG_TUSB_OS == OPT_OS_THREADX #define USBD_STACK_SIZE 4096 -#define BLINKY_STACK_SIZE 1024 +#define BLINKY_STACK_SIZE 512 static TX_THREAD _usb_device_thread; static ULONG _usb_device_stack[USBD_STACK_SIZE / sizeof(ULONG)]; |
