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

📄 os_task.txt

📁 IARSOURCECODE是基于LPC2478嵌入式软件IAR EWARM V4.42的应用实例代码
💻 TXT
📖 第 1 页 / 共 5 页
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 903] for uVision
; commandline ArmCC [--debug -c --asm --interleave -oos_task.o --depend=os_task.d --device=DARMP --apcs=interwork -I. -I..\BSP -I..\..\..\..\..\uCOS-II\Ports\ARM\Generic\RVMDK -I..\..\..\..\..\uCOS-II\Source -I..\..\..\..\..\uC-CPU -I..\..\..\..\..\uC-CPU\ARM\RVMDK -I..\..\..\..\..\uC-LIB -I..\..\..\..\..\uCOSView\Source -I..\..\..\..\..\uCOSView\Ports\ARM7\LPC2468\IAR -Id:\Keil\ARM\INC\Philips ..\..\..\..\..\uCOS-II\Source\os_task.c]
                          ARM

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

                  OSTaskChangePrio PROC
;;;51     INT8U  OSTaskChangePrio (INT8U oldprio, INT8U newprio)
;;;52     {
000000  e92d5ffc          PUSH     {r2-r12,lr}
000004  e1a04000          MOV      r4,r0
000008  e1a05001          MOV      r5,r1
;;;53     #if OS_EVENT_EN
;;;54         OS_EVENT    *pevent;
;;;55     #endif
;;;56         OS_TCB      *ptcb;
;;;57         INT8U        x;
;;;58         INT8U        y;
;;;59     #if OS_LOWEST_PRIO <= 63
;;;60         INT8U        bitx;
;;;61         INT8U        bity;
;;;62     #else
;;;63         INT16U       bitx;
;;;64         INT16U       bity;
;;;65     #endif
;;;66         INT8U        y_old;
;;;67     #if OS_CRITICAL_METHOD == 3
;;;68         OS_CPU_SR    cpu_sr = 0;                                    /* Storage for CPU status register     */
00000c  e3a00000          MOV      r0,#0
000010  e58d0000          STR      r0,[sp,#0]
;;;69     #endif
;;;70     
;;;71     
;;;72     
;;;73     #if OS_ARG_CHK_EN > 0
;;;74         if (oldprio >= OS_LOWEST_PRIO) {
000014  e354001f          CMP      r4,#0x1f
000018  ba000004          BLT      |L1.48|
;;;75             if (oldprio != OS_PRIO_SELF) {
00001c  e35400ff          CMP      r4,#0xff
000020  0a000002          BEQ      |L1.48|
;;;76                 return (OS_ERR_PRIO_INVALID);
000024  e3a0002a          MOV      r0,#0x2a
                  |L1.40|
000028  e8bd5ffc          POP      {r2-r12,lr}
;;;77             }
;;;78         }
;;;79         if (newprio >= OS_LOWEST_PRIO) {
;;;80             return (OS_ERR_PRIO_INVALID);
;;;81         }
;;;82     #endif
;;;83         OS_ENTER_CRITICAL();
;;;84         if (OSTCBPrioTbl[newprio] != (OS_TCB *)0) {                 /* New priority must not already exist */
;;;85             OS_EXIT_CRITICAL();
;;;86             return (OS_ERR_PRIO_EXIST);
;;;87         }
;;;88         if (oldprio == OS_PRIO_SELF) {                              /* See if changing self                */
;;;89             oldprio = OSTCBCur->OSTCBPrio;                          /* Yes, get priority                   */
;;;90         }
;;;91         ptcb = OSTCBPrioTbl[oldprio];
;;;92         if (ptcb == (OS_TCB *)0) {                                  /* Does task to change exist?          */
;;;93             OS_EXIT_CRITICAL();                                     /* No, can't change its priority!      */
;;;94             return (OS_ERR_PRIO);
;;;95         }
;;;96         if (ptcb == (OS_TCB *)1) {                                  /* Is task assigned to Mutex           */
;;;97             OS_EXIT_CRITICAL();                                     /* No, can't change its priority!      */
;;;98             return (OS_ERR_TASK_NOT_EXIST);
;;;99         }
;;;100    #if OS_LOWEST_PRIO <= 63
;;;101        y                     = (INT8U)(newprio >> 3);              /* Yes, compute new TCB fields         */
;;;102        x                     = (INT8U)(newprio & 0x07);
;;;103        bity                  = (INT8U)(1 << y);
;;;104        bitx                  = (INT8U)(1 << x);
;;;105    #else
;;;106        y                     = (INT8U)((newprio >> 4) & 0x0F);
;;;107        x                     = (INT8U)( newprio & 0x0F);
;;;108        bity                  = (INT16U)(1 << y);
;;;109        bitx                  = (INT16U)(1 << x);
;;;110    #endif
;;;111    
;;;112        OSTCBPrioTbl[oldprio] = (OS_TCB *)0;                        /* Remove TCB from old priority        */
;;;113        OSTCBPrioTbl[newprio] = ptcb;                               /* Place pointer to TCB @ new priority */
;;;114        y_old                 = ptcb->OSTCBY;
;;;115        if ((OSRdyTbl[y_old] & ptcb->OSTCBBitX) != 0) {             /* If task is ready make it not        */
;;;116            OSRdyTbl[y_old] &= ~ptcb->OSTCBBitX;
;;;117            if (OSRdyTbl[y_old] == 0) {
;;;118                OSRdyGrp &= ~ptcb->OSTCBBitY;
;;;119            }
;;;120            OSRdyGrp    |= bity;                                    /* Make new priority ready to run      */
;;;121            OSRdyTbl[y] |= bitx;
;;;122        }
;;;123    #if OS_EVENT_EN
;;;124        pevent = ptcb->OSTCBEventPtr;
;;;125        if (pevent != (OS_EVENT *)0) {                              /* ... remove from event wait list     */
;;;126            pevent->OSEventTbl[y_old] &= ~ptcb->OSTCBBitX;
;;;127            if (pevent->OSEventTbl[y_old] == 0) {
;;;128                pevent->OSEventGrp &= ~ptcb->OSTCBBitY;
;;;129            }
;;;130            pevent->OSEventGrp    |= bity;                          /* Add new priority to wait list       */
;;;131            pevent->OSEventTbl[y] |= bitx;
;;;132        }
;;;133    #endif
;;;134        ptcb->OSTCBPrio = newprio;                                  /* Set new task priority               */
;;;135        ptcb->OSTCBY    = y;
;;;136        ptcb->OSTCBX    = x;
;;;137        ptcb->OSTCBBitY = bity;
;;;138        ptcb->OSTCBBitX = bitx;
;;;139        OS_EXIT_CRITICAL();
;;;140        if (OSRunning == OS_TRUE) {
;;;141            OS_Sched();                                             /* Find new highest priority task      */
;;;142        }
;;;143        return (OS_ERR_NONE);
;;;144    }
00002c  e12fff1e          BX       lr
                  |L1.48|
000030  e355001f          CMP      r5,#0x1f
000034  ba000001          BLT      |L1.64|
000038  e3a0002a          MOV      r0,#0x2a
00003c  eafffff9          B        |L1.40|
                  |L1.64|
000040  ebfffffe          BL       OS_CPU_SR_Save
000044  e58d0000          STR      r0,[sp,#0]
000048  e59f0d04          LDR      r0,|L1.3412|
00004c  e7900105          LDR      r0,[r0,r5,LSL #2]
000050  e3500000          CMP      r0,#0
000054  0a000003          BEQ      |L1.104|
000058  e59d0000          LDR      r0,[sp,#0]
00005c  ebfffffe          BL       OS_CPU_SR_Restore
000060  e3a00028          MOV      r0,#0x28
000064  eaffffef          B        |L1.40|
                  |L1.104|
000068  e35400ff          CMP      r4,#0xff
00006c  1a000002          BNE      |L1.124|
000070  e59f0ce0          LDR      r0,|L1.3416|
000074  e5900000          LDR      r0,[r0,#0]  ; OSTCBCur
000078  e5d0402e          LDRB     r4,[r0,#0x2e]
                  |L1.124|
00007c  e59f0cd0          LDR      r0,|L1.3412|
000080  e7907104          LDR      r7,[r0,r4,LSL #2]
000084  e3570000          CMP      r7,#0
000088  1a000003          BNE      |L1.156|
00008c  e59d0000          LDR      r0,[sp,#0]
000090  ebfffffe          BL       OS_CPU_SR_Restore
000094  e3a00029          MOV      r0,#0x29
000098  eaffffe2          B        |L1.40|
                  |L1.156|
00009c  e3570001          CMP      r7,#1
0000a0  1a000003          BNE      |L1.180|
0000a4  e59d0000          LDR      r0,[sp,#0]
0000a8  ebfffffe          BL       OS_CPU_SR_Restore
0000ac  e3a00043          MOV      r0,#0x43
0000b0  eaffffdc          B        |L1.40|
                  |L1.180|
0000b4  e1a091c5          ASR      r9,r5,#3
0000b8  e2058007          AND      r8,r5,#7
0000bc  e3a00001          MOV      r0,#1
0000c0  e1a00910          LSL      r0,r0,r9
0000c4  e20000ff          AND      r0,r0,#0xff
0000c8  e58d0004          STR      r0,[sp,#4]
0000cc  e3a00001          MOV      r0,#1
0000d0  e1a00810          LSL      r0,r0,r8
0000d4  e200a0ff          AND      r10,r0,#0xff
0000d8  e3a00000          MOV      r0,#0
0000dc  e59f1c70          LDR      r1,|L1.3412|
0000e0  e7810104          STR      r0,[r1,r4,LSL #2]
0000e4  e2810000          ADD      r0,r1,#0
0000e8  e7807105          STR      r7,[r0,r5,LSL #2]
0000ec  e5d7b030          LDRB     r11,[r7,#0x30]
0000f0  e59f0c64          LDR      r0,|L1.3420|
0000f4  e7d0000b          LDRB     r0,[r0,r11]
0000f8  e5d71031          LDRB     r1,[r7,#0x31]
0000fc  e1100001          TST      r0,r1
000100  0a00001a          BEQ      |L1.368|
000104  e59f0c50          LDR      r0,|L1.3420|
000108  e7d0000b          LDRB     r0,[r0,r11]
00010c  e5d71031          LDRB     r1,[r7,#0x31]
000110  e1c00001          BIC      r0,r0,r1
000114  e59f1c40          LDR      r1,|L1.3420|
000118  e7c1000b          STRB     r0,[r1,r11]
00011c  e2810000          ADD      r0,r1,#0
000120  e7d0000b          LDRB     r0,[r0,r11]
000124  e3500000          CMP      r0,#0
000128  1a000005          BNE      |L1.324|
00012c  e5d70032          LDRB     r0,[r7,#0x32]
000130  e59f1c28          LDR      r1,|L1.3424|
000134  e5d11000          LDRB     r1,[r1,#0]  ; OSRdyGrp
000138  e1c10000          BIC      r0,r1,r0
00013c  e59f1c1c          LDR      r1,|L1.3424|
000140  e5c10000          STRB     r0,[r1,#0]  ; OSRdyGrp
                  |L1.324|
000144  e59f0c14          LDR      r0,|L1.3424|
000148  e5d01000          LDRB     r1,[r0,#0]  ; OSRdyGrp
00014c  e59d0004          LDR      r0,[sp,#4]
000150  e1800001          ORR      r0,r0,r1
000154  e59f1c04          LDR      r1,|L1.3424|
000158  e5c10000          STRB     r0,[r1,#0]  ; OSRdyGrp
00015c  e59f0bf8          LDR      r0,|L1.3420|
000160  e7d00009          LDRB     r0,[r0,r9]
000164  e180000a          ORR      r0,r0,r10
000168  e59f1bec          LDR      r1,|L1.3420|
00016c  e7c10009          STRB     r0,[r1,r9]
                  |L1.368|
000170  e597601c          LDR      r6,[r7,#0x1c]
000174  e3560000          CMP      r6,#0
000178  0a000016          BEQ      |L1.472|
00017c  e286000b          ADD      r0,r6,#0xb
000180  e7d0000b          LDRB     r0,[r0,r11]
000184  e5d71031          LDRB     r1,[r7,#0x31]
000188  e1c00001          BIC      r0,r0,r1
00018c  e286100b          ADD      r1,r6,#0xb
000190  e7c1000b          STRB     r0,[r1,r11]
000194  e286000b          ADD      r0,r6,#0xb
000198  e7d0000b          LDRB     r0,[r0,r11]
00019c  e3500000          CMP      r0,#0
0001a0  1a000003          BNE      |L1.436|
0001a4  e5d6000a          LDRB     r0,[r6,#0xa]
0001a8  e5d71032          LDRB     r1,[r7,#0x32]
0001ac  e1c00001          BIC      r0,r0,r1
0001b0  e5c6000a          STRB     r0,[r6,#0xa]
                  |L1.436|
0001b4  e5d6100a          LDRB     r1,[r6,#0xa]
0001b8  e59d0004          LDR      r0,[sp,#4]
0001bc  e1800001          ORR      r0,r0,r1
0001c0  e5c6000a          STRB     r0,[r6,#0xa]
0001c4  e286000b          ADD      r0,r6,#0xb
0001c8  e7d00009          LDRB     r0,[r0,r9]
0001cc  e180000a          ORR      r0,r0,r10
0001d0  e286100b          ADD      r1,r6,#0xb
0001d4  e7c10009          STRB     r0,[r1,r9]
                  |L1.472|
0001d8  e5c7502e          STRB     r5,[r7,#0x2e]
0001dc  e5c79030          STRB     r9,[r7,#0x30]
0001e0  e5c7802f          STRB     r8,[r7,#0x2f]
0001e4  e59d0004          LDR      r0,[sp,#4]
0001e8  e5c70032          STRB     r0,[r7,#0x32]
0001ec  e5c7a031          STRB     r10,[r7,#0x31]
0001f0  e59d0000          LDR      r0,[sp,#0]
0001f4  ebfffffe          BL       OS_CPU_SR_Restore
0001f8  e59f0b64          LDR      r0,|L1.3428|
0001fc  e5d00000          LDRB     r0,[r0,#0]  ; OSRunning
000200  e3500001          CMP      r0,#1
000204  1a000000          BNE      |L1.524|
000208  ebfffffe          BL       OS_Sched
                  |L1.524|
00020c  e3a00000          MOV      r0,#0
000210  eaffff84          B        |L1.40|
                          ENDP

                  OSTaskCreate PROC
;;;188    INT8U  OSTaskCreate (void (*task)(void *p_arg), void *p_arg, OS_STK *ptos, INT8U prio)
;;;189    {
000214  e92d4ffe          PUSH     {r1-r11,lr}
000218  e1a04000          MOV      r4,r0
00021c  e1a05001          MOV      r5,r1
000220  e1a06002          MOV      r6,r2
000224  e1a08003          MOV      r8,r3
;;;190        OS_STK    *psp;
;;;191        INT8U      err;
;;;192    #if OS_CRITICAL_METHOD == 3                  /* Allocate storage for CPU status register               */
;;;193        OS_CPU_SR  cpu_sr = 0;
000228  e3a09000          MOV      r9,#0
;;;194    #endif
;;;195    
;;;196    
;;;197    
;;;198    #if OS_ARG_CHK_EN > 0
;;;199        if (prio > OS_LOWEST_PRIO) {             /* Make sure priority is within allowable range           */
00022c  e358001f          CMP      r8,#0x1f
000230  da000002          BLE      |L1.576|
;;;200            return (OS_ERR_PRIO_INVALID);
000234  e3a0002a          MOV      r0,#0x2a
                  |L1.568|
000238  e8bd4ffe          POP      {r1-r11,lr}
;;;201        }
;;;202    #endif
;;;203        OS_ENTER_CRITICAL();

⌨️ 快捷键说明

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