USB库的MSC类里用到的callback回调函数
来源:互联网 发布:modo软件 编辑:程序博客网 时间:2024/06/05 00:56
在STM32F4上开发USB高速接口。在其USBH_USR_MSC_Application()函数下编写用户程序。发现之后函数调用完之后,返回值0。程序跑usbh_msc_core.h里去了。
case USBH_MSC_DEFAULT_APPLI_STATE: /* Process Application callback for MSC */ appliStatus = pphost->usr_cb->UserApplication(); --> if(appliStatus == 0) { USBH_MSC_BOTXferParam.MSCState = USBH_MSC_DEFAULT_APPLI_STATE; }
执行完这条if 语句
上面的语句被包含在函数static USBH_Status USBH_MSC_Handle()
static USBH_Status USBH_MSC_Handle(USB_OTG_CORE_HANDLE *pdev , void *phost)
if(HCD_IsDeviceConnected(pdev)) { switch(USBH_MSC_BOTXferParam.MSCState)
然后 return status;
也就是USBH_Status USBH_MSC_Handle() 函数被执行完。
接着程序跳转到
case HOST_CLASS: /* process class state machine */ status = phost->class_cb->Machine(pdev, phost); USBH_ErrorHandle(phost, status); --> break;
最后执行到USBH_ErrorHandle()这个函数下,
void USBH_ErrorHandle(USBH_HOST *phost, USBH_Status errType){ /* Error unrecovered or not supported device speed */ if ( (errType == USBH_ERROR_SPEED_UNKNOWN) || (errType == USBH_UNRECOVERED_ERROR) ) { phost->usr_cb->UnrecoveredError(); phost->gState = HOST_ERROR_STATE; } /* USB host restart requested from application layer */ else if(errType == USBH_APPLY_DEINIT) { phost->gState = HOST_ERROR_STATE; /* user callback for initalization */ phost->usr_cb->Init(); }
然后跳出。
结论:
执行完这段代码后,USB状态进入错误状态,必须重新启动USB
内核库,这个用户函数用swtich()语句还是有道理的。实现无限状
态机的效果。
实践证明,加了swtich语句还是跳进错误。说明这完全跟用户代码无关。
- USB库的MSC类里用到的callback回调函数
- MFC的ActiveX控件,因为里面需要用到CALLBACK的回调函数
- 回调函数(Callback Routine)的解释
- callback回调函数的理解
- C++回调函数(callback)的使用
- java CallBack 回调函数的学习
- 回调函数的使用 CallBack
- C++回调函数(callback)的使用
- C++回调函数(callback)的使用
- C++回调函数(callback)的使用
- C++回调函数(callback)的使用
- 回调函数的作用 --callback
- C++回调函数(callback)的使用
- C++回调函数(callback)的使用
- C++回调函数(callback)的使用
- C++回调函数(callback)的运用
- 回调函数的能力Callback
- javascript的callback回调函数
- 为什么百度蜘蛛不对网站进行抓取?
- java中 8进制 10进制 2进制 16进制 相互转换
- MyEclipse启动报错:java.lang.IllegalArgumentException:
- spring整合hibernate时的getHibernateTemplate()异常
- js中如何获取alert并且把提示信息简体繁体互转
- USB库的MSC类里用到的callback回调函数
- ffmpeg编解码实例
- windows Android NDK cygwin
- matlab 二维卷积conv2的等效代码
- 使用Grails Bootstrap Plugin实现界面美化(作者:NEO)
- 友善之臂 TINY210網絡配置
- VisionMobile:Web网站 vs Web应用:专家如何看
- source insight 调整tab,字体
- restlet2.1 学习笔记(七) 与Freemarker结合返回Html视图