📄 os_task.txt
字号:
000598 15c50000 STRBNE r0,[r5,#0]
;;;637 return (0);
00059c 1a00000e BNE |L1.1500|
;;;638 }
;;;639 OS_ENTER_CRITICAL();
0005a0 ebfffffe BL OS_CPU_SR_Save
;;;640 if (prio == OS_PRIO_SELF) { /* See if caller desires it's own name */
0005a4 e35600ff CMP r6,#0xff
0005a8 e1a04000 MOV r4,r0 ;639
;;;641 prio = OSTCBCur->OSTCBPrio;
0005ac 059f03a4 LDREQ r0,|L1.2392|
0005b0 05900000 LDREQ r0,[r0,#0] ; OSTCBCur
0005b4 05d0602e LDRBEQ r6,[r0,#0x2e]
;;;642 }
;;;643 ptcb = OSTCBPrioTbl[prio];
0005b8 e59f0394 LDR r0,|L1.2388|
0005bc e7900106 LDR r0,[r0,r6,LSL #2]
0005c0 e3a06043 MOV r6,#0x43
;;;644 if (ptcb == (OS_TCB *)0) { /* Does task exist? */
0005c4 e3500000 CMP r0,#0
;;;645 OS_EXIT_CRITICAL(); /* No */
;;;646 *perr = OS_ERR_TASK_NOT_EXIST;
;;;647 return (0);
;;;648 }
;;;649 if (ptcb == OS_TCB_RESERVED) { /* Task assigned to a Mutex? */
0005c8 13500001 CMPNE r0,#1
0005cc 1a000005 BNE |L1.1512|
;;;650 OS_EXIT_CRITICAL(); /* Yes */
0005d0 e1a00004 MOV r0,r4
0005d4 ebfffffe BL OS_CPU_SR_Restore
;;;651 *perr = OS_ERR_TASK_NOT_EXIST;
0005d8 e5c56000 STRB r6,[r5,#0]
|L1.1500|
;;;652 return (0);
0005dc e3a00000 MOV r0,#0
|L1.1504|
0005e0 e8bd41f0 POP {r4-r8,lr}
;;;653 }
;;;654 len = OS_StrCopy(pname, ptcb->OSTCBTaskName); /* Yes, copy name from TCB */
;;;655 OS_EXIT_CRITICAL();
;;;656 *perr = OS_ERR_NONE;
;;;657 return (len);
;;;658 }
0005e4 e12fff1e BX lr
|L1.1512|
0005e8 e2801048 ADD r1,r0,#0x48 ;654
0005ec e1a00007 MOV r0,r7 ;654
0005f0 ebfffffe BL OS_StrCopy
0005f4 e1a06000 MOV r6,r0 ;654
0005f8 e1a00004 MOV r0,r4 ;655
0005fc ebfffffe BL OS_CPU_SR_Restore
000600 e3a00000 MOV r0,#0 ;656
000604 e5c50000 STRB r0,[r5,#0] ;656
000608 e1a00006 MOV r0,r6 ;657
00060c eafffff3 B |L1.1504|
;;;659 #endif
ENDP
OSTaskNameSet PROC
;;;689 void OSTaskNameSet (INT8U prio, INT8U *pname, INT8U *perr)
;;;690 {
000610 e92d41f0 PUSH {r4-r8,lr}
000614 e1a05000 MOV r5,r0
;;;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' */
;;;701 return;
;;;702 }
;;;703 if (prio > OS_LOWEST_PRIO) { /* Task priority valid ? */
;;;704 if (prio != OS_PRIO_SELF) {
;;;705 *perr = OS_ERR_PRIO_INVALID; /* No */
;;;706 return;
;;;707 }
;;;708 }
;;;709 if (pname == (INT8U *)0) { /* Is 'pname' a NULL pointer? */
;;;710 *perr = OS_ERR_PNAME_NULL; /* Yes */
;;;711 return;
;;;712 }
;;;713 #endif
;;;714 if (OSIntNesting > 0) { /* See if trying to call from an ISR */
000618 e59f0348 LDR r0,|L1.2408|
00061c e1a07001 MOV r7,r1 ;690
000620 e5d00000 LDRB r0,[r0,#0] ; OSIntNesting
000624 e1a04002 MOV r4,r2 ;690
000628 e3500000 CMP r0,#0
;;;715 *perr = OS_ERR_NAME_SET_ISR;
00062c 13a00012 MOVNE r0,#0x12
;;;716 return;
000630 1a00001e BNE |L1.1712|
;;;717 }
;;;718 OS_ENTER_CRITICAL();
000634 ebfffffe BL OS_CPU_SR_Save
;;;719 if (prio == OS_PRIO_SELF) { /* See if caller desires to set it's own name */
000638 e35500ff CMP r5,#0xff
00063c e1a06000 MOV r6,r0 ;718
;;;720 prio = OSTCBCur->OSTCBPrio;
000640 059f0310 LDREQ r0,|L1.2392|
;;;721 }
;;;722 ptcb = OSTCBPrioTbl[prio];
000644 e3a08043 MOV r8,#0x43
000648 05900000 LDREQ r0,[r0,#0] ;720 ; OSTCBCur
00064c 05d0502e LDRBEQ r5,[r0,#0x2e] ;720
000650 e59f02fc LDR r0,|L1.2388|
000654 e7905105 LDR r5,[r0,r5,LSL #2]
;;;723 if (ptcb == (OS_TCB *)0) { /* Does task exist? */
000658 e3550000 CMP r5,#0
;;;724 OS_EXIT_CRITICAL(); /* No */
;;;725 *perr = OS_ERR_TASK_NOT_EXIST;
;;;726 return;
;;;727 }
;;;728 if (ptcb == OS_TCB_RESERVED) { /* Task assigned to a Mutex? */
00065c 13550001 CMPNE r5,#1
000660 1a000004 BNE |L1.1656|
;;;729 OS_EXIT_CRITICAL(); /* Yes */
000664 e1a00006 MOV r0,r6
000668 ebfffffe BL OS_CPU_SR_Restore
;;;730 *perr = OS_ERR_TASK_NOT_EXIST;
00066c e5c48000 STRB r8,[r4,#0]
|L1.1648|
;;;731 return;
;;;732 }
;;;733 len = OS_StrLen(pname); /* Yes, Can we fit the string in the TCB? */
;;;734 if (len > (OS_TASK_NAME_SIZE - 1)) { /* No */
;;;735 OS_EXIT_CRITICAL();
;;;736 *perr = OS_ERR_TASK_NAME_TOO_LONG;
;;;737 return;
;;;738 }
;;;739 (void)OS_StrCopy(ptcb->OSTCBTaskName, pname); /* Yes, copy to TCB */
;;;740 OS_EXIT_CRITICAL();
;;;741 *perr = OS_ERR_NONE;
;;;742 }
000670 e8bd41f0 POP {r4-r8,lr}
000674 e12fff1e BX lr
|L1.1656|
000678 e1a00007 MOV r0,r7 ;733
00067c ebfffffe BL OS_StrLen
000680 e350000f CMP r0,#0xf ;734
000684 9a000003 BLS |L1.1688|
000688 e1a00006 MOV r0,r6 ;735
00068c ebfffffe BL OS_CPU_SR_Restore
000690 e3a00041 MOV r0,#0x41 ;736
000694 ea000005 B |L1.1712|
|L1.1688|
000698 e1a01007 MOV r1,r7 ;739
00069c e2850048 ADD r0,r5,#0x48 ;739
0006a0 ebfffffe BL OS_StrCopy
0006a4 e1a00006 MOV r0,r6 ;740
0006a8 ebfffffe BL OS_CPU_SR_Restore
0006ac e3a00000 MOV r0,#0 ;741
|L1.1712|
0006b0 e5c40000 STRB r0,[r4,#0] ;741
0006b4 eaffffed B |L1.1648|
;;;743 #endif
ENDP
OSTaskResume PROC
;;;765 INT8U OSTaskResume (INT8U prio)
;;;766 {
0006b8 e92d4010 PUSH {r4,lr}
0006bc e1a04000 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 */
;;;776 return (OS_ERR_PRIO_INVALID);
;;;777 }
;;;778 #endif
;;;779 OS_ENTER_CRITICAL();
0006c0 ebfffffe BL OS_CPU_SR_Save
;;;780 ptcb = OSTCBPrioTbl[prio];
0006c4 e59f1288 LDR r1,|L1.2388|
0006c8 e7911104 LDR r1,[r1,r4,LSL #2]
;;;781 if (ptcb == (OS_TCB *)0) { /* Task to suspend must exist */
0006cc e3510000 CMP r1,#0
0006d0 1a000003 BNE |L1.1764|
;;;782 OS_EXIT_CRITICAL();
0006d4 ebfffffe BL OS_CPU_SR_Restore
;;;783 return (OS_ERR_TASK_RESUME_PRIO);
0006d8 e3a00046 MOV r0,#0x46
|L1.1756|
0006dc e8bd4010 POP {r4,lr}
;;;784 }
;;;785 if (ptcb == OS_TCB_RESERVED) { /* See if assigned to Mutex */
;;;786 OS_EXIT_CRITICAL();
;;;787 return (OS_ERR_TASK_NOT_EXIST);
;;;788 }
;;;789 if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) != OS_STAT_RDY) { /* Task must be suspended */
;;;790 ptcb->OSTCBStat &= ~(INT8U)OS_STAT_SUSPEND; /* Remove suspension */
;;;791 if (ptcb->OSTCBStat == OS_STAT_RDY) { /* See if task is now ready */
;;;792 if (ptcb->OSTCBDly == 0) {
;;;793 OSRdyGrp |= ptcb->OSTCBBitY; /* Yes, Make task ready to run */
;;;794 OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
;;;795 OS_EXIT_CRITICAL();
;;;796 if (OSRunning == OS_TRUE) {
;;;797 OS_Sched(); /* Find new highest priority task */
;;;798 }
;;;799 } else {
;;;800 OS_EXIT_CRITICAL();
;;;801 }
;;;802 } else { /* Must be pending on event */
;;;803 OS_EXIT_CRITICAL();
;;;804 }
;;;805 return (OS_ERR_NONE);
;;;806 }
;;;807 OS_EXIT_CRITICAL();
;;;808 return (OS_ERR_TASK_NOT_SUSPENDED);
;;;809 }
0006e0 e12fff1e BX lr
|L1.1764|
0006e4 e3510001 CMP r1,#1 ;785
0006e8 1a000002 BNE |L1.1784|
0006ec ebfffffe BL OS_CPU_SR_Restore
0006f0 e3a00043 MOV r0,#0x43 ;787
0006f4 eafffff8 B |L1.1756|
|L1.1784|
0006f8 e5d1202c LDRB r2,[r1,#0x2c] ;789
0006fc e3120008 TST r2,#8 ;789
000700 0a000019 BEQ |L1.1900|
000704 e3c22008 BIC r2,r2,#8 ;790
000708 e31200ff TST r2,#0xff ;791
00070c e5c1202c STRB r2,[r1,#0x2c] ;790
000710 01d122ba LDRHEQ r2,[r1,#0x2a] ;792
000714 03520000 CMPEQ r2,#0 ;792
000718 1a000010 BNE |L1.1888|
00071c e59f223c LDR r2,|L1.2400|
000720 e5d13032 LDRB r3,[r1,#0x32] ;793
000724 e5d2c000 LDRB r12,[r2,#0] ;793 ; OSRdyGrp
000728 e183300c ORR r3,r3,r12 ;793
00072c e5c23000 STRB r3,[r2,#0] ;793 ; OSRdyGrp
000730 e5d12030 LDRB r2,[r1,#0x30] ;794
000734 e59f3220 LDR r3,|L1.2396|
000738 e5d11031 LDRB r1,[r1,#0x31] ;794
00073c e7d3c002 LDRB r12,[r3,r2] ;794
000740 e181100c ORR r1,r1,r12 ;794
000744 e7c31002 STRB r1,[r3,r2] ;794
000748 ebfffffe BL OS_CPU_SR_Restore
00074c e59f0210 LDR r0,|L1.2404|
000750 e5d00000 LDRB r0,[r0,#0] ;796 ; OSRunning
000754 e3500001 CMP r0,#1 ;796
000758 0bfffffe BLEQ OS_Sched
00075c ea000000 B |L1.1892|
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -