?? os_task.txt
字號:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 914] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o.\rvmdk\os_task.o --depend=.\rvmdk\os_task.d --device=DARMSTM -O1 -Otime -I. -I..\BSP -I..\..\..\..\..\uCOS-II\Ports\arm-cortex-m3\Generic\RealView -I..\..\..\..\..\uCOS-II\Source -I..\..\..\..\..\CPU\ST\STM32\inc -I..\..\..\..\..\uC-CPU -I..\..\..\..\..\uC-CPU\Arm-Cortex-M3\RealView -I..\..\..\..\..\uC-LIB -I..\..\..\..\..\uC-Probe\Target\Plugins\uCOS-II -I..\..\..\..\..\uC-Probe\Target\Communication\Generic\Source -I..\..\..\..\..\uC-Probe\Target\Communication\Generic\RS-232\Ports\ST\STM32 -I..\..\..\..\..\uC-Probe\Target\Communication\Generic\RS-232\Source -ID:\Keil\ARM\INC\ST\STM32F10x ..\..\..\..\..\uCOS-II\Source\os_task.c]
THUMB
AREA ||.text||, CODE, READONLY, ALIGN=2
OSTaskChangePrio PROC
;;;51 INT8U OSTaskChangePrio (INT8U oldprio, INT8U newprio)
;;;52 {
000000 e92de92d PUSH {r4-r10,lr}
000004 4605 MOV r5,r0
000006 460c MOV r4,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 */
;;;69 #endif
;;;70
;;;71
;;;72
;;;73 #if OS_ARG_CHK_EN > 0
;;;74 if (oldprio >= OS_LOWEST_PRIO) {
000008 2d1f CMP r5,#0x1f
00000a d304 BCC |L1.22|
;;;75 if (oldprio != OS_PRIO_SELF) {
00000c 2dff CMP r5,#0xff
00000e d002 BEQ |L1.22|
;;;76 return (OS_ERR_PRIO_INVALID);
000010 202a MOVS r0,#0x2a
000012 e8bde8bd POP {r4-r10,pc}
|L1.22|
;;;77 }
;;;78 }
;;;79 if (newprio >= OS_LOWEST_PRIO) {
000016 2c1f CMP r4,#0x1f
000018 d302 BCC |L1.32|
;;;80 return (OS_ERR_PRIO_INVALID);
00001a 202a MOVS r0,#0x2a
00001c e8bde8bd POP {r4-r10,pc}
|L1.32|
;;;81 }
;;;82 #endif
;;;83 OS_ENTER_CRITICAL();
000020 f7fff7ff BL OS_CPU_SR_Save
;;;84 if (OSTCBPrioTbl[newprio] != (OS_TCB *)0) { /* New priority must not already exist */
000024 4afc LDR r2,|L1.1048|
000026 f852f852 LDR r1,[r2,r4,LSL #2]
00002a b121 CBZ r1,|L1.54|
;;;85 OS_EXIT_CRITICAL();
00002c f7fff7ff BL OS_CPU_SR_Restore
;;;86 return (OS_ERR_PRIO_EXIST);
000030 2028 MOVS r0,#0x28
000032 e8bde8bd POP {r4-r10,pc}
|L1.54|
;;;87 }
;;;88 if (oldprio == OS_PRIO_SELF) { /* See if changing self */
000036 2dff CMP r5,#0xff
000038 d103 BNE |L1.66|
;;;89 oldprio = OSTCBCur->OSTCBPrio; /* Yes, get priority */
00003a 49f8 LDR r1,|L1.1052|
00003c 6809 LDR r1,[r1,#0] ; OSTCBCur
00003e f891f891 LDRB r5,[r1,#0x2e]
|L1.66|
;;;90 }
;;;91 ptcb = OSTCBPrioTbl[oldprio];
000042 f852f852 LDR r1,[r2,r5,LSL #2]
;;;92 if (ptcb == (OS_TCB *)0) { /* Does task to change exist? */
000046 b921 CBNZ r1,|L1.82|
;;;93 OS_EXIT_CRITICAL(); /* No, can't change its priority! */
000048 f7fff7ff BL OS_CPU_SR_Restore
;;;94 return (OS_ERR_PRIO);
00004c 2029 MOVS r0,#0x29
00004e e8bde8bd POP {r4-r10,pc}
|L1.82|
;;;95 }
;;;96 if (ptcb == OS_TCB_RESERVED) { /* Is task assigned to Mutex */
000052 2901 CMP r1,#1
000054 d104 BNE |L1.96|
;;;97 OS_EXIT_CRITICAL(); /* No, can't change its priority! */
000056 f7fff7ff BL OS_CPU_SR_Restore
;;;98 return (OS_ERR_TASK_NOT_EXIST);
00005a 2043 MOVS r0,#0x43
00005c e8bde8bd POP {r4-r10,pc}
|L1.96|
;;;99 }
;;;100 #if OS_LOWEST_PRIO <= 63
;;;101 y = (INT8U)(newprio >> 3); /* Yes, compute new TCB fields */
000060 08e3 LSRS r3,r4,#3
;;;102 x = (INT8U)(newprio & 0x07);
000062 f004f004 AND r7,r4,#7
;;;103 bity = (INT8U)(1 << y);
000066 f04ff04f MOV r12,#1
00006a fa0cfa0c LSL lr,r12,r3
00006e f00ef00e AND r6,lr,#0xff
;;;104 bitx = (INT8U)(1 << x);
000072 fa0cfa0c LSL r12,r12,r7
000076 f00cf00c AND lr,r12,#0xff
;;;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 */
00007a f04ff04f MOV r12,#0
00007e f842f842 STR r12,[r2,r5,LSL #2]
;;;113 OSTCBPrioTbl[newprio] = ptcb; /* Place pointer to TCB @ new priority */
000082 f842f842 STR r1,[r2,r4,LSL #2]
;;;114 y_old = ptcb->OSTCBY;
000086 f891f891 LDRB r12,[r1,#0x30]
;;;115 if ((OSRdyTbl[y_old] & ptcb->OSTCBBitX) != 0) { /* If task is ready make it not */
00008a f8dff8df LDR r8,|L1.1056|
00008e f891f891 LDRB r5,[r1,#0x31]
000092 f818f818 LDRB r2,[r8,r12]
000096 422a TST r2,r5
000098 d016 BEQ |L1.200|
;;;116 OSRdyTbl[y_old] &= ~ptcb->OSTCBBitX;
00009a 43aa BICS r2,r2,r5
00009c f808f808 STRB r2,[r8,r12]
;;;117 if (OSRdyTbl[y_old] == 0) {
0000a0 f818f818 LDRB r5,[r8,r12]
0000a4 4adf LDR r2,|L1.1060|
0000a6 b935 CBNZ r5,|L1.182|
;;;118 OSRdyGrp &= ~ptcb->OSTCBBitY;
0000a8 f891f891 LDRB r5,[r1,#0x32]
0000ac f892f892 LDRB r9,[r2,#0] ; OSRdyGrp
0000b0 ea29ea29 BIC r5,r9,r5
0000b4 7015 STRB r5,[r2,#0] ; OSRdyGrp
|L1.182|
;;;119 }
;;;120 OSRdyGrp |= bity; /* Make new priority ready to run */
0000b6 7815 LDRB r5,[r2,#0] ; OSRdyGrp
0000b8 4335 ORRS r5,r5,r6
0000ba 7015 STRB r5,[r2,#0] ; OSRdyGrp
;;;121 OSRdyTbl[y] |= bitx;
0000bc f818f818 LDRB r2,[r8,r3]
0000c0 ea42ea42 ORR r2,r2,lr
0000c4 f808f808 STRB r2,[r8,r3]
|L1.200|
;;;122 }
;;;123 #if OS_EVENT_EN
;;;124 pevent = ptcb->OSTCBEventPtr;
0000c8 69ca LDR r2,[r1,#0x1c]
;;;125 if (pevent != (OS_EVENT *)0) { /* ... remove from event wait list */
0000ca b312 CBZ r2,|L1.274|
;;;126 pevent->OSEventTbl[y_old] &= ~ptcb->OSTCBBitX;
0000cc 4494 ADD r12,r12,r2
0000ce f89cf89c LDRB r5,[r12,#0xb]
0000d2 f891f891 LDRB r8,[r1,#0x31]
0000d6 ea25ea25 BIC r5,r5,r8
0000da f88cf88c STRB r5,[r12,#0xb]
;;;127 if (pevent->OSEventTbl[y_old] == 0) {
0000de f89cf89c LDRB r12,[r12,#0xb]
0000e2 f1bcf1bc CMP r12,#0
0000e6 d107 BNE |L1.248|
;;;128 pevent->OSEventGrp &= ~ptcb->OSTCBBitY;
0000e8 f892f892 LDRB r12,[r2,#0xa]
0000ec f891f891 LDRB r5,[r1,#0x32]
0000f0 ea2cea2c BIC r12,r12,r5
0000f4 f882f882 STRB r12,[r2,#0xa]
|L1.248|
;;;129 }
;;;130 pevent->OSEventGrp |= bity; /* Add new priority to wait list */
0000f8 f892f892 LDRB r12,[r2,#0xa]
0000fc ea4cea4c ORR r12,r12,r6
000100 f882f882 STRB r12,[r2,#0xa]
;;;131 pevent->OSEventTbl[y] |= bitx;
000104 441a ADD r2,r2,r3
000106 f892f892 LDRB r12,[r2,#0xb]
00010a ea4cea4c ORR r12,r12,lr
00010e f882f882 STRB r12,[r2,#0xb]
|L1.274|
;;;132 }
;;;133 #endif
;;;134 ptcb->OSTCBPrio = newprio; /* Set new task priority */
000112 f881f881 STRB r4,[r1,#0x2e]
;;;135 ptcb->OSTCBY = y;
000116 f881f881 STRB r3,[r1,#0x30]
;;;136 ptcb->OSTCBX = x;
00011a f881f881 STRB r7,[r1,#0x2f]
;;;137 ptcb->OSTCBBitY = bity;
00011e f881f881 STRB r6,[r1,#0x32]
;;;138 ptcb->OSTCBBitX = bitx;
000122 f881f881 STRB lr,[r1,#0x31]
;;;139 OS_EXIT_CRITICAL();
000126 f7fff7ff BL OS_CPU_SR_Restore
;;;140 if (OSRunning == OS_TRUE) {
00012a 48bf LDR r0,|L1.1064|
00012c 7800 LDRB r0,[r0,#0] ; OSRunning
00012e 2801 CMP r0,#1
000130 d101 BNE |L1.310|
;;;141 OS_Sched(); /* Find new highest priority task */
000132 f7fff7ff BL OS_Sched
|L1.310|
;;;142 }
;;;143 return (OS_ERR_NONE);
000136 2000 MOVS r0,#0
;;;144 }
000138 e8bde8bd POP {r4-r10,pc}
;;;145 #endif
ENDP
OSTaskCreate PROC
;;;188 INT8U OSTaskCreate (void (*task)(void *p_arg), void *p_arg, OS_STK *ptos, INT8U prio)
;;;189 {
00013c e92de92d PUSH {r4-r8,lr}
000140 b084 SUB sp,sp,#0x10
000142 4605 MOV r5,r0
000144 460f MOV r7,r1
000146 4690 MOV r8,r2
000148 461c MOV r4,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;
;;;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 */
00014a 2c1f CMP r4,#0x1f
00014c d903 BLS |L1.342|
;;;200 return (OS_ERR_PRIO_INVALID);
00014e 202a MOVS r0,#0x2a
000150 b004 ADD sp,sp,#0x10
000152 e8bde8bd POP {r4-r8,pc}
|L1.342|
;;;201 }
;;;202 #endif
;;;203 OS_ENTER_CRITICAL();
000156 f7fff7ff BL OS_CPU_SR_Save
;;;204 if (OSIntNesting > 0) { /* Make sure we don't create the task from within an ISR */
00015a 49b4 LDR r1,|L1.1068|
00015c 7809 LDRB r1,[r1,#0] ; OSIntNesting
00015e b129 CBZ r1,|L1.364|
;;;205 OS_EXIT_CRITICAL();
000160 f7fff7ff BL OS_CPU_SR_Restore
;;;206 return (OS_ERR_TASK_CREATE_ISR);
000164 203c MOVS r0,#0x3c
000166 b004 ADD sp,sp,#0x10
000168 e8bde8bd POP {r4-r8,pc}
|L1.364|
;;;207 }
;;;208 if (OSTCBPrioTbl[prio] == (OS_TCB *)0) { /* Make sure task doesn't already exist at this priority */
00016c 4eaa LDR r6,|L1.1048|
00016e f856f856 LDR r1,[r6,r4,LSL #2]
000172 2900 CMP r1,#0
000174 d127 BNE |L1.454|
;;;209 OSTCBPrioTbl[prio] = OS_TCB_RESERVED;/* Reserve the priority to prevent others from doing ... */
000176 2101 MOVS r1,#1
000178 f846f846 STR r1,[r6,r4,LSL #2]
;;;210 /* ... the same thing until task is created. */
;;;211 OS_EXIT_CRITICAL();
00017c f7fff7ff BL OS_CPU_SR_Restore
;;;212 psp = OSTaskStkInit(task, p_arg, ptos, 0); /* Initialize the task's stack */
000180 2300 MOVS r3,#0
000182 4642 MOV r2,r8
000184 4639 MOV r1,r7
000186 4628 MOV r0,r5
000188 f7fff7ff BL OSTaskStkInit
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -