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

📄 os_task.txt

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

                          ARM

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

                  OSTaskChangePrio PROC
;;;40     INT8U  OSTaskChangePrio (INT8U oldprio, INT8U newprio)
;;;41     {
000000  e92d5ff0          PUSH     {r4-r12,lr}
000004  e1a04000          MOV      r4,r0
000008  e1a05001          MOV      r5,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  e354000c          CMP      r4,#0xc
000010  ba000001          BLT      |L1.28|
000014  e35400ff          CMP      r4,#0xff
000018  1a000001          BNE      |L1.36|
;;;60              newprio >= OS_LOWEST_PRIO) {
                  |L1.28|
00001c  e355000c          CMP      r5,#0xc
000020  ba000001          BLT      |L1.44|
;;;61             return (OS_PRIO_INVALID);
                  |L1.36|
000024  e3a0002a          MOV      r0,#0x2a
;;;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             if ((ptcb = OSTCBPrioTbl[oldprio]) != (OS_TCB *)0) {    /* Task to change must exist           */
;;;80                 OSTCBPrioTbl[oldprio] = (OS_TCB *)0;                /* Remove TCB from old priority        */
;;;81                 if ((OSRdyTbl[ptcb->OSTCBY] & ptcb->OSTCBBitX) != 0x00) {  /* If task is ready make it not */
;;;82                     if ((OSRdyTbl[ptcb->OSTCBY] &= ~ptcb->OSTCBBitX) == 0x00) {
;;;83                         OSRdyGrp &= ~ptcb->OSTCBBitY;
;;;84                     }
;;;85                     OSRdyGrp    |= bity;                            /* Make new priority ready to run      */
;;;86                     OSRdyTbl[y] |= bitx;
;;;87     #if OS_EVENT_EN > 0
;;;88                 } else {
;;;89                     if ((pevent = ptcb->OSTCBEventPtr) != (OS_EVENT *)0) { /* Remove from event wait list  */
;;;90                         if ((pevent->OSEventTbl[ptcb->OSTCBY] &= ~ptcb->OSTCBBitX) == 0) {
;;;91                             pevent->OSEventGrp &= ~ptcb->OSTCBBitY;
;;;92                         }
;;;93                         pevent->OSEventGrp    |= bity;              /* Add new priority to wait list       */
;;;94                         pevent->OSEventTbl[y] |= bitx;
;;;95                     }
;;;96     #endif
;;;97                 }
;;;98                 OSTCBPrioTbl[newprio] = ptcb;                       /* Place pointer to TCB @ new priority */
;;;99                 ptcb->OSTCBPrio       = newprio;                    /* Set new task priority               */
;;;100                ptcb->OSTCBY          = y;
;;;101                ptcb->OSTCBX          = x;
;;;102                ptcb->OSTCBBitY       = bity;
;;;103                ptcb->OSTCBBitX       = bitx;
;;;104                OS_EXIT_CRITICAL();
;;;105                OS_Sched();                                         /* Run highest priority task ready     */
;;;106                return (OS_NO_ERR);
;;;107            } else {
;;;108                OSTCBPrioTbl[newprio] = (OS_TCB *)0;                /* Release the reserved prio.          */
;;;109                OS_EXIT_CRITICAL();
;;;110                return (OS_PRIO_ERR);                               /* Task to change didn't exist         */
;;;111            }
;;;112        }
;;;113    }
                  |L1.40|
000028  e8bd9ff0          POP      {r4-r12,pc}
                  |L1.44|
00002c  ef000002          SVC      0x2  ; formerly SWI   ;64
000030  e59f0724          LDR      r0,|L1.1884|          ;65
000034  e7900105          LDR      r0,[r0,r5,LSL #2]     ;65
000038  e3500000          CMP      r0,#0                 ;65
00003c  0a000002          BEQ      |L1.76|               ;65
000040  ef000003          SVC      0x3  ; formerly SWI   ;66
000044  e3a00028          MOV      r0,#0x28              ;67
000048  eafffff6          B        |L1.40|               ;67
                  |L1.76|
00004c  e3a00001          MOV      r0,#1                 ;69
000050  e59f1704          LDR      r1,|L1.1884|          ;69
000054  e7810105          STR      r0,[r1,r5,LSL #2]     ;69
000058  ef000003          SVC      0x3  ; formerly SWI   ;70
00005c  e1a091c5          ASR      r9,r5,#3              ;71
000060  e59f06f8          LDR      r0,|L1.1888|          ;72
000064  e7d0b009          LDRB     r11,[r0,r9]           ;72
000068  e2058007          AND      r8,r5,#7              ;73
00006c  e7d0a008          LDRB     r10,[r0,r8]           ;74
000070  ef000002          SVC      0x2  ; formerly SWI   ;75
000074  e35400ff          CMP      r4,#0xff              ;76
000078  1a000002          BNE      |L1.136|              ;76
00007c  e59f06e0          LDR      r0,|L1.1892|          ;77
000080  e5900000          LDR      r0,[r0,#0]            ;77  ; OSTCBCur
000084  e5d0401d          LDRB     r4,[r0,#0x1d]         ;77
                  |L1.136|
000088  e59f06cc          LDR      r0,|L1.1884|          ;79
00008c  e7907104          LDR      r7,[r0,r4,LSL #2]     ;79
000090  e3570000          CMP      r7,#0                 ;79
000094  0a000047          BEQ      |L1.440|              ;79
000098  e3a00000          MOV      r0,#0                 ;80
00009c  e59f16b8          LDR      r1,|L1.1884|          ;80
0000a0  e7810104          STR      r0,[r1,r4,LSL #2]     ;80
0000a4  e5d7001f          LDRB     r0,[r7,#0x1f]         ;81
0000a8  e59f16b8          LDR      r1,|L1.1896|          ;81
0000ac  e7d10000          LDRB     r0,[r1,r0]            ;81
0000b0  e5d71020          LDRB     r1,[r7,#0x20]         ;81
0000b4  e1100001          TST      r0,r1                 ;81
0000b8  0a00001a          BEQ      |L1.296|              ;81
0000bc  e5d7001f          LDRB     r0,[r7,#0x1f]         ;82
0000c0  e59f16a0          LDR      r1,|L1.1896|          ;82
0000c4  e7d10000          LDRB     r0,[r1,r0]            ;82
0000c8  e5d71020          LDRB     r1,[r7,#0x20]         ;82
0000cc  e1c00001          BIC      r0,r0,r1              ;82
0000d0  e21000ff          ANDS     r0,r0,#0xff           ;82
0000d4  e5d7101f          LDRB     r1,[r7,#0x1f]         ;82
0000d8  e59f2688          LDR      r2,|L1.1896|          ;82
0000dc  e7c20001          STRB     r0,[r2,r1]            ;82
0000e0  1a000005          BNE      |L1.252|              ;82
0000e4  e5d70021          LDRB     r0,[r7,#0x21]         ;83
0000e8  e59f167c          LDR      r1,|L1.1900|          ;83
0000ec  e5d11000          LDRB     r1,[r1,#0]            ;83  ; OSRdyGrp
0000f0  e1c10000          BIC      r0,r1,r0              ;83
0000f4  e59f1670          LDR      r1,|L1.1900|          ;83
0000f8  e5c10000          STRB     r0,[r1,#0]            ;83  ; OSRdyGrp
                  |L1.252|
0000fc  e59f0668          LDR      r0,|L1.1900|          ;85
000100  e5d00000          LDRB     r0,[r0,#0]            ;85  ; OSRdyGrp
000104  e180000b          ORR      r0,r0,r11             ;85
000108  e59f165c          LDR      r1,|L1.1900|          ;85
00010c  e5c10000          STRB     r0,[r1,#0]            ;85  ; OSRdyGrp
000110  e59f0650          LDR      r0,|L1.1896|          ;86
000114  e7d00009          LDRB     r0,[r0,r9]            ;86
000118  e180000a          ORR      r0,r0,r10             ;86
00011c  e59f1644          LDR      r1,|L1.1896|          ;86
000120  e7c10009          STRB     r0,[r1,r9]            ;86
000124  ea000018          B        |L1.396|              ;86
                  |L1.296|
000128  e597600c          LDR      r6,[r7,#0xc]          ;89
00012c  e3560000          CMP      r6,#0                 ;89
000130  0a000015          BEQ      |L1.396|              ;89
000134  e5d7001f          LDRB     r0,[r7,#0x1f]         ;90
000138  e2861008          ADD      r1,r6,#8              ;90
00013c  e7d10000          LDRB     r0,[r1,r0]            ;90
000140  e5d71020          LDRB     r1,[r7,#0x20]         ;90
000144  e1c00001          BIC      r0,r0,r1              ;90
000148  e21000ff          ANDS     r0,r0,#0xff           ;90
00014c  e5d7101f          LDRB     r1,[r7,#0x1f]         ;90
000150  e2862008          ADD      r2,r6,#8              ;90
000154  e7c20001          STRB     r0,[r2,r1]            ;90
000158  1a000003          BNE      |L1.364|              ;90
00015c  e5d60001          LDRB     r0,[r6,#1]            ;91
000160  e5d71021          LDRB     r1,[r7,#0x21]         ;91
000164  e1c00001          BIC      r0,r0,r1              ;91
000168  e5c60001          STRB     r0,[r6,#1]            ;91
                  |L1.364|
00016c  e5d60001          LDRB     r0,[r6,#1]            ;93
000170  e180000b          ORR      r0,r0,r11             ;93
000174  e5c60001          STRB     r0,[r6,#1]            ;93
000178  e2860008          ADD      r0,r6,#8              ;94
00017c  e7d00009          LDRB     r0,[r0,r9]            ;94
000180  e180000a          ORR      r0,r0,r10             ;94
000184  e2861008          ADD      r1,r6,#8              ;94
000188  e7c10009          STRB     r0,[r1,r9]            ;94
                  |L1.396|
00018c  e59f05c8          LDR      r0,|L1.1884|          ;98
000190  e7807105          STR      r7,[r0,r5,LSL #2]     ;98
000194  e5c7501d          STRB     r5,[r7,#0x1d]         ;99
000198  e5c7901f          STRB     r9,[r7,#0x1f]         ;100
00019c  e5c7801e          STRB     r8,[r7,#0x1e]         ;101
0001a0  e5c7b021          STRB     r11,[r7,#0x21]        ;102
0001a4  e5c7a020          STRB     r10,[r7,#0x20]        ;103
0001a8  ef000003          SVC      0x3  ; formerly SWI   ;104
0001ac  ebfffffe          BL       OS_Sched              ;105
0001b0  e3a00000          MOV      r0,#0                 ;106
0001b4  eaffff9b          B        |L1.40|               ;106
                  |L1.440|
0001b8  e3a00000          MOV      r0,#0                 ;108
0001bc  e59f1598          LDR      r1,|L1.1884|          ;108
0001c0  e7810105          STR      r0,[r1,r5,LSL #2]     ;108
0001c4  ef000003          SVC      0x3  ; formerly SWI   ;109
0001c8  e3a00029          MOV      r0,#0x29              ;110
0001cc  eaffff95          B        |L1.40|               ;110
                          ENDP

                  OSTaskCreate PROC
;;;156    INT8U  OSTaskCreate (void (*task)(void *pd), void *pdata, OS_STK *ptos, INT8U prio)
;;;157    {
0001d0  e92d43fe          PUSH     {r1-r9,lr}
0001d4  e1a04000          MOV      r4,r0
0001d8  e1a05001          MOV      r5,r1
0001dc  e1a06002          MOV      r6,r2
0001e0  e1a07003          MOV      r7,r3
;;;158    #if OS_CRITICAL_METHOD == 3                  /* Allocate storage for CPU status register               */
;;;159        OS_CPU_SR  cpu_sr;
;;;160    #endif
;;;161        OS_STK    *psp;
;;;162        INT8U      err;
;;;163    

⌨️ 快捷键说明

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