📄 os_task.txt
字号:
;;;367 OS_FLAG_NODE *pnode;
;;;368 #endif
;;;369 OS_TCB *ptcb;
;;;370 // BOOLEAN self;
;;;371
;;;372
;;;373
;;;374 if (OSIntNesting > 0) { /* See if trying to delete from ISR */
0003e8 e59f0588 LDR r0,|L1.2424|
0003ec e5d00000 LDRB r0,[r0,#0] ; OSIntNesting
0003f0 e3500000 CMP r0,#0
0003f4 da000002 BLE |L1.1028|
;;;375 return (OS_TASK_DEL_ISR);
0003f8 e3a0003f MOV r0,#0x3f
|L1.1020|
0003fc e8bd41f0 POP {r4-r8,lr}
;;;376 }
;;;377 #if OS_ARG_CHK_EN > 0
;;;378 if (prio == OS_IDLE_PRIO) { /* Not allowed to delete idle task */
;;;379 return (OS_TASK_DEL_IDLE);
;;;380 }
;;;381 if (prio >= OS_LOWEST_PRIO && prio != OS_PRIO_SELF) { /* Task priority valid ? */
;;;382 return (OS_PRIO_INVALID);
;;;383 }
;;;384 #endif
;;;385 OS_ENTER_CRITICAL();
;;;386 if (prio == OS_PRIO_SELF) { /* See if requesting to delete self */
;;;387 prio = OSTCBCur->OSTCBPrio; /* Set priority to delete to current */
;;;388 }
;;;389 ptcb = OSTCBPrioTbl[prio];
;;;390 if (ptcb != (OS_TCB *)0) { /* Task to delete must exist */
;;;391 if ((OSRdyTbl[ptcb->OSTCBY] &= ~ptcb->OSTCBBitX) == 0x00) { /* Make task not ready */
;;;392 OSRdyGrp &= ~ptcb->OSTCBBitY;
;;;393 }
;;;394 #if OS_EVENT_EN > 0
;;;395 pevent = ptcb->OSTCBEventPtr;
;;;396 if (pevent != (OS_EVENT *)0) { /* If task is waiting on event */
;;;397 if ((pevent->OSEventTbl[ptcb->OSTCBY] &= ~ptcb->OSTCBBitX) == 0) { /* ... remove task from */
;;;398 pevent->OSEventGrp &= ~ptcb->OSTCBBitY; /* ... event ctrl block */
;;;399 }
;;;400 }
;;;401 #endif
;;;402 #if (OS_VERSION >= 251) && (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
;;;403 pnode = ptcb->OSTCBFlagNode;
;;;404 if (pnode != (OS_FLAG_NODE *)0) { /* If task is waiting on event flag */
;;;405 OS_FlagUnlink(pnode); /* Remove from wait list */
;;;406 }
;;;407 #endif
;;;408 ptcb->OSTCBDly = 0; /* Prevent OSTimeTick() from updating */
;;;409 ptcb->OSTCBStat = OS_STAT_RDY; /* Prevent task from being resumed */
;;;410 if (OSLockNesting < 255) {
;;;411 OSLockNesting++;
;;;412 }
;;;413 OS_EXIT_CRITICAL(); /* Enabling INT. ignores next instruc. */
;;;414 OS_Dummy(); /* ... Dummy ensures that INTs will be */
;;;415 OS_ENTER_CRITICAL(); /* ... disabled HERE! */
;;;416 if (OSLockNesting > 0) {
;;;417 OSLockNesting--;
;;;418 }
;;;419 OSTaskDelHook(ptcb); /* Call user defined hook */
;;;420 OSTaskCtr--; /* One less task being managed */
;;;421 OSTCBPrioTbl[prio] = (OS_TCB *)0; /* Clear old priority entry */
;;;422 if (ptcb->OSTCBPrev == (OS_TCB *)0) { /* Remove from TCB chain */
;;;423 ptcb->OSTCBNext->OSTCBPrev = (OS_TCB *)0;
;;;424 OSTCBList = ptcb->OSTCBNext;
;;;425 } else {
;;;426 ptcb->OSTCBPrev->OSTCBNext = ptcb->OSTCBNext;
;;;427 ptcb->OSTCBNext->OSTCBPrev = ptcb->OSTCBPrev;
;;;428 }
;;;429 ptcb->OSTCBNext = OSTCBFreeList; /* Return TCB to free TCB list */
;;;430 OSTCBFreeList = ptcb;
;;;431 OS_EXIT_CRITICAL();
;;;432 OS_Sched(); /* Find new highest priority task */
;;;433 return (OS_NO_ERR);
;;;434 }
;;;435 OS_EXIT_CRITICAL();
;;;436 return (OS_TASK_DEL_ERR);
;;;437 }
000400 e12fff1e BX lr
|L1.1028|
000404 e354000c CMP r4,#0xc ;378
000408 1a000001 BNE |L1.1044| ;378
00040c e3a0003d MOV r0,#0x3d ;379
000410 eafffff9 B |L1.1020| ;379
|L1.1044|
000414 e354000c CMP r4,#0xc ;381
000418 ba000003 BLT |L1.1068| ;381
00041c e35400ff CMP r4,#0xff ;381
000420 0a000001 BEQ |L1.1068| ;381
000424 e3a0002a MOV r0,#0x2a ;382
000428 eafffff3 B |L1.1020| ;382
|L1.1068|
00042c ef000002 SVC 0x2 ; formerly SWI ;385
000430 e35400ff CMP r4,#0xff ;386
000434 1a000002 BNE |L1.1092| ;386
000438 e59f0524 LDR r0,|L1.2404| ;387
00043c e5900000 LDR r0,[r0,#0] ;387 ; OSTCBCur
000440 e5d0402d LDRB r4,[r0,#0x2d] ;387
|L1.1092|
000444 e59f0510 LDR r0,|L1.2396| ;389
000448 e7906104 LDR r6,[r0,r4,LSL #2] ;389
00044c e3560000 CMP r6,#0 ;390
000450 0a000060 BEQ |L1.1496| ;390
000454 e5d6002f LDRB r0,[r6,#0x2f] ;391
000458 e59f1508 LDR r1,|L1.2408| ;391
00045c e7d10000 LDRB r0,[r1,r0] ;391
000460 e5d61030 LDRB r1,[r6,#0x30] ;391
000464 e1c00001 BIC r0,r0,r1 ;391
000468 e21000ff ANDS r0,r0,#0xff ;391
00046c e5d6102f LDRB r1,[r6,#0x2f] ;391
000470 e59f24f0 LDR r2,|L1.2408| ;391
000474 e7c20001 STRB r0,[r2,r1] ;391
000478 1a000005 BNE |L1.1172| ;391
00047c e5d60031 LDRB r0,[r6,#0x31] ;392
000480 e59f14e4 LDR r1,|L1.2412| ;392
000484 e5d11000 LDRB r1,[r1,#0] ;392 ; OSRdyGrp
000488 e1c10000 BIC r0,r1,r0 ;392
00048c e59f14d8 LDR r1,|L1.2412| ;392
000490 e5c10000 STRB r0,[r1,#0] ;392 ; OSRdyGrp
|L1.1172|
000494 e596501c LDR r5,[r6,#0x1c] ;395
000498 e3550000 CMP r5,#0 ;396
00049c 0a00000d BEQ |L1.1240| ;396
0004a0 e5d6002f LDRB r0,[r6,#0x2f] ;397
0004a4 e2851008 ADD r1,r5,#8 ;397
0004a8 e7d10000 LDRB r0,[r1,r0] ;397
0004ac e5d61030 LDRB r1,[r6,#0x30] ;397
0004b0 e1c00001 BIC r0,r0,r1 ;397
0004b4 e21000ff ANDS r0,r0,#0xff ;397
0004b8 e5d6102f LDRB r1,[r6,#0x2f] ;397
0004bc e2852008 ADD r2,r5,#8 ;397
0004c0 e7c20001 STRB r0,[r2,r1] ;397
0004c4 1a000003 BNE |L1.1240| ;397
0004c8 e5d50001 LDRB r0,[r5,#1] ;398
0004cc e5d61031 LDRB r1,[r6,#0x31] ;398
0004d0 e1c00001 BIC r0,r0,r1 ;398
0004d4 e5c50001 STRB r0,[r5,#1] ;398
|L1.1240|
0004d8 e5967024 LDR r7,[r6,#0x24] ;403
0004dc e3570000 CMP r7,#0 ;404
0004e0 0a000001 BEQ |L1.1260| ;404
0004e4 e1a00007 MOV r0,r7 ;405
0004e8 ebfffffe BL OS_FlagUnlink ;405
|L1.1260|
0004ec e3a00000 MOV r0,#0 ;408
0004f0 e1c602ba STRH r0,[r6,#0x2a] ;408
0004f4 e5c6002c STRB r0,[r6,#0x2c] ;409
0004f8 e59f047c LDR r0,|L1.2428| ;410
0004fc e5d00000 LDRB r0,[r0,#0] ;410 ; OSLockNesting
000500 e35000ff CMP r0,#0xff ;410
000504 aa000004 BGE |L1.1308| ;410
000508 e59f046c LDR r0,|L1.2428| ;411
00050c e5d00000 LDRB r0,[r0,#0] ;411 ; OSLockNesting
000510 e2800001 ADD r0,r0,#1 ;411
000514 e59f1460 LDR r1,|L1.2428| ;411
000518 e5c10000 STRB r0,[r1,#0] ;411 ; OSLockNesting
|L1.1308|
00051c ef000003 SVC 0x3 ; formerly SWI ;413
000520 ebfffffe BL OS_Dummy ;414
000524 ef000002 SVC 0x2 ; formerly SWI ;415
000528 e59f044c LDR r0,|L1.2428| ;416
00052c e5d00000 LDRB r0,[r0,#0] ;416 ; OSLockNesting
000530 e3500000 CMP r0,#0 ;416
000534 da000004 BLE |L1.1356| ;416
000538 e59f043c LDR r0,|L1.2428| ;417
00053c e5d00000 LDRB r0,[r0,#0] ;417 ; OSLockNesting
000540 e2400001 SUB r0,r0,#1 ;417
000544 e59f1430 LDR r1,|L1.2428| ;417
000548 e5c10000 STRB r0,[r1,#0] ;417 ; OSLockNesting
|L1.1356|
00054c e1a00006 MOV r0,r6 ;419
000550 ebfffffe BL OSTaskDelHook ;419
000554 e59f0414 LDR r0,|L1.2416| ;420
000558 e5d00000 LDRB r0,[r0,#0] ;420 ; OSTaskCtr
00055c e2400001 SUB r0,r0,#1 ;420
000560 e59f1408 LDR r1,|L1.2416| ;420
000564 e5c10000 STRB r0,[r1,#0] ;420 ; OSTaskCtr
000568 e3a00000 MOV r0,#0 ;421
00056c e59f13e8 LDR r1,|L1.2396| ;421
000570 e7810104 STR r0,[r1,r4,LSL #2] ;421
000574 e5960018 LDR r0,[r6,#0x18] ;422
000578 e3500000 CMP r0,#0 ;422
00057c 1a000006 BNE |L1.1436| ;422
000580 e3a00000 MOV r0,#0 ;423
000584 e5961014 LDR r1,[r6,#0x14] ;423
000588 e5810018 STR r0,[r1,#0x18] ;423
00058c e59f13ec LDR r1,|L1.2432| ;424
000590 e5960014 LDR r0,[r6,#0x14] ;424
000594 e5810000 STR r0,[r1,#0] ;424 ; OSTCBList
000598 ea000005 B |L1.1460| ;424
|L1.1436|
00059c e2861014 ADD r1,r6,#0x14 ;426
0005a0 e8910003 LDM r1,{r0,r1} ;426
0005a4 e5810014 STR r0,[r1,#0x14] ;426
0005a8 e5960018 LDR r0,[r6,#0x18] ;427
0005ac e5961014 LDR r1,[r6,#0x14] ;427
0005b0 e5810018 STR r0,[r1,#0x18] ;427
|L1.1460|
0005b4 e59f03c8 LDR r0,|L1.2436| ;429
0005b8 e5900000 LDR r0,[r0,#0] ;429 ; OSTCBFreeList
0005bc e5860014 STR r0,[r6,#0x14] ;429
0005c0 e59f03bc LDR r0,|L1.2436| ;430
0005c4 e5806000 STR r6,[r0,#0] ;430 ; OSTCBFreeList
0005c8 ef000003 SVC 0x3 ; formerly SWI ;431
0005cc ebfffffe BL OS_Sched ;432
0005d0 e3a00000 MOV r0,#0 ;433
0005d4 eaffff88 B |L1.1020| ;433
|L1.1496|
0005d8 ef000003 SVC 0x3 ; formerly SWI ;435
0005dc e3a0003c MOV r0,#0x3c ;436
0005e0 eaffff85 B |L1.1020| ;436
ENDP
OSTaskDelReq PROC
;;;486 INT8U OSTaskDelReq (INT8U prio)
;;;487 {
0005e4 e92d41f0 PUSH {r4-r8,lr}
0005e8 e1a04000 MOV r4,r0
;;;488 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;489 OS_CPU_SR cpu_sr;
;;;490 #endif
;;;491 BOOLEAN stat;
;;;492 INT8U err;
;;;493 OS_TCB *ptcb;
;;;494
;;;495
;;;496 #if OS_ARG_CHK_EN > 0
;;;497 if (prio == OS_IDLE_PRIO) { /* Not allowed to delete idle task */
0005ec e354000c CMP r4,#0xc
0005f0 1a000002 BNE |L1.1536|
;;;498 return (OS_TASK_DEL_IDLE);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -