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