硬汉嵌入式论坛

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

[ThreadX全家桶] ThreadX和FreeRTOS信号量创建初值差异

[复制链接]

40

主题

297

回帖

417

积分

高级会员

积分
417
发表于 2023-3-7 10:17:36 | 显示全部楼层 |阅读模式

最近用到了FreeRTOS,发现其中信号量创建后,直接Get会阻塞,而ThreadX的创建函数 tx_mutex_create 不会,


查找官方文档发现函数 xSemaphoreCreateBinary的说明:



信号量是在“空”状态下创建的,这意味着必须先用 xSemaphoreGive() API 函数给出信号量, 然后才能使用 xSemaphoreTake() 函数来获取(获得)该信号量。



这点与ThreadX不同。

回复

使用道具 举报

1

主题

93

回帖

101

积分

初级会员

积分
101
发表于 2023-3-11 08:22:50 | 显示全部楼层
tx_mutex_create()是互斥信号量,FreeRTOS中对应的应该是xSemaphoreCreateMutex()吧
回复

使用道具 举报

40

主题

297

回帖

417

积分

高级会员

积分
417
 楼主| 发表于 2023-3-11 13:14:35 | 显示全部楼层
本帖最后由 wanglehui_12 于 2023-3-11 13:17 编辑
nnqtdf 发表于 2023-3-11 08:22
tx_mutex_create()是互斥信号量,FreeRTOS中对应的应该是xSemaphoreCreateMutex()吧

官方文档:

“互斥锁和二进制信号量极为相似,但 仍有一些细微差异: 互斥锁具有优先级继承机制, 但二进制信号量没有。 因此,二进制信号量是 实现同步的更好选择(任务之间或任务与中断之间), 也是实施简单互斥方面的更好选择。”


这是demo:

2023-03-11_13-16-06.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107272
QQ
发表于 2023-3-11 14:05:56 | 显示全部楼层
FreeRTOS:  xSemaphoreCreateBinary 是二值信号量,还有个计数信号量和互斥信号量,本质都比较简单,就是计数值,数值多少代表可供使用的资源多少。 可以认为就是一个东西,可以用用在不同场景
                 二值信号量就是资源为1的信号量,可以用于同步,也可以用于互斥,但不支持优先级翻转,所以专门有个支持优先级翻转的mutex,这个二值信号量就是计数信号量计数为1的具体实现。

ThreadX: 也是一样的,有个通用的信号量功能,等同于FreeRTOS的二值和计数信号量,还有一个互斥信号量。
回复

使用道具 举报

40

主题

297

回帖

417

积分

高级会员

积分
417
 楼主| 发表于 2023-3-11 16:01:46 | 显示全部楼层
eric2013 发表于 2023-3-11 14:05
FreeRTOS:  xSemaphoreCreateBinary 是二值信号量,还有个计数信号量和互斥信号量,本质都比较简单,就是计 ...

是的,差异在信号量对象创建后的初值状态
回复

使用道具 举报

1

主题

93

回帖

101

积分

初级会员

积分
101
发表于 2023-3-11 17:20:31 | 显示全部楼层
wanglehui_12 发表于 2023-3-11 16:01
是的,差异在信号量对象创建后的初值状态

使用xSemaphoreCreateMutex()你就会发现和tx_mutex_create()一样的效果
回复

使用道具 举报

40

主题

297

回帖

417

积分

高级会员

积分
417
 楼主| 发表于 2023-3-13 08:27:01 | 显示全部楼层
nnqtdf 发表于 2023-3-11 17:20
使用xSemaphoreCreateMutex()你就会发现和tx_mutex_create()一样的效果

谢谢,我试试
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-24 02:46 , Processed in 0.210478 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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