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

📄 os_core.txt

📁 在KEIL下成功使用UCOS-II嵌入式操作系统
💻 TXT
📖 第 1 页 / 共 5 页
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.0 [Build 947] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o.\os_core.o --device=DARMP -O0 -IC:\Keil\ARM\INC\Philips ..\Source\OS_CORE.C]

                          ARM

                          AREA ||.text.7||, CODE, READONLY, ALIGN=2

                  OS_TaskIdle PROC
;;;777    void  OS_TaskIdle (void *pdata)
;;;778    {
                  |L1.0|
000000  e92d4010          PUSH     {r4,lr}
000004  e1a04000          MOV      r4,r0
;;;779    #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;;;780        OS_CPU_SR  cpu_sr;
;;;781    #endif    
;;;782        
;;;783        
;;;784        pdata = pdata;                               /* Prevent compiler warning for not using 'pdata'     */
000008  e1a00000          MOV      r0,r0
;;;785        for (;;) {
00000c  e1a00000          MOV      r0,r0
;;;786            OS_ENTER_CRITICAL();
                  |L1.16|
000010  ef000002          SVC      0x2  ; formerly SWI
;;;787            OSIdleCtr++;
000014  e59f08a0          LDR      r0,|L1.2236|
000018  e5900000          LDR      r0,[r0,#0]  ; OSIdleCtr
00001c  e2800001          ADD      r0,r0,#1
000020  e59f1894          LDR      r1,|L1.2236|
000024  e5810000          STR      r0,[r1,#0]  ; OSIdleCtr
;;;788            OS_EXIT_CRITICAL();
000028  ef000003          SVC      0x3  ; formerly SWI
;;;789            OSTaskIdleHook();                        /* Call user definable HOOK                           */
00002c  ebfffffe          BL       OSTaskIdleHook
000030  eafffff6          B        |L1.16|
;;;790        }
;;;791    }
                          ENDP

                  OSInit PROC
;;;72     void  OSInit (void)
;;;73     {
000034  e92d47f0          PUSH     {r4-r10,lr}
;;;74         INT16U     i;
;;;75         INT8U     *prdytbl;
;;;76         OS_TCB    *ptcb1;
;;;77         OS_TCB    *ptcb2;
;;;78     #if (OS_EVENT_EN > 0) && (OS_MAX_EVENTS > 1)
;;;79         OS_EVENT  *pevent1;
;;;80         OS_EVENT  *pevent2;
;;;81     #endif
;;;82     
;;;83     
;;;84     #if OS_VERSION >= 204
;;;85         OSInitHookBegin();                                           /* Call port specific initialization code   */
000038  ebfffffe          BL       OSInitHookBegin
;;;86     #endif
;;;87     
;;;88     #if OS_TIME_GET_SET_EN > 0   
;;;89         OSTime        = 0L;                                          /* Clear the 32-bit system clock            */
00003c  e3a00000          MOV      r0,#0
000040  e59f1878          LDR      r1,|L1.2240|
000044  e5810000          STR      r0,[r1,#0]  ; OSTime
;;;90     #endif
;;;91         OSIntNesting  = 0;                                           /* Clear the interrupt nesting counter      */
000048  e59f1874          LDR      r1,|L1.2244|
00004c  e5c10000          STRB     r0,[r1,#0]  ; OSIntNesting
;;;92         OSLockNesting = 0;                                           /* Clear the scheduling lock counter        */
000050  e59f1870          LDR      r1,|L1.2248|
000054  e5c10000          STRB     r0,[r1,#0]  ; OSLockNesting
;;;93         OSTaskCtr     = 0;                                           /* Clear the number of tasks                */
000058  e59f186c          LDR      r1,|L1.2252|
00005c  e5c10000          STRB     r0,[r1,#0]  ; OSTaskCtr
;;;94         OSRunning     = FALSE;                                       /* Indicate that multitasking not started   */
000060  e59f1868          LDR      r1,|L1.2256|
000064  e5c10000          STRB     r0,[r1,#0]  ; OSRunning
;;;95         OSIdleCtr     = 0L;                                          /* Clear the 32-bit idle counter            */
000068  e59f184c          LDR      r1,|L1.2236|
00006c  e5810000          STR      r0,[r1,#0]  ; OSIdleCtr
;;;96     #if (OS_TASK_STAT_EN > 0) && (OS_TASK_CREATE_EXT_EN > 0)
;;;97         OSIdleCtrRun  = 0L;
;;;98         OSIdleCtrMax  = 0L;
;;;99         OSStatRdy     = FALSE;                                       /* Statistic task is not ready              */
;;;100    #endif
;;;101        OSCtxSwCtr    = 0;                                           /* Clear the context switch counter         */
000070  e59f185c          LDR      r1,|L1.2260|
000074  e5810000          STR      r0,[r1,#0]  ; OSCtxSwCtr
;;;102        OSRdyGrp      = 0x00;                                        /* Clear the ready list                     */
000078  e59f1858          LDR      r1,|L1.2264|
00007c  e5c10000          STRB     r0,[r1,#0]  ; OSRdyGrp
;;;103        prdytbl       = &OSRdyTbl[0];
000080  e59f5854          LDR      r5,|L1.2268|
;;;104        for (i = 0; i < OS_RDY_TBL_SIZE; i++) {
000084  e3a04000          MOV      r4,#0
000088  ea000003          B        |L1.156|
;;;105            *prdytbl++ = 0x00;
                  |L1.140|
00008c  e3a00000          MOV      r0,#0
000090  e4c50001          STRB     r0,[r5],#1
000094  e2840001          ADD      r0,r4,#1              ;104
000098  e3c04801          BIC      r4,r0,#0x10000        ;104
                  |L1.156|
00009c  e3540002          CMP      r4,#2                 ;104
0000a0  bafffff9          BLT      |L1.140|              ;104
;;;106        }
;;;107    
;;;108        OSPrioCur     = 0;
0000a4  e3a00000          MOV      r0,#0
0000a8  e59f1830          LDR      r1,|L1.2272|
0000ac  e5c10000          STRB     r0,[r1,#0]  ; OSPrioCur
;;;109        OSPrioHighRdy = 0;
0000b0  e59f182c          LDR      r1,|L1.2276|
0000b4  e5c10000          STRB     r0,[r1,#0]  ; OSPrioHighRdy
;;;110        OSTCBHighRdy  = (OS_TCB *)0;                                 /* TCB Initialization                       */
0000b8  e59f1828          LDR      r1,|L1.2280|
0000bc  e5810000          STR      r0,[r1,#0]  ; OSTCBHighRdy
;;;111        OSTCBCur      = (OS_TCB *)0;
0000c0  e59f1824          LDR      r1,|L1.2284|
0000c4  e5810000          STR      r0,[r1,#0]  ; OSTCBCur
;;;112        OSTCBList     = (OS_TCB *)0;
0000c8  e59f1820          LDR      r1,|L1.2288|
0000cc  e5810000          STR      r0,[r1,#0]  ; OSTCBList
;;;113        for (i = 0; i < (OS_LOWEST_PRIO + 1); i++) {                 /* Clear the priority table                 */
0000d0  e3a04000          MOV      r4,#0
0000d4  ea000004          B        |L1.236|
;;;114            OSTCBPrioTbl[i] = (OS_TCB *)0;
                  |L1.216|
0000d8  e3a00000          MOV      r0,#0
0000dc  e59f1810          LDR      r1,|L1.2292|
0000e0  e7810104          STR      r0,[r1,r4,LSL #2]
0000e4  e2840001          ADD      r0,r4,#1              ;113
0000e8  e3c04801          BIC      r4,r0,#0x10000        ;113
                  |L1.236|
0000ec  e354000d          CMP      r4,#0xd               ;113
0000f0  bafffff8          BLT      |L1.216|              ;113
;;;115        }
;;;116        ptcb1 = &OSTCBTbl[0];
0000f4  e59f67fc          LDR      r6,|L1.2296|
;;;117        ptcb2 = &OSTCBTbl[1];
0000f8  e2867024          ADD      r7,r6,#0x24
;;;118        for (i = 0; i < (OS_MAX_TASKS + OS_N_SYS_TASKS - 1); i++) {  /* Init. list of free TCBs                  */
0000fc  e3a04000          MOV      r4,#0
000100  ea000004          B        |L1.280|
;;;119            ptcb1->OSTCBNext = ptcb2;
                  |L1.260|
000104  e5867004          STR      r7,[r6,#4]
;;;120            ptcb1++;
000108  e2866024          ADD      r6,r6,#0x24
;;;121            ptcb2++;
00010c  e2877024          ADD      r7,r7,#0x24
000110  e2840001          ADD      r0,r4,#1              ;118
000114  e3c04801          BIC      r4,r0,#0x10000        ;118
                  |L1.280|
000118  e354000b          CMP      r4,#0xb               ;118
00011c  bafffff8          BLT      |L1.260|              ;118
;;;122        }
;;;123        ptcb1->OSTCBNext = (OS_TCB *)0;                              /* Last OS_TCB                              */
000120  e3a00000          MOV      r0,#0
000124  e5860004          STR      r0,[r6,#4]
;;;124        OSTCBFreeList    = &OSTCBTbl[0];
000128  e59f07c8          LDR      r0,|L1.2296|
00012c  e59f17c8          LDR      r1,|L1.2300|
000130  e5810000          STR      r0,[r1,#0]  ; OSTCBFreeList
;;;125    
;;;126    #if (OS_EVENT_EN > 0) && (OS_MAX_EVENTS > 0)
;;;127        #if OS_MAX_EVENTS == 1                                       
;;;128        OSEventFreeList              = &OSEventTbl[0];               /* Only have ONE event control block        */
;;;129        OSEventFreeList->OSEventType = OS_EVENT_TYPE_UNUSED;
;;;130        OSEventFreeList->OSEventPtr  = (OS_EVENT *)0;
;;;131        #else
;;;132        pevent1 = &OSEventTbl[0];
000134  e59f87c4          LDR      r8,|L1.2304|
;;;133        pevent2 = &OSEventTbl[1];
000138  e288900c          ADD      r9,r8,#0xc
;;;134        for (i = 0; i < (OS_MAX_EVENTS - 1); i++) {                  /* Init. list of free EVENT control blocks  */
00013c  e3a04000          MOV      r4,#0
000140  ea000006          B        |L1.352|
;;;135            pevent1->OSEventType = OS_EVENT_TYPE_UNUSED;
                  |L1.324|
000144  e3a00000          MOV      r0,#0
000148  e5c80000          STRB     r0,[r8,#0]
;;;136            pevent1->OSEventPtr  = pevent2;
00014c  e5889004          STR      r9,[r8,#4]
;;;137            pevent1++;
000150  e288800c          ADD      r8,r8,#0xc
;;;138            pevent2++;
000154  e289900c          ADD      r9,r9,#0xc
000158  e2840001          ADD      r0,r4,#1              ;134
00015c  e3c04801          BIC      r4,r0,#0x10000        ;134
                  |L1.352|
000160  e3540001          CMP      r4,#1                 ;134
000164  bafffff6          BLT      |L1.324|              ;134
;;;139        }
;;;140        pevent1->OSEventType = OS_EVENT_TYPE_UNUSED;
000168  e3a00000          MOV      r0,#0
00016c  e5c80000          STRB     r0,[r8,#0]
;;;141        pevent1->OSEventPtr  = (OS_EVENT *)0;
000170  e5880004          STR      r0,[r8,#4]
;;;142        OSEventFreeList      = &OSEventTbl[0];
000174  e59f0784          LDR      r0,|L1.2304|
000178  e59f1784          LDR      r1,|L1.2308|
00017c  e5810000          STR      r0,[r1,#0]  ; OSEventFreeList
;;;143        #endif
;;;144    #endif
;;;145    
;;;146    #if (OS_VERSION >= 251) && (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
;;;147        OS_FlagInit();                                               /* Initialize the event flag structures     */
000180  ebfffffe          BL       OS_FlagInit
;;;148    #endif
;;;149    
;;;150    #if (OS_Q_EN > 0) && (OS_MAX_QS > 0)
;;;151        OS_QInit();                                                  /* Initialize the message queue structures  */
000184  ebfffffe          BL       OS_QInit
;;;152    #endif
;;;153    
;;;154    #if (OS_MEM_EN > 0) && (OS_MAX_MEM_PART > 0)
;;;155        OS_MemInit();                                                /* Initialize the memory manager            */
000188  ebfffffe          BL       OS_MemInit
;;;156    #endif
;;;157    
;;;158        /* ------------------------------------- CREATION OF 'IDLE' TASK --------------------------------------- */
;;;159    #if OS_TASK_CREATE_EXT_EN > 0
;;;160        #if OS_STK_GROWTH == 1
;;;161        (void)OSTaskCreateExt(OS_TaskIdle,
;;;162                              (void *)0,                                 /* No arguments passed to OS_TaskIdle() */
;;;163                              &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1], /* Set Top-Of-Stack                     */
;;;164                              OS_IDLE_PRIO,                              /* Lowest priority level                */
;;;165                              OS_TASK_IDLE_ID,
;;;166                              &OSTaskIdleStk[0],                         /* Set Bottom-Of-Stack                  */
;;;167                              OS_TASK_IDLE_STK_SIZE,
;;;168                              (void *)0,                                 /* No TCB extension                     */
;;;169                              OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);/* Enable stack checking + clear stack  */
;;;170        #else
;;;171        (void)OSTaskCreateExt(OS_TaskIdle,
;;;172                              (void *)0,                                 /* No arguments passed to OS_TaskIdle() */
;;;173                              &OSTaskIdleStk[0],                         /* Set Top-Of-Stack                     */
;;;174                              OS_IDLE_PRIO,                              /* Lowest priority level                */
;;;175                              OS_TASK_IDLE_ID,
;;;176                              &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1], /* Set Bottom-Of-Stack                  */
;;;177                              OS_TASK_IDLE_STK_SIZE,
;;;178                              (void *)0,                                 /* No TCB extension                     */
;;;179                              OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);/* Enable stack checking + clear stack  */
;;;180        #endif
;;;181    #else
;;;182        #if OS_STK_GROWTH == 1
;;;183        (void)OSTaskCreate(OS_TaskIdle,
00018c  e3a0300c          MOV      r3,#0xc
000190  e59f2770          LDR      r2,|L1.2312|
000194  e3a01000          MOV      r1,#0
000198  e24f0e1a          ADR      r0,|L1.0|
00019c  ebfffffe          BL       OSTaskCreate
;;;184                           (void *)0,
;;;185                           &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1],
;;;186                           OS_IDLE_PRIO);
;;;187        #else
;;;188        (void)OSTaskCreate(OS_TaskIdle,
;;;189                           (void *)0,
;;;190                           &OSTaskIdleStk[0],
;;;191                           OS_IDLE_PRIO);

⌨️ 快捷键说明

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