亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? os_probe.c

?? 飛思卡爾HCS12的OS移植(ucosII),實現了三個任務,IDE:CODEWARRIOR
?? C
?? 第 1 頁 / 共 2 頁
字號:
*                                        OSProbe_TaskCreateHook()
*
* Description : This function is called when a task is created.
*
* Argument(s) : ptcb        Pointer to the task control block of the task being created.
*
* Note(s)     : (1) Interrupts are disabled during this call.
*
*               (2) This MUST be called from applications's task create hook function App_TaskCreateHook().
*********************************************************************************************************
*/

#if (OS_PROBE_HOOKS_EN > 0)
void  OSProbe_TaskCreateHook (OS_TCB *ptcb)
{
    ptcb->OSTCBCyclesStart = OSProbe_TimeGetCycles();           /* Get the current start time for this task.            */
    ptcb->OSTCBCyclesTot   = 0;                                 /* Update the task's total execution time.              */
}
#endif


/*
*********************************************************************************************************
*                                          OSProbe_TaskSwHook()
*
* Description : This function is called when a task switch is performed.
*
* Argument(s) : none.
*
* Note(s)     : (1) Interrupts are disabled during this call.
*
*               (2) It is assumed that the global pointer 'OSTCBHighRdy' points to the TCB of the task that
*                   will be 'switched in' (i.e. the highest priority task) and, 'OSTCBCur' points to the
*                   task being switched out (i.e. the preempted task).
*
*               (3) This MUST be called from application's task switch hook function App_TaskSwHook().
*********************************************************************************************************
*/

#if (OS_PROBE_HOOKS_EN > 0)
void  OSProbe_TaskSwHook (void)
{
    INT32U  cycles;


    cycles                         = OSProbe_TimeGetCycles();   /* This task is done.                                   */
    OSTCBCur->OSTCBCyclesTot      += cycles - OSTCBCur->OSTCBCyclesStart;
    OSTCBHighRdy->OSTCBCyclesStart = cycles;                    /* Save absolute #cycles at task activation.            */
}
#endif


/*
*********************************************************************************************************
*                                           OSProbe_TickHook()
*
* Description : This function is called every tick.
*
* Argument(s) : none.
*
* Note(s)     : (1) Interrupts may or may not be ENABLED during this call.
*
*               (2) This MUST be called from user's time tick hook function App_TimeTickHook().
*********************************************************************************************************
*/

#if (OS_PROBE_HOOKS_EN > 0)
void  OSProbe_TickHook (void)
{
    (void)OSProbe_TimeGetCycles();
}
#endif


/*
*********************************************************************************************************
*                                         OSProbe_TimeGetCycles()
*
* Description : Get time as accurately as possible, stored in a 32-bit variable.
*
* Argument(s) : none.
*
* Return(s)   : A 32-bit representation of time.
*********************************************************************************************************
*/

#if (OS_PROBE_HOOKS_EN > 0)
INT32U   OSProbe_TimeGetCycles(void)
{
    INT32U     cycles;
#if (OS_PROBE_TMR_32_BITS > 0)
    INT32U     cnts32;
    INT32U     cnts32_delta;
#else
    INT16U     cnts16;
    INT16U     cnts16_delta;
#endif
#if (OS_CRITICAL_METHOD == 3)                                   /* Allocate storage for CPU status register.            */
    OS_CPU_SR  cpu_sr = 0;
#endif


    OS_ENTER_CRITICAL();
#if (OS_PROBE_TMR_32_BITS > 0)
    cnts32               = OSProbe_TmrRd();                     /* Read current counts of the free running counter.     */
    cnts32_delta         = cnts32 - OSProbe_TmrCntsPrev;
    OSProbe_TmrCntsPrev  = cnts32;                              /* Save current counts for next time.                   */
    OSProbe_CyclesCtr   += cnts32_delta;
#else
    cnts16               = (INT16U)OSProbe_TmrRd();             /* Read current counts of the free running counter.     */
    cnts16_delta         = cnts16 - OSProbe_TmrCntsPrev;
    OSProbe_TmrCntsPrev  = cnts16;                              /* Save current counts for next time.                   */
    OSProbe_CyclesCtr   += (INT32U)cnts16_delta;
#endif
    cycles               = OSProbe_CyclesCtr;
    OS_EXIT_CRITICAL();

    return (cycles);
}
#endif


