国产探花免费观看_亚洲丰满少妇自慰呻吟_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();


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 德保县| 渝中区| 富平县| 瑞丽市| 灯塔市| 绥德县| 凤翔县| 云梦县| 富锦市| 历史| 张家口市| 张北县| 绩溪县| 资兴市| 黎川县| 濮阳市| 宁武县| 高雄市| 象州县| 仪征市| 瓦房店市| 隆回县| 大埔区| 宁乡县| 库车县| 田林县| 文昌市| 长沙市| 六安市| 八宿县| 云林县| 潼关县| 濮阳市| 新干县| 通河县| 凯里市| 阿拉尔市| 苍溪县| 西藏| 和硕县| 于田县|