紫苑Yoo梦 发表于 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秒存一个数据,完全不受影响,更改文件名字和更改写入的数据都试过,甚至试过建一个文件夹,丢文件夹里面,还是会多次写入,而串口只输出一次字符串。
请问大佬们这种情况该咋办_(:з」∠)_折腾好久了,已经彻底没辙了

eric2013 发表于 2019-11-29 17:58:18

你的意思是,你的看门狗复位后运行不正常?

紫苑Yoo梦 发表于 2019-12-2 10:55:22

应该不是看门狗问题,我后面把看门狗删了也还是会有这种问题,只有1次写操作,却多次写入

eric2013 发表于 2019-12-2 12:36:00

紫苑Yoo梦 发表于 2019-12-2 10:55
应该不是看门狗问题,我后面把看门狗删了也还是会有这种问题,只有1次写操作,却多次写入

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

紫苑Yoo梦 发表于 2019-12-2 19:54:03

eric2013 发表于 2019-12-2 12:36
看来程序驱动做的有问题。

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

tigerdill 发表于 2019-12-2 22:49:11

冷启动 电源抖动了?
main后加个长延时,再各种操作看看

eric2013 发表于 2019-12-3 09:12:22

紫苑Yoo梦 发表于 2019-12-2 19:54
刚更换过单片机,发现是一个样,哪怕我只用了FATFS和串口,其他什么都不开,数组也只用2个,都是一样的。 ...

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

紫苑Yoo梦 发表于 2019-12-3 15:50:18

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

eric2013 发表于 2019-12-3 16:38:32

紫苑Yoo梦 发表于 2019-12-3 15:50
更换过大电源,不行,更换过开发板,不行,更换过FATFS版本不行,加过1s延时,也不行,最后发现要2s才可以 ...

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

紫苑Yoo梦 发表于 2019-12-3 17:00:53

eric2013 发表于 2019-12-3 16:38
可以考虑先记录下,过会再写。是否满足需求,

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

eric2013 发表于 2019-12-4 19:58:10

紫苑Yoo梦 发表于 2019-12-3 17:00
直接上2s延时也不是不行,只是搞不清楚原因,怕会埋坑

可以考虑换几个卡试试。

紫苑Yoo梦 发表于 2019-12-5 17:06:02

eric2013 发表于 2019-12-4 19:58
可以考虑换几个卡试试。

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

eric2013 发表于 2019-12-6 09:09:19

紫苑Yoo梦 发表于 2019-12-5 17:06
换过了,_(:з」∠)_还是不行,搞不懂为啥就不行,我记得刚开始用FATFS的时候也是这么用的,没啥问题啊

改天我试试我们的板子。

紫苑Yoo梦 发表于 2019-12-12 09:41:30

eric2013 发表于 2019-12-6 09:09
改天我试试我们的板子。

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

eric2013 发表于 2019-12-12 10:47:28

紫苑Yoo梦 发表于 2019-12-12 09:41
硬汉哥,请问你们板子会有这问题吗?再顺便问一下,长时间频繁读写是读写完就close好,还是只打开一次, ...

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

紫苑Yoo梦 发表于 2019-12-13 10:25:09

eric2013 发表于 2019-12-12 10:47
f_sync好。如果使用开关方式,时间长了,这两个函数执行时间会大大加长。

好的,非常感谢
页: [1]
查看完整版本: 写文件疑似跑飞,寻求大佬帮助