UC/OS II时间片轮转法调度修改

本文详细介绍了如何在UC/OS II操作系统中实现时间片轮转调度,涉及对任务TCB的修改,增加了OSTSLen、OSTSCurLen、OSTSPrev和OSTSNext四个属性,用于跟踪任务时间片。同时,文章提到了在OSTimeTick和OSTaskCreate函数中的关键代码修改,以及在OS_TCBInit中初始化TCB时间片的步骤。
摘要由CSDN通过智能技术生成

**根据时间片轮转调度在同优先级任务中的应用,需要对
任务的TCB进行修改,增加4个属性项:**
1)OSTSLen(时间片初始值)。保存任务建立时给任务分
配时间片的个数。
2)OSTSCurLen(时间片剩余值)。记录了任务运行中还
剩余的时间片个数”-。
3)OSTSPrev(TCB双向链表前驱指针)。用作组成图2
所示的TCB循环链表。
4)OSTSNext(TCB双向链表后继指针)。用作组成图2
所示的TcB循环链表。
OSTimeTick代码部分修改:
void OSTimeTick(void)
{
OS_TCB *ptcb;
OS_TCB *temptcb;

if OS_TICK_STEP_EN > 0

BOOLEAN    step;

endif

if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */

OS_CPU_SR  cpu_sr = 0;

endif

if OS_TIME_TICK_HOOK_EN > 0

OSTimeTickHook();                                      /* Call user definable hook                     */

endif

if OS_TIME_GET_SET_EN > 0

OS_ENTER_CRITICAL();                                   /* Update the 32-bit tick counter               */
OSTime++;
OS_EXIT_CRITICAL();

endif

if (OSRunning == OS_TRUE) {

if OS_TICK_STEP_EN > 0

    switch (OSTickStepState) {                         /* Determine whether we need to process a tick  */
    case OS_TICK_STEP_DIS:                         /* Yes, stepping is disabled                    */
        step = OS_TRUE;
        break;

    case OS_TICK_STEP_WAIT:                        /* No,  waiting for uC/OS-View to set ...       */
        step = OS_FAL
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值