本帖最后由 kokoromi 于 2018-11-12 15:14 编辑
最近调试多任务同时读写同一磁盘文件,头都大了,FatFs自带的那个线程安全设置即便打开了也不管用(配置了Mutex信号量),现在问题是这样的:
1、打开FatFs的互斥功能,配置ffsystem.c中的几个函数,加入Mutex功能,两个任务同时读取SD卡中的文件,程序直接卡死在等待SD卡标志位语句上;
2、在 1的前提下,我把SD卡底层驱动函数也加入的互斥功能,使用的一般信号量,初值为 1的方式,程序正常运行;
3、在 1的前提下,我把SD卡底层驱动函数也加入的互斥功能,使用的互斥信号量,程序跑飞直接进入硬错误;
4、打开FatFs的互斥功能,配置ffsystem.c中的几个函数,加入Sem功能(初值 1),然后再加入步骤 2或者3,程序都正常。
想问一下,互斥信号量不能嵌套吗?我分析了一下,直接打开FatFs的互斥功能不行,底层驱动函数也必须加入互斥功能,现在问题就是如果我在底层驱动里再加入互斥功能,程序就不行了,加入普通信号量就可以,这是为什么呢?调试了好几天,唉...
下面这种形式就不行:
OSMutexPend(M1);
OSMutexPend(M2);
OSMutexPost(M2);
OSMutexPost(M1);
这种就可以...
OSMutexPend(M1);
OSSemPend(S1);
OSSemPost(S1);
OSMutexPost(M1);
希望大神帮我分析分析~
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>