本帖最后由 muyichuan2012 于 2025-1-2 19:24 编辑
AT32WorkBench常用功能26 --FreeRTOS互斥量使用介绍
FreeRTOS互斥量使用介绍 本文主要介绍如何基于AT32 WorkBench配置FreeRTOS互斥量
硬件环境 l AT-START-F437 l 下载线缆
软件环境 l AT32 Workbench l MDK5
互斥信号量介绍 使用信号量的最初目的是为了给共享资源建立一个标志,该标志表示该共享资源被占用情况。 这样,当一个任务在访问共享资源之前,就可以先对这个标志进行查询,从而在了解资源被占用的情况之后,再来决定自己的行为。
互斥信号量被用来解决优先级翻转的问题,优先级翻转在可剥夺型内核是很常见的问题。但是在实时系统中是不允许出现这种情况的,这会打乱系统的预期执行顺序,导致低优先级的任务在高优先级任务之前运行这违背了实时性的初衷。
配置步骤: 1. 打开AT32 WorkBench新建AT32F437工程 2. 在中间件中打开FREERTOS并在模式窗口中勾选启用。此时FreeRTOS会有一个默认的配置,并生成一个my_task01任务。 3. 在配置框内点击“互斥量”,会出现互斥量创建窗口,如下: 点击“添加”即可创建新互斥量。 互斥量名称:默认为my_mutexxx(xx为数字,依次增加),用户可以任意修改互斥量名称 分配:动态或者静态 互斥量数组:选择静态内存分配时有效;StaticSemaphore_t类型变量,用于保存互斥量状态.
4. 点击生成代码按钮,选择MDK5;便可生成FreeRTOS工程,生成代码在freertos_app.c/.h文件内
5. 打开生成工程,结构目录如下
freertos_app.c内为workbench生成的关于FreeRTOS的应用层代码,包括任务的创建,互斥量的创建、任务入口函数等。
6. 下面进行试验验证,提前打开串口1打印功能(在“模块分类”中打开USART1,选择“异步模式”; 然后在SYSTEM中将“串口打印”选择为USART1即可),在两个任务中添加互斥量发送/接收函数和打印信息,如下:
7. 编译,下载到对应开发板,打开串口助手
|