keil MDK 之RTX訊號量的API函式

2021-07-09 02:24:27 字數 1509 閱讀 4708

一、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) __irq
4、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中訊號量分為二值訊號量 互斥訊號量 計數訊號量和遞迴互斥訊號量,應用場景各不同。二值訊號量通常用於互斥訪問或同步,二值訊號量和互斥訊號量非常相似,但互斥訊號量有優先順序,二值訊號量沒有。因此二值訊號...