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

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

?? os_probe.c

?? ucos2.86版本結合STM板極支持包
?? C
?? 第 1 頁 / 共 2 頁
字號:
*
* Description: This routine sets the delay used in OSProbe_Task()
*
* Argument(s): delay    is the delay, in milliseconds.
*
* Returns    : none.
*********************************************************************************************************
*/

#if OS_PROBE_TASK > 0
void    OSProbe_SetDelay (INT16U  delay)
{
    OSProbe_Delay = delay;
}
#endif


/*
*********************************************************************************************************
*********************************************************************************************************
**                                             TASK HOOKS
*********************************************************************************************************
*********************************************************************************************************
*/

/*
*********************************************************************************************************
*                               uC/Probe Plug-in for uC/OS-II TASK CREATE HOOK
*
* Description: This function MUST be called by uC/OS-II's Task Create Hook function: OSTaskCreateHook().
*********************************************************************************************************
*/

#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


/*
*********************************************************************************************************
*                               uC/Probe Plug-in for uC/OS-II TASK SWITCH HOOK
*
* Description: This function MUST be called by uC/OS-II's Task Switch Hook function: OSTaskSwHook().
*********************************************************************************************************
*/

#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


/*
*********************************************************************************************************
*                               uC/Probe Plug-in for uC/OS-II TICK HOOK
*
* Description: This function is currently unused.
*
* Returns    : None
*********************************************************************************************************
*/

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


/*
*********************************************************************************************************
*                                           Get time [cycles]
*
* Description: This routine is required for task execution time measurement.  This function needs to
*              return time as accurately as possible and in a 32-bit variable.
*
* Returns    : 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
*********************************************************************************************************
*********************************************************************************************************
*/

/*
*********************************************************************************************************
*                                            uC/OS-II Task
*
* Description: This function 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    is the argument passed to OSProbe_Task() by 'OSTaskCreate()'.
*
* Returns    : 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];



    (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_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
            }

            ptcb = ptcb->OSTCBPrev;

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

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕高清不卡| 91精品国产一区二区三区蜜臀| 国产视频视频一区| 国产一区二区三区av电影| 26uuu久久综合| 国产成人h网站| 亚洲人成影院在线观看| 欧美日韩一区二区三区四区 | 国产欧美日韩激情| 国产一区在线不卡| 亚洲国产高清在线| 在线亚洲欧美专区二区| 奇米四色…亚洲| 久久久精品2019中文字幕之3| 国产精品资源网站| 亚洲精品国产一区二区精华液 | 日韩午夜激情视频| 国产高清在线观看免费不卡| 欧美精彩视频一区二区三区| 91官网在线免费观看| 蜜桃久久精品一区二区| 国产欧美在线观看一区| 欧美色国产精品| 韩国精品主播一区二区在线观看| 中文字幕一区视频| 91精品在线一区二区| 国产suv一区二区三区88区| 亚洲精品日产精品乱码不卡| 欧美一区二区久久| 99免费精品视频| 日本vs亚洲vs韩国一区三区| 国产精品久久久久久久岛一牛影视 | 成人黄页毛片网站| 午夜精品爽啪视频| 国产精品午夜在线| 91精品久久久久久久久99蜜臂| 成人免费视频caoporn| 日本成人在线一区| 亚洲天堂2016| 精品国产亚洲一区二区三区在线观看| 91婷婷韩国欧美一区二区| 精品制服美女丁香| 五月天国产精品| 亚洲欧美色一区| 国产日韩亚洲欧美综合| 51精品久久久久久久蜜臀| 97久久超碰国产精品| 国内精品久久久久影院薰衣草 | 久色婷婷小香蕉久久| 一区二区在线看| 国产精品丝袜黑色高跟| ww久久中文字幕| 91精品国产综合久久精品图片| 91在线高清观看| 成人一区二区三区在线观看| 免费成人在线观看视频| 亚洲韩国精品一区| 中文字幕+乱码+中文字幕一区| 欧美变态tickle挠乳网站| 欧美丰满少妇xxxbbb| 欧美综合在线视频| 94-欧美-setu| 99久久国产免费看| av在线播放一区二区三区| 国产一区二区三区香蕉| 免费一区二区视频| 日韩精品一二区| 天堂资源在线中文精品| 亚洲国产精品精华液网站| 一区二区三区美女视频| 亚洲欧美国产77777| 国产精品美女久久久久久久网站| 久久久精品中文字幕麻豆发布| 日韩欧美一级二级| 26uuu国产电影一区二区| 欧美mv日韩mv| 久久综合视频网| 久久亚洲影视婷婷| 久久久久久久久99精品| www日韩大片| 国产三级欧美三级日产三级99 | 在线不卡a资源高清| 欧美日韩的一区二区| 欧美日韩一区二区三区高清 | 久久久欧美精品sm网站| 久久精品一区四区| 国产精品美女久久久久久久| 中文字幕视频一区| 一区二区高清视频在线观看| 一区二区三区在线免费视频| 亚洲一二三级电影| 蜜桃精品视频在线观看| 狠狠色综合日日| 成人av电影观看| 色8久久人人97超碰香蕉987| 欧美日韩黄色一区二区| 欧美激情综合网| 国产精品天天摸av网| 综合在线观看色| 一区二区三区在线视频观看 | 一区二区成人在线观看| 五月天亚洲精品| 国内成+人亚洲+欧美+综合在线| 国产美女一区二区| 成a人片国产精品| 欧美性猛交xxxx乱大交退制版| 欧美日韩和欧美的一区二区| 日韩欧美成人一区二区| 国产精品久久看| 天堂成人国产精品一区| 国产成人日日夜夜| 色久优优欧美色久优优| 在线播放国产精品二区一二区四区| 日韩精品综合一本久道在线视频| 国产精品久久久久三级| 午夜电影久久久| 国产成人精品综合在线观看| 欧美日韩中文另类| 久久久久久久综合狠狠综合| 亚洲精品国产一区二区精华液 | 亚洲人成在线观看一区二区| 青草av.久久免费一区| 成人99免费视频| 3751色影院一区二区三区| 欧美国产禁国产网站cc| 亚洲成av人影院| av亚洲产国偷v产偷v自拍| 日韩欧美一区电影| 亚洲综合图片区| 国产suv一区二区三区88区| 这里只有精品99re| 中文字幕一区二区三区蜜月| 另类小说色综合网站| 在线一区二区观看| 国产欧美一区二区三区鸳鸯浴 | 2024国产精品视频| 亚洲国产毛片aaaaa无费看| 激情五月激情综合网| 精品视频一区二区不卡| 国产精品免费免费| 国内精品免费**视频| 7777精品久久久大香线蕉| 综合久久给合久久狠狠狠97色| 国产一区二区在线观看视频| 欧美日韩和欧美的一区二区| 亚洲日本护士毛茸茸| 丁香婷婷深情五月亚洲| 2欧美一区二区三区在线观看视频| 污片在线观看一区二区| 色94色欧美sute亚洲线路二| 中文字幕第一页久久| 国产原创一区二区| 欧美刺激午夜性久久久久久久| 亚洲一区二区三区在线看| 99这里只有精品| 中文字幕欧美日本乱码一线二线 | 青椒成人免费视频| 欧美日韩久久一区| 亚洲愉拍自拍另类高清精品| 波多野结衣一区二区三区| 久久久久久久久久久电影| 激情av综合网| 精品国产伦一区二区三区观看体验 | 日韩一级黄色大片| 日本怡春院一区二区| 欧美欧美午夜aⅴ在线观看| 亚洲一区二区在线视频| 在线看不卡av| 午夜精品一区二区三区免费视频| 在线观看一区二区精品视频| 一区二区三区四区视频精品免费| 99精品欧美一区| 亚洲另类在线视频| 91久久精品一区二区| 一区二区成人在线| 欧美另类高清zo欧美| 日韩黄色在线观看| 日韩欧美在线综合网| 裸体健美xxxx欧美裸体表演| 欧美精品一区二区三区一线天视频| 狠狠色狠狠色综合| 国产农村妇女精品| 国产福利91精品| 亚洲欧美影音先锋| 91九色最新地址| 日韩成人午夜精品| 久久综合av免费| 成人精品在线视频观看| 亚洲三级免费电影| 欧美日韩精品系列| 久久99国产精品免费网站| 欧美国产综合色视频| 91蜜桃网址入口| 日韩一区精品字幕| 久久精品亚洲精品国产欧美kt∨| 顶级嫩模精品视频在线看| 亚洲欧美偷拍卡通变态| 91麻豆精品国产| 亚洲成人自拍网| 久久婷婷色综合|