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

add attribute warn unused result for osal_create_* function
taskify keyboard_app mouse_app & led_blinking

hathach 13 лет назад
Родитель
Сommit
92994c8192

+ 4 - 1
demos/host/host_freertos/.cproject

@@ -465,12 +465,15 @@
 								<option id="com.crt.advproject.gcc.thumb.1149795974" name="Thumb mode" superClass="com.crt.advproject.gcc.thumb" value="true" valueType="boolean"/>
 								<option id="com.crt.advproject.gcc.thumb.1149795974" name="Thumb mode" superClass="com.crt.advproject.gcc.thumb" value="true" valueType="boolean"/>
 								<option id="gnu.c.compiler.option.preprocessor.def.symbols.510918973" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" valueType="definedSymbols">
 								<option id="gnu.c.compiler.option.preprocessor.def.symbols.510918973" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" valueType="definedSymbols">
 									<listOptionValue builtIn="false" value="__REDLIB__"/>
 									<listOptionValue builtIn="false" value="__REDLIB__"/>
-									<listOptionValue builtIn="false" value="TUSB_CFG_OS_TASK_PRIO=(configMAX_PRIORITIES-5)"/>
 									<listOptionValue builtIn="false" value="__USE_CMSIS=CMSISv2p10_LPC43xx_DriverLib"/>
 									<listOptionValue builtIn="false" value="__USE_CMSIS=CMSISv2p10_LPC43xx_DriverLib"/>
 									<listOptionValue builtIn="false" value="CORE_M4"/>
 									<listOptionValue builtIn="false" value="CORE_M4"/>
 									<listOptionValue builtIn="false" value="MCU=MCU_LPC43XX"/>
 									<listOptionValue builtIn="false" value="MCU=MCU_LPC43XX"/>
 									<listOptionValue builtIn="false" value="BOARD=BOARD_EA4357"/>
 									<listOptionValue builtIn="false" value="BOARD=BOARD_EA4357"/>
 									<listOptionValue builtIn="false" value="TUSB_CFG_OS=TUSB_OS_FREERTOS"/>
 									<listOptionValue builtIn="false" value="TUSB_CFG_OS=TUSB_OS_FREERTOS"/>
+									<listOptionValue builtIn="false" value="TUSB_CFG_OS_TASK_PRIO=(configMAX_PRIORITIES-5)"/>
+									<listOptionValue builtIn="false" value="KEYBOARD_APP_TASK_PRIO=(configMAX_PRIORITIES-6)"/>
+									<listOptionValue builtIn="false" value="MOUSE_APP_TASK_PRIO=(configMAX_PRIORITIES-7)"/>
+									<listOptionValue builtIn="false" value="LED_BLINKING_APP_TASK_PRIO=tskIDLE_PRIORITY+1"/>
 									<listOptionValue builtIn="false" value="DEBUG"/>
 									<listOptionValue builtIn="false" value="DEBUG"/>
 									<listOptionValue builtIn="false" value="__CODE_RED"/>
 									<listOptionValue builtIn="false" value="__CODE_RED"/>
 								</option>
 								</option>

+ 4 - 4
demos/host/src/keyboard_app.c

@@ -50,7 +50,8 @@
 //--------------------------------------------------------------------+
 //--------------------------------------------------------------------+
 // INTERNAL OBJECT & FUNCTION DECLARATION
 // INTERNAL OBJECT & FUNCTION DECLARATION
 //--------------------------------------------------------------------+
 //--------------------------------------------------------------------+
-//OSAL_TASK_DEF(keyboard_task_def, keyboard_app_task, 128, )
+OSAL_TASK_DEF(keyboard_task_def, keyboard_app_task, 128, KEYBOARD_APP_TASK_PRIO);
+
 OSAL_QUEUE_DEF(queue_kbd_report, QUEUE_KEYBOARD_REPORT_DEPTH, tusb_keyboard_report_t);
 OSAL_QUEUE_DEF(queue_kbd_report, QUEUE_KEYBOARD_REPORT_DEPTH, tusb_keyboard_report_t);
 static osal_queue_handle_t q_kbd_report_hdl;
 static osal_queue_handle_t q_kbd_report_hdl;
 
 
