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