新手上路
- 积分
- 41
- 金钱
- 41
- 注册时间
- 2016-4-3
- 在线时间
- 3 小时
|
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卡,就可以啦,中断里发出信号量,写任务等待信号量,任务优先级提。 自己一点点点试,也只能暂时这样子啦,。
|