[英]RTOS MicroC tasking
我一直在從事一些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);
}
}
這兩個任務都等待一個信號量,但是不清楚該信號量最初在何處給出。 似乎兩個任務都從未從OSSemPend
調用返回。
在代碼中的某個位置,在創建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 */
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.