野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 19343|回复: 6

“FATFS-文件系统” 的例程中,文件句柄为何必须设置为全局变量?

[复制链接]
发表于 2014-8-1 14:36:41 | 显示全部楼层 |阅读模式
本帖最后由 asdf 于 2014-8-1 14:54 编辑

ISO-MINI:
“20、FATFS-文件系统”中的程序main.c中,fnew必须定义为全局变量才可以,
要是把这个声明放进main()中就不行。请问各位这是怎么回事
  1. #include "stm32f10x.h"
  2. #include "bsp_sdio_sdcard.h"
  3. #include "bsp_usart1.h"  
  4. #include "ff.h"

  5. FIL fnew; //  这个放进main()中用f_open  就失败                       /* file objects */
  6. FATFS fs;                          /* Work area (file system object) for logical drives */
  7. FRESULT res;
  8. UINT br, bw;                      /* File R/W count */
  9. BYTE buffer[4096]={0};             /* file copy buffer */
  10. BYTE textFileBuffer[] = "Welcome to use Wildfire iso stm32 Development Board today is a good day";

  11. int main(void)
  12. {
  13.    /* USART1 config */
  14.     USART1_Config();
  15.     printf("\r\n this is a fatfs test demo \r\n");
  16.   
  17.     /* Sdio Interrupt Config */
  18.     NVIC_Configuration();
  19.   
  20.     /* Register work area for each volume (Always succeeds regardless of disk status) */
  21.     f_mount(0,&fs);
  22. ···略
  23. }
复制代码
回复

使用道具 举报

发表于 2014-8-1 14:38:29 | 显示全部楼层
因为这个句柄在其它文件也使用了吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-1 14:43:10 | 显示全部楼层
汪曼丽 发表于 2014-8-1 14:38
因为这个句柄在其它文件也使用了吧

没有呀,我搜了整个工程,只有main.c中有使用
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-1 15:01:58 | 显示全部楼层
The FIL structure (file object) holds state of an open file. It is created by f_open function and discarded by f_close function. There is no member that can be changed by the application program except for cltbl. Note that a sector buffer is defined in this structure under non-tiny configuration so that the FIL structures should not be defined as auto variable.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-1 15:19:40 | 显示全部楼层
好吧,自问自答,找到了文档,这个FIL是个结构体类型,不能定义为自动变量。
定义在全局不太“优雅”,也不能定义多个。这货吃内存、、
  1. BYTE    buf[_MAX_SS]; /* Data read/write buffer */
复制代码
处理文件的函数内static一下吧。
回复 支持 反对

使用道具 举报

发表于 2014-8-4 17:26:51 | 显示全部楼层
asdf 发表于 2014-8-1 15:19
好吧,自问自答,找到了文档,这个FIL是个结构体类型,不能定义为自动变量。
定义在全局不太“优雅”,也不 ...

FIL应该可以定义多个的呀,不同的文件用不同的句柄,好像野火的其它例程有这样用到的。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-4 21:41:11 | 显示全部楼层
祁羽彤 发表于 2014-8-4 17:26
FIL应该可以定义多个的呀,不同的文件用不同的句柄,好像野火的其它例程有这样用到的。。

嗯,可以定义多个,定义一个FLE 就占用大于512个字节(FLE结构体中还定义其它的了)。
定义几个也没啥事。我比较吝啬内存吧,emwin很占内存,我也没扩展,所以省着点用。
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-6-18 02:11 , Processed in 0.045629 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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