本帖最后由 lvben5d 于 2021-9-7 13:55 编辑
最近的项目,由于传感器启动执行,需要等到10ms后才可以去读数值,且用到了usb Host, 发现代码在执行中,由于usb host终端优先级都低于我其他任务,步知道为什么,会出现U盘插入后没反应,估摸着是执行某些代码,导致不能及时响应usb中断,不管如何,先学习下RTos ,好优化下代码。下面是我找的PDF,虽然是STM32F103芯片 但是移植原理是一样的。上传一起分享 交流。
这个USB HOST控制U盘挂载 是在主任务里 被调用的 那局部变量就属于主任务栈。 因为要增加FATFS挂载需要的局部变量,我从默认256->1024 这样挂载就正常了! 已经验证OK
我猜 usbh_core_task (&usb_host); 状态机函数 用查询状态是否变化来满足状态跳转, 而状态跳转是发生于USB中断里,中断是很快的,所以必须快速查询对应状态,进入下一个状态机,如何不配合USB中断,一旦查询慢了,就可能失去状态机状态跳转的时间点。导致U盘无法识别。
如果是这样的话,可以把这个状态机配合USB中断的 做到USB中断处理子程序内,就更快了。否则用户应用不好使用这个示例, 当然这个状态机里面有2个延迟几十ms级别的地方,由于没有操作系统,这里会阻塞,如果放在中断里,USB中断优先级不能太高吧?【有待商榷】
|