ngyg12 发表于 2010-9-29 13:30:03

纠结的 FATFS 结构体.....

在写一个函数的时候遇到个这样的问题:
FRESULT CreateONEFile(const char *filename)
{
   FATFS fs_cre;    // Work area (file system object) for logical drive
   FILfsrc;      // file objects
    FRESULT res;    // FatFs function common result code

//
// Register a work area for logical drive 0
//
f_mount(0, &fs_cre);

// Createfile
res = f_open(&fsrc, filename, FA_CREATE_ALWAYS | FA_WRITE);

f_close(&fsrc);

return (res);
}

这是一个用 FATFS 系统写的一个生成一个文件的函数,写好了,语法没有错误,通过编译下载到 ARM 上,没想到,程序卡死了.但是如果把FATFS fs_cre 定义成 static FATFS fs_cre 或者 定义成全局变量就会很顺利,也能实现预想的功能!
我在调试的时候,它们的区别就是初始化和未被初始化.但是我又不想把把定义成静态或者全局的,剩下的就只有初始化为0,但是 FATFS 是文件系统自己定义的一个结构体,具体的成员我也不知道,所以初始化也不行.这便令我很纠结啊! 不知道有哪位大虾能帮小弟解决一下...

aozima 发表于 2010-9-29 13:40:32

1. elm fatfs支持N个逻辑卷.每个逻辑卷的相关信息要保存起来.
   使用f_mount来指定保存的地址.如果使用局部变量函数退出时就失效了.后果是不可预料的.

2. 局部变量过多要防止 栈溢出.

ngyg12 发表于 2010-9-29 15:17:39

回复【楼主位】ngyg12
-----------------------------------------------------------------------
谢谢关注,针对失效的问题,我想了一下,如果我每使用一次,就注_册一次,即是使用一次 f_mount(0, &fs_cre);
这样的话,应该可以吧,所以是不是只要我在保证堆栈不溢出的情况下就能够操作成功呢?
页: [1]
查看完整版本: 纠结的 FATFS 结构体.....