Просмотр исходного кода

change OSAL_TASK_DEF to decouple variable name with task name
implement osal_task_delay for freeRTOS & non_os
getting both no_os & freertos running with mouse + keyboard

hathach 13 лет назад
Родитель
Сommit
3763e22c9a

+ 1 - 1
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;

+ 6 - 36
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
-//}
-

+ 1 - 1
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;

+ 2 - 4
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 -------------//

+ 2 - 2
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

+ 9 - 3
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) {
 

+ 11 - 1
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 {\

+ 1 - 1
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 (;; ) {}
 }