訊號量——二值訊號量
訊號量是作業系統的重要部分,訊號量一般用來進行資源管理和任務同步。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取得使用權後,為了防止其他任務錯誤地釋放了訊號量 必須將印表機房的門關起來 ...