uCOS-II内核之任务调度 [转载]

本文介绍了uCOS-II内核的任务调度机制。通过调用OSSched()函数实现任务切换,主要步骤包括将当前任务寄存器保存到堆栈,然后恢复高优先级任务的寄存器值。在μC/OS-Ⅱ中,任务切换如同中断返回,恢复CPU寄存器并执行中断返回指令。OS_CTX_SW()函数模拟中断进行任务切换,涉及中断向量和OS_CTX_SW()的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

uCOS-II内核学习之任务调度

实现任务切换,需要调用函数OSSched()。

OSSched()程序代码如下所示:
void OSSched (void)
{
    INT8U y;
 
    OS_ENTER_CRITICAL();
    if ((OSLockNesting | OSIntNesting) == 0)                           //(1)
    {
        y = OSUnMapTbl[OSRdyGrp];                                      //(2)
        OSPrioHighRdy = (INT8U)((y << 3) + OSUnMapTbl[OSRdyTbl[y]]);
   
        if (OSPrioHighRdy != OSPrioCur)                                //(3)
        {
            OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];                //(4)
            OSCtxSwCtr++;                                              //(5)
            OS_TASK_SW();                                              //(6)
        }
    }
    OS_EXIT_CRITICAL();
}

其基本实现原理大致是先找出优先级最
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值