硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3713|回复: 4
收起左侧

[μCOS-III] 关于使用互斥信号量初始化问题

[复制链接]

4

主题

8

回帖

4

积分

新手上路

积分
4
发表于 2016-6-11 08:59:10 | 显示全部楼层 |阅读模式
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);                                //释放互斥信号量
}


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

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107034
QQ
发表于 2016-6-11 10:07:07 | 显示全部楼层
这种情况使用信号实现即可,创建信号量的初始值为0,, 互斥信号量已经不合适。
回复

使用道具 举报

4

主题

8

回帖

4

积分

新手上路

积分
4
 楼主| 发表于 2016-6-11 10:19:52 | 显示全部楼层
嗯嗯  好的  感谢版主
回复

使用道具 举报

4

主题

8

回帖

4

积分

新手上路

积分
4
 楼主| 发表于 2016-6-11 10:20:35 | 显示全部楼层

回 eric2013 的帖子

eric2013:这种情况使用信号实现即可,创建信号量的初始值为0,, 互斥信号量已经不合适。 (2016-06-11 10:07) 
嗯嗯  好的  感谢版主
回复

使用道具 举报

4

主题

23

回帖

35

积分

新手上路

积分
35
发表于 2016-6-14 09:19:23 | 显示全部楼层
第一个问题:互斥信号量初始化为1,先建立的任务可以申请到信号量,如此就可以实现互斥。

第二个问题:互斥信号量初始化为0,两任务都申请不到信号量,处于等待状态,可在其它任务中发送一次信号量,然后task1和task2中谁优先级高的先申请到信号量,之后就能实现互斥。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-15 09:24 , Processed in 0.155854 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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