OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子全套STM32开发资料,上千讲STM32视频教程,RT1052教程免费下载啦...

查看: 241|回复: 5

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

[复制链接]

  离线 

10

主题

32

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2015-8-7
在线时间
14 小时
发表于 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函数 { ...
回复

使用道具 举报

  离线 

33

主题

329

帖子

0

精华

高级会员

Rank: 4

积分
573
金钱
573
注册时间
2017-11-18
在线时间
124 小时
发表于 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的。
不回答我问题我就卖萌给你看。
回复

使用道具 举报

  离线 

33

主题

329

帖子

0

精华

高级会员

Rank: 4

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

使用道具 举报

  离线 

10

主题

32

帖子

0

精华

新手上路

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

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

使用道具 举报

  离线 

8

主题

444

帖子

0

精华

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

  离线 

10

主题

32

帖子

0

精华

新手上路

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

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

使用道具 举报

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

本版积分规则




关闭

必看:"原子哥”力荐上一条 /1 下一条

QQ|联系我们|手机版|官方淘宝店|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-8-19 19:46

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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