RT Thread學習記錄12 郵箱的使用

2021-10-07 05:15:22 字數 1864 閱讀 4485

1. 郵箱的工作機制

rt-thread作業系統的郵箱用於執行緒間通訊(郵箱具有資料互動功能,但互斥量、訊號量等ipc沒有資料互動功能),特點是開銷比較低,效率較高。郵箱中的每一封郵件只能容納 固定的4位元組內容  (針對32位處理系統,指標的大小即為4個位元組,所以一封郵件恰好能夠容納乙個指標)。

執行緒或中斷服務例程把一封4 位元組長度的郵件傳送到郵箱中,而其他需要的執行緒可以從郵箱中接收這些郵件並進行處理。「

2. 郵箱控制塊

在rt-thread中,郵箱控制塊是作業系統用於管理郵箱的-乙個資料結構。

struct rt_ mailbox

;typedef struct rt_ _mailbox *rt_ mailbox_ _t;

初始化與脫離

這組api用於靜態郵箱的操作

rt_err_t  rt_mb_init(rt_mailbox_t  mb,const  char *name,

void *msgpool,rt_size_t size,rt_uint8_t flag)

//呼叫這個函式,系統就會把郵箱加入到物件管理器中,第乙個引數郵箱控制塊的指標,指明初始化那個郵箱,第二個引數給郵箱起乙個名字,第三個引數是給郵箱配置乙個緩衝區用來儲存郵箱中的郵件,即把緩衝區的位址傳進來,第四個引數說明郵件能存多少個郵件(郵件是固定大小四個位元組,若size是10,則郵箱大小為40),會後乙個引數可為rt_ipc_flag_fifo,rt_ipc_flag_prio,

若郵箱中沒有郵件時,執行緒等待的方式

rt_err_t rt_mb_detach(rt_mailbox_t mb)

//當不用郵箱時,從物件管理器中移除

建立與刪除

這組api用於動態郵箱的操作

rt_mailbox_t  rt_mb_create(const char *name,rt_size_t size,

rt_uint8_t flag)

//動態建立郵箱的大小依據size引數,建立成功返回乙個郵箱的指標,失敗返回0

rt_err_t rt_mb_delete(rt_mailbox_t mb)

傳送郵件

rt_err_t  rt_mb_send(rt_mailbox_t  mb,rt_uint32_t  value)

//value引數就是傳送郵件的內容,郵件傳送的兩種方式:內容少於四個位元組時可以傳郵件內容,當郵件內容大於四個位元組時可以把郵件內容指標傳入(針對32bit處理器,乙個指標四個位元組)。

當郵箱已滿,則返回乙個郵箱滿 的錯誤標誌。可以在中斷和執行緒中使用

rt_err_t rt_mb_send_wait(rt_mailbox_t mb,rt_uint32_t value,rt_int32_t timeout)

//與上乙個傳送函式多乙個引數timeout,當郵箱已滿時,傳送函式可以等待timeout的時間,注意不可以在中斷中使用

接受郵件

rt_err_t  rt_mb_recv(rt_mailbox_t  mb,rt_uint32_t  *value,rt_int32_t   timeout)

//value為接受郵件的位址或內容的指標。若接受時郵箱是空的,等待時間為timeout

4. 郵箱的示例示例使用

在mailbox_sample.c中

這個程式會建立2個動態執行緒,乙個靜態的郵箱物件,其中乙個執行緒往郵箱中傳送郵件, 乙個執行緒往郵箱中收取郵件。

RT Thread學習記錄2 執行緒的建立

在rt thread中,與小任務對應的程式實體就叫做 執行緒 或任務 rt thread就是乙個能對這些小 執行緒 進行管理和排程的多 執行緒 作業系統。執行緒是實現任務的載體,它是rt thread中最基本的排程單位,它描述了乙個任務執行的執行環境,也描述 了這個任務所處的優先等級。rt thre...

python學習記錄 12

0.注意,這道題跟上節課的那道題有點兒不同,回答完請上機實驗或參 old 1,2,3,4,5 new old old 6 print new 複製 如果不上機操作,你覺得會列印什麼內容?old 1,2,3,4,5 new old old 6 print new 1,2,3,4,5 1.請問如何將下邊...

寒假學習記錄12

寒假學習記錄12 學習任務 1.python基礎 1 dict python內建了字典 dict的支援,dict全稱dictionary,在其他語言中也稱為map,使用鍵 值 key value 儲存,具有極快的查詢速度。把資料放入dict的方法,除了初始化時指定外,還可以通過key放入,由於乙個k...