文章目录一、前言二、实验目的三、API3.1、osThreadFlagsSet3.2、osThreadFlagsWait四、代码4.1、main.h4.2、main.c五、Event Recorder调试5
一.前言
与“事件标志组”(Event Flags )类似,“线程标志组”(Thread Flags )用于线程(ISR )和线程之间的通信)同步。 线程和事件标志之间的区别在于,事件标志与线程没有直接关系,因此必须创建事件标志,然后才能使用。 线程标志是线程的一部分,在创建线程的同时会创建线程标志。
以下是公式的说明:
线程标志组API函数摘要:
STM32项目:
链接: https://pan.Baidu.com/s/10 uqntro9nutqnh0nwvhpea
抽屉代码: 60p1
二.长按实验目的KEY1键,将线程标志(0x02U )发送至Test_Flags_App线程,实现LED_App线程同步Test_Flags_App线程。
长按键KEY2向Test_Flags_App线程发送线程标志(0x01U ),以实现LED_App线程同步Test_Flags_App线程。
三. API 3.1、osThreadFlagsSet /*使用案例*/osthreadid _ 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、osthreadflagswaitvoidthread _ a (void * argument ) {uint32_t flags; while(1) (等待/*线程标志的flag0或flag1设置) ((/flags=osthreadflagswait )0x000003u、/* flag0、flag1)/osflagss */flags=osthreadflagswait (0x 000000 fu,/* flag0、flag1、flag2、flag3 /*线程标志的flag0、flag1、flag2、flag3被设置*/flags=osthreadflagswait (0x 000000 fu,/* flag0,flag1,flag2,flag3)
四.代码4.1,main.h
4.2、主. c
五.事件记录器调试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