使用全局变量进行功能间的通信,rtthread提供了三个工具用于线程间的通信。
1、邮箱
2、消息队列
3、信号
1、邮箱
1.1 邮箱概念
邮箱中的每一份邮件内容为4字节,在32位系统中刚好为一个指针的大小。rtthread将邮箱抽象成rt_mailbox。
1.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在邮箱满时会挂起等待。
1.3 邮箱示例
2、消息队列
2.1 消息队列概念
消息队列用于发送不固定长度的消息,线程获得的消息是最先进入消息队列的消息。rtthread将消息队列抽象成rt_messagequeue。
2.2 消息队列api
2.3 消息队列示例
3、信号
3.1 信号概念
信号本质是软中断, 用来通知线程发生了异步事件,用做线程之间的异常通知、应急处理。
3.2 信号api
3.3 信号示例
本示例采用软中断的方式处理信号,示例先创建的线程1安装了SIGUSR1信号,当示例发送信号时,线程1执行软中断程序。