打印
[AT32F423]

请教一个AT32F423+FreeRTOS+usb host写u盘的问题

[复制链接]
1414|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
CHENGCN|  楼主 | 2023-10-18 17:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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中。
请问大佬们这是什么问题,该怎么解决啊

使用特权

评论回复
沙发
lordor| | 2023-10-27 11:53 | 只看该作者
帮顶,楼主后来找到原因了吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

0

粉丝