打印
[应用笔记]

MCU时间片调度间隙设计

[复制链接]
1805|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2023-10-17 15:39 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 tpgf 于 2023-10-17 15:42 编辑

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、设计调度时间表

4、以上,就是针对MCU逻辑设计的任务调度。
————————————————
版权声明:本文为CSDN博主「猴哥取经」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_37634871/article/details/133855211


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1938

主题

15662

帖子

12

粉丝