STM32 FATFS 用户手册(um1721)中的这段代码正确吗?

问题描述 投票:0回答:1

我正在浏览一个代码库,它使用 Chan 的 FatFS 库,并且可能是使用 CubeMX 代码生成器开发的。我可以看到下面给出的代码。 STM32 用户手册 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吗?我是不是错过了什么?

c embedded stm32 microcontroller embedded-resource
1个回答
1
投票

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

disk.drv[disk.nbr] = drv;  

disk.nbr == _VOLUMES
时。

STM32 FATFS 用户手册 (um1721) 中的这段代码正确吗?

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

© www.soinside.com 2019 - 2024. All rights reserved.