关于 stm32h7 UCOSIII+Fatfs 0.14a 重入的挣杂,呐喊。。。 2021-01-13

1、ffconf.h

#define FF_FS_REENTRANT    1
#include <os.h>    // O/S definitions */
#define FF_FS_TIMEOUT    1000
#define FF_SYNC_t        OS_MUTEX 

 

2、ff.h

FF_SYNC_t  sobj改为指针参数:FF_SYNC_t *sobj

/* Sync functions */
#if FF_FS_REENTRANT
int ff_cre_syncobj (BYTE vol, FF_SYNC_t* sobj);    /* Create a sync object */
int ff_req_grant (FF_SYNC_t *sobj);        /* Lock sync object */
void ff_rel_grant (FF_SYNC_t *sobj);        /* Unlock sync object */
int ff_del_syncobj (FF_SYNC_t *sobj);    /* Delete a sync object */
#endif

3、ffsytem.c

int ff_cre_syncobj (    /* 1:Function succeeded, 0:Could not create the sync object */
    BYTE vol,            /* Corresponding volume (logical drive number) */
    FF_SYNC_t* sobj        /* Pointer to return the created sync object */
)
{

    memset(sobj, 0, sizeof(OS_MUTEX));
    OSMutexCreate(sobj,"fatfs", &err);
    return (int)(err == OS_ERR_NONE);
}

int ff_del_syncobj (    /* 1:Function succeeded, 0:Could not delete due to an error */
    FF_SYNC_t *sobj        /* Sync object tied to the logical drive to be deleted */
)
{

    /* uC/OS-II */
    OS_ERR err;
    
    OSMutexDel(sobj, OS_OPT_DEL_ALWAYS, &err);
    return (int)(err == OS_ERR_NONE);
}

int ff_req_grant (    /* 1:Got a grant to access the volume, 0:Could not get a grant */
    FF_SYNC_t *sobj    /* Sync object to wait */
)
{

    /* uC/OS-II 
    请求互斥型信号量
    timeout:指定等待互斥信号量的超时时间(时钟节拍数),
    如果在指定的时间内互斥信号量没有释放,
    则允许任务恢复执行。该值设置为0的话,
    表示任务将会一直等待下去,
    直到信号量被释放掉*/
    OS_ERR err;
    OSMutexPend(sobj, FF_FS_TIMEOUT,OS_OPT_PEND_BLOCKING,0,&err);
    return (int)(err == OS_ERR_NONE);
}

void ff_rel_grant (
    FF_SYNC_t *sobj    /* Sync object to be signaled */
)
{

    /* uC/OS-II 发送互斥信号量
    通过调用函数OSMutexPost()来释放互斥型信号量,
    只有之前调用过函数OSMutexPend()获取互斥信号量,
    才需要调用OSMutexPost()函数来释放这个互斥信号量*/
    OS_ERR  err; 
    OSMutexPost(sobj,OS_OPT_POST_NONE,&err);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值