笔者使用硬石例程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函数。 上述的原因是什么?
|