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