@@ -96,10 +97,9 @@ void keyboard_app_init(void)
 {
 {
   memclr_(&usb_keyboard_report, sizeof(tusb_keyboard_report_t));
   memclr_(&usb_keyboard_report, sizeof(tusb_keyboard_report_t));
 
 
-//  ASSERT( osal_task_create() )
+  ASSERT( TUSB_ERROR_NONE == osal_task_create(&keyboard_task_def), (void) 0 );
   q_kbd_report_hdl = osal_queue_create(&queue_kbd_report);
   q_kbd_report_hdl = osal_queue_create(&queue_kbd_report);
-
-  // TODO keyboard_app_task create
+  ASSERT_PTR( q_kbd_report_hdl, (void) 0 );
 }
 }
 
 
 //------------- main task -------------//
 //------------- main task -------------//

+ 100 - 18
demos/host/src/main.c

@@ -1,3 +1,43 @@
+/*
+ * main.c
+ *
+ *  Created on: Mar 24, 2013
+ *      Author: hathach
+ */
+
+/*
+ * Software License Agreement (BSD License)
+ * Copyright (c) 2012, hathach (tinyusb.org)
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+ * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+ * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+ * OF SUCH DAMAGE.
+ *
+ * This file is part of the tiny usb stack.
+ */
+
+//--------------------------------------------------------------------+
+// INCLUDE
+//--------------------------------------------------------------------+
 #include <stdlib.h>
 #include <stdlib.h>
 #include <stdio.h>
 #include <stdio.h>
 #include <string.h>
 #include <string.h>
@@ -17,17 +57,32 @@
   __CRP const unsigned int CRP_WORD = CRP_NO_CRP ;
   __CRP const unsigned int CRP_WORD = CRP_NO_CRP ;
 #endif
 #endif
 
 
+//--------------------------------------------------------------------+
+// MACRO CONSTANT TYPEDEF
+//--------------------------------------------------------------------+
+
+//--------------------------------------------------------------------+
+// INTERNAL OBJECT & FUNCTION DECLARATION
+//--------------------------------------------------------------------+
 void print_greeting(void);
 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);
+
+//--------------------------------------------------------------------+
+// IMPLEMENTATION
+//--------------------------------------------------------------------+
+
 int main(void)
 int main(void)
 {
 {
-  uint32_t current_tick = system_ticks;
-
   board_init();
   board_init();
   print_greeting();
   print_greeting();
 
 
   tusb_init();
   tusb_init();
 
 
   //------------- application task init -------------//
   //------------- application task init -------------//
+  (void) osal_task_create(&led_blinking_task_def);
+
 #if TUSB_CFG_HOST_HID_KEYBOARD
 #if TUSB_CFG_HOST_HID_KEYBOARD
   keyboard_app_init();
   keyboard_app_init();
 #endif
 #endif
@@ -36,34 +91,36 @@ int main(void)
   mouse_app_init();
   mouse_app_init();
 #endif
 #endif
 
 
+  //------------- start OS scheduler -------------//
+#if TUSB_CFG_OS == TUSB_OS_FREERTOS
+  vTaskStartScheduler();
+
+#elif TUSB_CFG_OS == TUSB_OS_NONE
+
   while (1)
   while (1)
   {
   {
-
-#if TUSB_CFG_OS == TUSB_OS_NONE
     tusb_task_runner();
     tusb_task_runner();
     keyboard_app_task(NULL);
     keyboard_app_task(NULL);
     mouse_app_task(NULL);
     mouse_app_task(NULL);
+    led_blinking_task(NULL);
+  }
+#else
+  #error need to start RTOS schduler
 #endif
 #endif
 
 
-    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);
-      }
-    }
+  //------------- this part of code should not be reached -------------//
+  hal_debugger_breakpoint();
+  while(1)
+  {
+
   }
   }
 
 
   return 0;
   return 0;
 }
 }
 
 
