一、rtx訊號量的api函式總共有4個,如下圖
下面我們對這四個函式進行解析
1、os_sem_init函式原型
void os_sem_init (函式描述:該函式用於訊號量的初始化並設定訊號量的值os_id
semaphore, /* the semaphore object to initialize */
u16 token_count ); /* initial number of tokens */
第乙個引數為訊號量的id
第二個引數為訊號量的初始值
使用舉例:
__task void task1 (void)2、os_sem_send函式原型
os_result os_sem_send (函式描述:os_id
semaphore ); /* the semaphore whose token count is incremented */
該函式用於釋放訊號量,呼叫後訊號量加1
第乙個引數是訊號量的id
使用舉例:
__task void task1 (void)3、isr_sem_send函式原型
void isr_sem_send (函式描述:os_id
semaphore ); /* the semaphore whose token count is incremented */
該函式用於釋放訊號量,只能在中斷中使用,呼叫後訊號量加1
第乙個引數是訊號量的id
使用舉例:
void timer1 (void) __irq4、os_sem_wait函式原型
os_result os_sem_wait (函式描述:os_id
semaphore, /* the semaphore to get the token from */
u16 timeout ); /* length of time to wait for the token */
該函式用於獲取訊號量,如果訊號量大於1,就減1,否則該任務掛起,等待有訊號量
第乙個引數是訊號量的id
第二個引數是等待訊號的延時時間 範圍1 --- 0xffff 如果引數是0xffff就無線等待
使用舉例:
__task void task1 (void)實驗目的:
學習rtx的訊號量
實驗內容:
1、k1按下傳送訊號量
下面是完整的**
實驗現象:
按下k1 led反轉,同時串列埠除錯助手可以看到相關資訊
RTX 互斥量 和 訊號量
互斥量 如果乙個任務獲得資源以後沒有釋放,下次執行時候這個任務本身不必再等待,直接擁有這個資源的使用權,但別的任務要使用只能等待。訊號量 假設初始化時只有1個資源可以使用,那麼乙個任務獲得資源以後沒有釋放,下次想再呼叫 就算是之前呼叫的這個任務也 必須等待。這是訊號量和互斥量的區別之一,之二是互斥量...
IPC之 訊號量集 多個訊號量
如果兩個程序不僅需要同步,還要保證先後執行順序,就要用兩個訊號量 互斥鎖 來解決 柵欄模型 實現以下框架中的四個子程序 所有程序做完任務後 在一起執行下一次 include include include include include include include include define ...
訊號量 二值訊號量
訊號量 二值訊號量 訊號量是作業系統的重要部分,訊號量一般用來進行資源管理和任務同步。freertos中訊號量分為二值訊號量 互斥訊號量 計數訊號量和遞迴互斥訊號量,應用場景各不同。二值訊號量通常用於互斥訪問或同步,二值訊號量和互斥訊號量非常相似,但互斥訊號量有優先順序,二值訊號量沒有。因此二值訊號...