|
本帖最后由 caiwei_cs 于 2015-3-6 12:25 编辑
做了一个新工程
ucosII + fatfs(0.09b) + TF卡 +lpc1788
现在碰到的问题是,文件系统测试,在任务中使用就不稳定,会导致类似文件系统崩溃的情况。
比如:文件不能打开和删除,文件夹不能打开删除,创建了很多同名文件,tf卡不能打开只能格式化,tf卡不能格式化等。
现在怀疑是ucos对文件系统有干扰,因为测试代码放在main函数中OSStart();之前就一切正常,放在任务中,哪怕是单任务只跑测试代码都会出问题。
- 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 循环延时
- 。。
- }
- }
复制代码
有人说要加临界域保护,我按照原子的例子加了
- 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,开启中断,任务继续执行
复制代码
- OS_CPU_SR cpu_sr=0;
- void ff_enter(void)
- {
- OS_ENTER_CRITICAL();//进入临界区(无法被中断打断)
- }
- void ff_leave(void)
- {
- OS_EXIT_CRITICAL(); //退出临界区(可以被中断打断)
- }
复制代码
还有建议是说要保证可重入。我打开了_FS_REENTRANT,按照syscall.c添加了互斥量,还是不行。
考虑到在单任务中运行不行,在main中运行可以,所以怀疑是ucos有干扰。而不是其他比如硬件中断之类的。(我屏蔽了除了tf卡意外的所有中断初始化也不行)。
但是对ucos没有很深的认识,不知道从哪里下手。
求大神指点。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
|