+//--------------------------------------------------------------------+
+// HELPER FUNCTION
+//--------------------------------------------------------------------+
 void print_greeting(void)
 void print_greeting(void)
 {
 {
   printf("\r\n\
   printf("\r\n\
@@ -74,3 +131,28 @@ void print_greeting(void)
 --------------------------------------------------------------------\r\n\r\n"
 --------------------------------------------------------------------\r\n\r\n"
   );
   );
 }
 }
+
+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
+}
+

+ 8 - 2
demos/host/src/mouse_app.c

@@ -50,11 +50,13 @@
 //--------------------------------------------------------------------+
 //--------------------------------------------------------------------+
 // INTERNAL OBJECT & FUNCTION DECLARATION
 // INTERNAL OBJECT & FUNCTION DECLARATION
 //--------------------------------------------------------------------+
 //--------------------------------------------------------------------+
-static tusb_mouse_report_t usb_mouse_report TUSB_CFG_ATTR_USBRAM;
+OSAL_TASK_DEF(mouse_task_def, mouse_app_task, 128, MOUSE_APP_TASK_PRIO);
 
 
 OSAL_QUEUE_DEF(queue_mouse_report, QUEUE_MOUSE_REPORT_DEPTH, tusb_mouse_report_t);
 OSAL_QUEUE_DEF(queue_mouse_report, QUEUE_MOUSE_REPORT_DEPTH, tusb_mouse_report_t);
 static osal_queue_handle_t q_mouse_report_hdl;
 static osal_queue_handle_t q_mouse_report_hdl;
 
 
+static tusb_mouse_report_t usb_mouse_report TUSB_CFG_ATTR_USBRAM;
+
 //--------------------------------------------------------------------+
 //--------------------------------------------------------------------+
 // tinyusb callback (ISR context)
 // tinyusb callback (ISR context)
 //--------------------------------------------------------------------+
 //--------------------------------------------------------------------+
@@ -92,9 +94,13 @@ void tusbh_hid_mouse_isr(uint8_t dev_addr, uint8_t instance_num, tusb_event_t ev
 //--------------------------------------------------------------------+
 //--------------------------------------------------------------------+
 void mouse_app_init(void)
 void mouse_app_init(void)
 {
 {
+  memclr_(&usb_mouse_report, sizeof(tusb_mouse_report_t));
+
+  ASSERT( TUSB_ERROR_NONE == osal_task_create(&mouse_task_def), (void) 0 );
+
   q_mouse_report_hdl = osal_queue_create(&queue_mouse_report);
   q_mouse_report_hdl = osal_queue_create(&queue_mouse_report);
+  ASSERT_PTR( q_mouse_report_hdl, (void) 0 );
 
 
-  // TODO mouse_app_task create
 }
 }
 
 
 //------------- main task -------------//
 //------------- main task -------------//

+ 4 - 4
tinyusb/host/usbh.c

@@ -89,8 +89,8 @@ 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
 usbh_device_info_t usbh_devices[TUSB_CFG_HOST_DEVICE_MAX+1] TUSB_CFG_ATTR_USBRAM; // including zero-address
 
 
 //------------- Enumeration Task Data -------------//
 //------------- Enumeration Task Data -------------//
-OSAL_TASK_DEF(enum_task, usbh_enumeration_task, 128, TUSB_CFG_OS_TASK_PRIO);
-OSAL_QUEUE_DEF(enum_queue, ENUM_QUEUE_DEPTH, uint32_t);
+OSAL_TASK_DEF(enum_task_def, 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;
 osal_queue_handle_t enum_queue_hdl;
 STATIC_ uint8_t enum_data_buffer[TUSB_CFG_HOST_ENUM_BUFFER_SIZE] TUSB_CFG_ATTR_USBRAM;
 STATIC_ uint8_t enum_data_buffer[TUSB_CFG_HOST_ENUM_BUFFER_SIZE] TUSB_CFG_ATTR_USBRAM;
 
 
@@ -126,8 +126,8 @@ tusb_error_t usbh_init(void)
   }
   }
 
 
   //------------- Enumeration & Reporter Task init -------------//
   //------------- Enumeration & Reporter Task init -------------//
