UCOS中OSSemPend的問題

同一任務多次嵌套OSSemPend不使用以下語句則會被鎖死

不同任務多次嵌套OSSemPend則不受影響

 

此外如果在os定時器回調函數中調用定時器相關函數,則會被鎖死,需要添加以下內容方式重複調用OSSemPend

 

void disp_lock(void)

{

    if (EntranceCnt == 0)

    {

        lock();

        TaskIDLock = GUI_X_GetTaskId();      

    }

    else

    {

        if (TaskIDLock != GUI_X_GetTaskId())  //不同任務調用則沒問題

        {

            lock();

            TaskIDLock = GUI_X_GetTaskId();      

        }

        Else  // 同一個任務再次調用lock時,則不需要調用lock,否則會無法運行

        {

           

        }

    }

    EntranceCnt++; //增加引用計算

}

 

void disp_unlock(void)

{

    if (--EntranceCnt == 0)

    {

        unlock();

    }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章