OpenEdv-开源电子网

标题: 关于例程使用互斥信号量初始化问题 [打印本页]

作者: ksi魔杰    时间: 2016-6-10 15:46
标题: 关于例程使用互斥信号量初始化问题
OS_MUTEX        TEST_MUTEX;                //定义一个互斥信号量

        //创建一个互斥信号量
        OSMutexCreate((OS_MUTEX*        )&TEST_MUTEX,
                                  (CPU_CHAR*        )"TEST_MUTEX",
                  (OS_ERR*                )&err);


void task1_task(void *p_arg)
{
OSMutexPend (&TEST_MUTEX,0,OS_OPT_PEND_BLOCKING,0,&err);        //请求互斥信号量   和普通的信号量  用法相似
。。。。。。。。
        OSMutexPost(&TEST_MUTEX,OS_OPT_POST_NONE,&err);                                //释放互斥信号量

}




void task2_task(void *p_arg){
OSMutexPend (&TEST_MUTEX,0,OS_OPT_PEND_BLOCKING,0,&err);        //请求互斥信号量   和普通的信号量  用法相似
。。。。。。。。
        OSMutexPost(&TEST_MUTEX,OS_OPT_POST_NONE,&err);                                //释放互斥信号量
}


我想问两个任务刚开始都在请求互斥信号量    那刚开始是谁发的信号量,   我的理解是  初始化的时候  就有一次可用的互斥信号量  
如果是这样  那么问题来了      如果我建立了一个互斥信号量  一开始我不想用,想让目标任务一直等待     某一时刻另外的任务发出互斥信号量   该怎么设置啊




作者: 正点原子    时间: 2016-6-11 20:04
帮顶
作者: 梁先生UP    时间: 2018-9-26 18:27
不知道楼主这个问题是怎么解决的?

作者: 郭正东    时间: 2019-1-6 19:25
楼主你好,互斥信号量0表示可用,在创建信号量时已经默认为0了,默认是可用的,你的问题感觉方法很多,可以先试试一开机打算让它一直等待的任务进while(1)之前先请求互斥信号量(上锁,就是把信号量置1),然后进while一直等,另一个任务某个时刻释放,等的任务就可以请求通过了。你看说清楚了吗?不清楚留言哈,我写写代码发上来一起探讨探讨
作者: szzk    时间: 2021-6-28 14:40
郭正东 发表于 2019-1-6 19:25
楼主你好,互斥信号量0表示可用,在创建信号量时已经默认为0了,默认是可用的,你的问题感觉方法很多,可以 ...

你好,互斥信号量是有请求,在这个任务里面就要有释放吗,我用互斥信号量有错误码22401,22402,25006




欢迎光临 OpenEdv-开源电子网 (http://47.111.11.73/) Powered by Discuz! X3.4