-  ASSERT_STATUS( osal_task_create(&enum_task) );
-  enum_queue_hdl = osal_queue_create(&enum_queue);
+  ASSERT_STATUS( osal_task_create(&enum_task_def) );
+  enum_queue_hdl = osal_queue_create(&enum_queue_def);
   ASSERT_PTR(enum_queue_hdl, TUSB_ERROR_OSAL_QUEUE_FAILED);
   ASSERT_PTR(enum_queue_hdl, TUSB_ERROR_OSAL_QUEUE_FAILED);
 
 
   //------------- class init -------------//
   //------------- class init -------------//

+ 2 - 2
tinyusb/osal/osal_freeRTOS.h

@@ -87,9 +87,9 @@ typedef struct {
       .code        = task_code        , \
       .code        = task_code        , \
       .stack_depth = task_stack_depth , \
       .stack_depth = task_stack_depth , \
       .prio        = task_prio          \
       .prio        = task_prio          \
-  };
+  }
 
 
-static inline tusb_error_t osal_task_create(osal_task_t *task) ATTR_ALWAYS_INLINE;
+static inline tusb_error_t osal_task_create(osal_task_t *task) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
 static inline tusb_error_t osal_task_create(osal_task_t *task)
 static inline tusb_error_t osal_task_create(osal_task_t *task)
 {
 {
   return pdPASS == xTaskCreate(task->code, (signed portCHAR const *) task->name, task->stack_depth, NULL, task->prio, NULL) ?
   return pdPASS == xTaskCreate(task->code, (signed portCHAR const *) task->name, task->stack_depth, NULL, task->prio, NULL) ?

+ 3 - 3
tinyusb/osal/osal_none.h

@@ -96,7 +96,7 @@ static inline volatile uint32_t osal_tick_get(void)
   state = 0
   state = 0
 
 
 #define OSAL_TASK_LOOP_BEGIN \
 #define OSAL_TASK_LOOP_BEGIN \
-  static uint32_t timeout = 0;\
+  ATTR_UNUSED static uint32_t timeout = 0;\
   static uint16_t state = 0;\
   static uint16_t state = 0;\
   switch(state) {\
   switch(state) {\
     case 0:\
     case 0:\
@@ -153,7 +153,7 @@ typedef osal_semaphore_t * osal_semaphore_handle_t;
 #define OSAL_SEM_REF(name)\
 #define OSAL_SEM_REF(name)\
   &name
   &name
 
 
-static inline osal_semaphore_handle_t osal_semaphore_create(osal_semaphore_t * const p_sem) ATTR_ALWAYS_INLINE;
+static inline osal_semaphore_handle_t osal_semaphore_create(osal_semaphore_t * const p_sem) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
 static inline osal_semaphore_handle_t osal_semaphore_create(osal_semaphore_t * const p_sem)
 static inline osal_semaphore_handle_t osal_semaphore_create(osal_semaphore_t * const p_sem)
 {
 {
   (*p_sem) = 0;
   (*p_sem) = 0;
@@ -212,7 +212,7 @@ typedef osal_queue_t * osal_queue_handle_t;
       .item_size = sizeof(type)\
       .item_size = sizeof(type)\
   }
   }
 
 
-static inline osal_queue_handle_t osal_queue_create(osal_queue_t * const p_queue) ATTR_ALWAYS_INLINE;
+static inline osal_queue_handle_t osal_queue_create(osal_queue_t * const p_queue) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE;
 static inline osal_queue_handle_t osal_queue_create(osal_queue_t * const p_queue)
 static inline osal_queue_handle_t osal_queue_create(osal_queue_t * const p_queue)
 {
 {
   p_queue->count = p_queue->wr_idx = p_queue->rd_idx = 0;
   p_queue->count = p_queue->wr_idx = p_queue->rd_idx = 0;