訊號量 二值訊號量

2021-10-02 13:58:13 字數 3218 閱讀 4689

訊號量——二值訊號量

訊號量是作業系統的重要部分,訊號量一般用來進行資源管理和任務同步。freertos中訊號量分為二值訊號量、互斥訊號量、計數訊號量和遞迴互斥訊號量,應用場景各不同。

二值訊號量通常用於互斥訪問或同步,二值訊號量和互斥訊號量非常相似,但互斥訊號量有優先順序,二值訊號量沒有。因此二值訊號量更適合用於同步,而互斥訊號量適用於簡單的互斥訪問。二值訊號量就是只有乙個佇列項的佇列,這個特殊佇列只有兩種情況滿的或者空的。

主程式

#include

"sys.h"

#include

"delay.h"

#include

"usart.h"

#include

"led.h"

#include

"timer.h"

#include

"key.h"

#include

"beep.h"

#include

"string.h"

#include

"malloc.h"

#include

"freertos.h"

#include

"task.h"

#include

"semphr.h"

//優先順序

#define start_task_prio 1

#define task1_task_prio 2

#define dataprocess_task_prio 3

//堆疊大小

#define start_stk_size 256

#define task1_stk_size 256

#define dataprocess_stk_size 256

//控制代碼

taskhandle_t starttask_handler;

taskhandle_t task1task_handler;

taskhandle_t dataprocess_handler;

//任務函式

void

start_task

(void

*pvparameters)

;void

task1_task

(void

*pvparameters)

;void

dataprocess_task

(void

*pvparameters)

;//二值訊號量控制代碼

semaphorehandle_t binarysemaphore;

//用於命令解析用的命令值

#define led1on 1

#define led1off 2

#define beepon 3

#define beepoff 4

#define commanderr 0xff

//字串小寫轉大寫

void

lowertocap

(u8 *str,u8 len)

}//命令函式,將字串變成命令

u8 commandprocess

(u8 *str)

intmain

(void

)//開始任務

void

start_task

(void

*pvparameters)

//task1任務

void

task1_task

(void

*pvparameters)

}//dataprocess_task任務

void

dataprocess_task

(void

*pvparameters)

}else

usart_rx_sta=0;

memset

(usart_rx_buf,

0,usart_rec_len)

;//串列埠接受快取區清0

myfree

(sramin,commandstr)

;//釋放記憶體}}

else

if(err==pdfalse)

}}

串列埠中斷服務函式程式
```c

extern semaphorehandle_t binarysemaphore;

//二值訊號量控制代碼

void

usart1_irqhandler

(void

)//中斷服務函式

else

//沒有收到0x0d}}

}//釋放二值訊號量if(

(usart_rx_sta&

0x8000)&&

(binarysemaphore!=

null))

//接收到資料,並且是二值訊號量

}

python訊號量 Python訊號量

python訊號量教程 訊號量是由作業系統管理的一種抽象資料型別,用於在多執行緒中同步對共享資源的使用。本質上說,訊號量是乙個內部資料,用於標明當前的共享資源可以有多少併發讀取。也可以簡單的理解為,訊號量是多把鎖,同時允許多個執行緒來更改資料,而 python訊號量與互斥鎖的關係 訊號量的乙個特殊用...

訊號 訊號量

訊號是由 系統或者程序傳送給目標程序的資訊,以通知目標程序某個狀態的改變或系統異常。linux訊號可以由如下條件產生 1 對於前台程序,使用者可以通過輸入特殊的終端字元來給它傳送訊號。比如輸入ctrl c通常或給程序傳送乙個中斷訊號 2 系統異常。比如浮點異常和非法記憶體段訪問。3 系統狀態變化 4...

二值訊號量和互斥訊號量的區別

互斥型訊號量必須是同乙個任務申請,同乙個任務釋放,其他任務釋放無效。同乙個任務可以遞迴申請。二進位制訊號量,乙個任務申請成功後,可以由另乙個任務釋放。二進位制訊號量實現任務互斥 印表機資源只有乙個,abc三個任務共享,當 a取得使用權後,為了防止其他任務錯誤地釋放了訊號量 必須將印表機房的門關起來 ...