⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 os_core.txt

📁 IARSOURCECODE是基于LPC2478嵌入式软件IAR EWARM V4.42的应用实例代码
💻 TXT
📖 第 1 页 / 共 5 页
字号:
;;;1380   }
                          ENDP

                  OS_InitTaskIdle PROC
;;;970    static  void  OS_InitTaskIdle (void)
;;;971    {
000408  e52de004          PUSH     {lr}
00040c  e24dd01c          SUB      sp,sp,#0x1c
;;;972    #if OS_TASK_NAME_SIZE > 7
;;;973        INT8U  err;
;;;974    #endif
;;;975    
;;;976    
;;;977    #if OS_TASK_CREATE_EXT_EN > 0
;;;978        #if OS_STK_GROWTH == 1
;;;979        (void)OSTaskCreateExt(OS_TaskIdle,
000410  e3a03003          MOV      r3,#3
000414  e3a02000          MOV      r2,#0
000418  e3a01080          MOV      r1,#0x80
00041c  e59f019c          LDR      r0,|L1.1472|
000420  e98d000f          STMIB    sp,{r0-r3}
000424  e59f3198          LDR      r3,|L1.1476|
000428  e58d3000          STR      r3,[sp,#0]
00042c  e3a0301f          MOV      r3,#0x1f
000430  e2802f7f          ADD      r2,r0,#0x1fc
000434  e3a01000          MOV      r1,#0
000438  e24f0070          ADR      r0,OS_TaskIdle
00043c  ebfffffe          BL       OSTaskCreateExt
;;;980                              (void *)0,                                 /* No arguments passed to OS_TaskIdle() */
;;;981                              &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1], /* Set Top-Of-Stack                     */
;;;982                              OS_TASK_IDLE_PRIO,                         /* Lowest priority level                */
;;;983                              OS_TASK_IDLE_ID,
;;;984                              &OSTaskIdleStk[0],                         /* Set Bottom-Of-Stack                  */
;;;985                              OS_TASK_IDLE_STK_SIZE,
;;;986                              (void *)0,                                 /* No TCB extension                     */
;;;987                              OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);/* Enable stack checking + clear stack  */
;;;988        #else
;;;989        (void)OSTaskCreateExt(OS_TaskIdle,
;;;990                              (void *)0,                                 /* No arguments passed to OS_TaskIdle() */
;;;991                              &OSTaskIdleStk[0],                         /* Set Top-Of-Stack                     */
;;;992                              OS_TASK_IDLE_PRIO,                         /* Lowest priority level                */
;;;993                              OS_TASK_IDLE_ID,
;;;994                              &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1], /* Set Bottom-Of-Stack                  */
;;;995                              OS_TASK_IDLE_STK_SIZE,
;;;996                              (void *)0,                                 /* No TCB extension                     */
;;;997                              OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);/* Enable stack checking + clear stack  */
;;;998        #endif
;;;999    #else
;;;1000       #if OS_STK_GROWTH == 1
;;;1001       (void)OSTaskCreate(OS_TaskIdle,
;;;1002                          (void *)0,
;;;1003                          &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1],
;;;1004                          OS_TASK_IDLE_PRIO);
;;;1005       #else
;;;1006       (void)OSTaskCreate(OS_TaskIdle,
;;;1007                          (void *)0,
;;;1008                          &OSTaskIdleStk[0],
;;;1009                          OS_TASK_IDLE_PRIO);
;;;1010       #endif
;;;1011   #endif
;;;1012   
;;;1013   #if OS_TASK_NAME_SIZE > 14
;;;1014       OSTaskNameSet(OS_TASK_IDLE_PRIO, (INT8U *)"uC/OS-II Idle", &err);
000440  e28d2018          ADD      r2,sp,#0x18
000444  e28f1f5f          ADR      r1,|L1.1480|
000448  e3a0001f          MOV      r0,#0x1f
00044c  ebfffffe          BL       OSTaskNameSet
;;;1015   #else
;;;1016   #if OS_TASK_NAME_SIZE > 7
;;;1017       OSTaskNameSet(OS_TASK_IDLE_PRIO, (INT8U *)"OS-Idle", &err);
;;;1018   #endif
;;;1019   #endif
;;;1020   }
000450  e28dd01c          ADD      sp,sp,#0x1c
000454  e49de004          POP      {lr}
000458  e12fff1e          BX       lr
                          ENDP

                  OS_MemClr PROC
;;;1152   {
;;;1153       while (size > 0) {
00045c  ea000004          B        |L1.1140|
                  |L1.1120|
;;;1154           *pdest++ = (INT8U)0;
000460  e3a02000          MOV      r2,#0
000464  e4c02001          STRB     r2,[r0],#1
;;;1155           size--;
000468  e2412001          SUB      r2,r1,#1
00046c  e1a01802          LSL      r1,r2,#16
000470  e1a01821          LSR      r1,r1,#16
                  |L1.1140|
000474  e3510000          CMP      r1,#0
000478  cafffff8          BGT      |L1.1120|
;;;1156       }
;;;1157   }
00047c  e12fff1e          BX       lr
                          ENDP

                  OS_InitEventList PROC
;;;843    static  void  OS_InitEventList (void)
;;;844    {
000480  e92d4030          PUSH     {r4,r5,lr}
;;;845    #if OS_EVENT_EN && (OS_MAX_EVENTS > 0)
;;;846    #if (OS_MAX_EVENTS > 1)
;;;847        INT16U     i;
;;;848        OS_EVENT  *pevent1;
;;;849        OS_EVENT  *pevent2;
;;;850    
;;;851    
;;;852        OS_MemClr((INT8U *)&OSEventTbl[0], sizeof(OSEventTbl)); /* Clear the event table                   */
000484  e3a01d05          MOV      r1,#0x140
000488  e59f0148          LDR      r0,|L1.1496|
00048c  ebfffffe          BL       OS_MemClr
;;;853        pevent1 = &OSEventTbl[0];
000490  e59f5140          LDR      r5,|L1.1496|
;;;854        pevent2 = &OSEventTbl[1];
000494  e2854020          ADD      r4,r5,#0x20
;;;855        for (i = 0; i < (OS_MAX_EVENTS - 1); i++) {             /* Init. list of free EVENT control blocks */
000498  e3a03000          MOV      r3,#0
00049c  ea00000a          B        |L1.1228|
                  |L1.1184|
;;;856            pevent1->OSEventType    = OS_EVENT_TYPE_UNUSED;
0004a0  e3a00000          MOV      r0,#0
0004a4  e5c50000          STRB     r0,[r5,#0]
;;;857            pevent1->OSEventPtr     = pevent2;
0004a8  e5854004          STR      r4,[r5,#4]
;;;858    #if OS_EVENT_NAME_SIZE > 1
;;;859            pevent1->OSEventName[0] = '?';                      /* Unknown name                            */
0004ac  e3a0003f          MOV      r0,#0x3f
0004b0  e5c5000f          STRB     r0,[r5,#0xf]
;;;860            pevent1->OSEventName[1] = OS_ASCII_NUL;
0004b4  e3a00000          MOV      r0,#0
0004b8  e5c50010          STRB     r0,[r5,#0x10]
;;;861    #endif
;;;862            pevent1++;
0004bc  e2855020          ADD      r5,r5,#0x20
;;;863            pevent2++;
0004c0  e2844020          ADD      r4,r4,#0x20
0004c4  e2830001          ADD      r0,r3,#1
0004c8  e3c03801          BIC      r3,r0,#0x10000
                  |L1.1228|
0004cc  e3530009          CMP      r3,#9
0004d0  bafffff2          BLT      |L1.1184|
;;;864        }
;;;865        pevent1->OSEventType            = OS_EVENT_TYPE_UNUSED;
0004d4  e3a00000          MOV      r0,#0
0004d8  e5c50000          STRB     r0,[r5,#0]
;;;866        pevent1->OSEventPtr             = (OS_EVENT *)0;
0004dc  e5850004          STR      r0,[r5,#4]
;;;867    #if OS_EVENT_NAME_SIZE > 1
;;;868        pevent1->OSEventName[0]         = '?';
0004e0  e3a0003f          MOV      r0,#0x3f
0004e4  e5c5000f          STRB     r0,[r5,#0xf]
;;;869        pevent1->OSEventName[1]         = OS_ASCII_NUL;
0004e8  e3a00000          MOV      r0,#0
0004ec  e5c50010          STRB     r0,[r5,#0x10]
;;;870    #endif
;;;871        OSEventFreeList                 = &OSEventTbl[0];
0004f0  e59f00e0          LDR      r0,|L1.1496|
0004f4  e59f10e0          LDR      r1,|L1.1500|
0004f8  e5810000          STR      r0,[r1,#0]  ; OSEventFreeList
;;;872    #else
;;;873        OSEventFreeList                 = &OSEventTbl[0];       /* Only have ONE event control block       */
;;;874        OSEventFreeList->OSEventType    = OS_EVENT_TYPE_UNUSED;
;;;875        OSEventFreeList->OSEventPtr     = (OS_EVENT *)0;
;;;876    #if OS_EVENT_NAME_SIZE > 1
;;;877        OSEventFreeList->OSEventName[0] = '?';                  /* Unknown name                            */
;;;878        OSEventFreeList->OSEventName[1] = OS_ASCII_NUL;
;;;879    #endif
;;;880    #endif
;;;881    #endif
;;;882    }
0004fc  e8bd4030          POP      {r4,r5,lr}
000500  e12fff1e          BX       lr
                          ENDP

                  OS_InitTCBList PROC
;;;1102   static  void  OS_InitTCBList (void)
;;;1103   {
000504  e92d4030          PUSH     {r4,r5,lr}
;;;1104       INT8U    i;
;;;1105       OS_TCB  *ptcb1;
;;;1106       OS_TCB  *ptcb2;
;;;1107   
;;;1108   
;;;1109       OS_MemClr((INT8U *)&OSTCBTbl[0],     sizeof(OSTCBTbl));      /* Clear all the TCBs                 */
000508  e3a01e42          MOV      r1,#0x420
00050c  e59f00cc          LDR      r0,|L1.1504|
000510  ebfffffe          BL       OS_MemClr
;;;1110       OS_MemClr((INT8U *)&OSTCBPrioTbl[0], sizeof(OSTCBPrioTbl));  /* Clear the priority table           */
000514  e3a01080          MOV      r1,#0x80
000518  e59f0070          LDR      r0,|L1.1424|
00051c  ebfffffe          BL       OS_MemClr
;;;1111       ptcb1 = &OSTCBTbl[0];
000520  e59f50b8          LDR      r5,|L1.1504|
;;;1112       ptcb2 = &OSTCBTbl[1];
000524  e2854058          ADD      r4,r5,#0x58
;;;1113       for (i = 0; i < (OS_MAX_TASKS + OS_N_SYS_TASKS - 1); i++) {  /* Init. list of free TCBs            */
000528  e3a03000          MOV      r3,#0
00052c  ea000008          B        |L1.1364|
                  |L1.1328|
;;;1114           ptcb1->OSTCBNext = ptcb2;
000530  e5854014          STR      r4,[r5,#0x14]
;;;1115   #if OS_TASK_NAME_SIZE > 1
;;;1116           ptcb1->OSTCBTaskName[0] = '?';                           /* Unknown name                       */
000534  e3a0003f          MOV      r0,#0x3f
000538  e5c50048          STRB     r0,[r5,#0x48]
;;;1117           ptcb1->OSTCBTaskName[1] = OS_ASCII_NUL;
00053c  e3a00000          MOV      r0,#0
000540  e5c50049          STRB     r0,[r5,#0x49]
;;;1118   #endif
;;;1119           ptcb1++;
000544  e2855058          ADD      r5,r5,#0x58
;;;1120           ptcb2++;
000548  e2844058          ADD      r4,r4,#0x58
00054c  e2830001          ADD      r0,r3,#1
000550  e20030ff          AND      r3,r0,#0xff
                  |L1.1364|
000554  e353000b          CMP      r3,#0xb
000558  3afffff4          BCC      |L1.1328|
;;;1121       }
;;;1122       ptcb1->OSTCBNext = (OS_TCB *)0;                              /* Last OS_TCB                        */
00055c  e3a00000          MOV      r0,#0
000560  e5850014          STR      r0,[r5,#0x14]
;;;1123   #if OS_TASK_NAME_SIZE > 1
;;;1124       ptcb1->OSTCBTaskName[0] = '?';                               /* Unknown name                       */
000564  e3a0003f          MOV      r0,#0x3f
000568  e5c50048          STRB     r0,[r5,#0x48]
;;;1125       ptcb1->OSTCBTaskName[1] = OS_ASCII_NUL;
00056c  e3a00000          MOV      r0,#0
000570  e5c50049          STRB     r0,[r5,#0x49]
;;;1126   #endif
;;;1127       OSTCBList               = (OS_TCB *)0;                       /* TCB lists initializations          */
000574  e59f1068          LDR      r1,|L1.1508|
000578  e5810000          STR      r0,[r1,#0]  ; OSTCBList
;;;1128       OSTCBFreeList           = &OSTCBTbl[0];
00057c  e59f005c          LDR      r0,|L1.1504|
000580  e59f1060          LDR      r1,|L1.1512|
000584  e5810000          STR      r0,[r1,#0]  ; OSTCBFreeList
;;;1129   }
000588  e8bd4030          POP      {r4,r5,lr}
00058c  e12fff1e          BX       lr
                  |L1.1424|
000590  00000000          DCD      OSTCBPrioTbl
                  |L1.1428|
000594  00000000          DCD      OSStatRdy
                  |L1.1432|
000598  00000000          DCD      OSIdleCtrMax
                  |L1.1436|
00059c  00000000          DCD      OSIdleCtr
                  |L1.1440|
0005a0  00000000          DCD      OSIdleCtrRun
                  |L1.1444|
0005a4  00000000          DCD      OSCPUUsage
                  |L1.1448|
0005a8  00000000          DCD      OSTaskStatStk
                  |L1.1452|
0005ac  0000fffe          DCD      0x0000fffe
                  |L1.1456|
0005b0  75432f4f          DCB      "uC/O"
0005b4  532d4949          DCB      "S-II"
0005b8  20537461          DCB      " Sta"
0005bc  74000000          DCB      "t\0\0\0"
                  |L1.1472|
0005c0  00000000          DCD      OSTaskIdleStk
                  |L1.1476|
0005c4  0000ffff          DCD      0x0000ffff
                  |L1.1480|
0005c8  75432f4f          DCB      "uC/O"
0005cc  532d4949          DCB      "S-II"
0005d0  2049646c          DCB      " Idl"
0005d4  65000000          DCB      "e\0\0\0"
                  |L1.1496|
0005d8  00000000          DCD      OSEventTbl
                  |L1.1500|
0005dc  00000000          DCD      OSEventFreeList
                  |L1.1504|
0005e0  00000000          DCD      OSTCBTbl
                  |L1.1508|
0005e4  00000000          DCD      OSTCBList
                  |L1.1512|

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -