这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » COS,II μCOS-II下的第一个例程?

共2条 1/1 1 跳转至

COS,II μCOS-II下的第一个例程?

院士
2006-09-17 18:14:16     打赏
COS,II μCOS-II下的第一个例程?



关键词: COS-II     第一个     例程    

院士
2006-12-22 22:43:00     打赏
2楼
问 《深入浅出ARM7—LPC213X/214X(下)》中的μCOS-II下的第一个例程,简要附在下面:
……
int main (void)
{
    OSInit();                                                                
    OSTaskCreate(Task1, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 0);    
    OSStart();                                                                
    return 0;                                                                
}
*********************************************************************************************************
**                         任务1-Task1()       键盘扫描(具有去抖动功能)
*********************************************************************************************************
void  Task1(void *pdata)
{   ……
    for (;;)                                                                        //(1)
    {
        OSTimeDly(OS_TICKS_PER_SEC / 50);       /* 延时20毫秒 */                    //(2)
        if (GetKey() != KEY1)                    /* GetKey用于获取键盘当前状态 */
              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)
        }
    }
}
*********************************************************************************************************
**                         任务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为何能运行建立任务的代码?
1: re注意:
在我们的EasyARM2131开发板的按键松开时是高电平,按下才是低电平。
当不按下按键的情况下,运行程序,Task2已经被Task1建立了,所以程序开始运行后,Task2运行(蜂鸣器总会响两声),然后Task2被删除。当按键按下后,Task1,再次重新建立Task2。 2: 改动
您说的对,(GetKey() != KEY1)是如果键按下,while (GetKey() != 0)是当无间按下时,这可以解释程序开始即蜂鸣两次。但新的问题是:
如果把(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次蜂鸣,蜂鸣完全由按键触发?

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]