diff --git a/demos/host/src/keyboard_app.c b/demos/host/src/keyboard_app.c index 6bf075bb6..e6096d514 100644 --- a/demos/host/src/keyboard_app.c +++ b/demos/host/src/keyboard_app.c @@ -50,7 +50,7 @@ //--------------------------------------------------------------------+ // INTERNAL OBJECT & FUNCTION DECLARATION //--------------------------------------------------------------------+ -OSAL_TASK_DEF(keyboard_task_def, keyboard_app_task, 128, KEYBOARD_APP_TASK_PRIO); +OSAL_TASK_DEF(keyboard_task_def, "keyboard app", keyboard_app_task, 128, KEYBOARD_APP_TASK_PRIO); OSAL_QUEUE_DEF(queue_kbd_report, QUEUE_KEYBOARD_REPORT_DEPTH, tusb_keyboard_report_t); static osal_queue_handle_t q_kbd_report_hdl; diff --git a/demos/host/src/main.c b/demos/host/src/main.c index f3fd13f1d..aee0474d7 100644 --- a/demos/host/src/main.c +++ b/demos/host/src/main.c @@ -67,7 +67,7 @@ void print_greeting(void); OSAL_TASK_FUNCTION( led_blinking_task ) (void* p_task_para); -OSAL_TASK_DEF(led_blinking_task_def, led_blinking_task, 128, LED_BLINKING_APP_TASK_PRIO); +OSAL_TASK_DEF(led_blinking_task_def, "led blinking", led_blinking_task, 128, LED_BLINKING_APP_TASK_PRIO); //--------------------------------------------------------------------+ // IMPLEMENTATION @@ -132,48 +132,18 @@ void print_greeting(void) OSAL_TASK_FUNCTION( led_blinking_task ) (void* p_task_para) { + static uint32_t led_on_mask = 0; + #if TUSB_CFG_OS != TUSB_OS_NONE // TODO abstract to approriate place print_greeting(); #endif OSAL_TASK_LOOP_BEGIN - vTaskDelay(CFG_TICKS_PER_SECOND); + osal_task_delay(1000); - /* Toggle LED once per second */ - if ( (xTaskGetTickCount()/CFG_TICKS_PER_SECOND) % 2) - { - board_leds(0x01, 0x00); - } - else - { - board_leds(0x00, 0x01); - } + board_leds(led_on_mask, 1 - led_on_mask); + led_on_mask = 1 - led_on_mask; // toggle OSAL_TASK_LOOP_END } - -//OSAL_TASK_FUNCTION( led_blinking_task ) (void* p_task_para) -//{ -// static uint32_t current_tick = 0; -// -// OSAL_TASK_LOOP_BEGIN -// -// if (current_tick + CFG_TICKS_PER_SECOND < system_ticks) -// { -// current_tick += CFG_TICKS_PER_SECOND; -// -// /* Toggle LED once per second */ -// if ( (current_tick/CFG_TICKS_PER_SECOND) % 2) -// { -// board_leds(0x01, 0x00); -// } -// else -// { -// board_leds(0x00, 0x01); -// } -// } -// -// OSAL_TASK_LOOP_END -//} - diff --git a/demos/host/src/mouse_app.c b/demos/host/src/mouse_app.c index 18ebe4e68..cb529fc7c 100644 --- a/demos/host/src/mouse_app.c +++ b/demos/host/src/mouse_app.c @@ -50,7 +50,7 @@ //--------------------------------------------------------------------+ // INTERNAL OBJECT & FUNCTION DECLARATION //--------------------------------------------------------------------+ -OSAL_TASK_DEF(mouse_task_def, mouse_app_task, 128, MOUSE_APP_TASK_PRIO); +OSAL_TASK_DEF(mouse_task_def, "mouse app", mouse_app_task, 128, MOUSE_APP_TASK_PRIO); OSAL_QUEUE_DEF(queue_mouse_report, QUEUE_MOUSE_REPORT_DEPTH, tusb_mouse_report_t); static osal_queue_handle_t q_mouse_report_hdl; diff --git a/tinyusb/host/usbh.c b/tinyusb/host/usbh.c index 3c1630b75..c62b75c48 100644 --- a/tinyusb/host/usbh.c +++ b/tinyusb/host/usbh.c @@ -89,7 +89,7 @@ static host_class_driver_t const usbh_class_drivers[TUSB_CLASS_MAX_CONSEC_NUMBER usbh_device_info_t usbh_devices[TUSB_CFG_HOST_DEVICE_MAX+1] TUSB_CFG_ATTR_USBRAM; // including zero-address //------------- Enumeration Task Data -------------// -OSAL_TASK_DEF(enum_task_def, usbh_enumeration_task, 128, TUSB_CFG_OS_TASK_PRIO); +OSAL_TASK_DEF(enum_task_def, "tinyusb host", usbh_enumeration_task, 128, TUSB_CFG_OS_TASK_PRIO); OSAL_QUEUE_DEF(enum_queue_def, ENUM_QUEUE_DEPTH, uint32_t); osal_queue_handle_t enum_queue_hdl; STATIC_ uint8_t enum_data_buffer[TUSB_CFG_HOST_ENUM_BUFFER_SIZE] TUSB_CFG_ATTR_USBRAM; @@ -287,9 +287,7 @@ tusb_error_t enumeration_body_subtask(void) #ifndef _TEST_ // TODO finalize delay after reset, hack delay 100 ms, otherwise speed is detected as LOW in most cases - volatile uint32_t delay_us = 10000; - delay_us *= (SystemCoreClock / 1000000) / 3; - while(delay_us--); + osal_task_delay(100); #endif //------------- Get first 8 bytes of device descriptor to get Control Endpoint Size -------------// diff --git a/tinyusb/osal/osal.h b/tinyusb/osal/osal.h index f0174c080..63ebb0d45 100644 --- a/tinyusb/osal/osal.h +++ b/tinyusb/osal/osal.h @@ -86,8 +86,8 @@ uint32_t osal_tick_get(void); typedef uint32_t osal_task_t; tusb_error_t osal_task_create(osal_task_t *task); -#define OSAL_TASK_DEF(name, code, stack_depth, prio) \ - osal_task_t name +#define OSAL_TASK_DEF(variable, name, code, stack_depth, prio) \ + osal_task_t variable #define OSAL_TASK_FUNCTION(task_name) \ void task_name diff --git a/tinyusb/osal/osal_freeRTOS.h b/tinyusb/osal/osal_freeRTOS.h index 4dd3a67ca..44681e736 100644 --- a/tinyusb/osal/osal_freeRTOS.h +++ b/tinyusb/osal/osal_freeRTOS.h @@ -81,9 +81,9 @@ typedef struct { unsigned portBASE_TYPE prio; } osal_task_t; -#define OSAL_TASK_DEF(task_name, task_code, task_stack_depth, task_prio) \ - osal_task_t task_name = {\ - .name = #task_name , \ +#define OSAL_TASK_DEF(task_variable, task_name, task_code, task_stack_depth, task_prio) \ + osal_task_t task_variable = {\ + .name = task_name , \ .code = task_code , \ .stack_depth = task_stack_depth , \ .prio = task_prio \ @@ -96,6 +96,12 @@ static inline tusb_error_t osal_task_create(osal_task_t *task) TUSB_ERROR_NONE : TUSB_ERROR_OSAL_TASK_CREATE_FAILED; } +static inline void osal_task_delay(uint32_t msec) ATTR_ALWAYS_INLINE; +static inline void osal_task_delay(uint32_t msec) +{ + vTaskDelay(TUSB_CFG_OS_TICKS_PER_SECOND * msec); +} + #define OSAL_TASK_LOOP_BEGIN \ while(1) { diff --git a/tinyusb/osal/osal_none.h b/tinyusb/osal/osal_none.h index fa20585fd..9661278f7 100644 --- a/tinyusb/osal/osal_none.h +++ b/tinyusb/osal/osal_none.h @@ -87,7 +87,7 @@ static inline volatile uint32_t osal_tick_get(void) // OSAL_TASK_LOOP_ENG // } //--------------------------------------------------------------------+ -#define OSAL_TASK_DEF(name, code, stack_depth, prio) +#define OSAL_TASK_DEF(variable, name, code, stack_depth, prio) #define osal_task_create(x) TUSB_ERROR_NONE #define OSAL_TASK_FUNCTION(task_func) \ @@ -107,6 +107,16 @@ static inline volatile uint32_t osal_tick_get(void) }\ return TUSB_ERROR_NONE; + +#define osal_task_delay(msec) \ + do {\ + timeout = osal_tick_get();\ + state = __LINE__; case __LINE__:\ + if ( timeout + osal_tick_from_msec(msec) < osal_tick_get() ) /* time out */ \ + return TUSB_ERROR_OSAL_WAITING;\ + }while(0) + + //------------- Sub Task -------------// #define OSAL_SUBTASK_INVOKED_AND_WAIT(subtask, status) \ do {\ diff --git a/vendor/freertos/freertoslpc/FreeRTOSCommonHooks.c b/vendor/freertos/freertoslpc/FreeRTOSCommonHooks.c index 80756930a..dcd008928 100644 --- a/vendor/freertos/freertoslpc/FreeRTOSCommonHooks.c +++ b/vendor/freertos/freertoslpc/FreeRTOSCommonHooks.c @@ -63,7 +63,7 @@ void FreeRTOSDelay(uint32_t ms) /* FreeRTOS malloc fail hook */ void vApplicationMallocFailedHook(void) { - DEBUGSTR("DIE:ERROR:FreeRTOS: Malloc Failure!\r\n"); + PRINTF("DIE:ERROR:FreeRTOS: Malloc Failure!\r\n"); taskDISABLE_INTERRUPTS(); for (;; ) {} }