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

📄 os_task.txt

📁 一个电力系统谐波检测的程序
💻 TXT
📖 第 1 页 / 共 5 页
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.0 [Build 951] for uVision
; commandline ArmCC [--debug -c --asm --interleave -oos_task.o --device=DARMP --apcs=interwork -O0 -IC:\Keil\ARM\INC\Philips uCosii\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  ba000002          BLT      |L1.48|
;;;61             return (OS_PRIO_INVALID);
                  |L1.36|
000024  e3a0002a          MOV      r0,#0x2a
                  |L1.40|
000028  e8bd5ff0          POP      {r4-r12,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  ; formerly SWI   ;64
000034  e59f0920          LDR      r0,|L1.2396|          ;65
000038  e7900105          LDR      r0,[r0,r5,LSL #2]     ;65
00003c  e3500000          CMP      r0,#0                 ;65
000040  0a000002          BEQ      |L1.80|               ;65
000044  ef000003          SVC      0x3  ; formerly SWI   ;66
000048  e3a00028          MOV      r0,#0x28              ;67
00004c  eafffff5          B        |L1.40|               ;67
                  |L1.80|
000050  e3a00001          MOV      r0,#1                 ;69
000054  e59f1900          LDR      r1,|L1.2396|          ;69
000058  e7810105          STR      r0,[r1,r5,LSL #2]     ;69
00005c  ef000003          SVC      0x3  ; formerly SWI   ;70
000060  e1a091c5          ASR      r9,r5,#3              ;71
000064  e59f08f4          LDR      r0,|L1.2400|          ;72
000068  e7d0b009          LDRB     r11,[r0,r9]           ;72
00006c  e2058007          AND      r8,r5,#7              ;73
000070  e7d0a008          LDRB     r10,[r0,r8]           ;74
000074  ef000002          SVC      0x2  ; formerly SWI   ;75
000078  e35400ff          CMP      r4,#0xff              ;76
00007c  1a000002          BNE      |L1.140|              ;76
000080  e59f08dc          LDR      r0,|L1.2404|          ;77
000084  e5900000          LDR      r0,[r0,#0]            ;77  ; OSTCBCur
000088  e5d0402d          LDRB     r4,[r0,#0x2d]         ;77
                  |L1.140|
00008c  e59f08c8          LDR      r0,|L1.2396|          ;79
000090  e7907104          LDR      r7,[r0,r4,LSL #2]     ;79
000094  e3570000          CMP      r7,#0                 ;80
000098  0a000047          BEQ      |L1.444|              ;80
00009c  e3a00000          MOV      r0,#0                 ;81
0000a0  e59f18b4          LDR      r1,|L1.2396|          ;81
0000a4  e7810104          STR      r0,[r1,r4,LSL #2]     ;81
0000a8  e5d7002f          LDRB     r0,[r7,#0x2f]         ;82
0000ac  e59f18b4          LDR      r1,|L1.2408|          ;82
0000b0  e7d10000          LDRB     r0,[r1,r0]            ;82
0000b4  e5d71030          LDRB     r1,[r7,#0x30]         ;82
0000b8  e1100001          TST      r0,r1                 ;82
0000bc  0a00001a          BEQ      |L1.300|              ;82
0000c0  e5d7002f          LDRB     r0,[r7,#0x2f]         ;83
0000c4  e59f189c          LDR      r1,|L1.2408|          ;83
0000c8  e7d10000          LDRB     r0,[r1,r0]            ;83
0000cc  e5d71030          LDRB     r1,[r7,#0x30]         ;83
0000d0  e1c00001          BIC      r0,r0,r1              ;83
0000d4  e21000ff          ANDS     r0,r0,#0xff           ;83
0000d8  e5d7102f          LDRB     r1,[r7,#0x2f]         ;83
0000dc  e59f2884          LDR      r2,|L1.2408|          ;83
0000e0  e7c20001          STRB     r0,[r2,r1]            ;83
0000e4  1a000005          BNE      |L1.256|              ;83
0000e8  e5d70031          LDRB     r0,[r7,#0x31]         ;84
0000ec  e59f1878          LDR      r1,|L1.2412|          ;84
0000f0  e5d11000          LDRB     r1,[r1,#0]            ;84  ; OSRdyGrp
0000f4  e1c10000          BIC      r0,r1,r0              ;84
0000f8  e59f186c          LDR      r1,|L1.2412|          ;84
0000fc  e5c10000          STRB     r0,[r1,#0]            ;84  ; OSRdyGrp
                  |L1.256|
000100  e59f0864          LDR      r0,|L1.2412|          ;86
000104  e5d00000          LDRB     r0,[r0,#0]            ;86  ; OSRdyGrp
000108  e180000b          ORR      r0,r0,r11             ;86
00010c  e59f1858          LDR      r1,|L1.2412|          ;86
000110  e5c10000          STRB     r0,[r1,#0]            ;86  ; OSRdyGrp
000114  e59f084c          LDR      r0,|L1.2408|          ;87
000118  e7d00009          LDRB     r0,[r0,r9]            ;87
00011c  e180000a          ORR      r0,r0,r10             ;87
000120  e59f1840          LDR      r1,|L1.2408|          ;87
000124  e7c10009          STRB     r0,[r1,r9]            ;87
000128  ea000018          B        |L1.400|              ;87
                  |L1.300|
00012c  e597601c          LDR      r6,[r7,#0x1c]         ;90
000130  e3560000          CMP      r6,#0                 ;91
000134  0a000015          BEQ      |L1.400|              ;91
000138  e5d7002f          LDRB     r0,[r7,#0x2f]         ;92
00013c  e2861008          ADD      r1,r6,#8              ;92
000140  e7d10000          LDRB     r0,[r1,r0]            ;92
000144  e5d71030          LDRB     r1,[r7,#0x30]         ;92
000148  e1c00001          BIC      r0,r0,r1              ;92
00014c  e21000ff          ANDS     r0,r0,#0xff           ;92
000150  e5d7102f          LDRB     r1,[r7,#0x2f]         ;92
000154  e2862008          ADD      r2,r6,#8              ;92
000158  e7c20001          STRB     r0,[r2,r1]            ;92
00015c  1a000003          BNE      |L1.368|              ;92
000160  e5d60001          LDRB     r0,[r6,#1]            ;93
000164  e5d71031          LDRB     r1,[r7,#0x31]         ;93
000168  e1c00001          BIC      r0,r0,r1              ;93
00016c  e5c60001          STRB     r0,[r6,#1]            ;93
                  |L1.368|
000170  e5d60001          LDRB     r0,[r6,#1]            ;95
000174  e180000b          ORR      r0,r0,r11             ;95
000178  e5c60001          STRB     r0,[r6,#1]            ;95
00017c  e2860008          ADD      r0,r6,#8              ;96
000180  e7d00009          LDRB     r0,[r0,r9]            ;96
000184  e180000a          ORR      r0,r0,r10             ;96
000188  e2861008          ADD      r1,r6,#8              ;96
00018c  e7c10009          STRB     r0,[r1,r9]            ;96
                  |L1.400|
000190  e59f07c4          LDR      r0,|L1.2396|          ;100
000194  e7807105          STR      r7,[r0,r5,LSL #2]     ;100
000198  e5c7502d          STRB     r5,[r7,#0x2d]         ;101
00019c  e5c7902f          STRB     r9,[r7,#0x2f]         ;102
0001a0  e5c7802e          STRB     r8,[r7,#0x2e]         ;103
0001a4  e5c7b031          STRB     r11,[r7,#0x31]        ;104
0001a8  e5c7a030          STRB     r10,[r7,#0x30]        ;105
0001ac  ef000003          SVC      0x3  ; formerly SWI   ;106
0001b0  ebfffffe          BL       OS_Sched              ;107
0001b4  e3a00000          MOV      r0,#0                 ;108
0001b8  eaffff9a          B        |L1.40|               ;108
                  |L1.444|
0001bc  e3a00000          MOV      r0,#0                 ;110
0001c0  e59f1794          LDR      r1,|L1.2396|          ;110
0001c4  e7810105          STR      r0,[r1,r5,LSL #2]     ;110
0001c8  ef000003          SVC      0x3  ; formerly SWI   ;111
0001cc  e3a00029          MOV      r0,#0x29              ;112
0001d0  eaffff94          B        |L1.40|               ;112
                          ENDP

                  OSTaskCreate PROC
;;;158    INT8U  OSTaskCreate (void (*task)(void *pd), void *pdata, OS_STK *ptos, INT8U prio)
;;;159    {
0001d4  e92d43fe          PUSH     {r1-r9,lr}
0001d8  e1a04000          MOV      r4,r0
0001dc  e1a05001          MOV      r5,r1
0001e0  e1a06002          MOV      r6,r2
0001e4  e1a07003          MOV      r7,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           */

⌨️ 快捷键说明

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