同一任務多次嵌套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();
}
}