• 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

  • 相关阅读:
    (easy)LeetCode 223.Rectangle Area
    (easy)LeetCode 205.Reverse Linked List
    (easy)LeetCode 205.Isomorphic Strings (*)
    (easy)LeetCode 204.Count Primes
    (easy)LeetCode 203.Remove Linked List Elements
    (easy)LeetCode 202.Happy Number
    (easy)LeetCode 198.House Robber
    (easy)LeetCode 191.Number of 1 Bits
    试题分析
    使用ADO.NET访问数据库
  • 原文地址:https://www.cnblogs.com/zhangxuechao/p/11709501.html
Copyright © 2020-2023  润新知