簡體   English   中英

RTOS MicroC任務

[英]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調用返回。

在代碼中的某個位置,在創建AppTask1AppTask2之前,您應該具有以下代碼行:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM