|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
μCOS-II下的第一個例程? |
| 作者:上善若水 欄目:ARM技術(shù) |
《深入淺出ARM7—LPC213X/214X(下)》中的μCOS-II下的第一個例程,簡要附在下面: …… int main (void) { OSInit(); OSTaskCreate(Task1, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 0); OSStart(); return 0; } ********************************************************************************************************* ** 任務(wù)1-Task1() 鍵盤掃描(具有去抖動功能) ********************************************************************************************************* void Task1(void *pdata) { …… for (;;) //(1) { OSTimeDly(OS_TICKS_PER_SEC / 50); /* 延時20毫秒 */ //(2) if (GetKey() != KEY1) /* GetKey用于獲取鍵盤當(dāng)前狀態(tài) */ continue; /* 不是KEY1不理會 */ OSTimeDly(OS_TICKS_PER_SEC / 50); /* 延時20毫秒,用于去抖 */ //(3) if (GetKey() != KEY1) /* 還是KEY1才正確 */ continue; OSTaskCreate(Task2, (void *)0, &TaskStk[TASK_STK_SIZE - 1], 10); //(4) while (GetKey() != 0) /* 等待松開按鍵 */ { OSTimeDly(OS_TICKS_PER_SEC / 50); /* 延時20毫秒 */ //(5) } } } ********************************************************************************************************* ** 任務(wù)2-Task2() 蜂鳴器鳴叫 ********************************************************************************************************* void Task2(void *pdata) { …… BeeMoo(); /* 使蜂鳴器鳴叫 */ OSTimeDly(OS_TICKS_PER_SEC / 8); /* 延時 */ BeeNoMoo(); /* 使蜂鳴器停止鳴叫 */ OSTimeDly(OS_TICKS_PER_SEC / 4); /* 延時 */ BeeMoo(); /* 使蜂鳴器鳴叫 */ OSTimeDly(OS_TICKS_PER_SEC / 8); /* 延時 */ BeeNoMoo(); /* 使蜂鳴器停止鳴叫 */ OSTaskDel(OS_PRIO_SELF); /* 刪除自己 */ } 為什么每次運行這個程序,在程序開始時蜂鳴器總要蜂鳴兩聲?沒有鍵按下,Task1為何能運行建立任務(wù)的代碼? |
| 2樓: | >>參與討論 |
| 作者: zlgarm 于 2006/2/7 16:52:00 發(fā)布:
re 注意: 在我們的EasyARM2131開發(fā)板的按鍵松開時是高電平,按下才是低電平。 當(dāng)不按下按鍵的情況下,運行程序,Task2已經(jīng)被Task1建立了,所以程序開始運行后,Task2運行(蜂鳴器總會響兩聲),然后Task2被刪除。當(dāng)按鍵按下后,Task1,再次重新建立Task2。 |
|
| 3樓: | >>參與討論 |
| 作者: 上善若水 于 2006/2/7 18:47:00 發(fā)布:
改動 您說的對,(GetKey() != KEY1)是如果鍵按下,while (GetKey() != 0)是當(dāng)無間按下時,這可以解釋程序開始即蜂鳴兩次。但新的問題是: 如果把(4)處建立Task2的語句移到(5)的后面,如下: …… while (GetKey() != 0) /* 等待松開按鍵 */ { OSTimeDly(OS_TICKS_PER_SEC / 50); /* 延時20毫秒 */ //(5) } OSTaskCreate(Task2, (void *)0, &TaskStk[TASK_STK_SIZE - 1], 10); //(4) …… 為什么程序開始運行就不再有2次蜂鳴,蜂鳴完全由按鍵觸發(fā)? |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |