📄 os_task.txt
字号:
00037c e7d10000 LDRB r0,[r1,r0] ;393
000380 e5d71020 LDRB r1,[r7,#0x20] ;393
000384 e1c00001 BIC r0,r0,r1 ;393
000388 e21000ff ANDS r0,r0,#0xff ;393
00038c e5d7101f LDRB r1,[r7,#0x1f] ;393
000390 e2852008 ADD r2,r5,#8 ;393
000394 e7c20001 STRB r0,[r2,r1] ;393
000398 1a000003 BNE |L1.940| ;393
00039c e5d50001 LDRB r0,[r5,#1] ;394
0003a0 e5d71021 LDRB r1,[r7,#0x21] ;394
0003a4 e1c00001 BIC r0,r0,r1 ;394
0003a8 e5c50001 STRB r0,[r5,#1] ;394
|L1.940|
0003ac e5976014 LDR r6,[r7,#0x14] ;399
0003b0 e3560000 CMP r6,#0 ;400
0003b4 0a000001 BEQ |L1.960| ;400
0003b8 e1a00006 MOV r0,r6 ;401
0003bc ebfffffe BL OS_FlagUnlink ;401
|L1.960|
0003c0 e3a00000 MOV r0,#0 ;404
0003c4 e1c701ba STRH r0,[r7,#0x1a] ;404
0003c8 e5c7001c STRB r0,[r7,#0x1c] ;405
0003cc e59f03a8 LDR r0,|L1.1916| ;406
0003d0 e5d00000 LDRB r0,[r0,#0] ;406 ; OSLockNesting
0003d4 e35000ff CMP r0,#0xff ;406
0003d8 aa000004 BGE |L1.1008| ;406
0003dc e59f0398 LDR r0,|L1.1916| ;407
0003e0 e5d00000 LDRB r0,[r0,#0] ;407 ; OSLockNesting
0003e4 e2800001 ADD r0,r0,#1 ;407
0003e8 e59f138c LDR r1,|L1.1916| ;407
0003ec e5c10000 STRB r0,[r1,#0] ;407 ; OSLockNesting
|L1.1008|
0003f0 ef000003 SVC 0x3 ; formerly SWI ;409
0003f4 ebfffffe BL OS_Dummy ;410
0003f8 ef000002 SVC 0x2 ; formerly SWI ;411
0003fc e59f0378 LDR r0,|L1.1916| ;412
000400 e5d00000 LDRB r0,[r0,#0] ;412 ; OSLockNesting
000404 e3500000 CMP r0,#0 ;412
000408 da000004 BLE |L1.1056| ;412
00040c e59f0368 LDR r0,|L1.1916| ;413
000410 e5d00000 LDRB r0,[r0,#0] ;413 ; OSLockNesting
000414 e2400001 SUB r0,r0,#1 ;413
000418 e59f135c LDR r1,|L1.1916| ;413
00041c e5c10000 STRB r0,[r1,#0] ;413 ; OSLockNesting
|L1.1056|
000420 e1a00007 MOV r0,r7 ;415
000424 ebfffffe BL OSTaskDelHook ;415
000428 e59f0340 LDR r0,|L1.1904| ;416
00042c e5d00000 LDRB r0,[r0,#0] ;416 ; OSTaskCtr
000430 e2400001 SUB r0,r0,#1 ;416
000434 e59f1334 LDR r1,|L1.1904| ;416
000438 e5c10000 STRB r0,[r1,#0] ;416 ; OSTaskCtr
00043c e3a00000 MOV r0,#0 ;417
000440 e59f1314 LDR r1,|L1.1884| ;417
000444 e7810104 STR r0,[r1,r4,LSL #2] ;417
000448 e5970008 LDR r0,[r7,#8] ;418
00044c e3500000 CMP r0,#0 ;418
000450 1a000006 BNE |L1.1136| ;418
000454 e3a00000 MOV r0,#0 ;419
000458 e5971004 LDR r1,[r7,#4] ;419
00045c e5810008 STR r0,[r1,#8] ;419
000460 e59f1318 LDR r1,|L1.1920| ;420
000464 e5970004 LDR r0,[r7,#4] ;420
000468 e5810000 STR r0,[r1,#0] ;420 ; OSTCBList
00046c ea000004 B |L1.1156| ;420
|L1.1136|
000470 e9970003 LDMIB r7,{r0,r1} ;422
000474 e5810004 STR r0,[r1,#4] ;422
000478 e5970008 LDR r0,[r7,#8] ;423
00047c e5971004 LDR r1,[r7,#4] ;423
000480 e5810008 STR r0,[r1,#8] ;423
|L1.1156|
000484 e59f02f8 LDR r0,|L1.1924| ;425
000488 e5900000 LDR r0,[r0,#0] ;425 ; OSTCBFreeList
00048c e5870004 STR r0,[r7,#4] ;425
000490 e59f02ec LDR r0,|L1.1924| ;426
000494 e5807000 STR r7,[r0,#0] ;426 ; OSTCBFreeList
000498 ef000003 SVC 0x3 ; formerly SWI ;427
00049c ebfffffe BL OS_Sched ;428
0004a0 e3a00000 MOV r0,#0 ;429
0004a4 eaffff8a B |L1.724| ;429
|L1.1192|
0004a8 ef000003 SVC 0x3 ; formerly SWI ;431
0004ac e3a0003c MOV r0,#0x3c ;432
0004b0 eaffff87 B |L1.724| ;432
ENDP
OSTaskDelReq PROC
;;;482 INT8U OSTaskDelReq (INT8U prio)
;;;483 {
0004b4 e92d41f0 PUSH {r4-r8,lr}
0004b8 e1a04000 MOV r4,r0
;;;484 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;485 OS_CPU_SR cpu_sr;
;;;486 #endif
;;;487 BOOLEAN stat;
;;;488 INT8U err;
;;;489 OS_TCB *ptcb;
;;;490
;;;491
;;;492 #if OS_ARG_CHK_EN > 0
;;;493 if (prio == OS_IDLE_PRIO) { /* Not allowed to delete idle task */
0004bc e354000c CMP r4,#0xc
0004c0 1a000001 BNE |L1.1228|
;;;494 return (OS_TASK_DEL_IDLE);
0004c4 e3a0003d MOV r0,#0x3d
;;;495 }
;;;496 if (prio >= OS_LOWEST_PRIO && prio != OS_PRIO_SELF) { /* Task priority valid ? */
;;;497 return (OS_PRIO_INVALID);
;;;498 }
;;;499 #endif
;;;500 if (prio == OS_PRIO_SELF) { /* See if a task is requesting to ... */
;;;501 OS_ENTER_CRITICAL(); /* ... this task to delete itself */
;;;502 stat = OSTCBCur->OSTCBDelReq; /* Return request status to caller */
;;;503 OS_EXIT_CRITICAL();
;;;504 return (stat);
;;;505 }
;;;506 OS_ENTER_CRITICAL();
;;;507 if ((ptcb = OSTCBPrioTbl[prio]) != (OS_TCB *)0) { /* Task to delete must exist */
;;;508 ptcb->OSTCBDelReq = OS_TASK_DEL_REQ; /* Set flag indicating task to be DEL. */
;;;509 err = OS_NO_ERR;
;;;510 } else {
;;;511 err = OS_TASK_NOT_EXIST; /* Task must be deleted */
;;;512 }
;;;513 OS_EXIT_CRITICAL();
;;;514 return (err);
;;;515 }
|L1.1224|
0004c8 e8bd81f0 POP {r4-r8,pc}
|L1.1228|
0004cc e354000c CMP r4,#0xc ;496
0004d0 ba000003 BLT |L1.1252| ;496
0004d4 e35400ff CMP r4,#0xff ;496
0004d8 0a000001 BEQ |L1.1252| ;496
0004dc e3a0002a MOV r0,#0x2a ;497
0004e0 eafffff8 B |L1.1224| ;497
|L1.1252|
0004e4 e35400ff CMP r4,#0xff ;500
0004e8 1a000006 BNE |L1.1288| ;500
0004ec ef000002 SVC 0x2 ; formerly SWI ;501
0004f0 e59f026c LDR r0,|L1.1892| ;502
0004f4 e5900000 LDR r0,[r0,#0] ;502 ; OSTCBCur
0004f8 e5d05022 LDRB r5,[r0,#0x22] ;502
0004fc ef000003 SVC 0x3 ; formerly SWI ;503
000500 e1a00005 MOV r0,r5 ;504
000504 eaffffef B |L1.1224| ;504
|L1.1288|
000508 ef000002 SVC 0x2 ; formerly SWI ;506
00050c e59f0248 LDR r0,|L1.1884| ;507
000510 e7907104 LDR r7,[r0,r4,LSL #2] ;507
000514 e3570000 CMP r7,#0 ;507
000518 0a000003 BEQ |L1.1324| ;507
00051c e3a0003e MOV r0,#0x3e ;508
000520 e5c70022 STRB r0,[r7,#0x22] ;508
000524 e3a06000 MOV r6,#0 ;509
000528 ea000000 B |L1.1328| ;509
|L1.1324|
00052c e3a0600b MOV r6,#0xb ;511
|L1.1328|
000530 ef000003 SVC 0x3 ; formerly SWI ;513
000534 e1a00006 MOV r0,r6 ;514
000538 eaffffe2 B |L1.1224| ;514
ENDP
OSTaskResume PROC
;;;536 INT8U OSTaskResume (INT8U prio)
;;;537 {
00053c e92d4070 PUSH {r4-r6,lr}
000540 e1a04000 MOV r4,r0
;;;538 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;539 OS_CPU_SR cpu_sr;
;;;540 #endif
;;;541 OS_TCB *ptcb;
;;;542
;;;543
;;;544 #if OS_ARG_CHK_EN > 0
;;;545 if (prio >= OS_LOWEST_PRIO) { /* Make sure task priority is valid */
000544 e354000c CMP r4,#0xc
000548 ba000001 BLT |L1.1364|
;;;546 return (OS_PRIO_INVALID);
00054c e3a0002a MOV r0,#0x2a
;;;547 }
;;;548 #endif
;;;549 OS_ENTER_CRITICAL();
;;;550 if ((ptcb = OSTCBPrioTbl[prio]) == (OS_TCB *)0) { /* Task to suspend must exist */
;;;551 OS_EXIT_CRITICAL();
;;;552 return (OS_TASK_RESUME_PRIO);
;;;553 }
;;;554 if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) != 0x00) { /* Task must be suspended */
;;;555 if (((ptcb->OSTCBStat &= ~OS_STAT_SUSPEND) == OS_STAT_RDY) && /* Remove suspension */
;;;556 (ptcb->OSTCBDly == 0)) { /* Must not be delayed */
;;;557 OSRdyGrp |= ptcb->OSTCBBitY; /* Make task ready to run */
;;;558 OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
;;;559 OS_EXIT_CRITICAL();
;;;560 OS_Sched();
;;;561 } else {
;;;562 OS_EXIT_CRITICAL();
;;;563 }
;;;564 return (OS_NO_ERR);
;;;565 }
;;;566 OS_EXIT_CRITICAL();
;;;567 return (OS_TASK_NOT_SUSPENDED);
;;;568 }
|L1.1360|
000550 e8bd8070 POP {r4-r6,pc}
|L1.1364|
000554 ef000002 SVC 0x2 ; formerly SWI ;549
000558 e59f01fc LDR r0,|L1.1884| ;550
00055c e7905104 LDR r5,[r0,r4,LSL #2] ;550
000560 e3550000 CMP r5,#0 ;550
000564 1a000002 BNE |L1.1396| ;550
000568 ef000003 SVC 0x3 ; formerly SWI ;551
00056c e3a00064 MOV r0,#0x64 ;552
000570 eafffff6 B |L1.1360| ;552
|L1.1396|
000574 e5d5001c LDRB r0,[r5,#0x1c] ;554
000578 e3100008 TST r0,#8 ;554
00057c 0a00001a BEQ |L1.1516| ;554
000580 e5d5001c LDRB r0,[r5,#0x1c] ;555
000584 e3d00008 BICS r0,r0,#8 ;555
000588 e5c5001c STRB r0,[r5,#0x1c] ;555
00058c 1a000013 BNE |L1.1504| ;555
000590 e1d501ba LDRH r0,[r5,#0x1a] ;556
000594 e3500000 CMP r0,#0 ;556
000598 1a000010 BNE |L1.1504| ;556
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -