OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 14363|回复: 18

求助:关于fatfs 的f_write问题

[复制链接]

10

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2013-7-16
在线时间
4 小时
发表于 2013-11-10 10:59:40 | 显示全部楼层 |阅读模式
就是最简单的f_write,实验现象是只能创建一个1111.txt的文件,但是数组里的内容却没有写进去,这是为何??

#include "ad.h"
#include "lcd.h"
#include "flash.h"
#include "mmc_sd.h"
#include "text.h"
#include "fat.h"
#include "fontupd.h"


#include "led.h" 

#include "sys.h"
#include "usart.h"
#include "delay.h"

#include "includes.h"

#include "ff.h"
#include "string.h"


FATFS fs; 
FIL fsrc,fdst; //用来存储文件对象的空结构体的指针
FRESULT res;
UINT br,bw;
DIR dir;
FILINFO fno; //指向文件信息结构体,用来存储读取到的文件信息
char buffer[512];
unsigned char buffer1[]={"hello!"};
u8 i = 50;  
u8 j = 0;
int main(void)
{

   
  Stm32_Clock_Init(9);//系统时钟设置
delay_init(72); //延时初始化
uart_init(72,9600); //串口1初始化      
LCD_Init(); //初始化液晶 
Font_Init();
LED_Init();         //LED初始化    
SPI_Flash_Init(); //SPI FLASH初始化
LCD_Clear(BLACK);
 
  POINT_COLOR=RED;//设置字体为红色
BACK_COLOR = BLACK;   
while(SD_Init()) //检测SD卡
{
LCD_ShowString(60,150,"TIME_OUT");
delay_ms(200);
LED0=!LED0;//DS0闪烁
}

f_mount(0,&fs);

res = f_open(&fsrc,"11111.txt",FA_OPEN_ALWAYS  | FA_WRITE);
 
if(!res)

{
    for(;;)
    {

            res = f_write(&fsrc,buffer1,sizeof(buffer1),&bw);    

            if(res || bw == 0)    
            {          
               Show_Str24(50,100,"tt",1);
              delay_ms(500);
                break;
            }

    }

        f_close(&fsrc);
        Show_Str24(50,150,"tsrt",1);
delay_ms(500);

}
while(1);
}


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

28

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
217
金钱
217
注册时间
2012-11-28
在线时间
0 小时
发表于 2013-11-10 11:16:29 | 显示全部楼层
回复【楼主位】isonicboy:
---------------------------------
你看看是不是if(!res)有问题,成功创建或打开文件,返回值应该是真吧,再取非变假了!你跟踪下看看。。。
回复 支持 反对

使用道具 举报

10

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2013-7-16
在线时间
4 小时
 楼主| 发表于 2013-11-10 11:16:53 | 显示全部楼层
难道没有大神不吝赐教小弟吗?= =
回复 支持 反对

使用道具 举报

10

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2013-7-16
在线时间
4 小时
 楼主| 发表于 2013-11-10 11:30:01 | 显示全部楼层
回复【2楼】总在怀远:

回复【楼主位】isonicboy:
---------------------------------
你看看是不是if(!res)有问题,成功创建或打开文件,返回值应该是真吧,再取非变假了!你跟踪下看看。。。

---------------------------------
open正常打开后,返回值为0,我取反后正常可以进入写的部分,这样应该没错的啊
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-11-10 11:34:49 | 显示全部楼层
是没错,你的主函数末尾加入一个while死循环吧。感觉你这代码会飘...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

10

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2013-7-16
在线时间
4 小时
 楼主| 发表于 2013-11-10 11:51:37 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
加了两个显示的测试 Show_Str24都可以正常显示,但是内存卡拔出来放到电脑显示就是0个字节。我在ffconf.h也设置了#define _FS_READONLY 0 
我测试了,打开文件,读取文件,就是写文件这里怎么也出不来,不知道哪里还有问题我没注意到 ==!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-11-10 15:44:19 | 显示全部楼层
用我们的例程测试下吧。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2013-6-20
在线时间
0 小时
发表于 2013-11-10 16:44:54 | 显示全部楼层
你重新移植下看看,我也遇到过类似的问题,重新移植了一次,就好了
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
24
金钱
24
注册时间
2014-12-22
在线时间
0 小时
发表于 2014-12-22 10:14:36 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
你好,原点,在线吗?
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
24
金钱
24
注册时间
2014-12-22
在线时间
0 小时
发表于 2014-12-22 10:16:54 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
我今年中在贵公司购买了3套板子,里面有sdcard的测试程序,但这个程序没有fatfs例子融入在里面,你那边有代码吗? 我在网上down了fatfs的文件,下载到你的板子上不能正常识别sdcard!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-12-22 19:42:17 | 显示全部楼层
回复【10楼】Eric_Neurosky:
---------------------------------
有fatfs版本了
你的开发板是V2.0还是V3.0的?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-12-22 19:42:41 | 显示全部楼层
资料在这里下载:http://openedv.com/posts/list/13912.htm
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

164

主题

1230

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1477
金钱
1477
注册时间
2014-5-21
在线时间
342 小时
发表于 2015-4-16 20:53:41 | 显示全部楼层
这条指令中的sizeof(textFileBuffer)改为sizeof(textFileBuffer)-1,直接忽略最后一位,这样写入的数据才有效,读出的数据才完整!!!
彼高丽者,边夷贱类,不足待以仁义,不可责以常礼。古来以鱼鳖畜之,宜从阔略。若必欲绝其种类,恐兽穷则搏。
回复 支持 反对

使用道具 举报

164

主题

1230

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1477
金钱
1477
注册时间
2014-5-21
在线时间
342 小时
发表于 2015-4-16 21:04:05 | 显示全部楼层
因为你侯马有结束符号什么的
彼高丽者,边夷贱类,不足待以仁义,不可责以常礼。古来以鱼鳖畜之,宜从阔略。若必欲绝其种类,恐兽穷则搏。
回复 支持 反对

使用道具 举报

3

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2015-5-16
在线时间
0 小时
发表于 2015-6-20 22:07:38 | 显示全部楼层
回复【14楼】cornrn:
---------------------------------
我用f_write 函数 总只显示一行,我想存到sd卡是一行一行的,一行就是一次采样的数据

帮忙解答一下吧  谢谢了
回复 支持 反对

使用道具 举报

138

主题

362

帖子

0

精华

高级会员

Rank: 4

积分
997
金钱
997
注册时间
2012-9-17
在线时间
29 小时
发表于 2015-8-11 11:10:39 | 显示全部楼层
这个问题,不知道楼主解决了没有?  我现在也碰到了,还望楼主指教!
回复 支持 反对

使用道具 举报

1

主题

15

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2015-2-7
在线时间
4 小时
发表于 2016-3-5 18:21:47 | 显示全部楼层
楼主,你好,请问现在问题解决了么?小弟也遇到了这个问题;
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2016-10-26
在线时间
10 小时
发表于 2016-11-25 14:58:59 | 显示全部楼层
if(res || bw == 0)    有问题,改为 if(res ==0|| bw == 0) 就可以了,已经验证   
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2019-8-25
在线时间
6 小时
发表于 2020-5-8 14:42:23 | 显示全部楼层
res || bw == 0这个式子本来就有问题啊,没人看出来优先级问题?  正确表达是这样 (res||bw)==0
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-29 05:55

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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