ucos+fatfs+TF卡碰到的文件系统不稳定问题,求救。

2019-07-21 06:32发布

我的问题这里询问过一次,昨天测试了,在发一个求救贴。还请版主手下留情。
http://www.openedv.com/posts/list/0/47326.htm?privmsg=14442&&sysid=4#272187

做了一个新工程
ucosII + fatfs(0.09b) + TF卡 +lpc1788

现在碰到的问题是,文件系统测试,在任务中使用就不稳定,会导致类似文件系统崩溃的情况。
比如:文件不能打开和删除,文件夹不能打开删除,创建了很多同名文件,tf卡不能打开只能格式化,tf卡不能格式化等。

现在怀疑是ucos对文件系统有干扰,因为测试代码放在main函数中OSStart();之前就一切正常,放在任务中,哪怕是单任务只跑测试代码都会出问题。

[mw_shl_code=c,true]int main(void) { SystemInit(); OSInit(); DriverInit();//各硬件初始化 OSTaskCreate(OS_TASK_SCANANDOUTPUT,(void *)0,(OS_STK *)&ScanAndPutStk[4*TASK_STK_SIZE-1],(INT8U)(3)); OSTimeSet(0); // sdwritetest(); //运行没有问题 OSStart(); } void OS_TASK_SCANANDOUTPUT( void *p_arg ) { sdwritetest(); //运行会出错 } //测试代码 void sdwritetest() { while(1) { //写一个文件 。。 //for 循环延时 。。 } }[/mw_shl_code]


有人说要加临界域保护,我按照原子的例子加了
[mw_shl_code=c,true]extern void ff_enter(void); extern void ff_leave(void); #define ENTER_FF(fs) {ff_enter();}//{OS_ENTER_CRITICAL();}//进入FATFS,关闭中断,防止相互干扰 #define LEAVE_FF(fs, res) {ff_leave();return res;}//{OS_EXIT_CRITICAL();return res;}//离开FATFS,开启中断,任务继续执行[/mw_shl_code] [mw_shl_code=c,true]OS_CPU_SR cpu_sr=0; void ff_enter(void) { OS_ENTER_CRITICAL();//进入临界区(无法被中断打断) } void ff_leave(void) { OS_EXIT_CRITICAL(); //退出临界区(可以被中断打断) }[/mw_shl_code]


还有建议是说要保证可重入。我打开了_FS_REENTRANT,按照syscall.c添加了互斥量,还是不行。
考虑到在单任务中运行不行,在main中运行可以,所以怀疑是ucos有干扰。而不是其他比如硬件中断之类的。(我屏蔽了除了tf卡意外的所有中断初始化也不行)。
但是对ucos没有很深的认识,不知道从哪里下手。
求大神指点。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。