RTX5 | 线程标志组01 - 线程同步

一、前言

线程标志组(Thread Flags)与事件标志组(Event Flags)的作用一样,都是用于线程(ISR)与线程之间通讯(同步)。线程标志与事件标志的区别是事件标志跟线程没有直接关系,所以事件标志需要创建之后才能使用的。线程标志属于线程的一部分,创建线程的同时,线程标志就已经被创建了。
以下是官方的描述:
在这里插入图片描述
线程标志组API函数汇总:
在这里插入图片描述
STM32工程:
链接:https://pan.baidu.com/s/10uQNtRO9nUtQNh0NWVhpeA
提取码:60p1

二、实验目的

长按按键KEY1发送线程标志(0x02U)给Test_Flags_App线程,实现LED_App线程同步Test_Flags_App线程。
长按按键KEY2发送线程标志(0x01U)给Test_Flags_App线程,实现LED_App线程同步Test_Flags_App线程。
在这里插入图片描述

三、API

3.1、osThreadFlagsSet

/* 使用举例 */
osThreadFlagsSet(threadID_Test_Flags_Thread,0x02U);  /* 置位Test_Flags线程的flag1 */
osThreadFlagsSet(threadID_Test_Flags_Thread,0x01U);  /* 置位Test_Flags线程的flag0 */
osThreadFlagsSet(threadID_Test_Flags_Thread,0x08U);  /* 置位Test_Flags线程的flag3 */

在这里插入图片描述

3.2、osThreadFlagsWait

void thread_A(void *argument)
{
	uint32_t flags;
	while(1)
  {
	   /* 一直等待,直到线程标志的flag0或flag1被置位 */
		flags = osThreadFlagsWait(0x00000003U,     /* flag0 ,flag1 */
								  osFlagsWaitAny,  /* 逻辑或,清除标志 */
                                  osWaitForever    /* 一直等待 */
                                 );  

     /* 一直等待,直到线程标志的flag0,flag1,flag2,flag3都被置位 */
	  flags = osThreadFlagsWait(0x0000000FU,     /* flag0,flag1,flag2,flag3 */
								osFlagsWaitAll,  /* 逻辑与,清除标志 */
								osWaitForever    /* 一直等待 */
								); 

     /* 一直等待,直到线程标志的flag0,flag1,flag2,flag3都被置位 */
	  flags = osThreadFlagsWait(0x0000000FU,     /* flag0,flag1,flag2,flag3 */
								osFlagsWaitAll | osFlagsNoClear,  /* 逻辑与,不清除标志 */
								osWaitForever    /* 一直等待 */
								); 
  }
}

在这里插入图片描述

四、代码

4.1、main.h

在这里插入图片描述

4.2、main.c

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、Event Recorder调试

5.1、长按按键KEY1与长按按键KEY2

在这里插入图片描述

5.2、线程同步的效果

LED线程每隔500ms执行一次,当一直按着按键时,Test_Flags线程将跟LED线程同步,也是每500ms运行一次。
在这里插入图片描述

5.3、将线程同步的地方放大

LED线程的优先级是osPriorityLow,Test_Flags线程的优先级是osPriorityBelowNormal,Test_Flag线程的优先级要高许多。当LED线程发送线程标志给Test_Flags线程时会触发调度器,调度器将运行权交给Test_Flags线程,LED线程暂时进入阻塞态,等待Test_Flags运行完毕。
在这里插入图片描述
再做一次测试,将LED线程与Test_Flags线程的优先级互换,即LED线程的优先级是osPriorityBelowNormal,Test_Flags线程的优先级是osPriorityLow
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Wallace Zhang

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

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

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

打赏作者

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

抵扣说明:

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

余额充值