MCU时间片调度间隙设计

1、概述

在设计MCU裸机程序时候,一般而言需要设计一个1ms的Tick,作为系统时钟。同时在任务调度时候设置好2ms任务,5ms任务,10ms任务等根据实际的需求设计的任务调度。但是会出现一种情况,其中的一个任务占用时间过大,此时就需要将该任务做拆分,通过时间偏差来解决该问题。

2、设计方法

2.1 任务时间标志置位

void SysTime_1mS(void) 
{
    static uint8 timerTick = 0;

    timerTick ++;//中断1ms计时
    if((timerTick % 5) == 1)
    {
        g_SysTimeStatus.BITS.Task5msFlag = 1;
    }
    if((timerTick % 10) == 4)
    {
        g_SysTimeStatus.BITS.Task10ms_0Flag = 1;
    }
    if((timerTick % 10) == 3)
    {
         g_SysTimeStatus.BITS.Task10ms_5Flag = 1;
    }
    if((timerTick % 20) == 8)
    {
        g_SysTimeStatus.BITS.Task20msFlag = 1;
    }

    if(timerTick >= 200)
    {
        timerTick = 0;
    }
    else
    {
        //do nothing
    }
}

2.2 任务时间标志清楚,在任务调度时候清除掉,保证一个周期只进入一次。

int main(void)
{
    EcuM_Init();
#if (1 == SEC_ENABLE)
    Boot_DebugPort(0);
#endif
    StartupHook();
    Os_TaskEntry_OsTask_Init();

    while (1)
    {
        if(1 == g_SysTimeStatus.BITS.Task5msFlag)
        {
            //g_SysTimeStatus.BITS.Task5msFlag = 0;//放置在前面,防止在任务超时时候,任务被跳过
            Os_TaskEntry_OsTask_5ms();
            g_SysTimeStatus.BITS.Task5msFlag = 0;
        }

        if(1 == g_SysTimeStatus.BITS.Task10ms_0Flag)
        {
            g_SysTimeStatus.BITS.Task10ms_0Flag = 0;
        }

        if(1 == g_SysTimeStatus.BITS.Task10ms_5Flag)
        {
            g_SysTimeStatus.BITS.Task10ms_5Flag = 0;
            Os_TaskEntry_OsTask_10ms();
            //g_SysTimeStatus.BITS.Task10ms_5Flag = 0;

        }

        if(1 == g_SysTimeStatus.BITS.Task20msFlag)
        {
            //g_SysTimeStatus.BITS.Task20msFlag = 0;
            Os_TaskEntry_OsTask_20ms();
            g_SysTimeStatus.BITS.Task20msFlag = 0;
        }
        IdleHook_Core1();
    }

    return 0;
}
 

3、设计调度时间表

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
**** **** ***
** ** **
** ** *
* * *

4、以上,就是针对MCU逻辑设计的任务调度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值