我一直在做一些实时操作系统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);
}
}发布于 2014-08-10 03:44:26
这两个任务都在等待一个信号量,但不清楚信号量最初是在哪里发出的。似乎这两个任务都不会从OSSemPend调用中返回。
发布于 2014-08-10 05:02:08
在代码中的某处,在创建AppTask1和AppTask2之前,您应该有一行如下所示的代码:
OSSemCreate(a_sem, 1, &perr);您正在创建一个初始值为1的信号量a_sem,以便第一个调用OSSemPend的任务将成功获取该信号量。
此外,你不应该永远在OSSemPend上阻塞。请稍等片刻,然后检查错误状态:
OSSemPend(a_sem, 10, &perr);
if(perr == OS_ERR_NONE)
{
/* You have the semaphore */
}
else
{
/* Error! Maybe a timeout */
}https://stackoverflow.com/questions/25221941
复制相似问题