概述
事件(Event)用于任务之前的同步和通信。freeRTOS中包含的事件分为如下几类,
· 消息(Message),用于任务之前通信
· 信号量(Semaphore)和互斥信号量,用于任务之前的同步(控制多个任务对同一资源的访问)
本小节主要讨论消息,信号量和互斥信号量主要用于资源管理,将在后边讲到。
基于消息的任务间通信过程如下图所示,发送者任务将消息发送给邮箱(MailBox)或消息队列(Message Queue),邮箱或消息队列则将该消息转发给接收者任务,并更新接收者任务的状态(挂起 -> 就绪),并在接收者任务的优先级高于当前任务时触发任务切换。
其中,
· 消息对象(Message Object)用于承载消息内容和基本信息。
· 邮箱用于早期的RTOS,freeRTOS已经不再支持,但在其他的RTOS如ucos中存在,实际上,邮箱可以看做队列长度为1的消息队列。
· 消息队列实际上为基于链表实现的FIFO buffer,其每一个节点对应为一个消息对象。
· 一般而言,发送者总是将消息发送到消息队列的队尾,当然也支持将优先级特别高的消息插入到队首