mail_xiaofei 发表于 2018-12-14 15:28:55

基于FAT的USB疑问

笔者使用硬石例程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;/** *@briefGlobal Disk IO Drivers structuredefinition*/ typedef struct{ uint8_t                is_initialized; Diskio_drvTypeDef      *drv; uint8_t                lun; __IO uint8_t            nbr;}Disk_drvTypeDef;在文件usbh_diskio.c中初始化了结构体Diskio_drvTypeDef:const Diskio_drvTypeDefUSBH_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->disk_read(disk.lun, buff, sector, count);但是经过程序仿真跟踪发现,上句真正执行的函数是usbh_diskio.c中USBH_read函数。上述的原因是什么?
页: [1]
查看完整版本: 基于FAT的USB疑问