|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
請(qǐng)問關(guān)于µC/OS-II郵箱的問題 |
| 作者:小指 欄目:ARM技術(shù) |
我一共建立了兩個(gè)任務(wù)和兩個(gè)郵箱 兩個(gè)任務(wù)之間通過兩個(gè)郵箱來進(jìn)行互相的信息傳遞 兩個(gè)任務(wù)都是用OSMboxPost函數(shù)來向郵箱中發(fā)送消息 用OSMboxPend函數(shù)來等待郵箱中的消息 但是現(xiàn)在的問題是即使不向郵箱中發(fā)送任何消息 著兩個(gè)任務(wù)還是在執(zhí)行 請(qǐng)問這是什么原因阿 |
| 2樓: | >>參與討論 |
| 作者: zlgARM 于 2005/2/18 12:58:00 發(fā)布:
郵件等待是否超時(shí)呢,還是無限期等待郵件? |
|
| 3樓: | >>參與討論 |
| 作者: greatbin 于 2005/2/20 19:10:00 發(fā)布:
把代碼貼出來看看 |
|
| 4樓: | >>參與討論 |
| 作者: hhyhc 于 2005/2/21 11:44:00 發(fā)布:
檢查郵箱是否創(chuàng)建成功 |
|
| 5樓: | >>參與討論 |
| 作者: xuanysg 于 2005/2/22 8:25:00 發(fā)布:
是否創(chuàng)建油箱的時(shí)候就對(duì)MSG賦值了阿 |
|
| 6樓: | >>參與討論 |
| 作者: hhyhc 于 2005/2/22 8:52:00 發(fā)布:
> 例: Uart0WrMbox= OSMboxCreate(NULL); if (Uart0WrMbox == NULL) { while (1); } 如果Uart0WrMbox == NULL則說明沒有可用的事件控制塊 |
|
| 7樓: | >>參與討論 |
| 作者: 小指 于 2005/2/22 10:31:00 發(fā)布:
關(guān)于郵箱問題的代碼和說明 主程序代碼如下 一共有兩個(gè)任務(wù) 都是死循環(huán)反復(fù)運(yùn)行 相互之間通過兩個(gè)郵箱來聯(lián)系 在OC—CFG中已經(jīng)設(shè)置了與郵箱有關(guān)的參數(shù) 郵箱現(xiàn)在設(shè)置的時(shí)無限期等待 但改成超時(shí)后也沒有反應(yīng) 對(duì)兩個(gè)任務(wù)的優(yōu)先級(jí)進(jìn)行修改后也是一樣 但是現(xiàn)在在屏蔽了向郵箱發(fā)送消息的程序之后(見代碼) 著兩個(gè)任務(wù)卻還在不斷運(yùn)行 另外在加了hhyhc 所給的檢查郵箱的函數(shù)后也是一樣 郵箱的建立可能是沒有問題的 由于本人是初學(xué)嵌入式和uc/os 很多東西都不是很明白 書上又沒有網(wǎng)上也沒有找到什么可以參考的資料 所以希望各位大蝦指教 OS_STK TaskStk[64]; /*任務(wù)堆棧»*/ OS_STK TaskStk1[64]; OS_EVENT *pTask1MailBox; OS_EVENT *pTask2MailBox; /*郵箱*/ void LedTask1(void *data); void LedTask2(void *data); unsigned CHAR num=0; /************************************************************************************************************/ void TaskStart(void *data); void Task(void *data); int main (void) { OSInit(); pTask1MailBox = OSMboxCreate(NULL); pTask2MailBox = OSMboxCreate(0); OSTaskCreate(LedTask1,(void*)0,(void*)&TaskStk,3); OSTaskCreate(LedTask2,(void*)0,(void*)&TaskStk1,2); OSStart(); } /****************************************************************************************************************/ void LedTask1(void *pdata) { INT8U count=1; INT8U *counter; INT8U error; pdata = pdata; TargetInit(); /* 初始化*/ IODIR &= ~KEY1; /* 設(shè)置鍵盤*/ IOSET = BEE; IODIR |= BEE1; /* 設(shè)置輸出信號(hào)*/ PINSEL0 = (PINSEL0 & 0xc0ff3fff); /* ¹Ü½ÌÑ¡ÔñÄ£¿é³õʼ»¯ */ while(1) { for(count=0;count<3;count++) { // OSMboxPost(pTask1MailBox,(void*)&count); IOCLR = BEE; OSTimeDlyHMSM(0,0,0,500); IOSET = BEE; OSTimeDlyHMSM(0,0,0,500); } OSMboxPend(pTask2MailBox,0,&error); IOCLR = BEE; OSTimeDlyHMSM(0,0,2,500); IOSET = BEE; OSTimeDlyHMSM(0,0,1,500); } } void LedTask2(void *data) { INT8U *counte; INT8U countt=1; INT8U err; data=data; while(1) { OSMboxPend(pTask1MailBox,0,&err); OSTimeDlyHMSM(0,0,0,500); IOCLR = BEE2; OSTimeDlyHMSM(0,0,2,500); IOSET = BEE2; OSTimeDlyHMSM(0,0,0,500); // OSMboxPost(pTask2MailBox,(void*)&countt); //OSTaskSuspend(OS_PRIO_SELF); } } |
|
| 8樓: | >>參與討論 |
| 作者: hhyhc 于 2005/2/23 13:36:00 發(fā)布:
在用戶程序中不能夠使用的優(yōu)先級(jí)有: 0,1,2,3,OS_LOWEST_PRIO-3,OS_LOWEST_PRIO-2,OS_LOWEST_PRIO-1, 你看看關(guān)于Ucosii的書就知道了 |
|
| 9樓: | >>參與討論 |
| 作者: 小指 于 2005/2/24 10:03:00 發(fā)布:
我后來調(diào)整了優(yōu)先級(jí)還是不行阿 我將優(yōu)先級(jí)改為8 和10 最低優(yōu)先級(jí)設(shè)為了17 事件控制塊最多可有8個(gè) 還是不行阿 |
|
| 10樓: | >>參與討論 |
| 作者: hhyhc 于 2005/2/24 10:20:00 發(fā)布:
你的OS_STK_GROWTH為0嗎, 如果為1,則(void*)&TaskStk應(yīng)為(void*)&TaskStk[63],按你的寫法OS_STK_GROWTH為0 |
|
|
|
| 免費(fèi)注冊(cè)為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |