📄 os_task.txt
字号:
00059c e5d50021 LDRB r0,[r5,#0x21] ;557
0005a0 e59f11c4 LDR r1,|L1.1900| ;557
0005a4 e5d11000 LDRB r1,[r1,#0] ;557 ; OSRdyGrp
0005a8 e1800001 ORR r0,r0,r1 ;557
0005ac e59f11b8 LDR r1,|L1.1900| ;557
0005b0 e5c10000 STRB r0,[r1,#0] ;557 ; OSRdyGrp
0005b4 e5d5001f LDRB r0,[r5,#0x1f] ;558
0005b8 e59f11a8 LDR r1,|L1.1896| ;558
0005bc e7d10000 LDRB r0,[r1,r0] ;558
0005c0 e5d51020 LDRB r1,[r5,#0x20] ;558
0005c4 e1800001 ORR r0,r0,r1 ;558
0005c8 e5d5101f LDRB r1,[r5,#0x1f] ;558
0005cc e59f2194 LDR r2,|L1.1896| ;558
0005d0 e7c20001 STRB r0,[r2,r1] ;558
0005d4 ef000003 SVC 0x3 ; formerly SWI ;559
0005d8 ebfffffe BL OS_Sched ;560
0005dc ea000000 B |L1.1508| ;560
|L1.1504|
0005e0 ef000003 SVC 0x3 ; formerly SWI ;562
|L1.1508|
0005e4 e3a00000 MOV r0,#0 ;564
0005e8 eaffffd8 B |L1.1360| ;564
|L1.1516|
0005ec ef000003 SVC 0x3 ; formerly SWI ;566
0005f0 e3a00065 MOV r0,#0x65 ;567
0005f4 eaffffd5 B |L1.1360| ;567
ENDP
OSTaskSuspend PROC
;;;663 INT8U OSTaskSuspend (INT8U prio)
;;;664 {
0005f8 e92d4070 PUSH {r4-r6,lr}
0005fc e1a04000 MOV r4,r0
;;;665 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;666 OS_CPU_SR cpu_sr;
;;;667 #endif
;;;668 BOOLEAN self;
;;;669 OS_TCB *ptcb;
;;;670
;;;671
;;;672 #if OS_ARG_CHK_EN > 0
;;;673 if (prio == OS_IDLE_PRIO) { /* Not allowed to suspend idle task */
000600 e354000c CMP r4,#0xc
000604 1a000001 BNE |L1.1552|
;;;674 return (OS_TASK_SUSPEND_IDLE);
000608 e3a0005b MOV r0,#0x5b
;;;675 }
;;;676 if (prio >= OS_LOWEST_PRIO && prio != OS_PRIO_SELF) { /* Task priority valid ? */
;;;677 return (OS_PRIO_INVALID);
;;;678 }
;;;679 #endif
;;;680 OS_ENTER_CRITICAL();
;;;681 if (prio == OS_PRIO_SELF) { /* See if suspend SELF */
;;;682 prio = OSTCBCur->OSTCBPrio;
;;;683 self = TRUE;
;;;684 } else if (prio == OSTCBCur->OSTCBPrio) { /* See if suspending self */
;;;685 self = TRUE;
;;;686 } else {
;;;687 self = FALSE; /* No suspending another task */
;;;688 }
;;;689 if ((ptcb = OSTCBPrioTbl[prio]) == (OS_TCB *)0) { /* Task to suspend must exist */
;;;690 OS_EXIT_CRITICAL();
;;;691 return (OS_TASK_SUSPEND_PRIO);
;;;692 }
;;;693 if ((OSRdyTbl[ptcb->OSTCBY] &= ~ptcb->OSTCBBitX) == 0x00) { /* Make task not ready */
;;;694 OSRdyGrp &= ~ptcb->OSTCBBitY;
;;;695 }
;;;696 ptcb->OSTCBStat |= OS_STAT_SUSPEND; /* Status of task is 'SUSPENDED' */
;;;697 OS_EXIT_CRITICAL();
;;;698 if (self == TRUE) { /* Context switch only if SELF */
;;;699 OS_Sched();
;;;700 }
;;;701 return (OS_NO_ERR);
;;;702 }
|L1.1548|
00060c e8bd8070 POP {r4-r6,pc}
|L1.1552|
000610 e354000c CMP r4,#0xc ;676
000614 ba000003 BLT |L1.1576| ;676
000618 e35400ff CMP r4,#0xff ;676
00061c 0a000001 BEQ |L1.1576| ;676
000620 e3a0002a MOV r0,#0x2a ;677
000624 eafffff8 B |L1.1548| ;677
|L1.1576|
000628 ef000002 SVC 0x2 ; formerly SWI ;680
00062c e35400ff CMP r4,#0xff ;681
000630 1a000004 BNE |L1.1608| ;681
000634 e59f0128 LDR r0,|L1.1892| ;682
000638 e5900000 LDR r0,[r0,#0] ;682 ; OSTCBCur
00063c e5d0401d LDRB r4,[r0,#0x1d] ;682
000640 e3a05001 MOV r5,#1 ;683
000644 ea000007 B |L1.1640| ;683
|L1.1608|
000648 e59f0114 LDR r0,|L1.1892| ;684
00064c e5900000 LDR r0,[r0,#0] ;684 ; OSTCBCur
000650 e5d0001d LDRB r0,[r0,#0x1d] ;684
000654 e1500004 CMP r0,r4 ;684
000658 1a000001 BNE |L1.1636| ;684
00065c e3a05001 MOV r5,#1 ;685
000660 ea000000 B |L1.1640| ;685
|L1.1636|
000664 e3a05000 MOV r5,#0 ;687
|L1.1640|
000668 e59f00ec LDR r0,|L1.1884| ;689
00066c e7906104 LDR r6,[r0,r4,LSL #2] ;689
000670 e3560000 CMP r6,#0 ;689
000674 1a000002 BNE |L1.1668| ;689
000678 ef000003 SVC 0x3 ; formerly SWI ;690
00067c e3a0005a MOV r0,#0x5a ;691
000680 eaffffe1 B |L1.1548| ;691
|L1.1668|
000684 e5d6001f LDRB r0,[r6,#0x1f] ;693
000688 e59f10d8 LDR r1,|L1.1896| ;693
00068c e7d10000 LDRB r0,[r1,r0] ;693
000690 e5d61020 LDRB r1,[r6,#0x20] ;693
000694 e1c00001 BIC r0,r0,r1 ;693
000698 e21000ff ANDS r0,r0,#0xff ;693
00069c e5d6101f LDRB r1,[r6,#0x1f] ;693
0006a0 e59f20c0 LDR r2,|L1.1896| ;693
0006a4 e7c20001 STRB r0,[r2,r1] ;693
0006a8 1a000005 BNE |L1.1732| ;693
0006ac e5d60021 LDRB r0,[r6,#0x21] ;694
0006b0 e59f10b4 LDR r1,|L1.1900| ;694
0006b4 e5d11000 LDRB r1,[r1,#0] ;694 ; OSRdyGrp
0006b8 e1c10000 BIC r0,r1,r0 ;694
0006bc e59f10a8 LDR r1,|L1.1900| ;694
0006c0 e5c10000 STRB r0,[r1,#0] ;694 ; OSRdyGrp
|L1.1732|
0006c4 e5d6001c LDRB r0,[r6,#0x1c] ;696
0006c8 e3800008 ORR r0,r0,#8 ;696
0006cc e5c6001c STRB r0,[r6,#0x1c] ;696
0006d0 ef000003 SVC 0x3 ; formerly SWI ;697
0006d4 e3550001 CMP r5,#1 ;698
0006d8 1a000000 BNE |L1.1760| ;698
0006dc ebfffffe BL OS_Sched ;699
|L1.1760|
0006e0 e3a00000 MOV r0,#0 ;701
0006e4 eaffffc8 B |L1.1548| ;701
ENDP
OSTaskQuery PROC
;;;721 INT8U OSTaskQuery (INT8U prio, OS_TCB *pdata)
;;;722 {
0006e8 e92d4070 PUSH {r4-r6,lr}
0006ec e1a04000 MOV r4,r0
0006f0 e1a05001 MOV r5,r1
;;;723 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;724 OS_CPU_SR cpu_sr;
;;;725 #endif
;;;726 OS_TCB *ptcb;
;;;727
;;;728
;;;729 #if OS_ARG_CHK_EN > 0
;;;730 if (prio > OS_LOWEST_PRIO && prio != OS_PRIO_SELF) { /* Task priority valid ? */
0006f4 e354000c CMP r4,#0xc
0006f8 da000003 BLE |L1.1804|
0006fc e35400ff CMP r4,#0xff
000700 0a000001 BEQ |L1.1804|
;;;731 return (OS_PRIO_INVALID);
000704 e3a0002a MOV r0,#0x2a
;;;732 }
;;;733 #endif
;;;734 OS_ENTER_CRITICAL();
;;;735 if (prio == OS_PRIO_SELF) { /* See if suspend SELF */
;;;736 prio = OSTCBCur->OSTCBPrio;
;;;737 }
;;;738 if ((ptcb = OSTCBPrioTbl[prio]) == (OS_TCB *)0) { /* Task to query must exist */
;;;739 OS_EXIT_CRITICAL();
;;;740 return (OS_PRIO_ERR);
;;;741 }
;;;742 memcpy(pdata, ptcb, sizeof(OS_TCB)); /* Copy TCB into user storage area */
;;;743 OS_EXIT_CRITICAL();
;;;744 return (OS_NO_ERR);
;;;745 }
|L1.1800|
000708 e8bd8070 POP {r4-r6,pc}
|L1.1804|
00070c ef000002 SVC 0x2 ; formerly SWI ;734
000710 e35400ff CMP r4,#0xff ;735
000714 1a000002 BNE |L1.1828| ;735
000718 e59f0044 LDR r0,|L1.1892| ;736
00071c e5900000 LDR r0,[r0,#0] ;736 ; OSTCBCur
000720 e5d0401d LDRB r4,[r0,#0x1d] ;736
|L1.1828|
000724 e59f0030 LDR r0,|L1.1884| ;738
000728 e7906104 LDR r6,[r0,r4,LSL #2] ;738
00072c e3560000 CMP r6,#0 ;738
000730 1a000002 BNE |L1.1856| ;738
000734 ef000003 SVC 0x3 ; formerly SWI ;739
000738 e3a00029 MOV r0,#0x29 ;740
00073c eafffff1 B |L1.1800| ;740
|L1.1856|
000740 e3a02024 MOV r2,#0x24 ;742
000744 e1a01006 MOV r1,r6 ;742
000748 e1a00005 MOV r0,r5 ;742
00074c ebfffffe BL __aeabi_memcpy4 ;742
000750 ef000003 SVC 0x3 ; formerly SWI ;743
000754 e3a00000 MOV r0,#0 ;744
000758 eaffffea B |L1.1800| ;744
|L1.1884|
00075c 00000000 DCD OSTCBPrioTbl ;744
|L1.1888|
000760 00000000 DCD OSMapTbl ;744
|L1.1892|
000764 00000000 DCD OSTCBCur ;744
|L1.1896|
000768 00000000 DCD OSRdyTbl ;744
|L1.1900|
00076c 00000000 DCD OSRdyGrp ;744
|L1.1904|
000770 00000000 DCD OSTaskCtr ;744
|L1.1908|
000774 00000000 DCD OSRunning ;744
|L1.1912|
000778 00000000 DCD OSIntNesting ;744
|L1.1916|
00077c 00000000 DCD OSLockNesting ;744
|L1.1920|
000780 00000000 DCD OSTCBList ;744
|L1.1924|
000784 00000000 DCD OSTCBFreeList ;744
ENDP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -