?? os_task.txt
字號:
00045a e92de92d PUSH {r4-r8,lr}
00045e 4605 MOV r5,r0
000460 460e MOV r6,r1
000462 4614 MOV r4,r2
;;;612 OS_TCB *ptcb;
;;;613 INT8U len;
;;;614 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;615 OS_CPU_SR cpu_sr = 0;
;;;616 #endif
;;;617
;;;618
;;;619
;;;620 #if OS_ARG_CHK_EN > 0
;;;621 if (perr == (INT8U *)0) { /* Validate 'perr' */
000464 b914 CBNZ r4,|L1.1132|
;;;622 return (0);
000466 2000 MOVS r0,#0
000468 e8bde8bd POP {r4-r8,pc}
|L1.1132|
;;;623 }
;;;624 if (prio > OS_LOWEST_PRIO) { /* Task priority valid ? */
00046c 2d1f CMP r5,#0x1f
00046e d906 BLS |L1.1150|
;;;625 if (prio != OS_PRIO_SELF) {
000470 2dff CMP r5,#0xff
000472 d004 BEQ |L1.1150|
;;;626 *perr = OS_ERR_PRIO_INVALID; /* No */
000474 202a MOVS r0,#0x2a
000476 7020 STRB r0,[r4,#0]
;;;627 return (0);
000478 2000 MOVS r0,#0
00047a e8bde8bd POP {r4-r8,pc}
|L1.1150|
;;;628 }
;;;629 }
;;;630 if (pname == (INT8U *)0) { /* Is 'pname' a NULL pointer? */
00047e b926 CBNZ r6,|L1.1162|
;;;631 *perr = OS_ERR_PNAME_NULL; /* Yes */
000480 200c MOVS r0,#0xc
000482 7020 STRB r0,[r4,#0]
;;;632 return (0);
000484 2000 MOVS r0,#0
000486 e8bde8bd POP {r4-r8,pc}
|L1.1162|
;;;633 }
;;;634 #endif
;;;635 if (OSIntNesting > 0) { /* See if trying to call from an ISR */
00048a 48ca LDR r0,|L1.1972|
00048c 7800 LDRB r0,[r0,#0] ; OSIntNesting
00048e b120 CBZ r0,|L1.1178|
;;;636 *perr = OS_ERR_NAME_GET_ISR;
000490 2011 MOVS r0,#0x11
000492 7020 STRB r0,[r4,#0]
;;;637 return (0);
000494 2000 MOVS r0,#0
000496 e8bde8bd POP {r4-r8,pc}
|L1.1178|
;;;638 }
;;;639 OS_ENTER_CRITICAL();
00049a f7fff7ff BL OS_CPU_SR_Save
00049e 4607 MOV r7,r0
;;;640 if (prio == OS_PRIO_SELF) { /* See if caller desires it's own name */
0004a0 2dff CMP r5,#0xff
0004a2 d103 BNE |L1.1196|
;;;641 prio = OSTCBCur->OSTCBPrio;
0004a4 48c4 LDR r0,|L1.1976|
0004a6 6800 LDR r0,[r0,#0] ; OSTCBCur
0004a8 f890f890 LDRB r5,[r0,#0x2e]
|L1.1196|
;;;642 }
;;;643 ptcb = OSTCBPrioTbl[prio];
0004ac 48c3 LDR r0,|L1.1980|
0004ae f850f850 LDR r0,[r0,r5,LSL #2]
;;;644 if (ptcb == (OS_TCB *)0) { /* Does task exist? */
0004b2 2543 MOVS r5,#0x43
0004b4 b930 CBNZ r0,|L1.1220|
;;;645 OS_EXIT_CRITICAL(); /* No */
0004b6 4638 MOV r0,r7
0004b8 f7fff7ff BL OS_CPU_SR_Restore
;;;646 *perr = OS_ERR_TASK_NOT_EXIST;
0004bc 7025 STRB r5,[r4,#0]
;;;647 return (0);
0004be 2000 MOVS r0,#0
0004c0 e8bde8bd POP {r4-r8,pc}
|L1.1220|
;;;648 }
;;;649 if (ptcb == OS_TCB_RESERVED) { /* Task assigned to a Mutex? */
0004c4 2801 CMP r0,#1
0004c6 d106 BNE |L1.1238|
;;;650 OS_EXIT_CRITICAL(); /* Yes */
0004c8 4638 MOV r0,r7
0004ca f7fff7ff BL OS_CPU_SR_Restore
;;;651 *perr = OS_ERR_TASK_NOT_EXIST;
0004ce 7025 STRB r5,[r4,#0]
;;;652 return (0);
0004d0 2000 MOVS r0,#0
0004d2 e8bde8bd POP {r4-r8,pc}
|L1.1238|
;;;653 }
;;;654 len = OS_StrCopy(pname, ptcb->OSTCBTaskName); /* Yes, copy name from TCB */
0004d6 f100f100 ADD r1,r0,#0x48
0004da 4630 MOV r0,r6
0004dc f7fff7ff BL OS_StrCopy
0004e0 4605 MOV r5,r0
;;;655 OS_EXIT_CRITICAL();
0004e2 4638 MOV r0,r7
0004e4 f7fff7ff BL OS_CPU_SR_Restore
;;;656 *perr = OS_ERR_NONE;
0004e8 2000 MOVS r0,#0
0004ea 7020 STRB r0,[r4,#0]
;;;657 return (len);
0004ec 4628 MOV r0,r5
;;;658 }
0004ee e8bde8bd POP {r4-r8,pc}
;;;659 #endif
ENDP
OSTaskNameSet PROC
;;;689 void OSTaskNameSet (INT8U prio, INT8U *pname, INT8U *perr)
;;;690 {
0004f2 e92de92d PUSH {r4-r8,lr}
0004f6 4605 MOV r5,r0
0004f8 460e MOV r6,r1
0004fa 4614 MOV r4,r2
;;;691 INT8U len;
;;;692 OS_TCB *ptcb;
;;;693 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;694 OS_CPU_SR cpu_sr = 0;
;;;695 #endif
;;;696
;;;697
;;;698
;;;699 #if OS_ARG_CHK_EN > 0
;;;700 if (perr == (INT8U *)0) { /* Validate 'perr' */
0004fc 2c00 CMP r4,#0
0004fe d005 BEQ |L1.1292|
;;;701 return;
;;;702 }
;;;703 if (prio > OS_LOWEST_PRIO) { /* Task priority valid ? */
000500 2d1f CMP r5,#0x1f
000502 d905 BLS |L1.1296|
;;;704 if (prio != OS_PRIO_SELF) {
000504 2dff CMP r5,#0xff
000506 d003 BEQ |L1.1296|
;;;705 *perr = OS_ERR_PRIO_INVALID; /* No */
000508 202a MOVS r0,#0x2a
00050a 7020 STRB r0,[r4,#0]
|L1.1292|
00050c e8bde8bd POP {r4-r8,pc}
|L1.1296|
;;;706 return;
;;;707 }
;;;708 }
;;;709 if (pname == (INT8U *)0) { /* Is 'pname' a NULL pointer? */
000510 b91e CBNZ r6,|L1.1306|
;;;710 *perr = OS_ERR_PNAME_NULL; /* Yes */
000512 200c MOVS r0,#0xc
000514 7020 STRB r0,[r4,#0]
000516 e8bde8bd POP {r4-r8,pc}
|L1.1306|
;;;711 return;
;;;712 }
;;;713 #endif
;;;714 if (OSIntNesting > 0) { /* See if trying to call from an ISR */
00051a 48a6 LDR r0,|L1.1972|
00051c 7800 LDRB r0,[r0,#0] ; OSIntNesting
00051e b118 CBZ r0,|L1.1320|
;;;715 *perr = OS_ERR_NAME_SET_ISR;
000520 2012 MOVS r0,#0x12
000522 7020 STRB r0,[r4,#0]
000524 e8bde8bd POP {r4-r8,pc}
|L1.1320|
;;;716 return;
;;;717 }
;;;718 OS_ENTER_CRITICAL();
000528 f7fff7ff BL OS_CPU_SR_Save
00052c 4607 MOV r7,r0
;;;719 if (prio == OS_PRIO_SELF) { /* See if caller desires to set it's own name */
00052e 2dff CMP r5,#0xff
000530 d103 BNE |L1.1338|
;;;720 prio = OSTCBCur->OSTCBPrio;
000532 48a1 LDR r0,|L1.1976|
000534 6800 LDR r0,[r0,#0] ; OSTCBCur
000536 f890f890 LDRB r5,[r0,#0x2e]
|L1.1338|
;;;721 }
;;;722 ptcb = OSTCBPrioTbl[prio];
00053a 48a0 LDR r0,|L1.1980|
00053c f850f850 LDR r5,[r0,r5,LSL #2]
;;;723 if (ptcb == (OS_TCB *)0) { /* Does task exist? */
000540 f04ff04f MOV r8,#0x43
000544 b935 CBNZ r5,|L1.1364|
;;;724 OS_EXIT_CRITICAL(); /* No */
000546 4638 MOV r0,r7
000548 f7fff7ff BL OS_CPU_SR_Restore
;;;725 *perr = OS_ERR_TASK_NOT_EXIST;
00054c f884f884 STRB r8,[r4,#0]
000550 e8bde8bd POP {r4-r8,pc}
|L1.1364|
;;;726 return;
;;;727 }
;;;728 if (ptcb == OS_TCB_RESERVED) { /* Task assigned to a Mutex? */
000554 2d01 CMP r5,#1
000556 d106 BNE |L1.1382|
;;;729 OS_EXIT_CRITICAL(); /* Yes */
000558 4638 MOV r0,r7
00055a f7fff7ff BL OS_CPU_SR_Restore
;;;730 *perr = OS_ERR_TASK_NOT_EXIST;
00055e f884f884 STRB r8,[r4,#0]
000562 e8bde8bd POP {r4-r8,pc}
|L1.1382|
;;;731 return;
;;;732 }
;;;733 len = OS_StrLen(pname); /* Yes, Can we fit the string in the TCB? */
000566 4630 MOV r0,r6
000568 f7fff7ff BL OS_StrLen
;;;734 if (len > (OS_TASK_NAME_SIZE - 1)) { /* No */
00056c 280f CMP r0,#0xf
00056e d906 BLS |L1.1406|
;;;735 OS_EXIT_CRITICAL();
000570 4638 MOV r0,r7
000572 f7fff7ff BL OS_CPU_SR_Restore
;;;736 *perr = OS_ERR_TASK_NAME_TOO_LONG;
000576 2041 MOVS r0,#0x41
000578 7020 STRB r0,[r4,#0]
00057a e8bde8bd POP {r4-r8,pc}
|L1.1406|
;;;737 return;
;;;738 }
;;;739 (void)OS_StrCopy(ptcb->OSTCBTaskName, pname); /* Yes, copy to TCB */
00057e 4631 MOV r1,r6
000580 f105f105 ADD r0,r5,#0x48
000584 f7fff7ff BL OS_StrCopy
;;;740 OS_EXIT_CRITICAL();
000588 4638 MOV r0,r7
00058a f7fff7ff BL OS_CPU_SR_Restore
;;;741 *perr = OS_ERR_NONE;
00058e 2000 MOVS r0,#0
000590 7020 STRB r0,[r4,#0]
;;;742 }
000592 e8bde8bd POP {r4-r8,pc}
;;;743 #endif
ENDP
OSTaskResume PROC
;;;765 INT8U OSTaskResume (INT8U prio)
;;;766 {
000596 b510 PUSH {r4,lr}
000598 4604 MOV r4,r0
;;;767 OS_TCB *ptcb;
;;;768 #if OS_CRITICAL_METHOD == 3 /* Storage for CPU status register */
;;;769 OS_CPU_SR cpu_sr = 0;
;;;770 #endif
;;;771
;;;772
;;;773
;;;774 #if OS_ARG_CHK_EN > 0
;;;775 if (prio >= OS_LOWEST_PRIO) { /* Make sure task priority is valid */
00059a 2c1f CMP r4,#0x1f
00059c d301 BCC |L1.1442|
;;;776 return (OS_ERR_PRIO_INVALID);
00059e 202a MOVS r0,#0x2a
;;;777 }
;;;778 #endif
;;;779 OS_ENTER_CRITICAL();
;;;780 ptcb = OSTCBPrioTbl[prio];
;;;781 if (ptcb == (OS_TCB *)0) { /* Task to suspend must exist */
;;;782 OS_EXIT_CRITICAL();
;;;783 return (OS_ERR_TASK_RESUME_PRIO);
;;;784 }
;;;785 if (ptcb == OS_TCB_RESERVED) { /* See if assigned to Mutex */
;;;786 OS_EXIT_CRITICAL();
;;;787 return (OS_ERR_TASK_NOT_EXIST);
;;;788 }
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -