在裸机中使用全局变量进行功能间的通信,rtthread提供了三个工具用于线程间的通信。
邮箱:
消息队列
信号
二、邮箱
2.1 邮箱概念
邮箱中的每一份邮件内容为4字节,在32位系统中刚好为一个指针的大小。rtthread将邮箱抽象成rt_mailbox。
2.2 邮箱api
创建邮箱有动态和静态两种方式: rt_mb_create、rt_mb_init,与之对应的删除邮箱的方式为:rt_mb_delete和rt_mb_detach。在创建邮箱之后,可以使用发送和接收api:rt_mb_send和rt_mb_recv发送和接收邮件,rt_mb_send在邮箱为满时会返回 -RT_EFULL,增强版的rt_mb_send_wait在邮箱满时会挂起等待。
2.3 邮箱示例
三 消息队列
3.1 消息队列概念
消息队列用于发送不固定长度的消息,线程获得的消息是最先进入消息队列的消息。rtthread将消息队列抽象成rt_messagequeue。
3.2 消息队列api
3.3 消息队列示例
四 信号
4.1 信号概念
信号本质是软中断, 用来通知线程发生了异步事件,用做线程之间的异常通知、应急处理。
4.2 信号api
4.3 信号示例
本示例采用软中断的方式处理信号,示例先创建的线程1安装了SIGUSR1信号,当示例发送信号时,线程1执行软中断程序。