我的问题这里询问过一次,昨天测试了,在发一个求救贴。还请版主手下留情。
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没有很深的认识,不知道从哪里下手。
求大神指点。
一周热门 更多>