一、定义

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

1、信号量是一个触发信号,也是一个计数器,等待接收信号的任务一般只有接收到信号才可以执行,否则任务一直暂停。(据我理解,应该是和QT中的信号与槽的机制差不多)

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

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

二、理解

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

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

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

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

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

rt_thread 消息队列 发送失败 rtos消息队列和邮箱_消息队列