RTX5 | 事件标志组03 - 线程同步(逻辑或)
生活随笔
收集整理的這篇文章主要介紹了
RTX5 | 事件标志组03 - 线程同步(逻辑或)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、前言
事件標志組是獨自存在的,線程標志組只是線程的一部分。事件標志組的使用方法與線程標志組的使用方法一樣,學會使用線程標志組就等于學會使用事件標志組,反之亦然。當線程退出之后,其線程標志組就會消失。創建線程就等于創建了一個線程標志組,它們是一塊的。事件標志組需要單獨創建,所以事件標志組需要額外占用內存池的內存。那為什么需要事件標志組?全部用線程標志組不就好了嗎?
通過一個事件標志組,一個線程可以同步多個線程。1個事件標志組里有32個事件位,每1個事件位同步1個線程的話,那么1個事件標志組最大能同步32個線程。線程標志組只能用于同步本線程,例如線程A通過線程B的線程標志組,只能同步線程B了,不能用于同步線程C。總的來說,事件標志組的使用比較靈活。
事件標志組與線程標志組都能實現邏輯與,還有邏輯或同步線程。
STM32工程:
鏈接:https://pan.baidu.com/s/114jsUS5R_NEw8WjD3Lazug
提取碼:yxvq
二、實驗目的
長按按鈕KEY0 或 長按KEY1(邏輯或),線程LED通過事件標志組A同步線程A,printf一些信息。
三、API
3.1、osEventFlagsWait
/* 使用舉例1 */ void thread_A_App(void *argument) {osStatus_t os_Status;while(1){os_Status = osEventFlagsWait(event_Flags1_ID, /* 事件標志組ID */0x00000003U, /* 等待事件標志位0與事件標志位1 */osFlagsWaitAny, /* 邏輯或 */osWaitForever /* 一直等待 */);printf("thread A is running.\r\n");}}/* 使用舉例2 */ void thread_A_App(void *argument) {osStatus_t os_Status;while(1){os_Status = osEventFlagsWait(event_Flags1_ID, /* 事件標志組ID */0x00000003U, /* 等待事件標志位0與事件標志位1 */osFlagsWaitAny, /* 邏輯或 */2000U /* 超時時間2S */);printf("thread A is running.\r\n");}}四、代碼
4.1、main.h
4.2、main.c
五、Event Recorder調試
5.1、長按按鍵KEY0與KEY1
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的RTX5 | 事件标志组03 - 线程同步(逻辑或)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 相对路径和绝对路径_linux系统中的绝
- 下一篇: laravel mongodb如何声明数