summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorhathach <[email protected]>2026-03-05 19:07:00 +0700
committerhathach <[email protected]>2026-03-05 20:48:30 +0700
commit0c7a385cf873b9cbf93344187c033c176c37f7e2 (patch)
tree6a31b488c4183953ef1e727450adcad7dd7b614f /examples
parent70c93adc2f6264015cae597a9abe58ad2e1aaee6 (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.c86
-rw-r--r--examples/device/msc_dual_lun/src/main.c2
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)];