|
笔者使用硬石例程78(F4系列)基于FAT的USB HOST工程代码,在阅读代码时发现一个问题如下: 在文件ff_gen_drv.h中定义了结构体Diskio_drvTypeDef和Disk_drvTypeDef: typedef struct { DSTATUS (*disk_initialize) (BYTE); /*!< Initialize Disk Drive */ DSTATUS (*disk_status) (BYTE); /*!< Get Disk Status */ DRESULT (*disk_read) (BYTE,BYTE*, DWORD, UINT); /*!< ReadSector(s) */ #if _USE_WRITE == 1 DRESULT (*disk_write) (BYTE,const BYTE*, DWORD, UINT); /*!< Write Sector(s) when _USE_WRITE = 0 */ #endif /* _USE_WRITE == 1 */ #if _USE_IOCTL == 1 DRESULT (*disk_ioctl) (BYTE,BYTE, void*); /*!< I/O control operation when _USE_IOCTL= 1 */ #endif /* _USE_IOCTL == 1 */ }Diskio_drvTypeDef; /** *@brief Global Disk IO Drivers structuredefinition */ typedef struct { uint8_t is_initialized[_VOLUMES]; Diskio_drvTypeDef *drv[_VOLUMES]; uint8_t lun[_VOLUMES]; __IO uint8_t nbr; }Disk_drvTypeDef; 在文件usbh_diskio.c中初始化了结构体Diskio_drvTypeDef: const Diskio_drvTypeDef USBH_Driver = { USBH_initialize, USBH_status, USBH_read, #if _USE_WRITE == 1 USBH_write, #endif /* _USE_WRITE == 1 */ #if _USE_IOCTL == 1 USBH_ioctl, #endif /* _USE_IOCTL == 1 */ }; 现在的问题是,在主程序中使用了f_read函数,而f_read函数调用了disk_read函数,而在disk_read函数中有如下语句: res =disk.drv[pdrv]->disk_read(disk.lun[pdrv], buff, sector, count); 但是经过程序仿真跟踪发现,上句真正执行的函数是usbh_diskio.c中USBH_read函数。 上述的原因是什么? |
STM32F401RBT6 USB 大容量存储设备问题
USB OTG 主机枚举问题
STM32F042 在启动文件内跳转至 USB DFU Bootloader
B-L475E-IOT01A 无法枚举为 USB DFU 设备
USBX Audio Class frame done 不触发回调
STM3210C-EVAL USB 官方例程调试报错
STM32F103 全速 USB 大容量存储方案咨询
STM32H573ZI 全速 USB
STM32F2xx 是否有 UVC 相关示例工程
USBX在F407上创建CDC不能正常使用
微信公众号
手机版