📄 os_task.txt
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 919] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o.\output\os_task.o --depend=.\output\os_task.d --device=DARMSTM --apcs=interwork -O1 -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 -IC:\Keil\ARM\INC\ST\STM32F10x --omf_browse=.\output\os_task.crf ..\..\..\..\..\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-r12,lr}
000004 4604 MOV r4,r0
000006 460f MOV r7,r1
;;;53 #if (OS_EVENT_EN)
;;;54 OS_EVENT *pevent;
;;;55 #if (OS_EVENT_MULTI_EN > 0)
;;;56 OS_EVENT **pevents;
;;;57 #endif
;;;58 #endif
;;;59 OS_TCB *ptcb;
;;;60 INT8U y_new;
;;;61 INT8U x_new;
;;;62 INT8U y_old;
;;;63 #if OS_LOWEST_PRIO <= 63
;;;64 INT8U bity_new;
;;;65 INT8U bitx_new;
;;;66 INT8U bity_old;
;;;67 INT8U bitx_old;
;;;68 #else
;;;69 INT16U bity_new;
;;;70 INT16U bitx_new;
;;;71 INT16U bity_old;
;;;72 INT16U bitx_old;
;;;73 #endif
;;;74 #if OS_CRITICAL_METHOD == 3
;;;75 OS_CPU_SR cpu_sr = 0; /* Storage for CPU status register */
;;;76 #endif
;;;77
;;;78
;;;79 /*$PAGE*/
;;;80 #if OS_ARG_CHK_EN > 0
;;;81 if (oldprio >= OS_LOWEST_PRIO) {
;;;82 if (oldprio != OS_PRIO_SELF) {
;;;83 return (OS_ERR_PRIO_INVALID);
;;;84 }
;;;85 }
;;;86 if (newprio >= OS_LOWEST_PRIO) {
;;;87 return (OS_ERR_PRIO_INVALID);
;;;88 }
;;;89 #endif
;;;90 OS_ENTER_CRITICAL();
000008 f7fff7ff BL OS_CPU_SR_Save
;;;91 if (OSTCBPrioTbl[newprio] != (OS_TCB *)0) { /* New priority must not already exist */
00000c 49fa LDR r1,|L1.1016|
00000e f851f851 LDR r2,[r1,r7,LSL #2]
000012 b122 CBZ r2,|L1.30|
;;;92 OS_EXIT_CRITICAL();
000014 f7fff7ff BL OS_CPU_SR_Restore
;;;93 return (OS_ERR_PRIO_EXIST);
000018 2028 MOVS r0,#0x28
|L1.26|
;;;94 }
;;;95 if (oldprio == OS_PRIO_SELF) { /* See if changing self */
;;;96 oldprio = OSTCBCur->OSTCBPrio; /* Yes, get priority */
;;;97 }
;;;98 ptcb = OSTCBPrioTbl[oldprio];
;;;99 if (ptcb == (OS_TCB *)0) { /* Does task to change exist? */
;;;100 OS_EXIT_CRITICAL(); /* No, can't change its priority! */
;;;101 return (OS_ERR_PRIO);
;;;102 }
;;;103 if (ptcb == OS_TCB_RESERVED) { /* Is task assigned to Mutex */
;;;104 OS_EXIT_CRITICAL(); /* No, can't change its priority! */
;;;105 return (OS_ERR_TASK_NOT_EXIST);
;;;106 }
;;;107 #if OS_LOWEST_PRIO <= 63
;;;108 y_new = (INT8U)(newprio >> 3); /* Yes, compute new TCB fields */
;;;109 x_new = (INT8U)(newprio & 0x07);
;;;110 bity_new = (INT8U)(1 << y_new);
;;;111 bitx_new = (INT8U)(1 << x_new);
;;;112 #else
;;;113 y_new = (INT8U)((newprio >> 4) & 0x0F);
;;;114 x_new = (INT8U)( newprio & 0x0F);
;;;115 bity_new = (INT16U)(1 << y_new);
;;;116 bitx_new = (INT16U)(1 << x_new);
;;;117 #endif
;;;118
;;;119 OSTCBPrioTbl[oldprio] = (OS_TCB *)0; /* Remove TCB from old priority */
;;;120 OSTCBPrioTbl[newprio] = ptcb; /* Place pointer to TCB @ new priority */
;;;121 y_old = ptcb->OSTCBY;
;;;122 bity_old = ptcb->OSTCBBitY;
;;;123 bitx_old = ptcb->OSTCBBitX;
;;;124 if ((OSRdyTbl[y_old] & bitx_old) != 0) { /* If task is ready make it not */
;;;125 OSRdyTbl[y_old] &= ~bitx_old;
;;;126 if (OSRdyTbl[y_old] == 0) {
;;;127 OSRdyGrp &= ~bity_old;
;;;128 }
;;;129 OSRdyGrp |= bity_new; /* Make new priority ready to run */
;;;130 OSRdyTbl[y_new] |= bitx_new;
;;;131 }
;;;132
;;;133 #if (OS_EVENT_EN)
;;;134 pevent = ptcb->OSTCBEventPtr;
;;;135 if (pevent != (OS_EVENT *)0) {
;;;136 pevent->OSEventTbl[y_old] &= ~bitx_old; /* Remove old task prio from wait list */
;;;137 if (pevent->OSEventTbl[y_old] == 0) {
;;;138 pevent->OSEventGrp &= ~bity_old;
;;;139 }
;;;140 pevent->OSEventGrp |= bity_new; /* Add new task prio to wait list */
;;;141 pevent->OSEventTbl[y_new] |= bitx_new;
;;;142 }
;;;143 #if (OS_EVENT_MULTI_EN > 0)
;;;144 if (ptcb->OSTCBEventMultiPtr != (OS_EVENT **)0) {
;;;145 pevents = ptcb->OSTCBEventMultiPtr;
;;;146 pevent = *pevents;
;;;147 while (pevent != (OS_EVENT *)0) {
;;;148 pevent->OSEventTbl[y_old] &= ~bitx_old; /* Remove old task prio from wait lists */
;;;149 if (pevent->OSEventTbl[y_old] == 0) {
;;;150 pevent->OSEventGrp &= ~bity_old;
;;;151 }
;;;152 pevent->OSEventGrp |= bity_new; /* Add new task prio to wait lists */
;;;153 pevent->OSEventTbl[y_new] |= bitx_new;
;;;154 pevents++;
;;;155 pevent = *pevents;
;;;156 }
;;;157 }
;;;158 #endif
;;;159 #endif
;;;160
;;;161 ptcb->OSTCBPrio = newprio; /* Set new task priority */
;;;162 ptcb->OSTCBY = y_new;
;;;163 ptcb->OSTCBX = x_new;
;;;164 ptcb->OSTCBBitY = bity_new;
;;;165 ptcb->OSTCBBitX = bitx_new;
;;;166 OS_EXIT_CRITICAL();
;;;167 if (OSRunning == OS_TRUE) {
;;;168 OS_Sched(); /* Find new highest priority task */
;;;169 }
;;;170 return (OS_ERR_NONE);
;;;171 }
00001a e8bde8bd POP {r4-r12,pc}
|L1.30|
00001e 2cff CMP r4,#0xff ;95
000020 d103 BNE |L1.42|
000022 4af6 LDR r2,|L1.1020|
000024 6812 LDR r2,[r2,#0] ;96 ; OSTCBCur
000026 f892f892 LDRB r4,[r2,#0x32] ;96
|L1.42|
00002a f851f851 LDR r2,[r1,r4,LSL #2] ;98
00002e b91a CBNZ r2,|L1.56|
000030 f7fff7ff BL OS_CPU_SR_Restore
000034 2029 MOVS r0,#0x29 ;101
000036 e7f0 B |L1.26|
|L1.56|
000038 2a01 CMP r2,#1 ;103
00003a d103 BNE |L1.68|
00003c f7fff7ff BL OS_CPU_SR_Restore
000040 2043 MOVS r0,#0x43 ;105
000042 e7ea B |L1.26|
|L1.68|
000044 08fb LSRS r3,r7,#3 ;108
000046 f007f007 AND r10,r7,#7 ;109
00004a 2501 MOVS r5,#1 ;110
00004c fa05fa05 LSL r6,r5,r3 ;110
000050 b2f6 UXTB r6,r6 ;110
000052 fa05fa05 LSL r5,r5,r10 ;111
000056 f005f005 AND r12,r5,#0xff ;111
00005a 2500 MOVS r5,#0 ;119
00005c f841f841 STR r5,[r1,r4,LSL #2] ;119
000060 f841f841 STR r2,[r1,r7,LSL #2] ;120
000064 f892f892 LDRB r5,[r2,#0x34] ;121
000068 f892f892 LDRB r9,[r2,#0x36] ;122
00006c f892f892 LDRB lr,[r2,#0x35] ;123
000070 4ce3 LDR r4,|L1.1024|
000072 5d61 LDRB r1,[r4,r5] ;124
000074 ea11ea11 TST r1,lr ;124
000078 d015 BEQ |L1.166|
00007a ea21ea21 BIC r1,r1,lr ;125
00007e 5561 STRB r1,[r4,r5] ;125
000080 5d61 LDRB r1,[r4,r5] ;126
000082 f8dff8df LDR r8,|L1.1028|
000086 b929 CBNZ r1,|L1.148|
000088 f898f898 LDRB r1,[r8,#0] ;127 ; OSRdyGrp
00008c ea21ea21 BIC r1,r1,r9 ;127
000090 f888f888 STRB r1,[r8,#0] ;127 ; OSRdyGrp
|L1.148|
000094 f898f898 LDRB r1,[r8,#0] ;129 ; OSRdyGrp
000098 4331 ORRS r1,r1,r6 ;129
00009a f888f888 STRB r1,[r8,#0] ;129 ; OSRdyGrp
00009e 5ce1 LDRB r1,[r4,r3] ;130
0000a0 ea41ea41 ORR r1,r1,r12 ;130
0000a4 54e1 STRB r1,[r4,r3] ;130
|L1.166|
0000a6 69d1 LDR r1,[r2,#0x1c] ;134
0000a8 b1a1 CBZ r1,|L1.212|
0000aa 194c ADDS r4,r1,r5 ;136
0000ac f894f894 LDRB r8,[r4,#0xb] ;136
0000b0 ea28ea28 BIC r8,r8,lr ;136
0000b4 f884f884 STRB r8,[r4,#0xb] ;136
0000b8 7ae4 LDRB r4,[r4,#0xb] ;137
0000ba b91c CBNZ r4,|L1.196|
0000bc 7a8c LDRB r4,[r1,#0xa] ;138
0000be ea24ea24 BIC r4,r4,r9 ;138
0000c2 728c STRB r4,[r1,#0xa] ;138
|L1.196|
0000c4 7a8c LDRB r4,[r1,#0xa] ;140
0000c6 4334 ORRS r4,r4,r6 ;140
0000c8 728c STRB r4,[r1,#0xa] ;140
0000ca 4419 ADD r1,r1,r3 ;141
0000cc 7acc LDRB r4,[r1,#0xb] ;141
0000ce ea44ea44 ORR r4,r4,r12 ;141
0000d2 72cc STRB r4,[r1,#0xb] ;141
|L1.212|
0000d4 6a14 LDR r4,[r2,#0x20] ;144
0000d6 b32c CBZ r4,|L1.292|
0000d8 6821 LDR r1,[r4,#0] ;146
0000da e021 B |L1.288|
|L1.220|
0000dc eb01eb01 ADD r8,r1,r5 ;148
0000e0 f898f898 LDRB r11,[r8,#0xb] ;148
0000e4 ea2bea2b BIC r11,r11,lr ;148
0000e8 f888f888 STRB r11,[r8,#0xb] ;148
0000ec f898f898 LDRB r8,[r8,#0xb] ;149
0000f0 f1b8f1b8 CMP r8,#0 ;149
0000f4 d105 BNE |L1.258|
0000f6 f891f891 LDRB r8,[r1,#0xa] ;150
0000fa ea28ea28 BIC r8,r8,r9 ;150
0000fe f881f881 STRB r8,[r1,#0xa] ;150
|L1.258|
000102 f891f891 LDRB r8,[r1,#0xa] ;152
000106 ea48ea48 ORR r8,r8,r6 ;152
00010a f881f881 STRB r8,[r1,#0xa] ;152
00010e 4419 ADD r1,r1,r3 ;153
000110 f891f891 LDRB r8,[r1,#0xb] ;153
000114 ea48ea48 ORR r8,r8,r12 ;153
000118 f881f881 STRB r8,[r1,#0xb] ;153
00011c f854f854 LDR r1,[r4,#4]! ;155
|L1.288|
000120 2900 CMP r1,#0 ;147
000122 d1db BNE |L1.220|
|L1.292|
000124 f802f802 STRB r7,[r2,#0x32]! ;161
000128 7093 STRB r3,[r2,#2] ;162
00012a f882f882 STRB r10,[r2,#1] ;163
00012e 7116 STRB r6,[r2,#4] ;164
000130 f882f882 STRB r12,[r2,#3] ;165
000134 f7fff7ff BL OS_CPU_SR_Restore
000138 48b3 LDR r0,|L1.1032|
00013a 7800 LDRB r0,[r0,#0] ;167 ; OSRunning
00013c 2801 CMP r0,#1 ;167
00013e d101 BNE |L1.324|
000140 f7fff7ff BL OS_Sched
|L1.324|
000144 2000 MOVS r0,#0 ;170
000146 e768 B |L1.26|
;;;172 #endif
ENDP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -