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

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

?? os_core.c

?? arm7學習資料
?? C
?? 第 1 頁 / 共 3 頁
字號:
/***********************************************************************************************************                                                uC/OS-II*                                          The Real-Time Kernel*                                             CORE FUNCTIONS**                          (c) Copyright 1992-2001, Jean J. Labrosse, Weston, FL*                                           All Rights Reserved** File : OS_CORE.C* By   : Jean J. Labrosse**********************************************************************************************************/#ifndef  OS_MASTER_FILE#define  OS_GLOBALS#include "includes.h"#endif/***********************************************************************************************************                              MAPPING TABLE TO MAP BIT POSITION TO BIT MASK** Note: Index into table is desired bit position, 0..7*       Indexed value corresponds to bit mask**********************************************************************************************************/INT8U  const  OSMapTbl[]   = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};/***********************************************************************************************************                                       PRIORITY RESOLUTION TABLE** Note: Index into table is bit pattern to resolve highest priority*       Indexed value corresponds to highest priority bit position (i.e. 0..7)**********************************************************************************************************/INT8U  const  OSUnMapTbl[] = {    0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,    4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,    5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,    4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,    6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,    4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,    5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,    4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,    7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,    4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,    5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,    4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,    6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,    4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,    5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,    4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0};/*$PAGE*//***********************************************************************************************************                                             INITIALIZATION** Description: This function is used to initialize the internals of uC/OS-II and MUST be called prior to*              creating any uC/OS-II object and, prior to calling OSStart().** Arguments  : none** Returns    : none**********************************************************************************************************/void  OSInit (void){    INT16U     i;    INT8U     *prdytbl;    OS_TCB    *ptcb1;    OS_TCB    *ptcb2;#if (OS_EVENT_EN > 0) && (OS_MAX_EVENTS > 1)    OS_EVENT  *pevent1;    OS_EVENT  *pevent2;#endif#if OS_VERSION >= 204    OSInitHookBegin();                                           /* Call port specific initialization code   */#endif#if OS_TIME_GET_SET_EN > 0       OSTime        = 0L;                                          /* Clear the 32-bit system clock            */#endif    OSIntNesting  = 0;                                           /* Clear the interrupt nesting counter      */    OSLockNesting = 0;                                           /* Clear the scheduling lock counter        */    OSTaskCtr     = 0;                                           /* Clear the number of tasks                */    OSRunning     = FALSE;                                       /* Indicate that multitasking not started   */    OSIdleCtr     = 0L;                                          /* Clear the 32-bit idle counter            */#if (OS_TASK_STAT_EN > 0) && (OS_TASK_CREATE_EXT_EN > 0)    OSIdleCtrRun  = 0L;    OSIdleCtrMax  = 0L;    OSStatRdy     = FALSE;                                       /* Statistic task is not ready              */#endif    OSCtxSwCtr    = 0;                                           /* Clear the context switch counter         */    OSRdyGrp      = 0x00;                                        /* Clear the ready list                     */    prdytbl       = &OSRdyTbl[0];    for (i = 0; i < OS_RDY_TBL_SIZE; i++) {        *prdytbl++ = 0x00;    }    OSPrioCur     = 0;    OSPrioHighRdy = 0;    OSTCBHighRdy  = (OS_TCB *)0;                                 /* TCB Initialization                       */    OSTCBCur      = (OS_TCB *)0;    OSTCBList     = (OS_TCB *)0;    for (i = 0; i < (OS_LOWEST_PRIO + 1); i++) {                 /* Clear the priority table                 */        OSTCBPrioTbl[i] = (OS_TCB *)0;    }    ptcb1 = &OSTCBTbl[0];    ptcb2 = &OSTCBTbl[1];    for (i = 0; i < (OS_MAX_TASKS + OS_N_SYS_TASKS - 1); i++) {  /* Init. list of free TCBs                  */        ptcb1->OSTCBNext = ptcb2;        ptcb1++;        ptcb2++;    }    ptcb1->OSTCBNext = (OS_TCB *)0;                              /* Last OS_TCB                              */    OSTCBFreeList    = &OSTCBTbl[0];#if (OS_EVENT_EN > 0) && (OS_MAX_EVENTS > 0)    #if OS_MAX_EVENTS == 1                                           OSEventFreeList              = &OSEventTbl[0];               /* Only have ONE event control block        */    OSEventFreeList->OSEventType = OS_EVENT_TYPE_UNUSED;    OSEventFreeList->OSEventPtr  = (OS_EVENT *)0;    #else    pevent1 = &OSEventTbl[0];    pevent2 = &OSEventTbl[1];    for (i = 0; i < (OS_MAX_EVENTS - 1); i++) {                  /* Init. list of free EVENT control blocks  */        pevent1->OSEventType = OS_EVENT_TYPE_UNUSED;        pevent1->OSEventPtr  = pevent2;        pevent1++;        pevent2++;    }    pevent1->OSEventType = OS_EVENT_TYPE_UNUSED;    pevent1->OSEventPtr  = (OS_EVENT *)0;    OSEventFreeList      = &OSEventTbl[0];    #endif#endif#if (OS_VERSION >= 251) && (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)    OS_FlagInit();                                               /* Initialize the event flag structures     */#endif#if (OS_Q_EN > 0) && (OS_MAX_QS > 0)    OS_QInit();                                                  /* Initialize the message queue structures  */#endif#if (OS_MEM_EN > 0) && (OS_MAX_MEM_PART > 0)    OS_MemInit();                                                /* Initialize the memory manager            */#endif    /* ------------------------------------- CREATION OF 'IDLE' TASK --------------------------------------- */#if OS_TASK_CREATE_EXT_EN > 0    #if OS_STK_GROWTH == 1    (void)OSTaskCreateExt(OS_TaskIdle,                          (void *)0,                                 /* No arguments passed to OS_TaskIdle() */                          &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1], /* Set Top-Of-Stack                     */                          OS_IDLE_PRIO,                              /* Lowest priority level                */                          OS_TASK_IDLE_ID,                          &OSTaskIdleStk[0],                         /* Set Bottom-Of-Stack                  */                          OS_TASK_IDLE_STK_SIZE,                          (void *)0,                                 /* No TCB extension                     */                          OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);/* Enable stack checking + clear stack  */    #else    (void)OSTaskCreateExt(OS_TaskIdle,                          (void *)0,                                 /* No arguments passed to OS_TaskIdle() */                          &OSTaskIdleStk[0],                         /* Set Top-Of-Stack                     */                          OS_IDLE_PRIO,                              /* Lowest priority level                */                          OS_TASK_IDLE_ID,                          &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1], /* Set Bottom-Of-Stack                  */                          OS_TASK_IDLE_STK_SIZE,                          (void *)0,                                 /* No TCB extension                     */                          OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);/* Enable stack checking + clear stack  */    #endif#else    #if OS_STK_GROWTH == 1    (void)OSTaskCreate(OS_TaskIdle,                       (void *)0,                       &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1],                       OS_IDLE_PRIO);    #else    (void)OSTaskCreate(OS_TaskIdle,                       (void *)0,                       &OSTaskIdleStk[0],                       OS_IDLE_PRIO);    #endif#endif    /* ------------------------------- CREATION OF 'STATISTIC' TASK ---------------------------------- */#if OS_TASK_STAT_EN > 0    #if OS_TASK_CREATE_EXT_EN > 0        #if OS_STK_GROWTH == 1        (void)OSTaskCreateExt(OS_TaskStat,                              (void *)0,                                   /* No args passed to OS_TaskStat()*/                              &OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1],   /* Set Top-Of-Stack               */                              OS_STAT_PRIO,                                /* One higher than the idle task  */                              OS_TASK_STAT_ID,                              &OSTaskStatStk[0],                           /* Set Bottom-Of-Stack            */                              OS_TASK_STAT_STK_SIZE,                              (void *)0,                                   /* No TCB extension               */                              OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);  /* Enable stack checking + clear  */        #else        (void)OSTaskCreateExt(OS_TaskStat,                              (void *)0,                                   /* No args passed to OS_TaskStat()*/                              &OSTaskStatStk[0],                           /* Set Top-Of-Stack               */                              OS_STAT_PRIO,                                /* One higher than the idle task  */                              OS_TASK_STAT_ID,                              &OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1],   /* Set Bottom-Of-Stack            */                              OS_TASK_STAT_STK_SIZE,                              (void *)0,                                   /* No TCB extension               */                              OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);  /* Enable stack checking + clear  */        #endif    #else        #if OS_STK_GROWTH == 1        (void)OSTaskCreate(OS_TaskStat,                           (void *)0,                                      /* No args passed to OS_TaskStat()*/                           &OSTaskStatStk[OS_TASK_STAT_STK_SIZE - 1],      /* Set Top-Of-Stack               */                           OS_STAT_PRIO);                                  /* One higher than the idle task  */        #else        (void)OSTaskCreate(OS_TaskStat,                           (void *)0,                                      /* No args passed to OS_TaskStat()*/                           &OSTaskStatStk[0],                              /* Set Top-Of-Stack               */                           OS_STAT_PRIO);                                  /* One higher than the idle task  */        #endif    #endif#endif#if OS_VERSION >= 204    OSInitHookEnd();                                                       /* Call port specific init. code  */#endif}/*$PAGE*//***********************************************************************************************************                                              ENTER ISR** Description: This function is used to notify uC/OS-II that you are about to service an interrupt*              service routine (ISR).  This allows uC/OS-II to keep track of interrupt nesting and thus*              only perform rescheduling at the last nested ISR.** Arguments  : none** Returns    : none** Notes      : 1) Your ISR can directly increment OSIntNesting without calling this function because*                 OSIntNesting has been declared 'global'.  You MUST, however, be sure that the increment*                 is performed 'indivisibly' by your processor to ensure proper access to this critical*                 resource.*              2) You MUST still call OSIntExit() even though you increment OSIntNesting directly.*              3) You MUST invoke OSIntEnter() and OSIntExit() in pair.  In other words, for every call*                 to OSIntEnter() at the beginning of the ISR you MUST have a call to OSIntExit() at the*                 end of the ISR.**********************************************************************************************************/void  OSIntEnter (void){#if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */    OS_CPU_SR  cpu_sr;#endif                OS_ENTER_CRITICAL();    if (OSIntNesting < 255) {        OSIntNesting++;                          /* Increment ISR nesting level                        */    }    OS_EXIT_CRITICAL();}/*$PAGE*//***********************************************************************************************************                                               EXIT ISR** Description: This function is used to notify uC/OS-II that you have completed serviving an ISR.  When*              the last nested ISR has completed, uC/OS-II will call the scheduler to determine whether*              a new, high-priority task, is ready to run.** Arguments  : none** Returns    : none** Notes      : 1) You MUST invoke OSIntEnter() and OSIntExit() in pair.  In other words, for every call*                 to OSIntEnter() at the beginning of the ISR you MUST have a call to OSIntExit() at the*                 end of the ISR.*              2) Rescheduling is prevented when the scheduler is locked (see OSSchedLock())**********************************************************************************************************/void  OSIntExit (void){#if OS_CRITICAL_METHOD == 3                            /* Allocate storage for CPU status register     */    OS_CPU_SR  cpu_sr;#endif            OS_ENTER_CRITICAL();    if (OSIntNesting > 0) {                            /* Prevent OSIntNesting from wrapping           */        OSIntNesting--;    }    if ((OSIntNesting == 0) && (OSLockNesting == 0)) { /* Reschedule only if all ISRs complete ...     */        OSIntExitY    = OSUnMapTbl[OSRdyGrp];          /* ... and not locked.                          */        OSPrioHighRdy = (INT8U)((OSIntExitY << 3) + OSUnMapTbl[OSRdyTbl[OSIntExitY]]);        if (OSPrioHighRdy != OSPrioCur) {              /* No Ctx Sw if current task is highest rdy     */            OSTCBHighRdy  = OSTCBPrioTbl[OSPrioHighRdy];            OSCtxSwCtr++;                              /* Keep track of the number of context switches */            OSIntCtxSw();                              /* Perform interrupt level context switch       */        }    }    OS_EXIT_CRITICAL();}/*$PAGE*//***********************************************************************************************************                                          PREVENT SCHEDULING** Description: This function is used to prevent rescheduling to take place.  This allows your application*              to prevent context switches until you are ready to permit context switching.** Arguments  : none

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美国产麻豆| av亚洲精华国产精华精华| 欧美图区在线视频| 亚洲一区二区三区在线播放| 在线视频国产一区| 亚洲18影院在线观看| 欧美一级片在线| 国产一区二区三区免费看| 久久久午夜精品理论片中文字幕| 中文成人综合网| 97精品电影院| 中文子幕无线码一区tr| 青青草伊人久久| 欧美精品一区二区久久婷婷| 国产精品亚洲成人| 久久毛片高清国产| 性欧美疯狂xxxxbbbb| 精品国产91亚洲一区二区三区婷婷| 亚洲综合精品久久| 日韩欧美另类在线| 成人午夜电影网站| 国产偷国产偷亚洲高清人白洁| 秋霞影院一区二区| 国产精品乱码一区二区三区软件| 国产精品一品二品| 久久毛片高清国产| 色偷偷久久人人79超碰人人澡| 中文字幕人成不卡一区| 欧美精品777| 国产乱人伦偷精品视频免下载| 91精品国产色综合久久不卡电影| 亚洲高清不卡在线| 久久久精品免费观看| 欧美日韩在线直播| 丁香婷婷综合激情五月色| 亚洲成av人片一区二区| 国产校园另类小说区| 国产成人综合在线| 天天色天天操综合| 中文字幕亚洲成人| 2023国产精品| 这里只有精品电影| 91麻豆国产自产在线观看| 理论片日本一区| 亚洲高清不卡在线| 亚洲日本护士毛茸茸| 26uuu亚洲| 日韩欧美一区电影| 欧美亚洲日本国产| www.欧美.com| 国产美女视频一区| 卡一卡二国产精品| 亚洲二区视频在线| 亚洲九九爱视频| 国产精品毛片久久久久久久| 91在线视频在线| 国产高清不卡一区二区| av影院午夜一区| 国内精品国产成人| 久久精品99国产精品日本| 久久久亚洲高清| 91一区一区三区| 风间由美中文字幕在线看视频国产欧美| 亚洲国产精品99久久久久久久久 | 亚洲一区二区av电影| 国产亚洲欧洲一区高清在线观看| 成人午夜私人影院| 欧美午夜影院一区| 亚洲区小说区图片区qvod| 久久久蜜桃精品| 欧美mv日韩mv亚洲| 97久久久精品综合88久久| 国产成人在线视频网站| 国产精品99久久久久| 国产一区二区在线影院| 精品一区二区三区久久| 亚洲香蕉伊在人在线观| 视频在线观看一区二区三区| 婷婷一区二区三区| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 成人免费视频视频| 亚洲成人www| 亚洲大片免费看| 亚洲国产精品t66y| 国产精品视频免费看| 欧美激情综合在线| 国产精品色噜噜| 亚洲少妇30p| 婷婷久久综合九色综合伊人色| 91精品国产福利在线观看| 欧美日韩高清影院| 日韩欧美国产综合一区| 国产亚洲美州欧州综合国| 久久精品欧美日韩精品| 国产精品女主播av| 亚洲精品久久久久久国产精华液| 久久综合狠狠综合久久综合88| 欧美亚洲愉拍一区二区| 91精品国产综合久久婷婷香蕉 | 99国产一区二区三精品乱码| 美女在线一区二区| 狠狠色丁香久久婷婷综合_中| 一区二区日韩av| 午夜私人影院久久久久| 奇米色一区二区三区四区| 国产一区二区视频在线| 91视频xxxx| 欧美一级片在线观看| 国产欧美久久久精品影院| 亚洲免费在线播放| 日韩精品一区二区三区视频| 欧美韩国日本综合| 久久精品亚洲麻豆av一区二区| 欧美一区三区二区| 欧美日韩高清在线播放| 亚洲欧美另类久久久精品| 一卡二卡三卡日韩欧美| 日韩精品一二三区| 不卡的看片网站| 欧美日韩国产乱码电影| 欧美调教femdomvk| 国产色产综合色产在线视频| 亚洲午夜免费电影| 国产精品一级片在线观看| 欧美色图激情小说| 国产日本欧美一区二区| 亚洲r级在线视频| 国产ts人妖一区二区| 成人精品鲁一区一区二区| 国产精品一区二区久久精品爱涩| 久久99久久99精品免视看婷婷| 蜜臀av一级做a爰片久久| 91色视频在线| 国产亚洲精品中文字幕| 五月天欧美精品| 色欧美88888久久久久久影院| 91丨porny丨国产入口| 久久久国产一区二区三区四区小说| 久久久美女艺术照精彩视频福利播放| 精品久久免费看| 五月天丁香久久| 在线观看精品一区| 国产精品不卡一区二区三区| 久久精品国产久精国产| 国产电影一区二区三区| 日韩免费看的电影| 亚洲国产va精品久久久不卡综合| 免费成人在线视频观看| 欧美视频中文字幕| 亚洲欧美电影院| 秋霞影院一区二区| 欧美精品日韩精品| 国产无遮挡一区二区三区毛片日本| 亚洲国产精品精华液2区45| 久久福利资源站| 99久久99久久免费精品蜜臀| 国产欧美久久久精品影院| 国产综合久久久久影院| 成人黄色免费短视频| 国产女人水真多18毛片18精品视频| 自拍偷拍亚洲欧美日韩| 岛国精品在线观看| 国产欧美精品一区| 国产精品原创巨作av| 久久女同互慰一区二区三区| 韩国精品主播一区二区在线观看| 91丨九色丨尤物| 亚洲丝袜美腿综合| 91蜜桃免费观看视频| 91精品福利在线一区二区三区| 亚洲国产成人午夜在线一区| 国产99久久久国产精品潘金网站| 在线免费av一区| 午夜视频一区二区| 欧美一区中文字幕| 麻豆精品久久久| 一本色道亚洲精品aⅴ| 日韩欧美一级二级三级| 日本三级亚洲精品| 日韩三级视频在线看| 国产一区二区主播在线| 国产欧美一区视频| eeuss鲁片一区二区三区在线看| 91精品国产综合久久久久久久久久| 中文欧美字幕免费| 色成年激情久久综合| www久久精品| av午夜精品一区二区三区| 亚洲国产美女搞黄色| 日韩三级精品电影久久久| 紧缚捆绑精品一区二区| 国产精品理伦片| 欧美日韩免费一区二区三区视频| 18成人在线观看| 欧美性大战久久久久久久 | 欧美成人福利视频| 高清国产一区二区三区| 亚洲最新视频在线观看| 99久久精品国产一区| 国产一区二区在线观看免费|