📄 os_cpu_c.txt
字号:
;;;184 OSIntNesting++;
;;;185 break;
;;;186 case 0x43: /* 判断中断是否需要切换 */
;;;187 if (OSTCBHighRdy == OSTCBCur)
;;;188 {
;;;189 Regs[0] = 0;
;;;190 }
;;;191 else
;;;192 {
;;;193 Regs[0] = 1;
;;;194 }
;;;195 break;
;;;196 #endif
;;;197 case 0x80: /* 任务切换到系统模式 */
|L1.380|
00017c e1a00000 MOV r0,r0
;;;198 __asm
;;;199 {
;;;200 MRS temp, SPSR
000180 e14f3000 MRS r3,SPSR
;;;201 BIC temp, temp, #0x1f
000184 e3c3301f BIC r3,r3,#0x1f
;;;202 ORR temp, temp, #SYS32Mode
000188 e383301f ORR r3,r3,#0x1f
;;;203 MSR SPSR_c, temp
00018c e161f003 MSR SPSR_c,r3
;;;204 }
;;;205 break;
000190 ea000025 B |L1.556|
;;;206 case 0x81: /* 任务切换到用户模式 */
|L1.404|
000194 e1a00000 MOV r0,r0
;;;207 __asm
;;;208 {
;;;209 MRS temp, SPSR
000198 e14f3000 MRS r3,SPSR
;;;210 BIC temp, temp, #0x1f
00019c e3c3301f BIC r3,r3,#0x1f
;;;211 ORR temp, temp, #USR32Mode
0001a0 e3833010 ORR r3,r3,#0x10
;;;212 MSR SPSR_c, temp
0001a4 e161f003 MSR SPSR_c,r3
;;;213 }
;;;214 break;
0001a8 ea00001f B |L1.556|
;;;215 case 0x82: /* 任务是ARM代码 */
|L1.428|
0001ac e1a00000 MOV r0,r0
;;;216 if (Regs[0] <= OS_LOWEST_PRIO)
0001b0 e591c000 LDR r12,[r1,#0]
0001b4 e35c000c CMP r12,#0xc
0001b8 ca000009 BGT |L1.484|
;;;217 {
;;;218 ptcb = OSTCBPrioTbl[Regs[0]];
0001bc e59fe0b8 LDR lr,|L1.636|
0001c0 e591c000 LDR r12,[r1,#0]
0001c4 e79e210c LDR r2,[lr,r12,LSL #2]
;;;219 if (ptcb != NULL)
0001c8 e3520000 CMP r2,#0
0001cc 0a000004 BEQ |L1.484|
;;;220 {
;;;221 ptcb -> OSTCBStkPtr[1] &= ~(1 << 5);
0001d0 e592c000 LDR r12,[r2,#0]
0001d4 e59cc004 LDR r12,[r12,#4]
0001d8 e3ccc020 BIC r12,r12,#0x20
0001dc e592e000 LDR lr,[r2,#0]
0001e0 e58ec004 STR r12,[lr,#4]
;;;222 }
;;;223 }
;;;224 break;
|L1.484|
0001e4 ea000010 B |L1.556|
;;;225 case 0x83: /* 任务是THUMB代码 */
|L1.488|
0001e8 e1a00000 MOV r0,r0
;;;226 if (Regs[0] <= OS_LOWEST_PRIO)
0001ec e591c000 LDR r12,[r1,#0]
0001f0 e35c000c CMP r12,#0xc
0001f4 ca000009 BGT |L1.544|
;;;227 {
;;;228 ptcb = OSTCBPrioTbl[Regs[0]];
0001f8 e59fe07c LDR lr,|L1.636|
0001fc e591c000 LDR r12,[r1,#0]
000200 e79e210c LDR r2,[lr,r12,LSL #2]
;;;229 if (ptcb != NULL)
000204 e3520000 CMP r2,#0
000208 0a000004 BEQ |L1.544|
;;;230 {
;;;231 ptcb -> OSTCBStkPtr[1] |= (1 << 5);
00020c e592c000 LDR r12,[r2,#0]
000210 e59cc004 LDR r12,[r12,#4]
000214 e38cc020 ORR r12,r12,#0x20
000218 e592e000 LDR lr,[r2,#0]
00021c e58ec004 STR r12,[lr,#4]
;;;232 }
;;;233 }
;;;234 break;
|L1.544|
000220 ea000001 B |L1.556|
;;;235 default:
|L1.548|
000224 e1a00000 MOV r0,r0
;;;236 break;
000228 e1a00000 MOV r0,r0
|L1.556|
00022c e1a00000 MOV r0,r0 ;148
;;;237 }
;;;238 }
000230 e49de004 POP {lr}
000234 e12fff1e BX lr
ENDP
OSStartHighRdy PROC
;;;257 void OSStartHighRdy(void)
;;;258 {
000238 e92d4010 PUSH {r4,lr}
;;;259 _OSStartHighRdy();
00023c ef000001 SVC 0x1 ; formerly SWI
;;;260 }
000240 e8bd4010 POP {r4,lr}
000244 e12fff1e BX lr
ENDP
OSInitHookBegin PROC
;;;280 {
;;;281 }
000248 e12fff1e BX lr
ENDP
OSInitHookEnd PROC
;;;298 {
;;;299 }
00024c e12fff1e BX lr
ENDP
OSTaskCreateHook PROC
;;;315 {
;;;316 ptcb = ptcb; /* Prevent compiler warning */
000250 e1a00000 MOV r0,r0
;;;317 }
000254 e12fff1e BX lr
ENDP
OSTaskDelHook PROC
;;;332 {
;;;333 ptcb = ptcb; /* Prevent compiler warning */
000258 e1a00000 MOV r0,r0
;;;334 }
00025c e12fff1e BX lr
ENDP
OSTaskSwHook PROC
;;;352 {
;;;353 }
000260 e12fff1e BX lr
ENDP
OSTaskStatHook PROC
;;;366 {
;;;367 }
000264 e12fff1e BX lr
ENDP
OSTCBInitHook PROC
;;;382 {
;;;383 ptcb = ptcb; /* Prevent Compiler warning */
000268 e1a00000 MOV r0,r0
;;;384 }
00026c e12fff1e BX lr
ENDP
OSTimeTickHook PROC
;;;400 {
;;;401 }
000270 e12fff1e BX lr
ENDP
OSTaskIdleHook PROC
;;;418 {
;;;419 }
000274 e12fff1e BX lr
|L1.632|
000278 00000000 DCD OsEnterSum
|L1.636|
00027c 00000000 DCD OSTCBPrioTbl
ENDP
AREA ||.data||, DATA, ALIGN=2
OsEnterSum
DCD 0x00000000
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -