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

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

?? os_probe.c

?? NXPLPC2138 平臺下使用UC/0S-II 操作系統. 在IAR工工程環境下的源代碼.帶有一此驅動程序,LCD驅動,還有原開發板的BSP包.
?? C
?? 第 1 頁 / 共 2 頁
字號:
**                                             TASK HOOKS
*********************************************************************************************************
*********************************************************************************************************
*/

/*
*********************************************************************************************************
*                                       OSProbe_TaskCreateHook()
*
* Description : This function is called when a task is created.
*
* Argument(s) : ptcb   is a 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) {
            if (ptcb == (OS_TCB *)0 || ptcb == (OS_TCB *)1) {
                break;                                              /*  ... If ptcb is NULL, then last TCB reached ...      */
            }

                                                                    /*  ... 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洋老外米糕| 亚洲精选免费视频| 91国在线观看| 日本在线观看不卡视频| 欧美大黄免费观看| 成人免费毛片片v| 亚洲视频小说图片| 欧美日韩国产天堂| 久久99国产乱子伦精品免费| 国产网红主播福利一区二区| 成人综合在线视频| 亚洲一区二区三区国产| 最新成人av在线| 欧美在线观看一区| 美国十次综合导航| 国产精品麻豆久久久| 欧美日韩在线播| 国产乱子伦一区二区三区国色天香 | 国产综合色在线视频区| 中文字幕高清一区| 欧美日韩在线三区| 粉嫩av一区二区三区| 一个色综合av| 久久综合99re88久久爱| 色综合天天综合狠狠| 日本不卡一区二区三区| 国产精品成人在线观看| 51午夜精品国产| 91在线视频免费观看| 日本最新不卡在线| 亚洲欧美经典视频| 精品福利在线导航| 欧美色电影在线| 成人在线视频一区| 男女男精品视频| 亚洲欧美日韩国产一区二区三区| 日韩欧美高清dvd碟片| av一二三不卡影片| 乱中年女人伦av一区二区| 亚洲男人的天堂在线aⅴ视频| 日韩丝袜美女视频| 欧美亚洲国产怡红院影院| 国产精品1024久久| 99视频有精品| 蜜桃传媒麻豆第一区在线观看| 亚洲欧美日韩国产综合| 久久久www免费人成精品| 欧美日韩在线播放三区| 91网站视频在线观看| 国产精品一区一区| 久久91精品久久久久久秒播| 亚洲综合一区在线| 亚洲视频每日更新| 日本一区二区三区dvd视频在线| 欧美一区二区精品| 欧美性色黄大片| 91蜜桃在线免费视频| 国产河南妇女毛片精品久久久| 日韩av一区二区三区| 亚洲一区二区三区三| 亚洲欧美激情一区二区| 亚洲日本护士毛茸茸| 国产精品视频一二三区| 日本一二三不卡| 久久女同互慰一区二区三区| 欧美一级片免费看| 欧美一级xxx| 日韩一区二区高清| 91超碰这里只有精品国产| 欧美调教femdomvk| 欧美人狂配大交3d怪物一区| 欧美日韩视频在线一区二区| 欧美日韩国产系列| 欧美日本一道本在线视频| 欧美日韩国产综合久久 | 国产乱子轮精品视频| 国产自产v一区二区三区c| 国产真实乱子伦精品视频| 久久99国产精品免费网站| 精品一区二区三区在线观看国产 | 美女网站色91| 激情av综合网| 国产98色在线|日韩| 成人手机电影网| 91亚洲精品久久久蜜桃网站| 99精品偷自拍| 欧美日韩国产片| 欧美一区二区国产| 久久久久久日产精品| 国产欧美日本一区视频| 国产精品久久99| 伊人色综合久久天天| 亚洲成人av一区二区| 日韩不卡一区二区| 国产一区视频导航| 粉嫩av亚洲一区二区图片| 91同城在线观看| 欧美另类高清zo欧美| 精品国产一区二区三区久久久蜜月| 久久久不卡影院| 亚洲激情第一区| 免费观看在线色综合| 高清在线不卡av| 91国在线观看| 久久日韩粉嫩一区二区三区| 最新国产精品久久精品| 午夜精品福利一区二区三区av| 蓝色福利精品导航| 色综合一区二区| 日韩一区二区在线观看视频| 视频一区视频二区中文字幕| 美女免费视频一区二区| 成人黄色小视频| 在线播放91灌醉迷j高跟美女| 国产网站一区二区| 亚洲图片欧美综合| 成人一区二区三区视频在线观看| 欧美日韩在线直播| 国产欧美一区二区精品仙草咪| 亚洲精品欧美激情| 国产精品一区二区久久精品爱涩| 欧美自拍偷拍午夜视频| 久久亚洲综合av| 亚洲成人免费av| 国产不卡免费视频| 91精品国产一区二区| 亚洲视频在线观看三级| 国产精品一区免费视频| 欧美麻豆精品久久久久久| 1024精品合集| 国产成人午夜精品影院观看视频 | 成人免费毛片app| 欧美福利一区二区| 中文字幕制服丝袜成人av| 精品一区二区久久| 欧美色综合天天久久综合精品| 欧美极品xxx| 国产综合久久久久影院| 91精品免费在线观看| 亚洲综合另类小说| 972aa.com艺术欧美| 国产亚洲精品aa午夜观看| 麻豆成人久久精品二区三区红 | 亚洲男同性恋视频| 国产精品夜夜爽| 日韩欧美国产综合| 秋霞av亚洲一区二区三| 欧洲av在线精品| 亚洲免费观看高清完整版在线观看 | 国产精品美女一区二区三区| 色综合激情五月| 国产精品美女视频| 国产白丝精品91爽爽久久| 久久久欧美精品sm网站| 热久久一区二区| 777欧美精品| 日韩vs国产vs欧美| 欧美一区二区三区婷婷月色| 亚洲午夜日本在线观看| 欧美综合色免费| 亚洲国产精品一区二区www在线| 色婷婷av久久久久久久| 亚洲日本丝袜连裤袜办公室| 不卡av在线免费观看| 1000部国产精品成人观看| 99久久精品费精品国产一区二区 | 有坂深雪av一区二区精品| 99免费精品在线| 亚洲精品国产无套在线观| 色哟哟一区二区| 亚洲一级二级三级在线免费观看| 色播五月激情综合网| 亚洲电影一级黄| 7777精品伊人久久久大香线蕉完整版 | 久久精品视频在线免费观看 | 久久爱www久久做| 久久久久成人黄色影片| 丁香婷婷深情五月亚洲| 一色桃子久久精品亚洲| 在线国产亚洲欧美| 青青草97国产精品免费观看| 日韩欧美中文字幕公布| 国产91富婆露脸刺激对白| 亚洲男人的天堂在线aⅴ视频| 欧洲中文字幕精品| 美女尤物国产一区| 久久精品亚洲乱码伦伦中文| 成人国产在线观看| 亚洲第一狼人社区| 精品成人一区二区三区| www.日韩av| 日韩电影免费一区| 久久久蜜桃精品| 色婷婷综合久久久中文字幕| 亚洲h在线观看| 国产人成亚洲第一网站在线播放| zzijzzij亚洲日本少妇熟睡| 午夜久久久久久久久| 2024国产精品|