国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

uC/OS的消息郵箱使用經驗

2019-11-08 18:39:22
字體:
來源:轉載
供稿:網友

uC/OS下任務之間通信的方式之一有消息郵箱,使用消息郵箱有兩種方式:

(1)數據的存放

(2)傳遞指向一個數據的指針,就是傳遞多個數據。

 經驗小結如下:

一、數據存放,存放單個數據

郵箱可以傳遞任何類型數據,在傳遞時,先將數據用(void*)進行類型變化,變為void*這種萬用類型,而在接收郵箱數據時,再還原為本身的數據類型,舉例如下:

OSMboxPost(Mbox,(void*)key_value);

其中key_value是一個字符型變量,該變量的類型為INT8U,先轉換為(void*),在接收消息端

key = (INT8U)OSMboxPend(Mbox,0,&err);

其中key為INT8U格式,注意在OSMboxPend前面增加了類型轉換(INT8U)

二、傳遞指針

       發送:OSMboxPost(Mbox,(void*)SendData);

接收:data_ptr = (INT8U*)OSMboxPend(Mbox,0,&err);

其中SendData為傳遞的數據名稱,data_ptr為接收數據指針。

另外:郵箱中不能存放傳遞0值,因為把一個0值放入郵箱,經過void *類型變化后,變成了void *0,而判斷郵箱中是否有數據正是通過判斷郵箱中指向Message的指針是否為0來判斷,這樣雖然放入了一個0變量,但郵箱中卻無法判斷這個0值,認為郵箱中還是空。

還有就是,在執行一次OSMboxPend后,會將郵箱清空,只有下次有新的數據到郵箱后,才能等到數據,這一點與現實中的郵箱email是類似的,一旦查看新郵件后,在新郵件序列中,就沒有了該次新郵件提醒了,這一點,在OSMboxPend函數中也有體現:

 OS_ENTER_CRITICAL();    pmsg = pevent->OSEventPtr;    if (pmsg != (void *)0) 

{                                     /* See if there is already a message*/        pevent->OSEventPtr = (void *)0;           /* Clear the mailbox(清除郵箱)*/        OS_EXIT_CRITICAL();


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 融水| 大埔县| 新竹市| 三河市| 西宁市| 伊通| 新巴尔虎左旗| 宁化县| 沽源县| 泸西县| 郸城县| 昌平区| 宜章县| 绥滨县| 江陵县| 兴业县| 洛南县| 翼城县| 桂阳县| 浦江县| 池州市| 龙南县| 崇明县| 左云县| 岗巴县| 卓尼县| 师宗县| 张掖市| 临武县| 平山县| 安西县| 太和县| 牙克石市| 广东省| 科尔| 嘉善县| 彭州市| 邢台县| 蕉岭县| 土默特右旗| 浮梁县|