【IoT】STM32 系统级开发之 ucosIII 或 freeRTOS 事件标志组详解

本文详细介绍了在STM32系统级开发中,使用ucosIII和freeRTOS的事件标志组进行轻型操作系统同步的方法。通过信号量、互斥性信号量和事件标志组的概念,阐述了如何实现任务间的同步和资源管理。并提供了具体的事件标志组测试试验,包括创建事件标志组、设置事件位、等待和查询事件位的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、轻型操作系统同步的方案详解


1)信号量

假设有两个任务 Task1 和 Task2,第一个任务进行按键的扫描,第二个任务进行LED灯的点亮

需求:

扫描到按键按下后点亮 LED 灯,也就是说第二个任务永远在等待第一个任务按键的扫描

实现:

首先 Task1 一直检测按键是否按下,如果按键按下以后,使用一个全局变量 flag 并设置 flag=1

而在 Task2 当中,不停检测 flag 值是否为 1,如果为 1,点亮 led 灯并把flag清零

此时 flag 提供的是一个信号量的作用,也就是说 Task1 按下按键以后,开始向 Task2 发送一个信号量 flag,Task2 接收到了 flag 信号量以后,就把LED灯点亮

2)互斥性信号量

假设有两个任务 Task1 和 Task2,都需要来访问一个共享的资源,如要访问一个共享的打印机

需求:

假设第一个任务 Task1 要打印 hello,第二个任务 Task2 要打印 world,Task1 在使用打印机的时候,Task2是绝对不能使用的,两个任务属于互斥关系

如果 Task1 在使用打印机,Task2 也在使用打印机,那打印出来的数据可能会出现乱码

实现:

为了防止 Task1 和 Task2 共同使用打印机,配置的时候就要使用一个约束,假设还是使用一个全局变量 flag 来表示

如果 flag=1,表示这个打印机处于空闲状态,假设这个时候 Task1 要使用打印机,它首先要判断 flag 的状态,如果判断 flag=1,它就开始使用打

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

产品人卫朋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值