[AT32 WorkBench] RT-Thread_Nano队列使用介绍

[复制链接]
52|1
Enthusiast 发表于 2026-6-3 09:43 | 显示全部楼层 |阅读模式
RT-Thread_Nano队列使用介绍



本文主要介绍如何基于 AT32 WorkBench 配置 RT-Thread_Nano 消息队列。
参考资料:AT32 WorkBench 官方下载地址 https://www.arterytek.com/file/download/1710
支持型号: 全系列
1 环境准备
硬件环境
· AT-START- F437
软件环境
· AT32 Workbench
· MDK5
· 串口助手
2 队列介绍
消息队列就是通过 RTOS 内核提供的服务,任务或中断服务子程序可以将一个消息放入到队列;同样,一个或者多个任务可以通过 RTOS 内核服务从队列中得到消息。通常,先进入消息队列的消息先传给任务,也就是说,任务先得到的是最先进入到消息队列的消息,即先进先出的原则(FIFO),RT-Thread_Nano 的消息队列支持 FIFO 和优先级两种数据存取方式。
也许有不理解的初学者会问采用消息队列多麻烦,搞个全局数组不是更简单,其实不然。在裸机编程时,使用全局数组的确比较方便,但是在加上 RTOS 后就是另一种情况了。相比消息队列,使用全局数组主要有如下四个问题:
1. 使用消息队列可以让 RTOS 内核有效地管理任务,而全局数组是无法做到的,任务的超时等机制需要用户自己去实现。
2. 使用了全局数组就要防止多任务的访问冲突,而使用消息队列则处理好了这个问题,用户无需担心。
3. 使用消息队列可以有效地解决中断服务程序与任务之间消息传递的问题。
4. FIFO 机制更有利于数据的处理。
3 配置流程
STEP 1:打开 AT32 WorkBench 新建 AT32F437 工程。
图 1. 新建工程
116846a1f8611cb462.png
STEP 2:在中间件中打开 RT-Thread_Nano 并在模式窗口中勾选启用。此时 RT-Thread_Nano 会有一个默认的配置,并生成一个 my_task01 任务。
图 2. 使能 RT-Thread_Nano
697496a1f8629607a6.png
在配置框内点击“消息队列”,会出现消息队列创建窗口,如下:
图 3. RT-Thread_Nano 队列配置界面
676006a1f865dbacdd.png
点击“添加”即可创建新队列队列名称:默认为 my_queuexx(xx 为数字,依次增加),用户可以任意修改队列名称。
队列大小:默认 16,表示同一时刻可接收最大消息数量,用户可自行修改
队列项大小:单位为字节,单个消息数据量大小
分配:静态
缓存名称:队列存储数组,uint8_t 类型数组
缓存大小:根据前面的队列大小和队列项计算
队列类型:优先级排列和 FIFO 模式排列(常用)
STEP 3: 第一步点击生成工程,会弹出相关配置框;第二部选择工具链/IDE 环境,目前 RTThread_Nano 可支持 MDK4/5、IAR_V8.2、IAR_V9.3、AT32_IDE、Eclipse。配置好后点击“确定”按钮即可生成工程。
图 4. IDE 选择
652186a1f8678743e6.png
STEP 4: 以 MDK5 为例,生成工程并打开工程文件组织如下图rtthread_app.c 文件为生成存放 RT-Thread_Nano 应用层代码相关内容,如任务的创建和任务处理函数等。
图 5. 工程结构目录
265836a1f8692ea00c.png
STEP 5:下面进行试验验证,提前打开串口 1 打印功能(在“模块分类”中打开 USART1,选择“异步模式”;然后在 SYSTEM 中将“串口打印”选择为 USART1 即可),在两个任务中添加打印信息,如下:
图 6. 代码修改
509596a1f86a7b8689.png
STEP 6: 编译并下载到开发板上,打印效果如下。
图 7. 代码运行
946846a1f86beb2909.png

迷雾隐者 发表于 2026-8-12 22:38 | 显示全部楼层
学习了,RT-Thread_Nano的消息队列支持FIFO和优先级两种数据存取方式,这对于任务管理和数据传递非常有帮助。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

21

主题

27

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部
0