Browse Source

usbdevice/core: use static thread instead of dynamic thread

It also add two configurations for the USB device even loop thread:

    RT_USBD_THREAD_STACK_SZ to set the stack size, default to 2048
    RT_USBD_THREAD_PRIO     to set the priority, default to 8

You can overwrite the default values in rtconfig.h
Grissiom 12 years ago
parent
commit
f0d50a7b36

+ 14 - 0
components/drivers/include/drivers/usb_common.h

@@ -374,6 +374,20 @@ typedef struct ustorage_csw* ustorage_csw_t;
 
 #pragma pack()
 
+/*
+ * USB device event loop thread configurations
+ */
+/* the stack size of USB thread */
+#ifndef RT_USBD_THREAD_STACK_SZ
+#define RT_USBD_THREAD_STACK_SZ 2048
+#endif
+
+/* the priority of USB thread */
+#ifndef RT_USBD_THREAD_PRIO
+#define RT_USBD_THREAD_PRIO 8
+#endif
+
+
 #ifdef __cplusplus
 }
 #endif

+ 11 - 12
components/drivers/usb/usbdevice/core/core.c

@@ -1344,6 +1344,11 @@ rt_err_t rt_usbd_post_event(struct udev_msg* msg, rt_size_t size)
     return rt_mq_send(usb_mq, (void*)msg, size);
 }
 
+
+ALIGN(RT_ALIGN_SIZE)
+static rt_uint8_t usb_thread_stack[RT_USBD_THREAD_STACK_SZ];
+static struct rt_thread usb_thread;
+
 /**
  * This function will initialize usb device thread.
  *
@@ -1352,21 +1357,15 @@ rt_err_t rt_usbd_post_event(struct udev_msg* msg, rt_size_t size)
  */
 rt_err_t rt_usbd_core_init(void)
 {
-    rt_thread_t thread;
-
     rt_list_init(&device_list);
 
     /* create an usb message queue */
     usb_mq = rt_mq_create("usbd", 32, 16, RT_IPC_FLAG_FIFO);
 
-    /* create usb device thread */
-    thread = rt_thread_create("usbd", rt_usbd_thread_entry, RT_NULL,
-                              2048, 8, 20);
-    if(thread != RT_NULL)
-    {
-        /* startup usb device thread */
-        rt_thread_startup(thread);
-    }
-
-    return RT_EOK;
+    /* init usb device thread */
+    rt_thread_init(&usb_thread, "usbd", rt_usbd_thread_entry, RT_NULL,
+            usb_thread_stack, RT_USBD_THREAD_STACK_SZ, RT_USBD_THREAD_PRIO, 20);
+    /* rt_thread_init should always be OK, so start the thread without further
+     * checking. */
+    return rt_thread_startup(&usb_thread);
 }