os_task.txt

来自「uc/os在lpc2100系列的KEIL模板 uc/os在lpc2100系列的」· 文本 代码 · 共 1,089 行 · 第 1/4 页

TXT
1,089
字号
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 934] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o.\rvmdk\os_task.o --depend=.\rvmdk\os_task.d --device=DARMP --apcs=interwork -O1 -I. -I..\BSP -I..\..\..\..\uCOS-II\Ports\ARM\Generic\RealView -I..\..\..\..\uCOS-II\Source -I..\..\..\..\uC-CPU -I..\..\..\..\uC-CPU\ARM\RealView -I..\..\..\..\uC-LIB -I..\..\..\..\uC-TCPIP\IF -I..\..\..\..\uC-TCPIP\IF\Ether -I..\..\..\..\uC-TCPIP\NIC\ETHER\LPC2378 -I..\..\..\..\uC-TCPIP\NIC\ETHER\PHY -I..\..\..\..\uC-TCPIP\NIC\ETHER\PHY\DP83848 -I..\..\..\..\uC-TCPIP\OS\uCOS-II -I..\..\..\..\uC-TCPIP\Source -I..\..\..\..\uC-LCD\Source -I..\..\..\..\uC-Probe\Target\Communication\Generic\Source -I..\..\..\..\uC-Probe\Target\Communication\Generic\RS-232\Source -I..\..\..\..\uC-Probe\Target\Communication\Generic\TCPIP\Source -I..\..\..\..\uC-Probe\Target\Plugins\uCOS-II -Ie:\Keil_ARM\ARM\INC\Philips -D__IN_CHIP --omf_browse=.\rvmdk\os_task.crf ..\Source\OS_TASK.C]
                          ARM

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

                  OSTaskChangePrio PROC
;;;40     INT8U  OSTaskChangePrio (INT8U oldprio, INT8U newprio)
;;;41     {
000000  e92d47f0          PUSH     {r4-r10,lr}
000004  e1a0a000          MOV      r10,r0
000008  e1a04001          MOV      r4,r1
;;;42     #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register           */
;;;43         OS_CPU_SR    cpu_sr;
;;;44     #endif
;;;45     
;;;46     #if OS_EVENT_EN > 0
;;;47         OS_EVENT    *pevent;
;;;48     #endif
;;;49     
;;;50         OS_TCB      *ptcb;
;;;51         INT8U        x;
;;;52         INT8U        y;
;;;53         INT8U        bitx;
;;;54         INT8U        bity;
;;;55     
;;;56     
;;;57     
;;;58     #if OS_ARG_CHK_EN > 0
;;;59         if ((oldprio >= OS_LOWEST_PRIO && oldprio != OS_PRIO_SELF)  ||
00000c  e35a000c          CMP      r10,#0xc
000010  3a000001          BCC      |L1.28|
000014  e35a00ff          CMP      r10,#0xff
000018  1a000001          BNE      |L1.36|
                  |L1.28|
;;;60              newprio >= OS_LOWEST_PRIO) {
00001c  e354000c          CMP      r4,#0xc
000020  3a000002          BCC      |L1.48|
                  |L1.36|
;;;61             return (OS_PRIO_INVALID);
000024  e3a0002a          MOV      r0,#0x2a
                  |L1.40|
000028  e8bd47f0          POP      {r4-r10,lr}
;;;62         }
;;;63     #endif
;;;64         OS_ENTER_CRITICAL();
;;;65         if (OSTCBPrioTbl[newprio] != (OS_TCB *)0) {                 /* New priority must not already exist */
;;;66             OS_EXIT_CRITICAL();
;;;67             return (OS_PRIO_EXIST);
;;;68         } else {
;;;69             OSTCBPrioTbl[newprio] = (OS_TCB *)1;                    /* Reserve the entry to prevent others */
;;;70             OS_EXIT_CRITICAL();
;;;71             y    = newprio >> 3;                                    /* Precompute to reduce INT. latency   */
;;;72             bity = OSMapTbl[y];
;;;73             x    = newprio & 0x07;
;;;74             bitx = OSMapTbl[x];
;;;75             OS_ENTER_CRITICAL();
;;;76             if (oldprio == OS_PRIO_SELF) {                          /* See if changing self                */
;;;77                 oldprio = OSTCBCur->OSTCBPrio;                      /* Yes, get priority                   */
;;;78             }
;;;79             ptcb = OSTCBPrioTbl[oldprio];
;;;80             if (ptcb != (OS_TCB *)0) {                              /* Task to change must exist           */
;;;81                 OSTCBPrioTbl[oldprio] = (OS_TCB *)0;                /* Remove TCB from old priority        */
;;;82                 if ((OSRdyTbl[ptcb->OSTCBY] & ptcb->OSTCBBitX) != 0x00) {  /* If task is ready make it not */
;;;83                     if ((OSRdyTbl[ptcb->OSTCBY] &= ~ptcb->OSTCBBitX) == 0x00) {
;;;84                         OSRdyGrp &= ~ptcb->OSTCBBitY;
;;;85                     }
;;;86                     OSRdyGrp    |= bity;                            /* Make new priority ready to run      */
;;;87                     OSRdyTbl[y] |= bitx;
;;;88     #if OS_EVENT_EN > 0
;;;89                 } else {
;;;90                     pevent = ptcb->OSTCBEventPtr;
;;;91                     if (pevent != (OS_EVENT *)0) {                  /* Remove from event wait list  */
;;;92                         if ((pevent->OSEventTbl[ptcb->OSTCBY] &= ~ptcb->OSTCBBitX) == 0) {
;;;93                             pevent->OSEventGrp &= ~ptcb->OSTCBBitY;
;;;94                         }
;;;95                         pevent->OSEventGrp    |= bity;              /* Add new priority to wait list       */
;;;96                         pevent->OSEventTbl[y] |= bitx;
;;;97                     }
;;;98     #endif
;;;99                 }
;;;100                OSTCBPrioTbl[newprio] = ptcb;                       /* Place pointer to TCB @ new priority */
;;;101                ptcb->OSTCBPrio       = newprio;                    /* Set new task priority               */
;;;102                ptcb->OSTCBY          = y;
;;;103                ptcb->OSTCBX          = x;
;;;104                ptcb->OSTCBBitY       = bity;
;;;105                ptcb->OSTCBBitX       = bitx;
;;;106                OS_EXIT_CRITICAL();
;;;107                OS_Sched();                                         /* Run highest priority task ready     */
;;;108                return (OS_NO_ERR);
;;;109            } else {
;;;110                OSTCBPrioTbl[newprio] = (OS_TCB *)0;                /* Release the reserved prio.          */
;;;111                OS_EXIT_CRITICAL();
;;;112                return (OS_PRIO_ERR);                               /* Task to change didn't exist         */
;;;113            }
;;;114        }
;;;115    }
00002c  e12fff1e          BX       lr
                  |L1.48|
000030  ef000002          SVC      #0x2                  ;64
000034  e59f980c          LDR      r9,|L1.2120|
000038  e7990104          LDR      r0,[r9,r4,LSL #2]     ;65
00003c  e3500000          CMP      r0,#0                 ;65
000040  0a000002          BEQ      |L1.80|
000044  ef000003          SVC      #0x3                  ;66
000048  e3a00028          MOV      r0,#0x28              ;67
00004c  eafffff5          B        |L1.40|
                  |L1.80|
000050  e3a00001          MOV      r0,#1                 ;69
000054  e7890104          STR      r0,[r9,r4,LSL #2]     ;69
000058  ef000003          SVC      #0x3                  ;70
00005c  e1a051a4          LSR      r5,r4,#3              ;71
000060  e59f07e4          LDR      r0,|L1.2124|
000064  e7d07005          LDRB     r7,[r0,r5]            ;72
000068  e2048007          AND      r8,r4,#7              ;73
00006c  e7d06008          LDRB     r6,[r0,r8]            ;74
000070  ef000002          SVC      #0x2                  ;75
000074  e35a00ff          CMP      r10,#0xff             ;76
000078  1a000002          BNE      |L1.136|
00007c  e59f07cc          LDR      r0,|L1.2128|
000080  e5900000          LDR      r0,[r0,#0]            ;77  ; OSTCBCur
000084  e5d0a02d          LDRB     r10,[r0,#0x2d]        ;77
                  |L1.136|
000088  e799010a          LDR      r0,[r9,r10,LSL #2]    ;79
00008c  e3a01000          MOV      r1,#0                 ;79
000090  e3500000          CMP      r0,#0                 ;80
000094  0a000032          BEQ      |L1.356|
000098  e789110a          STR      r1,[r9,r10,LSL #2]    ;81
00009c  e5d0202f          LDRB     r2,[r0,#0x2f]         ;82
0000a0  e59fc7ac          LDR      r12,|L1.2132|
0000a4  e5d03030          LDRB     r3,[r0,#0x30]         ;82
0000a8  e7dc1002          LDRB     r1,[r12,r2]           ;82
0000ac  e1110003          TST      r1,r3                 ;82
0000b0  0a00000e          BEQ      |L1.240|
0000b4  e1d11003          BICS     r1,r1,r3              ;83
0000b8  e7cc1002          STRB     r1,[r12,r2]           ;83
0000bc  e59f2794          LDR      r2,|L1.2136|
0000c0  1a000003          BNE      |L1.212|
0000c4  e5d01031          LDRB     r1,[r0,#0x31]         ;84
0000c8  e5d23000          LDRB     r3,[r2,#0]            ;84  ; OSRdyGrp
0000cc  e1c31001          BIC      r1,r3,r1              ;84
0000d0  e5c21000          STRB     r1,[r2,#0]            ;84  ; OSRdyGrp
                  |L1.212|
0000d4  e5d21000          LDRB     r1,[r2,#0]            ;86  ; OSRdyGrp
0000d8  e1811007          ORR      r1,r1,r7              ;86
0000dc  e5c21000          STRB     r1,[r2,#0]            ;86  ; OSRdyGrp
0000e0  e7dc1005          LDRB     r1,[r12,r5]           ;87
0000e4  e1811006          ORR      r1,r1,r6              ;87
0000e8  e7cc1005          STRB     r1,[r12,r5]           ;87
0000ec  ea000012          B        |L1.316|
                  |L1.240|
0000f0  e590101c          LDR      r1,[r0,#0x1c]         ;90
0000f4  e3510000          CMP      r1,#0                 ;91
0000f8  0a00000f          BEQ      |L1.316|
0000fc  e0822001          ADD      r2,r2,r1              ;92
000100  e5d2c008          LDRB     r12,[r2,#8]           ;92
000104  e1dc3003          BICS     r3,r12,r3             ;92
000108  e5c23008          STRB     r3,[r2,#8]            ;92
00010c  1a000003          BNE      |L1.288|
000110  e5d12001          LDRB     r2,[r1,#1]            ;93
000114  e5d03031          LDRB     r3,[r0,#0x31]         ;93
000118  e1c22003          BIC      r2,r2,r3              ;93
00011c  e5c12001          STRB     r2,[r1,#1]            ;93
                  |L1.288|
000120  e5d12001          LDRB     r2,[r1,#1]            ;95
000124  e1822007          ORR      r2,r2,r7              ;95
000128  e5c12001          STRB     r2,[r1,#1]            ;95
00012c  e0811005          ADD      r1,r1,r5              ;96
000130  e5d12008          LDRB     r2,[r1,#8]            ;96
000134  e1822006          ORR      r2,r2,r6              ;96
000138  e5c12008          STRB     r2,[r1,#8]            ;96
                  |L1.316|
00013c  e7890104          STR      r0,[r9,r4,LSL #2]     ;100
000140  e5c0402d          STRB     r4,[r0,#0x2d]         ;101
000144  e5c0502f          STRB     r5,[r0,#0x2f]         ;102
000148  e5c0802e          STRB     r8,[r0,#0x2e]         ;103
00014c  e5c07031          STRB     r7,[r0,#0x31]         ;104
000150  e5c06030          STRB     r6,[r0,#0x30]         ;105
000154  ef000003          SVC      #0x3                  ;106
000158  ebfffffe          BL       OS_Sched
00015c  e3a00000          MOV      r0,#0                 ;108
000160  eaffffb0          B        |L1.40|
                  |L1.356|
000164  e7891104          STR      r1,[r9,r4,LSL #2]     ;110
000168  ef000003          SVC      #0x3                  ;111
00016c  e3a00029          MOV      r0,#0x29              ;112
000170  eaffffac          B        |L1.40|
;;;116    #endif
                          ENDP

                  OSTaskCreate PROC
;;;158    INT8U  OSTaskCreate (void (*task)(void *pd), void *pdata, OS_STK *ptos, INT8U prio)
;;;159    {
000174  e92d43fe          PUSH     {r1-r9,lr}
000178  e1a05000          MOV      r5,r0
00017c  e1a07001          MOV      r7,r1
000180  e1a08002          MOV      r8,r2
000184  e1a04003          MOV      r4,r3
;;;160    #if OS_CRITICAL_METHOD == 3                  /* Allocate storage for CPU status register               */
;;;161        OS_CPU_SR  cpu_sr;
;;;162    #endif
;;;163        OS_STK    *psp;
;;;164        INT8U      err;
;;;165    
;;;166    
;;;167    #if OS_ARG_CHK_EN > 0
;;;168        if (prio > OS_LOWEST_PRIO) {             /* Make sure priority is within allowable range           */
000188  e354000c          CMP      r4,#0xc
00018c  9a000002          BLS      |L1.412|
;;;169            return (OS_PRIO_INVALID);
000190  e3a0002a          MOV      r0,#0x2a
                  |L1.404|
000194  e8bd43fe          POP      {r1-r9,lr}
;;;170        }
;;;171    #endif
;;;172        OS_ENTER_CRITICAL();
;;;173        if (OSTCBPrioTbl[prio] == (OS_TCB *)0) { /* Make sure task doesn't already exist at this priority  */
;;;174            OSTCBPrioTbl[prio] = (OS_TCB *)1;    /* Reserve the priority to prevent others from doing ...  */
;;;175                                                 /* ... the same thing until task is created.              */
;;;176            OS_EXIT_CRITICAL();
;;;177            psp = (OS_STK *)OSTaskStkInit(task, pdata, ptos, 0);    /* Initialize the task's stack         */
;;;178            err = OS_TCBInit(prio, psp, (OS_STK *)0, 0, 0, (void *)0, 0);
;;;179            if (err == OS_NO_ERR) {
;;;180                OS_ENTER_CRITICAL();
;;;181                OSTaskCtr++;                                        /* Increment the #tasks counter        */
;;;182                OS_EXIT_CRITICAL();
;;;183                if (OSRunning == TRUE) {         /* Find highest priority task if multitasking has started */
;;;184                    OS_Sched();
;;;185                }
;;;186            } else {
;;;187                OS_ENTER_CRITICAL();
;;;188                OSTCBPrioTbl[prio] = (OS_TCB *)0;/* Make this priority available to others                 */
;;;189                OS_EXIT_CRITICAL();
;;;190            }
;;;191            return (err);
;;;192        }
;;;193        OS_EXIT_CRITICAL();
;;;194        return (OS_PRIO_EXIST);
;;;195    }
000198  e12fff1e          BX       lr
                  |L1.412|
00019c  ef000002          SVC      #0x2                  ;172
0001a0  e59f66a0          LDR      r6,|L1.2120|
0001a4  e7960104          LDR      r0,[r6,r4,LSL #2]     ;173
0001a8  e3500000          CMP      r0,#0                 ;173
0001ac  1a000024          BNE      |L1.580|
0001b0  e3a00001          MOV      r0,#1                 ;174
0001b4  e7860104          STR      r0,[r6,r4,LSL #2]     ;174
0001b8  ef000003          SVC      #0x3                  ;176
0001bc  e3a03000          MOV      r3,#0                 ;177
0001c0  e1a02008          MOV      r2,r8                 ;177
0001c4  e1a01007          MOV      r1,r7                 ;177
0001c8  e1a00005          MOV      r0,r5                 ;177
0001cc  ebfffffe          BL       OSTaskStkInit
0001d0  e3a03000          MOV      r3,#0                 ;178
0001d4  e1a01000          MOV      r1,r0                 ;178
0001d8  e1a02003          MOV      r2,r3                 ;178
0001dc  e1a00004          MOV      r0,r4                 ;178
0001e0  e58d3000          STR      r3,[sp,#0]            ;178
0001e4  e58d3004          STR      r3,[sp,#4]            ;178
0001e8  e58d3008          STR      r3,[sp,#8]            ;178
0001ec  ebfffffe          BL       OS_TCBInit
0001f0  e1a05000          MOV      r5,r0                 ;178
0001f4  e3550000          CMP      r5,#0                 ;179
0001f8  1a00000b          BNE      |L1.556|
0001fc  ef000002          SVC      #0x2                  ;180
000200  e59f0654          LDR      r0,|L1.2140|
000204  e5d01000          LDRB     r1,[r0,#0]            ;181  ; OSTaskCtr
000208  e2811001          ADD      r1,r1,#1              ;181
00020c  e5c01000          STRB     r1,[r0,#0]            ;181  ; OSTaskCtr
000210  ef000003          SVC      #0x3                  ;182
000214  e59f0644          LDR      r0,|L1.2144|
000218  e5d00000          LDRB     r0,[r0,#0]            ;183  ; OSRunning

⌨️ 快捷键说明

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