硬汉嵌入式论坛

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

[FatFs] 写文件疑似跑飞,寻求大佬帮助

[复制链接]

10

主题

32

回帖

62

积分

初级会员

积分
62
发表于 2019-11-29 15:38:30 | 显示全部楼层 |阅读模式

void main()
{
     //各种初始化
      f_open(&SDFile,"0:/RESET.txt",FA_OPEN_ALWAYS|FA_WRITE);
      f_lseek(&SDFile,f_size(&SDFile));//指针移到文件末尾                    
      f_write(&SDFile, "0", 1, &bw);//写入数据
      f_close(&SDFile);

      printf("System Star\r\n");
     while(1)
     {
      //1秒存一个数据
     }
}
大致结构就是这样的,因为加了看门狗,想记录复位次数,复位的时候写一个‘0’同时串口发一个字符串,但是保持串口开的情况下,只收到一次"System Star”,取出SD卡却发现里面写了5个0(有时候3个,有时候十多个),while循环里的操作是1秒存一个数据,完全不受影响,更改文件名字和更改写入的数据都试过,甚至试过建一个文件夹,丢文件夹里面,还是会多次写入,而串口只输出一次字符串。
请问大佬们这种情况该咋办_(:з」∠)_折腾好久了,已经彻底没辙了

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2019-11-29 17:58:18 | 显示全部楼层
你的意思是,你的看门狗复位后运行不正常?
回复

使用道具 举报

10

主题

32

回帖

62

积分

初级会员

积分
62
 楼主| 发表于 2019-12-2 10:55:22 | 显示全部楼层
应该不是看门狗问题,我后面把看门狗删了也还是会有这种问题,只有1次写操作,却多次写入
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2019-12-2 12:36:00 | 显示全部楼层
紫苑Yoo梦 发表于 2019-12-2 10:55
应该不是看门狗问题,我后面把看门狗删了也还是会有这种问题,只有1次写操作,却多次写入

看来程序驱动做的有问题。
回复

使用道具 举报

10

主题

32

回帖

62

积分

初级会员

积分
62
 楼主| 发表于 2019-12-2 19:54:03 | 显示全部楼层
eric2013 发表于 2019-12-2 12:36
看来程序驱动做的有问题。

刚更换过单片机,发现是一个样,哪怕我只用了FATFS和串口,其他什么都不开,数组也只用2个,都是一样的。
只要我在写之前加了f_lseek(&file,f_size(&file))把指针移到末尾,哪怕程序是在while外面,也会写4次以上,而且我在写完后读取并输出时发现,只有上电的那一下会写入多次,上完电我按复位的话就是按1次写1次
回复

使用道具 举报

0

主题

101

回帖

101

积分

初级会员

积分
101
发表于 2019-12-2 22:49:11 | 显示全部楼层
冷启动 电源抖动了?
main后加个长延时,再各种操作看看
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2019-12-3 09:12:22 | 显示全部楼层
紫苑Yoo梦 发表于 2019-12-2 19:54
刚更换过单片机,发现是一个样,哪怕我只用了FATFS和串口,其他什么都不开,数组也只用2个,都是一样的。 ...

尝试下楼上网友说的,上电后,过会再操作看看。
回复

使用道具 举报

10

主题

32

回帖

62

积分

初级会员

积分
62
 楼主| 发表于 2019-12-3 15:50:18 | 显示全部楼层
更换过大电源,不行,更换过开发板,不行,更换过FATFS版本不行,加过1s延时,也不行,最后发现要2s才可以,一步一步挪发现要在f_close()之前加才可以,上示波器测SD卡频率在22.5MHZ左右。测数据脚发现,在上电开始时会多次写。
2s实在是太长了,不太可能是电源抖动,而且如果是电源导致的,那printf应该也是多次输出啊,我printf放过最前面,放过中间,也放过后面,同样的问题,写了好几次,只执行了1次printf
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2019-12-3 16:38:32 | 显示全部楼层
紫苑Yoo梦 发表于 2019-12-3 15:50
更换过大电源,不行,更换过开发板,不行,更换过FATFS版本不行,加过1s延时,也不行,最后发现要2s才可以 ...

可以考虑先记录下,过会再写。是否满足需求,
回复

使用道具 举报

10

主题

32

回帖

62

积分

初级会员

积分
62
 楼主| 发表于 2019-12-3 17:00:53 | 显示全部楼层
eric2013 发表于 2019-12-3 16:38
可以考虑先记录下,过会再写。是否满足需求,

直接上2s延时也不是不行,只是搞不清楚原因,怕会埋坑
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2019-12-4 19:58:10 | 显示全部楼层
紫苑Yoo梦 发表于 2019-12-3 17:00
直接上2s延时也不是不行,只是搞不清楚原因,怕会埋坑

可以考虑换几个卡试试。
回复

使用道具 举报

10

主题

32

回帖

62

积分

初级会员

积分
62
 楼主| 发表于 2019-12-5 17:06:02 | 显示全部楼层
eric2013 发表于 2019-12-4 19:58
可以考虑换几个卡试试。

换过了,_(:з」∠)_还是不行,搞不懂为啥就不行,我记得刚开始用FATFS的时候也是这么用的,没啥问题啊
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2019-12-6 09:09:19 | 显示全部楼层
紫苑Yoo梦 发表于 2019-12-5 17:06
换过了,_(:з」∠)_还是不行,搞不懂为啥就不行,我记得刚开始用FATFS的时候也是这么用的,没啥问题啊

改天我试试我们的板子。
回复

使用道具 举报

10

主题

32

回帖

62

积分

初级会员

积分
62
 楼主| 发表于 2019-12-12 09:41:30 | 显示全部楼层
eric2013 发表于 2019-12-6 09:09
改天我试试我们的板子。

硬汉哥,请问你们板子会有这问题吗?再顺便问一下,长时间频繁读写是读写完就close好,还是只打开一次,读写完sync,然后加掉电检测,在中断里close好?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106685
QQ
发表于 2019-12-12 10:47:28 | 显示全部楼层
紫苑Yoo梦 发表于 2019-12-12 09:41
硬汉哥,请问你们板子会有这问题吗?再顺便问一下,长时间频繁读写是读写完就close好,还是只打开一次, ...

f_sync好。如果使用开关方式,时间长了,这两个函数执行时间会大大加长。
回复

使用道具 举报

10

主题

32

回帖

62

积分

初级会员

积分
62
 楼主| 发表于 2019-12-13 10:25:09 | 显示全部楼层
eric2013 发表于 2019-12-12 10:47
f_sync好。如果使用开关方式,时间长了,这两个函数执行时间会大大加长。

好的,非常感谢
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 15:05 , Processed in 0.348315 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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