硬汉嵌入式论坛

 找回密码
 立即注册
查看: 6593|回复: 2
收起左侧

[有问必答] uint8_t myf_getfree(char *drv, uint32_t *total, uint32_t *free) 获取磁盘 ??

[复制链接]

692

主题

3576

回帖

5677

积分

论坛元老

积分
5677
发表于 2015-11-26 20:04:33 | 显示全部楼层 |阅读模式
请教下,获取磁盘容量函数,只能获取磁盘0,不能够获取磁盘1、2、3等,代码如下:

/**
  *****************************************************************************
  * @Name   : 得到磁盘剩余容量
  *
  * @Brief  : none
  *
  * @Input  : *drv:   磁盘编号("0:"/"1:"), 必须是根目录
  *           *total: 总容量   (单位KB)
  *           *free:  剩余容量  (单位KB)
  *
  * @Output : none
  *
  * @Return : 0:    OK
  *           其他: 出错
  *****************************************************************************
**/
uint8_t myf_getfree(char *drv, uint32_t *total, uint32_t *free)
{
FATFS *fs1;
__IO uint8_t res;
uint32_t fre_clust=0, fre_sect=0, tot_sect=0;

//得到磁盘信息及空闲簇数量
res = f_getfree((const TCHAR*)&drv, (DWORD*)&fre_clust, &fs1);
if(res == 0)
{
  tot_sect = (fs1->n_fatent - 2) * fs1->csize;  //得到总扇区数
  fre_sect = fre_clust * fs1->csize;       //得到空闲扇区数
  
  #if _MAX_SS!=512          //扇区大小不是512字节,则转换为512字节
   tot_sect *= fs1->ssize / 512;
   fre_sect *= fs1->ssize / 512;
  #endif   
   *total = (tot_sect>>1); //单位为KB
   *free  = (fre_sect>>1); //单位为KB
}
return res;
}
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117546
QQ
发表于 2015-11-26 23:58:38 | 显示全部楼层
可以的,我就是这么用的

http://elm-chan.org/fsw/ff/en/getfree.html
回复

使用道具 举报

692

主题

3576

回帖

5677

积分

论坛元老

积分
5677
 楼主| 发表于 2015-12-20 19:33:07 | 显示全部楼层

回 eric2013 的帖子

eric2013:可以的,我就是这么用的

http://elm-chan.org/fsw/ff/en/getfree.html (2015-11-26 23:58)
哎,不容易啊,终于搞定了,原来是这样的

吧这个 f_getfree((const TCHAR*)&drv, (DWORD*)&fre_clust, &fs1);

改成: f_getfree(drv, (DWORD*)&fre_clust, &fs1);   

完全OK
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-14 01:15 , Processed in 0.037392 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表