📄 os_task.txt
字号:
;;;565 }
;;;566 OS_ENTER_CRITICAL();
;;;567 ptcb = OSTCBPrioTbl[prio];
;;;568 if (ptcb == (OS_TCB *)0) { /* Task to delete must exist */
;;;569 OS_EXIT_CRITICAL();
;;;570 return (OS_ERR_TASK_NOT_EXIST); /* Task must already be deleted */
;;;571 }
;;;572 if (ptcb == (OS_TCB *)1) { /* Must NOT be assigned to a Mutex */
;;;573 OS_EXIT_CRITICAL();
;;;574 return (OS_ERR_TASK_DEL);
;;;575 }
;;;576 ptcb->OSTCBDelReq = OS_ERR_TASK_DEL_REQ; /* Set flag indicating task to be DEL. */
;;;577 OS_EXIT_CRITICAL();
;;;578 return (OS_ERR_NONE);
;;;579 }
0006f0 e12fff1e BX lr
|L1.1780|
0006f4 e354001f CMP r4,#0x1f
0006f8 ba000003 BLT |L1.1804|
0006fc e35400ff CMP r4,#0xff
000700 0a000001 BEQ |L1.1804|
000704 e3a0002a MOV r0,#0x2a
000708 eafffff7 B |L1.1772|
|L1.1804|
00070c e35400ff CMP r4,#0xff
000710 1a000008 BNE |L1.1848|
000714 ebfffffe BL OS_CPU_SR_Save
000718 e1a07000 MOV r7,r0
00071c e59f0634 LDR r0,|L1.3416|
000720 e5900000 LDR r0,[r0,#0] ; OSTCBCur
000724 e5d05033 LDRB r5,[r0,#0x33]
000728 e1a00007 MOV r0,r7
00072c ebfffffe BL OS_CPU_SR_Restore
000730 e1a00005 MOV r0,r5
000734 eaffffec B |L1.1772|
|L1.1848|
000738 ebfffffe BL OS_CPU_SR_Save
00073c e1a07000 MOV r7,r0
000740 e59f060c LDR r0,|L1.3412|
000744 e7906104 LDR r6,[r0,r4,LSL #2]
000748 e3560000 CMP r6,#0
00074c 1a000003 BNE |L1.1888|
000750 e1a00007 MOV r0,r7
000754 ebfffffe BL OS_CPU_SR_Restore
000758 e3a00043 MOV r0,#0x43
00075c eaffffe2 B |L1.1772|
|L1.1888|
000760 e3560001 CMP r6,#1
000764 1a000003 BNE |L1.1912|
000768 e1a00007 MOV r0,r7
00076c ebfffffe BL OS_CPU_SR_Restore
000770 e3a0003d MOV r0,#0x3d
000774 eaffffdc B |L1.1772|
|L1.1912|
000778 e3a0003f MOV r0,#0x3f
00077c e5c60033 STRB r0,[r6,#0x33]
000780 e1a00007 MOV r0,r7
000784 ebfffffe BL OS_CPU_SR_Restore
000788 e3a00000 MOV r0,#0
00078c eaffffd6 B |L1.1772|
ENDP
OSTaskNameGet PROC
;;;606 INT8U OSTaskNameGet (INT8U prio, INT8U *pname, INT8U *err)
;;;607 {
000790 e92d47f0 PUSH {r4-r10,lr}
000794 e1a04000 MOV r4,r0
000798 e1a05001 MOV r5,r1
00079c e1a06002 MOV r6,r2
;;;608 OS_TCB *ptcb;
;;;609 INT8U len;
;;;610 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;611 OS_CPU_SR cpu_sr = 0;
0007a0 e3a08000 MOV r8,#0
;;;612 #endif
;;;613
;;;614
;;;615
;;;616 #if OS_ARG_CHK_EN > 0
;;;617 if (err == (INT8U *)0) { /* Validate 'err' */
0007a4 e3560000 CMP r6,#0
0007a8 1a000002 BNE |L1.1976|
;;;618 return (0);
0007ac e3a00000 MOV r0,#0
|L1.1968|
0007b0 e8bd47f0 POP {r4-r10,lr}
;;;619 }
;;;620 if (prio > OS_LOWEST_PRIO) { /* Task priority valid ? */
;;;621 if (prio != OS_PRIO_SELF) {
;;;622 *err = OS_ERR_PRIO_INVALID; /* No */
;;;623 return (0);
;;;624 }
;;;625 }
;;;626 if (pname == (INT8U *)0) { /* Is 'pname' a NULL pointer? */
;;;627 *err = OS_ERR_PNAME_NULL; /* Yes */
;;;628 return (0);
;;;629 }
;;;630 #endif
;;;631 OS_ENTER_CRITICAL();
;;;632 if (prio == OS_PRIO_SELF) { /* See if caller desires it's own name */
;;;633 prio = OSTCBCur->OSTCBPrio;
;;;634 }
;;;635 ptcb = OSTCBPrioTbl[prio];
;;;636 if (ptcb == (OS_TCB *)0) { /* Does task exist? */
;;;637 OS_EXIT_CRITICAL(); /* No */
;;;638 *err = OS_ERR_TASK_NOT_EXIST;
;;;639 return (0);
;;;640 }
;;;641 if (ptcb == (OS_TCB *)1) { /* Task assigned to a Mutex? */
;;;642 OS_EXIT_CRITICAL(); /* Yes */
;;;643 *err = OS_ERR_TASK_NOT_EXIST;
;;;644 return (0);
;;;645 }
;;;646 len = OS_StrCopy(pname, ptcb->OSTCBTaskName); /* Yes, copy name from TCB */
;;;647 OS_EXIT_CRITICAL();
;;;648 *err = OS_ERR_NONE;
;;;649 return (len);
;;;650 }
0007b4 e12fff1e BX lr
|L1.1976|
0007b8 e354001f CMP r4,#0x1f
0007bc da000005 BLE |L1.2008|
0007c0 e35400ff CMP r4,#0xff
0007c4 0a000003 BEQ |L1.2008|
0007c8 e3a0002a MOV r0,#0x2a
0007cc e5c60000 STRB r0,[r6,#0]
0007d0 e3a00000 MOV r0,#0
0007d4 eafffff5 B |L1.1968|
|L1.2008|
0007d8 e3550000 CMP r5,#0
0007dc 1a000003 BNE |L1.2032|
0007e0 e3a0000c MOV r0,#0xc
0007e4 e5c60000 STRB r0,[r6,#0]
0007e8 e3a00000 MOV r0,#0
0007ec eaffffef B |L1.1968|
|L1.2032|
0007f0 ebfffffe BL OS_CPU_SR_Save
0007f4 e1a08000 MOV r8,r0
0007f8 e35400ff CMP r4,#0xff
0007fc 1a000002 BNE |L1.2060|
000800 e59f0550 LDR r0,|L1.3416|
000804 e5900000 LDR r0,[r0,#0] ; OSTCBCur
000808 e5d0402e LDRB r4,[r0,#0x2e]
|L1.2060|
00080c e59f0540 LDR r0,|L1.3412|
000810 e7907104 LDR r7,[r0,r4,LSL #2]
000814 e3570000 CMP r7,#0
000818 1a000005 BNE |L1.2100|
00081c e1a00008 MOV r0,r8
000820 ebfffffe BL OS_CPU_SR_Restore
000824 e3a00043 MOV r0,#0x43
000828 e5c60000 STRB r0,[r6,#0]
00082c e3a00000 MOV r0,#0
000830 eaffffde B |L1.1968|
|L1.2100|
000834 e3570001 CMP r7,#1
000838 1a000005 BNE |L1.2132|
00083c e1a00008 MOV r0,r8
000840 ebfffffe BL OS_CPU_SR_Restore
000844 e3a00043 MOV r0,#0x43
000848 e5c60000 STRB r0,[r6,#0]
00084c e3a00000 MOV r0,#0
000850 eaffffd6 B |L1.1968|
|L1.2132|
000854 e2871048 ADD r1,r7,#0x48
000858 e1a00005 MOV r0,r5
00085c ebfffffe BL OS_StrCopy
000860 e1a09000 MOV r9,r0
000864 e1a00008 MOV r0,r8
000868 ebfffffe BL OS_CPU_SR_Restore
00086c e3a00000 MOV r0,#0
000870 e5c60000 STRB r0,[r6,#0]
000874 e1a00009 MOV r0,r9
000878 eaffffcc B |L1.1968|
ENDP
OSTaskNameSet PROC
;;;680 void OSTaskNameSet (INT8U prio, INT8U *pname, INT8U *err)
;;;681 {
00087c e92d47f0 PUSH {r4-r10,lr}
000880 e1a04000 MOV r4,r0
000884 e1a05001 MOV r5,r1
000888 e1a06002 MOV r6,r2
;;;682 INT8U len;
;;;683 OS_TCB *ptcb;
;;;684 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;685 OS_CPU_SR cpu_sr = 0;
00088c e3a09000 MOV r9,#0
;;;686 #endif
;;;687
;;;688
;;;689
;;;690 #if OS_ARG_CHK_EN > 0
;;;691 if (err == (INT8U *)0) { /* Validate 'err' */
000890 e3560000 CMP r6,#0
000894 1a000001 BNE |L1.2208|
|L1.2200|
;;;692 return;
;;;693 }
;;;694 if (prio > OS_LOWEST_PRIO) { /* Task priority valid ? */
;;;695 if (prio != OS_PRIO_SELF) {
;;;696 *err = OS_ERR_PRIO_INVALID; /* No */
;;;697 return;
;;;698 }
;;;699 }
;;;700 if (pname == (INT8U *)0) { /* Is 'pname' a NULL pointer? */
;;;701 *err = OS_ERR_PNAME_NULL; /* Yes */
;;;702 return;
;;;703 }
;;;704 #endif
;;;705 OS_ENTER_CRITICAL();
;;;706 if (prio == OS_PRIO_SELF) { /* See if caller desires to set it's own name */
;;;707 prio = OSTCBCur->OSTCBPrio;
;;;708 }
;;;709 ptcb = OSTCBPrioTbl[prio];
;;;710 if (ptcb == (OS_TCB *)0) { /* Does task exist? */
;;;711 OS_EXIT_CRITICAL(); /* No */
;;;712 *err = OS_ERR_TASK_NOT_EXIST;
;;;713 return;
;;;714 }
;;;715 if (ptcb == (OS_TCB *)1) { /* Task assigned to a Mutex? */
;;;716 OS_EXIT_CRITICAL(); /* Yes */
;;;717 *err = OS_ERR_TASK_NOT_EXIST;
;;;718 return;
;;;719 }
;;;720 len = OS_StrLen(pname); /* Yes, Can we fit the string in the TCB? */
;;;721 if (len > (OS_TASK_NAME_SIZE - 1)) { /* No */
;;;722 OS_EXIT_CRITICAL();
;;;723 *err = OS_ERR_TASK_NAME_TOO_LONG;
;;;724 return;
;;;725 }
;;;726 (void)OS_StrCopy(ptcb->OSTCBTaskName, pname); /* Yes, copy to TCB */
;;;727 OS_EXIT_CRITICAL();
;;;728 *err = OS_ERR_NONE;
;;;729 }
000898 e8bd47f0 POP {r4-r10,lr}
00089c e12fff1e BX lr
|L1.2208|
0008a0 e354001f CMP r4,#0x1f
0008a4 da000004 BLE |L1.2236|
0008a8 e35400ff CMP r4,#0xff
0008ac 0a000002 BEQ |L1.2236|
0008b0 e3a0002a MOV r0,#0x2a
0008b4 e5c60000 STRB r0,[r6,#0]
0008b8 eafffff6 B |L1.2200|
|L1.2236|
0008bc e3550000 CMP r5,#0
0008c0 1a000002 BNE |L1.2256|
0008c4 e3a0000c MOV r0,#0xc
0008c8 e5c60000 STRB r0,[r6,#0]
0008cc eafffff1 B |L1.2200|
|L1.2256|
0008d0 ebfffffe BL OS_CPU_SR_Save
0008d4 e1a09000 MOV r9,r0
0008d8 e35400ff CMP r4,#0xff
0008dc 1a000002 BNE |L1.2284|
0008e0 e59f0470 LDR r0,|L1.3416|
0008e4 e5900000 LDR r0,[r0,#0] ; OSTCBCur
0008e8 e5d0402e LDRB r4,[r0,#0x2e]
|L1.2284|
0008ec e59f0460 LDR r0,|L1.3412|
0008f0 e7908104 LDR r8,[r0,r4,LSL #2]
0008f4 e3580000 CMP r8,#0
0008f8 1a000004 BNE |L1.2320|
0008fc e1a00009 MOV r0,r9
000900 ebfffffe BL OS_CPU_SR_Restore
000904 e3a00043 MOV r0,#0x43
000908 e5c60000 STRB r0,[r6,#0]
00090c eaffffe1 B |L1.2200|
|L1.2320|
000910 e3580001 CMP r8,#1
000914 1a000004 BNE |L1.2348|
000918 e1a00009 MOV r0,r9
00091c ebfffffe BL OS_CPU_SR_Restore
000920 e3a00043 MOV r0,#0x43
000924 e5c60000 STRB r0,[r6,#0]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -