14.2.6 递归互斥信号量应用:递归锁设计

更新于 2026年10月10日 版权声明
14.2.6 递归互斥信号量应用:递归锁设计

1.任务要求

有两个求解1~5累加和的任务,分别保护各自的计算过程不被另外的任务打断,将计算结果通过串口输送到计算机。请用STM32F1系列MCU和FreeRTOS递归互斥信号量设计程序并进行仿真和调试。

2.硬件设计

本任务的硬件电路参照4.2.5节的硬件电路图。该任务只需要用到串口2将运行过程中的数据输出到上位机,上位机接收到数据后打印出来,以验证递归锁的功能。

3.软件设计

设计两个任务,分别执行算术累加和计算,设计一个递归互斥信号量来实现计算过程的保护。

Mutex1用于创建一个递归互斥信号量。

TaskA用于设计两层递归操作,保护计算过程。

TaskB用于设计一层递归操作,演示递归锁的应用。

在STM32CubeMX中创建工程,开启递归互斥信号量,生成MDK工程文件,在“main.c”文件中添加如下参考程序。

图示(https://www.daowen.com)

图示

4.仿真与调试

通过Keil-MDK和串口调试助手软件调试程序,仿真与调试效果如图14.18所示。程序运行后,通过串口监测输出信息。

任务TaskA由于优先级最高,先执行,获得递归锁。

TaskA遇到vTaskDelay(10),任务TaskB执行。TaskB由于不能获得递归锁,所以不能运行,由vTaskDelay(10)又回到TaskA执行。

TaskA获得第二次递归锁,执行求差运算,然后释放第二次递归锁。继续执行求差运算,然后释放第一次递归锁。

图示

图14.18 仿真与调试效果

TaskA执行到最后vTaskDelay(500),调度任务TaskB执行,TaskB获得递归锁,执行求和运算,运算结束后释放递归锁。

图示

↑上一章 ↓下一章
关注公众号获取验证码
复制内容需要验证码(7.99元/天)