zoukankan      html  css  js  c++  java
  • UCOSIII时间片轮转调度

    OS_RATE_HZ const  OSCfg_TickRate_Hz = (OS_RATE_HZ  )OS_CFG_TICK_RATE_HZ;
    #define  OS_CFG_TICK_RATE_HZ 200u   /* Tick rate in Hertz (10 to 1000 Hz) */

    时间片长度200Hz,也就是一个系统时钟节拍5ms

    串口实验
    为Task1和Task2分配2个时间片,分别做串口打印

    OSTaskCreate((OS_TCB    * )&Task1_TaskTCB,      
                     (CPU_CHAR  * )"Task1 task",        
                     (OS_TASK_PTR )task1_task,          
                     (void      * )0,                   
                     (OS_PRIO     )TASK1_TASK_PRIO,     
                     (CPU_STK   * )&TASK1_TASK_STK[0],  
                     (CPU_STK_SIZE)TASK1_STK_SIZE/10,   
                     (CPU_STK_SIZE)TASK1_STK_SIZE,      
                     (OS_MSG_QTY  )0,                   
                     (OS_TICK     )2,  //2个时间片,2*5=10ms                 
                     (void      * )0,                   
                     (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
                     (OS_ERR    * )&err);
    
    OSTaskCreate((OS_TCB    * )&Task2_TaskTCB,      
                     (CPU_CHAR  * )"task2 task",        
                     (OS_TASK_PTR )task2_task,          
                     (void      * )0,                   
                     (OS_PRIO     )TASK2_TASK_PRIO,         
                     (CPU_STK   * )&TASK2_TASK_STK[0],  
                     (CPU_STK_SIZE)TASK2_STK_SIZE/10,   
                     (CPU_STK_SIZE)TASK2_STK_SIZE,      
                     (OS_MSG_QTY  )0,                   
                     (OS_TICK     )2,   //2个时间片,2*5=10ms                
                     (void      * )0,               
                     (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR, 
                     (OS_ERR    * )&err);
    
    void task1_task(void *p_arg)
    {
        u8 i,task1_num=0;
        OS_ERR err;
        p_arg = p_arg;
    
        POINT_COLOR = RED;
        LCD_ShowString(30,130,110,16,16,"Task1 Run:000");
        POINT_COLOR = BLUE;
        while(1)
        {
            task1_num++;
            LCD_ShowxNum(110,130,task1_num,3,16,0x80);
            for(i=0;i<5;i++) printf("Task1:01234
    ");
            LED0 = ~LED0;
            LED2 = ~LED2;
            OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_HMSM_STRICT,&err);
        }
    }
    
    void task2_task(void *p_arg)
    {
        u8 i,task2_num=0;
        OS_ERR err;
        p_arg = p_arg;
    
        POINT_COLOR = RED;
        LCD_ShowString(30,150,110,16,16,"Task2 Run:000");
        POINT_COLOR = BLUE;
        while(1)
        {
            task2_num++;
            LCD_ShowxNum(110,150,task2_num,3,16,0x80);
            for(i=0;i<5;i++) printf("Task2:56789
    ");
            LED1 = ~LED1;
            OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_HMSM_STRICT,&err);
        }
    }

    实验现象
    1

    重新调整时间片个数
    分配3个时间片,任务切换时间延长至15ms

    OSTaskCreate((OS_TCB    * )&Task1_TaskTCB,      
                     (CPU_CHAR  * )"Task1 task",        
                     (OS_TASK_PTR )task1_task,          
                     (void      * )0,                   
                     (OS_PRIO     )TASK1_TASK_PRIO,     
                     (CPU_STK   * )&TASK1_TASK_STK[0],  
                     (CPU_STK_SIZE)TASK1_STK_SIZE/10,   
                     (CPU_STK_SIZE)TASK1_STK_SIZE,      
                     (OS_MSG_QTY  )0,                   
                     (OS_TICK     )3,  //3个时间片,3*5=15ms                 
                     (void      * )0,                   
                     (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
                     (OS_ERR    * )&err);

    实验现象
    2

  • 相关阅读:
    $GLOBALS超级全局变量
    归来
    Mscorlib.dll 里的 System.Internal 类是干嘛的?
    Query Composition using Functional Programming Techniques in C# 3.0
    反射之人千万不能错过的 EmitHelper
    给自己的Blog程序添加对Windows Live Writer的支持
    WebService的应用之winform身份验证
    c# static 的全部用法收集整理
    ASP.NET设置网站图标
    C# 2.0 之 static class (转)
  • 原文地址:https://www.cnblogs.com/zhangxuechao/p/11709501.html
Copyright © 2011-2022 走看看