zoukankan      html  css  js  c++  java
  • 查看uCOS-II的CPU使用率

    代码模板:

     1 void main(void)
     2 {
     3   OSInit();
     4   /* 安装uCOS-II的任务切换向量 */
     5   /* 创建用户起始任务TaskStart */
     6   OSStart();  
     7 }
     8 
     9 void TaskStart(void * pdata)
    10 {
    11   /* 安装并启动uCOS-II的时钟节拍 */
    12   OSStatInit();
    13   /* 创建用户应用程序任务 */
    14   for( ; ;){
    15 
    16     }
    17 }

       嵌入式实时操作系统uCOS-II(第二版)P99页上给我们展示了一个应用模板,这里我想强调几点。

    <1> 在使用查看CPU使用率功能之前,要将OS_TASK_STAT_EN(在OS_CFG.h)设置为1,也就是使用这个功能。此时uCOS-II在调用函数OSInit()初始化的时候,不仅要创建必备的空闲任务OS_TaskIdle(),还会创建另外一个系统任务OS_TaskStat()。

    <2> 在使用上述模板的时候,要严格按照模板中代码出现的先后顺序进行移植编写,不可更改顺序,否则会出现一些列错误。比如说本来应在第13行创建一个应用程序任务,假设它的优先级比启动任务的还要高。但是用户却将其提前到第12行之前,就会导致在创建这个应用程序的时候剥夺了TaskStart()的CPU占有权,导致OSStatInit()不能正常初始化。OSStatInit()在执行的时候,只允许系统有三个任务TaskStart()、OS_TaskStat()、OS_TaskIdle()。

    <3> uCOS-II的系统时钟是在TaskStart()中才正式开始跳动的,不要在main()函数中启动系统时钟。之所以这样做,是因为“用户并不希望在多任务还没有开始时就接收到时钟节拍中断”。

    笔者在STM32上做的实例:

    int main(void)
    {    
        LCD_Ili9341_PortInit();
        GUI_Init();
        GUI_SetFont(&GUI_Font24_ASCII);
        GUI_DispStringAt("uC/OS Version: V",48,1*24);
        GUI_DispFloat(OSVersion()*0.01,4);
        
        OSInit();
        OSTaskCreate(Task1_Start, (void *)0, &task1_start_stk[TASK1_START_STKSIZE-1], TASK1_START_PRIO); 
        OSStart();
        return 0; 
    }
    
    void Task1_Start(void *p_arg)
    {
        OS_CPU_SR  cpu_sr;
        
        p_arg = p_arg;
        OS_ENTER_CRITICAL();
        SysTick_Config(SystemCoreClock / OS_TICKS_PER_SEC);
        OS_EXIT_CRITICAL();
        OSStatInit();
                  
        OSTaskCreate(Task2, (void *)0, &task2_stk[TASK2_STKSIZE-1], TASK2_PRIO); 
        OSTaskCreate(Task3_GUI, (void *)0,&task3_gui_stk[TASK3_GUI_STKSIZE-1], TASK3_GUI_PRIO);   
        OSTaskDel(OS_PRIO_SELF);
    }
    
    void Task3_GUI(void *p_arg)
    {
        p_arg = p_arg;
        GUI_SetFont(&GUI_Font13_ASCII);
        
        while(1)
        {
            GUI_DispStringAt("CPU Usage: ",216,8*24);
            GUI_DispDec(OSCPUUsage,2);
            GUI_DispString("%");
            GUI_X_ExecIdle();
        }
    }

    参考资料:《 嵌入式实时操作系统uCOS-II(第二版)》

  • 相关阅读:
    [POI2007]山峰和山谷Grz
    [POI2007]驾驶考试egz
    [POI2007]立方体大作战tet
    BZOJ1085 [SCOI2005]骑士精神
    BZOJ1975 [Sdoi2010]魔法猪学院
    codeforces754D Fedor and coupons
    UOJ79 一般图最大匹配
    BZOJ3944 Sum
    BZOJ3434 [Wc2014]时空穿梭
    UOJ58 【WC2013】糖果公园
  • 原文地址:https://www.cnblogs.com/amanlikethis/p/4149582.html
Copyright © 2011-2022 走看看