本帖最后由 muyichuan2012 于 2025-1-2 17:51 编辑
AT32 WorkBench常用功能23 --FreeRTOS队列使用介绍
FreeRTOS队列使用介绍 本文主要介绍如何基于AT32 WorkBench配置FreeRTOS队列
硬件环境 l AT-START-F437 l 下载线缆
软件环境 l AT32 Workbench l MDK5
队列介绍 消息队列就是通过RTOS内核提供的服务,任务或中断服务子程序可以将一个消息放入到队列; 同样,一个或者多个任务可以通过RTOS内核服务从队列中得到消息。 通常,先进入消息队列的消息先传给任务,也就是说,任务先得到的是最先进入到消息队列的消息, 即先进先出的原则(FIFO),FreeRTOS的消息队列支持FIFO和LIFO两种数据存取方式。
也许有不理解的初学者会问采用消息队列多麻烦,搞个全局数组不是更简单, 其实不然,在裸机编程时,使用全局数组的确比较方便,但是在加上RTOS后就是另一种情况了。
相比消息队列,使用全局数组主要有如下四个问题: 1. 使用消息队列可以让RTOS内核有效地管理任务,而全局数组是无法做到的,任务的超时等机制需要用户自己去实现。 2. 使用了全局数组就要防止多任务的访问冲突,而使用消息队列则处理好了这个问题,用户无需担心。 3. 使用消息队列可以有效地解决中断服务程序与任务之间消息传递的问题。 4. FIFO机制更有利于数据的处理。
配置步骤: 1. 打开AT32 WorkBench新建AT32F437工程 2. 在中间件中打开FREERTOS并在模式窗口中勾选启用。此时FreeRTOS会有一个默认的配置,并生成一个my_task01任务。 3. 在配置框内点击“队列”,会出现队列创建窗口,如下: 点击“添加”即可创建新队列。 队列名称:默认为my_queuexx(xx为数字,依次增加),用户可以任意修改队列名称 队列大小:默认16,表示同一时刻可接收最大消息数量,用户可自行修改 队列项大小:单位为字节,单个消息数据量大小 分配:动态或者静态 缓存名称:队列存储数组,选择静态内存分配时有效;uint8_t类型数组-(uxQueueLength* uxItemSize)字节 缓存大小:选择静态内存分配时有效;根据前面的queue size和item size计算,(queue size) x (itemsize) 队列数组:选择静态内存分配时有效;StaticQueue_t类型变量,用于保存队列数据结构。
4. 点击生成代码按钮,选择MDK5;便可生成FreeRTOS工程,生成代码在freertos_app.c/.h文件内 5. 打开生成工程,结构目录如下 freertos_app.c内为workbench生成的关于FreeRTOS的应用层代码,包括任务的创建,队列的创建、任务入口函数等。
6. 下面进行试验验证,提前打开串口1打印功能(在“模块分类”中打开USART1,选择“异步模式”; 然后在SYSTEM中将“串口打印”选择为USART1即可),在两个任务中添加队列发送/接收函数和打印信息,如下:
7. 编译,下载到对应开发板,打开串口助手
|