本帖最后由 muyichuan2012 于 2025-1-2 19:22 编辑
AT32WorkBench常用功能25 --FreeRTOS事件使用介绍
FreeRTOS事件使用介绍 本文主要介绍如何基于AT32 WorkBench配置FreeRTOS事件 硬件环境 l AT-START-F437 l 下载线缆
软件环境 l AT32 Workbench l MDK5
事件介绍 事件标志组是FreeRTOS内核提供的一种服务,是实现多任务同步的有效机制之一。 事件标志组的本质是内核管理一个变量,任务通过设置这个变量的不同BIT位,达到同步的效果。 比如某个任务需要等到这个变量的BIT0、BIT1都被置1时才能执行后续的任务代码,那么就需要有任务将这两个BIT位设置为1,只要这两个BIT被设置,那么等待着两个BIT的任务就会马上得到执行,这样就实现了任务间的同步。
也许有不理解的初学者会觉得采用事件标志组多麻烦,用全局变量不是更简单? 其实不然,在裸机编程时,使用全局变量的确比较方便,但是在加上RTOS后就是另一种情况了。
使用全局变量相比事件标志组主要有如下三个问题: 1) 使用事件标志组可以让RTOS内核有效地管理任务,而全局变量是无法做到的,任务的超时等机制需要用户自己去实现。 2) 使用了全局变量就要防止多任务的访问冲突,而使用事件标志组则处理好了这个问题,用户无需担心。 3) 使用事件标志组可以有效地解决中断服务程序和任务之间的同步问题。
配置步骤: 1. 打开AT32 WorkBench新建AT32F437工程 2. 在中间件中打开FREERTOS并在模式窗口中勾选启用。此时FreeRTOS会有一个默认的配置,并生成一个my_task01任务。
3. 在配置框内点击“事件”,会出现事件创建窗口,如下:
点击“添加”即可创建新事件。 事件名称:默认为my_eventxx(xx为数字,依次增加),用户可以任意修改事件名称 分配:动态或者静态 事件数组:选择静态内存分配时有效;StaticEventGroup_t类型变量,用于保存事件组数据结构。
4. 点击生成代码按钮,选择MDK5;便可生成FreeRTOS工程,生成代码在freertos_app.c/.h文件内
5. 打开生成工程,结构目录如下
freertos_app.c内为workbench生成的关于FreeRTOS的应用层代码,包括任务的创建,事件的创建、任务入口函数等。
6. 下面进行试验验证,提前打开串口1打印功能(在“模块分类”中打开USART1,选择“异步模式”;然后在SYSTEM中将“串口打印”选择为USART1即可),在两个任务中添加事件发送/接收函数和打印信息,如下:
7. 编译,下载到对应开发板,打开串口助手
|