外观
邮箱示例
2026-05-15
概述
本文介绍如何在 睿擎工业开发平台 中创建并运行邮箱示例工程,通过初始化一个邮箱和两个线程,实现一个线程向邮箱发送消息、另一个线程从邮箱接收消息直至收到结束消息后退出的功能,帮助读者快速掌握邮箱这一线程间通信机制的使用方法。
邮箱简介
邮箱(mailbox) 是一种重要的线程间通信与同步机制,用于在线程之间传递固定大小(4 字节)的消息。每个邮箱都有一个消息池,发送线程将消息放入池中,接收线程从池中取出消息,实现线程间的数据交换。
构建与烧录
创建工程点击展开
依次点击 “文件” -> “新建” -> "RT-Thread RuiChing App 项目"。

在弹出新建向导中选择 开发版 、BSP: 、示例 、 调试器/下载器。选择好之后点击 “完成”。

点击 “完成” 后,等待工程创建完成。

创建完成。

构建工程点击展开
单击工程使工程进入 Active-Debug 模式。

点击工具栏上的构建按钮进行工程编译。

构建成功后,会显示构建成功的信息。

固件下载点击展开
固化驱动

固化 APP

核心示例代码
邮箱示例相关 API
rt_mb_init:初始化静态邮箱对象,参数为邮箱控制块、名称、消息池缓冲区、消息池大小以及管理方式rt_mb_send:向邮箱发送消息,参数为邮箱控制块和消息内容(4 字节),发送成功返回RT_EOKrt_mb_recv:从邮箱接收消息,参数为邮箱控制块、消息接收指针和等待时间
mailbox_example.c
static void _mb_thread1_entry(void *param)
{
char *str = RT_NULL;
while (1)
{
if (rt_mb_recv(&_mb, (rt_ubase_t *)&str, RT_WAITING_FOREVER) == RT_EOK)// 接收邮箱
{
rt_kprintf("mailbox: receive message from %s\n", str);
rt_thread_mdelay(100);
}
}
}
static void _mb_thread2_entry(void *param)
{
while (1)
{
rt_mb_send(&_mb, (rt_ubase_t) "thread2");// 发送邮箱
rt_thread_mdelay(200);
}
}
int mailbox_example(void)
{
rt_mb_init(&_mb, MAIBOX_NAME, &_mb_pool[0], sizeof(_mb_pool) / 4,
RT_IPC_FLAG_PRIO);// 初始化邮箱
rt_thread_init(&_mb_thread1, THREAD1_NAME, _mb_thread1_entry, RT_NULL,
&_mb_thread1_stack[0], sizeof(_mb_thread1_stack),
THREAD_PRIORITY, THREAD_TIMESLICE);
rt_thread_startup(&_mb_thread1);
rt_thread_init(&_mb_thread2, THREAD2_NAME, _mb_thread2_entry, RT_NULL,
&_mb_thread2_stack[0], sizeof(_mb_thread2_stack),
THREAD_PRIORITY, THREAD_TIMESLICE);
rt_thread_startup(&_mb_thread2);
return 0;
}运行示例
操作步骤
- 将程序下载到开发板
- 打开串口终端连接开发板
- 输入
mailbox_example命令
预期结果
- 线程 2 周期性地向邮箱发送包含字符串 "thread2" 的邮件
- 线程 1 以永久等待方式接收邮件,并打印邮件携带的字符串内容
- 线程 1 接收成功后延时 100 毫秒,线程 2 每发送一次后延时 200 毫秒
- 最终两个线程在各自的 while(1) 循环中持续运行,不主动退出
RT-Thread 终端
msh />mailbox_example
msh />mailbox: receive message from thread2
mailbox: receive message from thread2
mailbox: receive message from thread2
mailbox: receive message from thread2
mailbox: receive message from thread2
mailbox: receive message from thread2
...