OpenEdv-开源电子网

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

RTOS中二进值信号量如何使用?

[复制链接]

10

主题

32

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2015-8-7
在线时间
15 小时
发表于 2018-6-4 20:38:54 | 显示全部楼层 |阅读模式
10金钱
如何使用二进制信号量。
如何去判断二进制信号量 0和1.
看来书写的是空的时候为0.满的时候为1,但是如何去判断0和1。


最佳答案

查看完整内容[请看2#楼]

不加私人QQ哦,我自己水平也很菜,就简单说一下我自己的理解吧,也不知道对不对,你就当个参考好了。 假设我们有一个数组,Array[10] = {0}, static SemaphoreHandle_t xSemaphore = NULL; Task1函数 { while(1) { xSemaphoreTake(xSemaphore, portMAX_DELAY); 对数组进行操作(写数据); xSemaphoreGive(xSemaphore); taskYIELD(); } } Task2函数 { ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

82

主题

589

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1255
金钱
1255
注册时间
2017-11-18
在线时间
296 小时
发表于 2018-6-4 20:38:55 | 显示全部楼层
show1220 发表于 2018-6-5 09:23
想利用二值信号量来达到一个同步任务的功能。
多个函数给队列写数据,多个同时写怕冲突,所以想用个变量 ...

不加私人QQ哦,我自己水平也很菜,就简单说一下我自己的理解吧,也不知道对不对,你就当个参考好了。
假设我们有一个数组,Array[10] = {0},
static SemaphoreHandle_t  xSemaphore = NULL;
Task1函数
{
    while(1)
    {
        xSemaphoreTake(xSemaphore, portMAX_DELAY);
        对数组进行操作(写数据);
        xSemaphoreGive(xSemaphore);

        taskYIELD();
    }
        
}
Task2函数
{
    while(1)
    {
        xSemaphoreTake(xSemaphore, portMAX_DELAY);
        对数组进行操作(写数据);
        xSemaphoreGive( xSemaphore );

        taskYIELD();
    }   
}
上面对信号量的获取和释放都用不涉及到判断信号量0和1的。
没有脑袋
回复

使用道具 举报

82

主题

589

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1255
金钱
1255
注册时间
2017-11-18
在线时间
296 小时
发表于 2018-6-4 22:47:57 | 显示全部楼层
实际使用过程中我们不需要去判断0和1吧,只需要在访问资源时候先Take一次信号量,这时相当是把它清空,访问完资源后在give回去就好了呀,感觉和互斥信号量是一样的原理
回复

使用道具 举报

10

主题

32

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2015-8-7
在线时间
15 小时
 楼主| 发表于 2018-6-5 09:23:57 | 显示全部楼层
美丽的时光机器 发表于 2018-6-4 22:47
实际使用过程中我们不需要去判断0和1吧,只需要在访问资源时候先Take一次信号量,这时相当是把它清空,访问 ...

想利用二值信号量来达到一个同步任务的功能。
多个函数给队列写数据,多个同时写怕冲突,所以想用个变量,一个人任务给队列写数据时锁住变量,写好后释放变量。只有变量是释放的状态时,下一个任务才能给队列写数据。
所以想用二值信号量来实现这个功能,但是不知道怎么去实现,方便加个QQ指导一下嘛!嘻嘻
回复

使用道具 举报

26

主题

1538

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6379
金钱
6379
注册时间
2015-8-25
在线时间
1004 小时
发表于 2018-6-5 12:25:30 | 显示全部楼层
二值信号量是一个没有存储区的队列,用队列是否为空来表示二值信号量,而队列是否为空可以通过队列结构体中的成员变量uxMessagesWaiting来判定,这个成员变量具体含义为队列中的消息数,为1表示二值信号量有效,为0表示无效
回复

使用道具 举报

10

主题

32

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2015-8-7
在线时间
15 小时
 楼主| 发表于 2018-6-5 14:03:06 | 显示全部楼层
szczyb1314 发表于 2018-6-5 12:25
二值信号量是一个没有存储区的队列,用队列是否为空来表示二值信号量,而队列是否为空可以通过队列结构体中 ...

嗯,好吧!那请问下如果想定义一个变量,然后写对队列时锁住变量,写好后释放变量,来判断是否对队列操作完成,应该如何去操作啊
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-25 23:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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