久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

ucosCPU占用率計算

作者:佚名   來源:本站原創   點擊數:  更新時間:2014年04月27日   【字體:

    CPU占用率涉及兩個函數:         1.空閑任務函數 OS_TaskIdle 2.統計函數 OS_TaskStat

    空閑任務是其他任務都沒就緒時運行的任務,幫助統計任務記錄空閑任務運行的次數OSIdleCtr。這個任務是程序必須使用的,不能用軟件刪除。
void  OS_TaskIdle (void *p_arg)
{
    p_arg = p_arg;               //防止編譯器報錯,沒有用到P_ARG變量                      
    for (;;) {                   //任務都是一個死循環
        OS_ENTER_CRITICAL();     //關閉中斷
        OSIdleCtr++;             //每運行一次都會記錄下
        OS_EXIT_CRITICAL();      //開放中斷
        OSTaskIdleHook();        //每運行一次空閑任務調用的勾函數                 
    }
}
    統計函數每秒計算一次處理器單位時間內的被任務占用時間,可以通過 OS_TASK_STAT_EN 置一來打開。
#if OS_TASK_STAT_EN > 0u        
void  OS_TaskStat (void *p_arg)
{
#if OS_CRITICAL_METHOD == 3u                    
    OS_CPU_SR  cpu_sr = 0u;
#endif
 
 
 
    p_arg = p_arg;                               //防止編譯器報錯
    while (OSStatRdy == OS_FALSE) {              //OS_TICKS_PER_SEC時鐘節拍
        OSTimeDly(2u * OS_TICKS_PER_SEC / 10u);  //直到操作系統就緒才允許運行統計任務
    }                                            
    OSIdleCtrMax /= 100uL;                       //OSIdleCtrMax空閑任務0.1s內運行次數的最大值,這個值是在 OSStatInit函數中確定的。該函數運行時其他任務還沒有運行,cpu只運行空閑函數。這時候就可以計算出可以0.1s中最多跑多少個空閑任務。這里有疑問,每次調用統計任務這個值都被除1次。。。。。。好像不對啊。
    if (OSIdleCtrMax == 0uL) {
        OSCPUUsage = 0u;                         //如果這個最大值小于100統計錯了,清零。
#if OS_TASK_SUSPEND_EN > 0u                      //如果啟用掛起任務函數
        (void)OSTaskSuspend(OS_PRIO_SELF);       //把當前的統計任務掛起(退出統計任務)
#else
        for (;;) {                               //如果沒有啟用
            OSTimeDly(OS_TICKS_PER_SEC);         //利用 OSTimeDly進行任務調度(退出統計任務)
        }
#endif
    }
    for (;;) {
        OS_ENTER_CRITICAL();
        OSIdleCtrRun = OSIdleCtr;                //獲取上一秒內空閑任務的運行次數
        OSIdleCtr    = 0uL;                      //同時清空空閑任務計數器為下一次統計做準備               OS_EXIT_CRITICAL();
        OSCPUUsage   = (INT8U)(100uL - OSIdleCtrRun / OSIdleCtrMax);
                                                
        OSTaskStatHook();                        //調用勾函數
#if (OS_TASK_STAT_STK_CHK_EN > 0u) && (OS_TASK_CREATE_EXT_EN > 0u)
        OS_TaskStatStkChk();                     //檢查每個任務的堆棧
#endif
        OSTimeDly(OS_TICKS_PER_SEC / 10u);       //積累下一次0.1秒的空閑任務運行值。
    }
}
 
關閉窗口

相關文章

主站蜘蛛池模板: 亚洲欧美一区在线 | 日韩中文一区 | 久操国产 | 日韩欧美在线视频一区 | 国产精品一区二区三区免费观看 | 毛片视频观看 | 国产精品久久毛片av大全日韩 | yiren22 亚洲综合 | 久操av在线 | 成人一区在线观看 | 欧美亚洲视频在线观看 | 91久久| 韩国av影院| 中文字幕在线视频一区二区三区 | 国产精品欧美一区二区 | 成人网av | 国产精品69毛片高清亚洲 | 精品av | 成人av一区二区三区 | 熟女毛片 | 国产美女精品视频免费观看 | 国产一区二区三区在线 | 成人精品视频 | 在线日韩福利 | 少妇一区在线观看 | 国产色在线 | 精品一区欧美 | 亚洲在线视频 | 又爽又黄axxx片免费观看 | 亚洲九九精品 | 亚洲欧洲日韩精品 中文字幕 | 国产精品久久久av | 在线免费毛片 | 亚洲精品第一页 | 国产一区二区精品在线观看 | 成人av免费在线观看 | 中文字幕国产视频 | 国产日产久久高清欧美一区 | 一区二区三区在线免费观看 | 成人一区二区三区在线观看 | 亚洲精品一区二区三区蜜桃久 |