RTOS MicroC任务

时间:2014-08-09 18:53:51

标签: c rtos ucos microc

我一直在研究一些RTOS MicroC项目,每当我实现某些功能时,它在任务之外工作得很好,但每当我完成任务时它就不会做任何事情。我知道我可能无法得到答案,但任何提示从哪里开始寻找将是一个很大的帮助,提前谢谢。

a_sem = OSSemCreate(1);

static void AppTask1(void *p_arg)
{
    (void) p_arg;
    INT8U perr;
    while (1)
    {
        OSSemPend(a_sem, 0, &perr);
        planeAngles();// Functon that works outside the task
        OSSemPost(a_sem);
        OSTimeDly(OS_TICKS_PER_SEC/20);
    }
}

static void AppTask2(void *p_arg)
{
    (void) p_arg;
    INT8U perr;
    while (1)
    {
        OSSemPend(a_sem, 0, &perr);
        servoTurns(); // Functon that works outside the task
        OSSemPost(a_sem);
        OSTimeDly(OS_TICKS_PER_SEC/20);
    }
}

2 个答案:

答案 0 :(得分:2)

两个任务都在等待信号量,但不清楚信号量最初是 给出的位置。似乎任何任务都不会从OSSemPend调用返回。

答案 1 :(得分:1)

代码中的某处,在创建AppTask1AppTask2之前,您应该有一行代码:

OSSemCreate(a_sem, 1, &perr);

您正在创建一个信号量a_sem,其初始值为1,因此调用OSSemPend的第一个任务将成功获取信号量。

此外,你不应该永远阻止OSSemPend。等待一段时间,然后检查错误状态:

OSSemPend(a_sem, 10, &perr);
if(perr == OS_ERR_NONE)
{
    /* You have the semaphore */
}
else
{
    /* Error! Maybe a timeout */
}