这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » ucos 请教ucos移植问题!

共2条 1/1 1 跳转至

ucos 请教ucos移植问题!

院士
2006-09-17 18:14:16     打赏
ucos 请教ucos移植问题!



关键词: 请教     移植     问题    

院士
2006-12-22 22:43:00     打赏
2楼
问         int main (void)
{
    OSInit();

    OSTaskCreate(TaskStart, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 0);
    OSStart();
    return 0;
}

/*********************************************************************************************************
** 函数名称: TaskStart
** 功能描述: μCOS-II的第一个任务,通常由它初始化目标板和建立其它任务
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块:
**
** 作 者: 陈明计
** 日 期: 2003年7月8日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

        void  TaskStart(void *pdata)
{
    pdata = pdata;                                                  /* 避免编译警告 */

    TargetInit();                                                   /* 目标板初始化 */
    IO0DIR &= ~KEY1;                                                    /* 设置KEY1为输入*/
    IO0SET = BEEP;
    IO0DIR |= BEEP;                                                    /* 设置蜂鸣器为输出*/
    PINSEL0 = (PINSEL0 & 0xffff3fff);                               /* 管教选择模块初始化 */
    PINSEL1 = (PINSEL1 & 0xfffffffc);
    
    OSTaskCreate(Task, (void *)0, &TaskStk[TASK_STK_SIZE - 1], 10); /* 创建任务     */

    for (;;)
    {
        OSTaskSuspend(OS_PRIO_SELF);
        IO0CLR = BEEP;
        OSTimeDly(OS_TICKS_PER_SEC / 8);
        IO0SET = BEEP;
        OSTimeDly(OS_TICKS_PER_SEC / 4);

        IO0CLR = BEEP;
        OSTimeDly(OS_TICKS_PER_SEC / 8);
        IO0SET = BEEP;
        OSTimeDly(OS_TICKS_PER_SEC / 4);
    }
}

/*********************************************************************************************************
** 函数名称: Task
** 功能描述: μCOS-II的任务
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块:
**
** 作 者: 陈明计
** 日 期: 2003年7月8日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
        void  Task(void *pdata)
{
    pdata = pdata;                                      /* 避免编译警告 */

    for (;;)
    {
        OSTimeDly(OS_TICKS_PER_SEC / 50);               /* 延时20毫秒 */
        if ((IO0PIN & KEY1) != 0)
        {
            continue;
        }
        OSTimeDly(OS_TICKS_PER_SEC / 50);               /* 延时20毫秒 */
        if ((IO0PIN & KEY1) != 0)
        {
            continue;
        }
        OSTaskResume(0);
        while ((IO0PIN & KEY1) == 0)
        { OSTimeDly(OS_TICKS_PER_SEC / 50);           /* 延时20毫秒 */
        }
    }
}这是关于通用io口的移植程序,我有以下几个疑惑:
1。OSTaskSuspend函数将任务挂起后,是不是只有OSTaskResume函数能将其恢复,它自己本身有没有个挂起期限啥的?
2。任务TASK中的三个"延时20毫秒"分别都有啥作用啊?
请大家指教!谢谢!

1: 顶一下啊!同志们! 2: 周公,指点一下啊! 3: 我的理解是去抖动的功能 4: 有道理!小弟还有一问,就是当在任务task中ostaskresume任务taskstart后,在任务taskstart中也有OSTimeDly函数,是不是也将导致又切换到任务task中?那么这些OSTimeDly函数的延时值相互之间有没有什么讲究?
5: 自己顶!

共2条 1/1 1 跳转至

回复

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