/*
*********************************************************************************************************
*********************************************************************************************************
*                                             LOCAL FUNCTION
*********************************************************************************************************
*********************************************************************************************************
*/

/*
*********************************************************************************************************
*                                             OSProbe_Task()
*
* Description : Updates OSProbe_TaskStkUsage[] and OSProbe_TaskCPUUsage[] and calls
*               a user-specified callback functions (OSProbe_CallbackFnct()), if the user sets this
*               function.
*
* Argument(s) : p_arg       Argument passed to OSProbe_Task() by 'OSTaskCreate()'.
*
* Return(s)   : none.
*********************************************************************************************************
*/

#if (OS_PROBE_TASK > 0)
static  void  OSProbe_Task (void *p_arg)
{
            OS_TCB  *ptcb;
            INT16U   i;
            INT32U   cycles_tot;
    static  INT32U   cycles_dif[OS_MAX_TASKS];
    static  INT32U   cycles_tot_last[OS_MAX_TASKS];
#if (OS_PROBE_USE_FP == 0)
            INT32U   max;
#endif


    (void)p_arg;

                                                                /* Initialize stored CyclesTot values.                  */
    for (i = 0; i < OS_MAX_TASKS; i++) {
        cycles_tot_last[i]      = 0;
        OSProbe_TaskStkUsage[i] = 0;
        OSProbe_TaskCPUUsage[i] = 0;
    }

    while (1) {
        OSTimeDlyHMSM(0, 0, 0, OSProbe_Delay);
        if ((INT32U)OSProbe_CallbackFnct != 0) {
            OSProbe_CallbackFnct();
        }

                                                                /* Update task CPU usage                                */
        i          = 0;
        cycles_tot = 0;
        ptcb       = &OSTCBTbl[0];                              /*  ... Get pointer to first TCB ...                    */

        while ((i    < OS_MAX_TASKS) &&
               (ptcb != (OS_TCB *)0) &&
               (ptcb != (OS_TCB *)1)) {
                                                                /*  ... Calculate new CyclesDif, the number of cycles   */
                                                                /*  ... used by the task since the last reading.  Half  */
                                                                /*  ... the previous value is added to provide some     */
                                                                /*  ... hysteresis, thereby reducing the natural        */
                                                                /*  ... "jitter" in the data.                           */
            cycles_dif[i]       = (ptcb->OSTCBCyclesTot - cycles_tot_last[i]) / 2 + (cycles_dif[i] / 2);
            cycles_tot_last[i]  = ptcb->OSTCBCyclesTot;
            cycles_tot         += cycles_dif[i];

            if (ptcb->OSTCBStkSize == 0) {
                OSProbe_TaskStkUsage[i] = 0;
            } else {
#if (OS_PROBE_USE_FP > 0)
#if (OS_STK_GROWTH == 1)
                OSProbe_TaskStkUsage[i] = (FP32)(((INT32U)(ptcb->OSTCBStkBase) - (INT32U)(ptcb->OSTCBStkPtr)) * 100)
                                        / ((ptcb->OSTCBStkSize) * sizeof (OS_STK));
#else
                OSProbe_TaskStkUsage[i] = (FP32)(((INT32U)(ptcb->OSTCBStkPtr) - (INT32U)(ptcb->OSTCBStkBase)) * 100)
                                        / ((ptcb->OSTCBStkSize) * sizeof (OS_STK));
#endif
#else
                max = (ptcb->OSTCBStkSize) * sizeof (OS_STK) / 100L;

#if (OS_STK_GROWTH == 1)
                OSProbe_TaskStkUsage[i] = (INT8U)(((INT32U)(ptcb->OSTCBStkBase) - (INT32U)(ptcb->OSTCBStkPtr)) / max);
#else
                OSProbe_TaskStkUsage[i] = (INT8U)(((INT32U)(ptcb->OSTCBStkPtr)  - (INT32U)(ptcb->OSTCBStkBase)) / max);
#endif
#endif
            }

            ptcb = ptcb->OSTCBPrev;

            i++;
        }

#if (OS_PROBE_USE_FP == 0)
        max = cycles_tot / 100L;
#endif
                                                                /*  ... For each task, calculate percent CPU usage.     */
        for (i = 0; i < OS_MAX_TASKS; i++) {
#if (OS_PROBE_USE_FP > 0)
            OSProbe_TaskCPUUsage[i] = (FP32)(cycles_dif[i] * 100) / cycles_tot;
#else
            OSProbe_TaskCPUUsage[i] = (INT8U)(cycles_dif[i] / max);
#endif
        }
    }
}
#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品视频在线免费| 国产精品亚洲第一| 国产欧美一区二区三区在线老狼 | 91久久免费观看| 国内成人精品2018免费看| 亚洲五码中文字幕| 亚洲色图欧洲色图| 精品国产三级电影在线观看| 日本精品裸体写真集在线观看| 国产精品自拍三区| 狠狠色丁香久久婷婷综| 卡一卡二国产精品 | 欧美性一级生活| av在线一区二区| av在线一区二区| 91在线看国产| 色综合久久久久久久久久久| 国产在线播放一区| 国产精品99久久久久久有的能看 | 亚洲一区二区在线免费看| 欧美激情艳妇裸体舞| 国产精品美女久久久久久久久久久| 精品999久久久| 久久久久久久av麻豆果冻| 国产午夜精品久久| 日韩欧美国产综合一区| 欧美日韩免费一区二区三区| 欧美日韩一本到| 日韩免费在线观看| 26uuu欧美| 中文字幕av免费专区久久| 中文字幕一区视频| 一区二区三区四区激情| 亚洲国产视频在线| 另类欧美日韩国产在线| 国产69精品久久99不卡| 色综合久久久久久久久久久| 欧美精品久久一区二区三区| 欧美精品一二三| 欧美日韩精品一区二区三区| 精品国产sm最大网站免费看| 中日韩免费视频中文字幕| 一区二区三区不卡在线观看 | 97久久精品人人澡人人爽| 91免费精品国自产拍在线不卡| 在线观看亚洲精品| 这里只有精品免费| 中文字幕精品一区二区精品绿巨人| 亚洲欧洲另类国产综合| 日日夜夜精品视频天天综合网| 激情综合色综合久久| 成人午夜电影久久影院| 欧美性欧美巨大黑白大战| 日韩手机在线导航| 国产精品久久国产精麻豆99网站| 午夜免费久久看| 成人免费看视频| 91精品一区二区三区久久久久久| 日本一区免费视频| 免费观看在线色综合| 99天天综合性| 欧美三级电影精品| 日韩免费视频线观看| 一区二区欧美国产| 风流少妇一区二区| 日韩午夜激情免费电影| 亚洲一区二区三区视频在线播放 | 91浏览器在线视频| 日韩女优毛片在线| 亚洲亚洲人成综合网络| 成人精品在线视频观看| 欧美成人精品1314www| 一区二区国产视频| 成人影视亚洲图片在线| 日韩欧美成人午夜| 天天综合日日夜夜精品| 91啪亚洲精品| 亚洲欧美综合另类在线卡通| 精品一区二区三区香蕉蜜桃| 欧美日韩国产美| 亚洲一区二区三区视频在线播放| 成人午夜在线免费| 欧美经典一区二区三区| 国产一区二区三区四| 欧美区在线观看| 午夜影院在线观看欧美| 97精品超碰一区二区三区| 中文字幕av一区 二区| 成人性视频免费网站| 日本一区二区三区四区在线视频| 国产精品亚洲а∨天堂免在线| 久久综合九色综合久久久精品综合| 美女视频黄久久| 精品久久99ma| 国产风韵犹存在线视精品| 欧美精品一区二区三区在线| 狠狠久久亚洲欧美| 久久久久青草大香线综合精品| 另类专区欧美蜜桃臀第一页| 日韩午夜精品视频| 美女爽到高潮91| 337p粉嫩大胆噜噜噜噜噜91av| 精品一区二区三区免费观看 | 国产综合久久久久久久久久久久| 精品粉嫩aⅴ一区二区三区四区| 久久99九九99精品| 久久久夜色精品亚洲| 国产精品亚洲人在线观看| 国产欧美精品国产国产专区| 成人国产电影网| 亚洲综合视频在线观看| 欧美日韩国产高清一区二区| 亚洲国产精品欧美一二99| 欧美日韩精品欧美日韩精品| 日本vs亚洲vs韩国一区三区| 精品国产一区二区国模嫣然| 成人国产亚洲欧美成人综合网| 亚洲精品国产无套在线观| 欧美无人高清视频在线观看| 日韩av在线发布| 欧美国产日韩a欧美在线观看| 99久久久精品免费观看国产蜜| 亚洲制服欧美中文字幕中文字幕| 欧美日韩一区二区在线观看视频| 美女视频黄久久| 亚洲人成网站在线| 欧美一区二区三区不卡| 国产一区二区三区四区五区入口| 亚洲毛片av在线| 精品黑人一区二区三区久久| 91啦中文在线观看| 精品制服美女丁香| 亚洲一级二级在线| 国产欧美日韩中文久久| 欧美三级午夜理伦三级中视频| 美美哒免费高清在线观看视频一区二区 | 337p粉嫩大胆噜噜噜噜噜91av| 99re这里只有精品视频首页| 日本在线播放一区二区三区| 亚洲欧洲国产日本综合| 日韩精品综合一本久道在线视频| 北条麻妃国产九九精品视频| 日韩经典一区二区| 亚洲欧美综合在线精品| 一区在线中文字幕| 中文字幕在线不卡一区| 国产精品久久免费看| 国产精品视频第一区| 国产欧美一区二区三区网站| 国产亚洲精品bt天堂精选| 久久午夜电影网| 久久色中文字幕| 国产日韩欧美亚洲| 欧美经典三级视频一区二区三区| 国产欧美日韩在线视频| 国产精品污www在线观看| 国产精品电影院| 一区二区三区在线视频播放| 一区二区三区在线免费视频| 亚洲午夜电影在线观看| 视频一区视频二区中文| 偷窥国产亚洲免费视频| 日韩av网站在线观看| 韩国女主播成人在线观看| 国产一区二区91| 99视频一区二区| 欧美日韩视频在线第一区| 欧美一级生活片| 久久久久久**毛片大全| 中文字幕一区二区三区在线观看 | 久久99国产精品麻豆| 国产精品自拍av| 91蜜桃网址入口| 欧美日韩一区成人| 欧美成人vps| 亚洲欧美怡红院| 热久久国产精品| 国产91在线看| 欧美在线观看一二区| 日韩欧美精品三级| 国产精品沙发午睡系列990531| 夜夜爽夜夜爽精品视频| 狠狠色综合色综合网络| 色一区在线观看| 久久一日本道色综合| 亚洲午夜在线观看视频在线| 精品一区二区三区在线观看| 91麻豆精品秘密| 精品国产乱码久久| 亚洲国产另类av| 国产91精品一区二区| 欧美日韩三级在线| 国产精品久久久久久一区二区三区 | 在线观看一区不卡| 久久理论电影网| 日本欧美大码aⅴ在线播放| av在线播放不卡| 久久久久久影视| 毛片一区二区三区| 欧美色倩网站大全免费|