📄 os_cpu_c.txt
字号:
;;;182 case 0x42: /* 中断开始处理 */
;;;183 OSIntNesting++;
;;;184 break;
;;;185 case 0x43: /* 判断中断是否需要切换 */
;;;186 if (OSTCBHighRdy == OSTCBCur)
;;;187 {
;;;188 Regs[0] = 0;
;;;189 }
;;;190 else
;;;191 {
;;;192 Regs[0] = 1;
;;;193 }
;;;194 break;
;;;195 #endif
;;;196 case 0x80: /* 任务切换到系统模式 */
|L1.388|
000184 e1a00000 MOV r0,r0
;;;197 __asm
;;;198 {
;;;199 MRS tmp, SPSR
000188 e14f3000 MRS r3,SPSR
;;;200 BIC tmp, tmp, #0x1f
00018c e3c3301f BIC r3,r3,#0x1f
;;;201 ORR tmp, tmp, #SYS32Mode
000190 e383301f ORR r3,r3,#0x1f
;;;202 MSR SPSR_c, tmp
000194 e161f003 MSR SPSR_c,r3
;;;203 }
;;;204 break;
000198 ea000025 B |L1.564|
;;;205 case 0x81: /* 任务切换到用户模式 */
|L1.412|
00019c e1a00000 MOV r0,r0
;;;206 __asm
;;;207 {
;;;208 MRS tmp, SPSR
0001a0 e14f3000 MRS r3,SPSR
;;;209 BIC tmp, tmp, #0x1f
0001a4 e3c3301f BIC r3,r3,#0x1f
;;;210 ORR tmp, tmp, #USR32Mode
0001a8 e3833010 ORR r3,r3,#0x10
;;;211 MSR SPSR_c, tmp
0001ac e161f003 MSR SPSR_c,r3
;;;212 }
;;;213 break;
0001b0 ea00001f B |L1.564|
;;;214 case 0x82: /* 任务是ARM代码 */
|L1.436|
0001b4 e1a00000 MOV r0,r0
;;;215 if (Regs[0] <= OS_LOWEST_PRIO)
0001b8 e591c000 LDR r12,[r1,#0]
0001bc e35c000c CMP r12,#0xc
0001c0 ca000009 BGT |L1.492|
;;;216 {
;;;217 ptcb = OSTCBPrioTbl[Regs[0]];
0001c4 e59fe0b0 LDR lr,|L1.636|
0001c8 e591c000 LDR r12,[r1,#0]
0001cc e79e210c LDR r2,[lr,r12,LSL #2]
;;;218 if (ptcb != NULL)
0001d0 e3520000 CMP r2,#0
0001d4 0a000004 BEQ |L1.492|
;;;219 {
;;;220 ptcb -> OSTCBStkPtr[1] &= ~(1 << 5);
0001d8 e592c000 LDR r12,[r2,#0]
0001dc e59cc004 LDR r12,[r12,#4]
0001e0 e3ccc020 BIC r12,r12,#0x20
0001e4 e592e000 LDR lr,[r2,#0]
0001e8 e58ec004 STR r12,[lr,#4]
;;;221 }
;;;222 }
;;;223 break;
|L1.492|
0001ec ea000010 B |L1.564|
;;;224 case 0x83: /* 任务是THUMB代码 */
|L1.496|
0001f0 e1a00000 MOV r0,r0
;;;225 if (Regs[0] <= OS_LOWEST_PRIO)
0001f4 e591c000 LDR r12,[r1,#0]
0001f8 e35c000c CMP r12,#0xc
0001fc ca000009 BGT |L1.552|
;;;226 {
;;;227 ptcb = OSTCBPrioTbl[Regs[0]];
000200 e59fe074 LDR lr,|L1.636|
000204 e591c000 LDR r12,[r1,#0]
000208 e79e210c LDR r2,[lr,r12,LSL #2]
;;;228 if (ptcb != NULL)
00020c e3520000 CMP r2,#0
000210 0a000004 BEQ |L1.552|
;;;229 {
;;;230 ptcb -> OSTCBStkPtr[1] |= (1 << 5);
000214 e592c000 LDR r12,[r2,#0]
000218 e59cc004 LDR r12,[r12,#4]
00021c e38cc020 ORR r12,r12,#0x20
000220 e592e000 LDR lr,[r2,#0]
000224 e58ec004 STR r12,[lr,#4]
;;;231 }
;;;232 }
;;;233 break;
|L1.552|
000228 ea000001 B |L1.564|
;;;234 default:
|L1.556|
00022c e1a00000 MOV r0,r0
;;;235 break;
000230 e1a00000 MOV r0,r0
|L1.564|
000234 e1a00000 MOV r0,r0 ;147
;;;236 }
;;;237 }
000238 e49df004 POP {pc}
ENDP
OSStartHighRdy PROC
;;;256 void OSStartHighRdy(void)
;;;257 {
00023c e92d4010 PUSH {r4,lr}
;;;258 _OSStartHighRdy();
000240 ef000001 SVC 0x1 ; formerly SWI
;;;259 }
000244 e8bd8010 POP {r4,pc}
ENDP
OSInitHookBegin PROC
;;;279 {
;;;280 }
000248 e12fff1e BX lr
ENDP
OSInitHookEnd PROC
;;;297 {
;;;298 }
00024c e12fff1e BX lr
ENDP
OSTaskCreateHook PROC
;;;314 {
;;;315 ptcb = ptcb; /* Prevent compiler warning */
000250 e1a00000 MOV r0,r0
;;;316 }
000254 e12fff1e BX lr
ENDP
OSTaskDelHook PROC
;;;331 {
;;;332 ptcb = ptcb; /* Prevent compiler warning */
000258 e1a00000 MOV r0,r0
;;;333 }
00025c e12fff1e BX lr
ENDP
OSTaskSwHook PROC
;;;351 {
;;;352 }
000260 e12fff1e BX lr
ENDP
OSTaskStatHook PROC
;;;365 {
;;;366 }
000264 e12fff1e BX lr
ENDP
OSTCBInitHook PROC
;;;381 {
;;;382 ptcb = ptcb; /* Prevent Compiler warning */
000268 e1a00000 MOV r0,r0
;;;383 }
00026c e12fff1e BX lr
ENDP
OSTimeTickHook PROC
;;;399 {
;;;400 }
000270 e12fff1e BX lr
ENDP
OSTaskIdleHook PROC
;;;417 {
;;;418 }
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 + -