ucosiii学习(3)——任务调度和时间片轮转

本文详细介绍了UCOSIII操作系统中的任务调度,包括任务级调度器OSSched()和中断级调度器OSIntExit()的工作原理。在中断级调度器中,通过OSIntCtxSW()完成任务切换。同时,文章提到了时间片轮转调度,当同一优先级下有多个任务时,如何根据时间片进行任务切换。此外,还讨论了如何通过OSSchedLock()和OSSchedUnlock()控制任务调度的锁定和解锁,以及任务主动放弃时间片的情况。
摘要由CSDN通过智能技术生成

1.任务级调度器 OSSched()

系统初始化后会自动创建几个任务,可以看到所调用的创建任务函数OSTaskCreate的最后都会调用OSSched()函数(任务级调度器)。

Description: This function is called by other uC/OS-III services to determine whether a new, high priority task has been made ready to run.  This function is invoked by TASK level code and is not used to reschedule tasks from ISRs (see OSIntExit() for ISR rescheduling).

该函数定义在os_core.c中,可以看到 该函数体中依次执行

CPU_INT_DIS();

OSPrioHighRdy   = OS_PrioGetHighest(); 

CPU_INT_DIS();        //  cpu_sr = CPU_SR_Save(); 关闭中断
OSPrioHighRdy   = OS_PrioGetHighest();    //获取就绪任务的最高优先级
if (OS_CFG_TASK_IDLE_EN == DEF_ENABLED)
    OSTCBHighRdyPtr = OSRdyList[OSPrioHighRdy].HeadPtr; //获取优先级最高的就绪任务
if (OSTCBHighRdyPtr == OSTCBCurPtr)    //优先级最高的就绪任务为当前任务
   {               
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值