uc/os中OSStart()函数分析

本文详细分析了UC/OS操作系统启动多任务的关键函数OSStart()及其内部调用的OSStartHighRdy()。在启动过程中,通过优先级算法找到最高优先级任务,并设置相应的堆栈指针,利用软中断进行任务切换。OSStartHighRdy()通过软中断进入系统模式,执行任务上下文切换,确保多任务系统的正常运行。
摘要由CSDN通过智能技术生成

OSStart()函数分析

多任务的的启动是通过调用OSStart()实现的,而在启动uc/os之前至少需要建立一个应用任务。

OSStart()函数源码

void  OSStart (void)

{

    INT8U y;

    INT8U x;

    if (OSRunning == FALSE) {//参数检验,多任务尚未启动

        y             = OSUnMapTbl[OSRdyGrp];//这几句通过uc/os设定最高优先级查找算法找出当前最高优先级    

        x             = OSUnMapTbl[OSRdyTbl[y]];

        OSPrioHighRdy = (INT8U)((y << 3) + x);

        OSPrioCur     = OSPrioHighRdy;//第一次开始多任务调度,最高优先级任务运行,即当前优先级和最高优先级一样

        OSTCBHighRdy  = OSTCBPrioTbl[OSPrioHighRdy]; //通过最高优先级超找优先级TCB表获得最高优先级TCB

        OSTCBCur      = OSTCBHighRdy;//第一次启动,二者一样

        OSStartHighRdy();//调用启动函数,实质上是将任务栈中保存的值弹回到CPU寄存器中,然后执行中断返回自指令,中断返回指令强制执行任务代码

    }

}

Ø  OSStartHighRdy()永远不返回到OSStart()

Ø 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值