代码之家  ›  专栏  ›  技术社区  ›  Monem Ahmed

STM32 FATFS用户手册(um1721)中的代码是否正确?

  •  1
  • Monem Ahmed  · 技术社区  · 2 年前

    我正在研究一个代码库,它使用Chan的FatFS库,可能是使用CubeMX代码生成器开发的。我可以看到下面给出的代码。它也在 STM32 user manual UM1721

    结构的定义如下:

    typedef struct
    { 
      uint8_t                 is_initialized[_VOLUMES];
      Diskio_drvTypeDef       *drv[_VOLUMES];
      __IO uint8_t            nbr;
    
    }Disk_drvTypeDef;
    

    disk 是一个全局变量,定义为:

    Disk_drvTypeDef  disk = {0};
    

    函数定义如下:

    uint8_t FATFS_LinkDriver(Diskio_drvTypeDef *drv, char *path)
    {
      uint8_t ret = 1;
      uint8_t DiskNum = 0;
      if(disk.nbr <= _VOLUMES)
      {
        disk.is_initialized[disk.nbr] = 0;
        disk.drv[disk.nbr] = drv;  
        DiskNum = disk.nbr++;
        path[0] = DiskNum + '0';
        path[1] = ':';
        path[2] = '/';
        path[3] = 0;
        ret = 0;
      }
      return ret;
    }
    

    我的问题是当 disk.nbr == _VOLUMES ,我打电话给 FATFS_LinkDriver 作用它不会尝试放置吗 drv 进入 disk.drv[_VOLUMES] ?但是 disk.drv 大小 _VOLUMES 。那么,最大索引不应该比这个少1吗?我是不是错过了什么?

    1 回复  |  直到 2 年前
        1
  •  1
  •   0___________    2 年前

    此代码调用此行中未定义的行为:

    disk.drv[disk.nbr] = drv;  
    

    什么时候 disk.nbr == _VOLUMES

    STM32 FATFS用户手册(um1721)中的代码是否正确?

    不,不是。一般说明-不能保证文档中的代码是正确的。