#21ic问答#
芯片使用的是AT32F423,通过USB写u盘,我用FreeRTOS开了一个任务用来循环枚举
void USBHLoop_task(void *pvParameters)
{
while(1)
{
usbh_loop_handler(&otg_core_struct.host);
// vTaskDelay(1);
}
}
下面是我定义的任务
TaskCreate AppTaskCreate[4] =
{
(TaskFunction_t)start_task,(const char*)"Start_task",128,NULL,1,&start_handler,
{(TaskFunction_t)time_task,(const char*)"Time_task",128,NULL,4,&time_handler},
{(TaskFunction_t)USBHLoop_task,(const char*)"Loop_task",256,NULL,2,&USBHLoop_handler},
{(TaskFunction_t)UsbExpand_task,(const char*)"Expand_task",512,NULL,3,&UsbExpand_handler},
};
void start_task(void *pvParameters)
{
/*进入临界区*/
taskENTER_CRITICAL();
/*时间*/
xTaskCreate(AppTaskCreate[1].taskcode,
AppTaskCreate[1].name,
AppTaskCreate[1].stackdepth,
AppTaskCreate[1].parameters,
AppTaskCreate[1].priority,
AppTaskCreate[1].createdtask);
//
/*usb枚举*/
xTaskCreate(AppTaskCreate[2].taskcode,
AppTaskCreate[2].name,
AppTaskCreate[2].stackdepth,
AppTaskCreate[2].parameters,
AppTaskCreate[2].priority,
AppTaskCreate[2].createdtask);
/*usb存储*/
xTaskCreate(AppTaskCreate[3].taskcode,
AppTaskCreate[3].name,
AppTaskCreate[3].stackdepth,
AppTaskCreate[3].parameters,
AppTaskCreate[3].priority,
AppTaskCreate[3].createdtask);
/*删除开始任务*/
vTaskDelete(start_handler);
/* 退出临界区 */
taskEXIT_CRITICAL();
}
usbh_loop_handler是直接用例程里的,如果加入vTaskDelay延时,这条任务就会卡死。如果不加入,线程在识别到u盘并在u盘拔出后一直处于这个task中。
请问大佬们这是什么问题,该怎么解决啊 |