|
发表于 2022-4-7 22:13:20
|
显示全部楼层
void OSSchedLock (void)
{
uint32 ulRet = 0;
TX_THREAD *pThreadCur = NULL;
CPU_SR_ALLOC();
CPU_CRITICAL_ENTER();
TX_THREAD_GET_CURRENT(pThreadCur);
ulRet = tx_thread_preemption_change(pThreadCur, 0, (uint32 *)&g_ulThresholdBak);
CPU_CRITICAL_EXIT();
return;
}
void OSSchedUnlock (void)
{
uint32 ulOldThreshold = 0;
TX_THREAD *pThreadCur = NULL;
CPU_SR_ALLOC();
CPU_CRITICAL_ENTER();
TX_THREAD_GET_CURRENT(pThreadCur);
tx_thread_preemption_change(pThreadCur, g_ulThresholdBak, &ulOldThreshold);
CPU_CRITICAL_EXIT();
return;
}
这是我封装的任务锁函数,某一个时刻我调用OSSchedLock,但不调用OSSchedUnlock,tx_thread_preemption_change执行结果是正确的,其他任务的抢占阈值跟任务优先级一样,目前都是固定间隔执行 |
|