音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(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ù)
μCOS-II下的第一個例程?
《深入淺出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
re
注意:
在我們的EasyARM2131開發(fā)板的按鍵松開時是高電平,按下才是低電平。
當(dāng)不按下按鍵的情況下,運行程序,Task2已經(jīng)被Task1建立了,所以程序開始運行后,Task2運行(蜂鳴器總會響兩聲),然后Task2被刪除。當(dāng)按鍵按下后,Task1,再次重新建立Task2。

3樓: >>參與討論
上善若水
改動

您說的對,(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ā)?

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
如何讀懂ADS的Errors & Warnings信息?
請問LPC2106的串口1做3線串口時,其他的CTS這些腳可以做IO嗎
請問現(xiàn)在有沒有基于k-kernel的upd通訊阿?
請教在KEIL中使用自建庫的方法
分散加載問題請教?
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號