OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4539|回复: 4

FatFs文件系统不能同时读写一个磁盘

[复制链接]

68

主题

165

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
388
金钱
388
注册时间
2017-3-2
在线时间
156 小时
发表于 2018-11-12 14:29:43 | 显示全部楼层 |阅读模式
100金钱
本帖最后由 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);



希望大神帮我分析分析~


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

31

主题

2183

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
14422
金钱
14422
注册时间
2018-8-3
在线时间
1157 小时
发表于 2018-11-12 19:53:06 | 显示全部楼层
回复

使用道具 举报

68

主题

165

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
388
金钱
388
注册时间
2017-3-2
在线时间
156 小时
 楼主| 发表于 2018-11-12 20:30:44 | 显示全部楼层
感觉FatFs文件系统的那个互斥功能不能放心用,必须得把底层驱动也加入互斥功能才行....
回复

使用道具 举报

68

主题

165

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
388
金钱
388
注册时间
2017-3-2
在线时间
156 小时
 楼主| 发表于 2018-11-13 09:55:25 | 显示全部楼层
程序跑飞之前会进入这个系统函数:

OS_PRIO  OS_MutexGrpPrioFindHighest (OS_TCB  *p_tcb)
{
    OS_MUTEX     **pp_mutex;
    OS_PRIO        highest_prio;
    OS_PRIO        prio;
    OS_PEND_DATA  *p_head;


    highest_prio = OS_CFG_PRIO_MAX - 1u;
    pp_mutex = &p_tcb->MutexGrpHeadPtr;

    while(*pp_mutex != (OS_MUTEX *)0) {
        p_head = (*pp_mutex)->PendList.HeadPtr;
        if (p_head!= (OS_PEND_DATA *)0) {
            prio = p_head->TCBPtr->Prio;
            if(prio < highest_prio) {
                highest_prio = prio;
            }
        }
        pp_mutex = &(*pp_mutex)->MutexGrpNextPtr;
    }

    return (highest_prio);
}
我看了下,那个p_head是0x11111111,一看这个值就不正常,但是真的不知道为什么会出现这种情况。
01.png
回复

使用道具 举报

25

主题

683

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1351
金钱
1351
注册时间
2012-4-25
在线时间
195 小时
发表于 2018-11-15 14:37:58 | 显示全部楼层
先了解原理再改啊
1-1
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 18:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表