📄 os_task.txt
字号:
; 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 + -