提交 f0d50a7b 编写于 作者: G Grissiom

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
上级 f1e34eef
...@@ -374,6 +374,20 @@ typedef struct ustorage_csw* ustorage_csw_t; ...@@ -374,6 +374,20 @@ typedef struct ustorage_csw* ustorage_csw_t;
#pragma pack() #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 #ifdef __cplusplus
} }
#endif #endif
......
...@@ -1344,6 +1344,11 @@ rt_err_t rt_usbd_post_event(struct udev_msg* msg, rt_size_t size) ...@@ -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); 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. * 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) ...@@ -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_err_t rt_usbd_core_init(void)
{ {
rt_thread_t thread;
rt_list_init(&device_list); rt_list_init(&device_list);
/* create an usb message queue */ /* create an usb message queue */
usb_mq = rt_mq_create("usbd", 32, 16, RT_IPC_FLAG_FIFO); usb_mq = rt_mq_create("usbd", 32, 16, RT_IPC_FLAG_FIFO);
/* create usb device thread */ /* init usb device thread */
thread = rt_thread_create("usbd", rt_usbd_thread_entry, RT_NULL, rt_thread_init(&usb_thread, "usbd", rt_usbd_thread_entry, RT_NULL,
2048, 8, 20); usb_thread_stack, RT_USBD_THREAD_STACK_SZ, RT_USBD_THREAD_PRIO, 20);
if(thread != RT_NULL) /* rt_thread_init should always be OK, so start the thread without further
{ * checking. */
/* startup usb device thread */ return rt_thread_startup(&usb_thread);
rt_thread_startup(thread);
}
return RT_EOK;
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册