信号量、邮箱、队列与事件

信号量,邮箱,队列的最大不同在于它们发送的内容不同。

信号量是一个触发信号,也是一个计数器,等待接收信号的任务一般只有接收到信号才可以执行,否则任务一直暂停。

邮箱是信号量的扩展,相当于把一个指针定义的变量从一个任务传递到另一个或多个任务中去,这个指针是先发到邮箱,然后等待任务从邮箱里提取指针,这也就传递了指针指向的具体变量值。  

队列是多个邮箱的数组,可以看做是个指针数组,任务之间可以按照一定顺序以指针定义的变量来传递,即是发送一个个指针给任务,任务获得指针,来处理指向的变量。这个方式有先进先出,先进后出。

 

信号量就是给某个任务传递一个数值,基本作用是提示接收该信号量的任务什么时候可以执行。

消息邮箱就是由某个任务传递一个指针(内存上指针指向的一片区域的变量类型基本相同)给一个或多个任务。

消息队列就是某个任务传递一堆指针(指针数组,数组中每个指针指向的变量类型可以不同)给一个或多个任务。

 

事件就是发生了一件事情,接下来要触发某种动作。例如,收到了一个信号量或消息队列,或者是定时任务到要触发某种任务要运行。

 

在μC/OS-II中总共有34个,而且每种事件具有的管理函数数目不同。但是所有的事件都有类似的6个函数,它们是所有事件的基本功能,其函数名类似,使用方法也类似,详细函数见下表。


任何一个事件,必须先创建后使用。创建事件是通过调用函数OS???Create()实现的,其中???为事件的类型。创建事件可以在main()函数中,但更多的是在任务初始化部分。使用方法如下:


嵌入式系统中,事件是静态使用的,即创建后永远不删除。但有时候需要动态使用,即根据需要创建和删除事件,此时创建事件就是在任务的事件执行代码中,使用方法如下:


要掌握事件函数在中断服务程序中的调用规则,我们必须清楚中断服务有哪些特点。


下面给出事件在中断服务程序中使用方法,假设Task0任务接收ISR发送的消息,任务代码如下:


注意:

1.中断服务程序一般不会调用建立和删除事件函数,否则要么没有起到事件的作用,要么程序很复杂;

2.中断服务程序不能调用等待事件的函数,否则可能造成程序崩溃,可以调用无等待获得事件函数获得信号,但事实上,在中断中调用无等待获得事件的情况都很少。

队列事件信号量邮箱是FreeRTOS中用于任务间通信和同步的机制。 队列是一种先进先出的数据结构,用于在任务之间传递数据。任务可以通过发送和接收消息来进行通信。队列可以有不同的长度,可以用于实现生产者-消费者模型。 事件是一种用于任务间同步的机制,可以用于表示某个事件的发生。任务可以等待一个或多个事件的发生,当事件发生时,任务会被唤醒继续执行。 信号量是一种用于任务间同步和资源管理的机制。它可以用于限制对共享资源的访问,防止多个任务同时访问造成冲突。信号量可以是二值信号量(只有0和1两个值)或计数信号量(可以有多个值)。 邮箱是一种特殊的队列,只能存储一个消息。它可以用于在任务之间传递数据,但只能存储一个消息,因此只适用于一对一的通信。 任务通知是一种轻量级的通信机制,每个任务都有一个32位的通知值。任务可以等待特定的通知发生,当通知发生时,任务会被唤醒继续执行。任务通知可以用于实现计数信号量、二值信号量事件标志组和消息邮箱。 总结起来,队列用于任务间传递数据,事件用于任务间同步,信号量用于资源管理和任务间同步,邮箱用于一对一的通信,任务通知用于轻量级的任务间通信和同步。 #### 引用[.reference_title] - *1* [FreeRTOS消息队列信号量事件标志组、任务通知](https://blog.youkuaiyun.com/p1279030826/article/details/103471564)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [消息队列信号量事件组、任务通知之间的区别](https://blog.youkuaiyun.com/qq_31958343/article/details/119190125)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值