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

  • 相关阅读:
    wamp集成环境安装后无法启动的问题
    jquery点击内层的click事件时会触发外层的click事件
    js 控制文本框只能输入数字
    第七届飞思卡尔智能车比赛的赛道边缘提取第一篇博客
    多级菜单,多级下拉列表解决方案(收藏) 西安
    ASP.NET 从Excel文件导入数据到数据库(笔记) 西安
    动态构造地址栏参数 西安
    我觉得我应该要回来了 西安
    SQL Server 无法生成 FRunCM 线程。请查看 SQL Server 错误日志和 Windows 事件日志(转) 西安
    Web.Config 分析 西安
  • 原文地址:https://www.cnblogs.com/zhangxuechao/p/11709501.html
Copyright © 2011-2022 走看看