OpenEdv-开源电子网

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

求助 f_write 分包写SD文件 文件一大了 中间部分出错

[复制链接]

2

主题

4

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2016-4-3
在线时间
3 小时
发表于 2016-4-3 22:26:58 | 显示全部楼层 |阅读模式
1金钱
求助!求助
我用fatfs  R0.11a  ,要向SPI  SD卡写文件。做一个Ad录程序,Ad中断 采集数据 。数据缓存 用一个 2维数组。  Ad_Buffer[2]【1024】  乒乓操作,边采边写。
我是 分次 写一个文件,每次写1K,  AD采集的数据(中断采集),数据一到1K把收到的数据写入 文件,。继续采集。够1K 重新打开文件、偏移地址、写文件。   写一包的程序代码如下

现在的问题是  我写好的文件,拿到电脑上看,如果 录音时间短没有问题,一要小于10分钟内,  但是一录时间长了 打开文件看,前半部正常,最后一点正常,中间部分便是乱数据 ,根本 不是AD采采来的数据。 有时在2分钟开始乱,有时在5钟时乱。这是什么现象呢,FATS 应该不会有文件大小之说吧,,

第一次搞SD卡 和FAT 找不出哪的问题呀,   f_write 返回也正确,,每写一包文件的大小也会变化,可是这些错误的数据是哪来的呢?  晕晕   求助  求助  

char path1[] = "rev_wav.wav"
void recording(void)
{
        UINT bw;
        FRESULT res;
        uint8        *data_buffer;
         

                if(Ad_SavePage )
                {
                                SD_Select = 1;
                                f_mount(0, &FS);
                               
                                res = f_opendir(&Dir_obj,"RecWAV");                                                                   //打开文件夹

                                f_chdir("RecWAV");
                                res = f_open(&File, &path1[0], FA_OPEN_EXISTING | FA_WRITE | FA_READ);  
                                f_lseek(&File, File.fsize);                                                                                   //指针移到文件最后
                               
                                if(Ad_Page_Sel)         data_buffer = Ad_Buffer[0];
                                else                                                 data_buffer = Ad_Buffer[1];
                                res = f_write(&File, data_buffer, 1024, &bw);                                                         /* Write it to the dst file */

                               

                                res = f_close(&File); /*关闭文件*/
                               
                                f_mount(0, NULL);

                                Ad_SavePage = 0;
                }
}

录音文件

录音文件

最佳答案

查看完整内容[请看2#楼]

问题解决啦,原来 是 ucos 任务调试上不合理造成的,给写SD的优先级和时间短。 但是也有点解释不通,写SD卡前开过 禁止中断的,也没有解决。 现在我用信号量来触发写SD卡,就可以啦,中断里发出信号量,写任务等待信号量,任务优先级提。 自己一点点点试,也只能暂时这样子啦,。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

4

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2016-4-3
在线时间
3 小时
 楼主| 发表于 2016-4-3 22:26:59 | 显示全部楼层
问题解决啦,原来 是 ucos 任务调试上不合理造成的,给写SD的优先级和时间短。
但是也有点解释不通,写SD卡前开过 禁止中断的,也没有解决。
现在我用信号量来触发写SD卡,就可以啦,中断里发出信号量,写任务等待信号量,任务优先级提。  自己一点点点试,也只能暂时这样子啦,。
回复

使用道具 举报

2

主题

4

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2016-4-3
在线时间
3 小时
 楼主| 发表于 2016-4-3 22:28:39 | 显示全部楼层
SD卡 格式化后  卡上扇区中的数据 也像硬盘似的的不删除吗?
如果是这样子的 什么情况下 使新写的文件与 卡上原来的数据 重叠呢。 哪出错啦?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-19 02:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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