📄 os_task.txt
字号:
000798 e1d601b0 LDRH r0,[r6,#0x10] ;623
00079c e3100001 TST r0,#1 ;623
0007a0 1a000002 BNE |L1.1968| ;623
0007a4 ef000003 SVC 0x3 ; formerly SWI ;624
0007a8 e3a00082 MOV r0,#0x82 ;625
0007ac eaffffe7 B |L1.1872| ;625
|L1.1968|
0007b0 e3a08000 MOV r8,#0 ;627
0007b4 e596900c LDR r9,[r6,#0xc] ;628
0007b8 e5967008 LDR r7,[r6,#8] ;629
0007bc ef000003 SVC 0x3 ; formerly SWI ;630
0007c0 ea000000 B |L1.1992| ;632
|L1.1988|
0007c4 e2888001 ADD r8,r8,#1 ;633
|L1.1992|
0007c8 e4970004 LDR r0,[r7],#4 ;632
0007cc e3500000 CMP r0,#0 ;632
0007d0 0afffffb BEQ |L1.1988| ;632
0007d4 e1a00108 LSL r0,r8,#2 ;640
0007d8 e5850000 STR r0,[r5,#0] ;640
0007dc e0490008 SUB r0,r9,r8 ;641
0007e0 e1a00100 LSL r0,r0,#2 ;641
0007e4 e5850004 STR r0,[r5,#4] ;641
0007e8 e3a00000 MOV r0,#0 ;642
0007ec eaffffd7 B |L1.1872| ;642
ENDP
OSTaskSuspend PROC
;;;669 INT8U OSTaskSuspend (INT8U prio)
;;;670 {
0007f0 e92d4070 PUSH {r4-r6,lr}
0007f4 e1a04000 MOV r4,r0
;;;671 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;672 OS_CPU_SR cpu_sr;
;;;673 #endif
;;;674 BOOLEAN self;
;;;675 OS_TCB *ptcb;
;;;676
;;;677
;;;678 #if OS_ARG_CHK_EN > 0
;;;679 if (prio == OS_IDLE_PRIO) { /* Not allowed to suspend idle task */
0007f8 e354000c CMP r4,#0xc
0007fc 1a000002 BNE |L1.2060|
;;;680 return (OS_TASK_SUSPEND_IDLE);
000800 e3a0005b MOV r0,#0x5b
|L1.2052|
000804 e8bd4070 POP {r4-r6,lr}
;;;681 }
;;;682 if (prio >= OS_LOWEST_PRIO && prio != OS_PRIO_SELF) { /* Task priority valid ? */
;;;683 return (OS_PRIO_INVALID);
;;;684 }
;;;685 #endif
;;;686 OS_ENTER_CRITICAL();
;;;687 if (prio == OS_PRIO_SELF) { /* See if suspend SELF */
;;;688 prio = OSTCBCur->OSTCBPrio;
;;;689 self = TRUE;
;;;690 } else if (prio == OSTCBCur->OSTCBPrio) { /* See if suspending self */
;;;691 self = TRUE;
;;;692 } else {
;;;693 self = FALSE; /* No suspending another task */
;;;694 }
;;;695 ptcb = OSTCBPrioTbl[prio];
;;;696 if (ptcb == (OS_TCB *)0) { /* Task to suspend must exist */
;;;697 OS_EXIT_CRITICAL();
;;;698 return (OS_TASK_SUSPEND_PRIO);
;;;699 }
;;;700 if ((OSRdyTbl[ptcb->OSTCBY] &= ~ptcb->OSTCBBitX) == 0x00) { /* Make task not ready */
;;;701 OSRdyGrp &= ~ptcb->OSTCBBitY;
;;;702 }
;;;703 ptcb->OSTCBStat |= OS_STAT_SUSPEND; /* Status of task is 'SUSPENDED' */
;;;704 OS_EXIT_CRITICAL();
;;;705 if (self == TRUE) { /* Context switch only if SELF */
;;;706 OS_Sched();
;;;707 }
;;;708 return (OS_NO_ERR);
;;;709 }
000808 e12fff1e BX lr
|L1.2060|
00080c e354000c CMP r4,#0xc ;682
000810 ba000003 BLT |L1.2084| ;682
000814 e35400ff CMP r4,#0xff ;682
000818 0a000001 BEQ |L1.2084| ;682
00081c e3a0002a MOV r0,#0x2a ;683
000820 eafffff7 B |L1.2052| ;683
|L1.2084|
000824 ef000002 SVC 0x2 ; formerly SWI ;686
000828 e35400ff CMP r4,#0xff ;687
00082c 1a000004 BNE |L1.2116| ;687
000830 e59f012c LDR r0,|L1.2404| ;688
000834 e5900000 LDR r0,[r0,#0] ;688 ; OSTCBCur
000838 e5d0402d LDRB r4,[r0,#0x2d] ;688
00083c e3a06001 MOV r6,#1 ;689
000840 ea000007 B |L1.2148| ;689
|L1.2116|
000844 e59f0118 LDR r0,|L1.2404| ;690
000848 e5900000 LDR r0,[r0,#0] ;690 ; OSTCBCur
00084c e5d0002d LDRB r0,[r0,#0x2d] ;690
000850 e1500004 CMP r0,r4 ;690
000854 1a000001 BNE |L1.2144| ;690
000858 e3a06001 MOV r6,#1 ;691
00085c ea000000 B |L1.2148| ;691
|L1.2144|
000860 e3a06000 MOV r6,#0 ;693
|L1.2148|
000864 e59f00f0 LDR r0,|L1.2396| ;695
000868 e7905104 LDR r5,[r0,r4,LSL #2] ;695
00086c e3550000 CMP r5,#0 ;696
000870 1a000002 BNE |L1.2176| ;696
000874 ef000003 SVC 0x3 ; formerly SWI ;697
000878 e3a0005a MOV r0,#0x5a ;698
00087c eaffffe0 B |L1.2052| ;698
|L1.2176|
000880 e5d5002f LDRB r0,[r5,#0x2f] ;700
000884 e59f10dc LDR r1,|L1.2408| ;700
000888 e7d10000 LDRB r0,[r1,r0] ;700
00088c e5d51030 LDRB r1,[r5,#0x30] ;700
000890 e1c00001 BIC r0,r0,r1 ;700
000894 e21000ff ANDS r0,r0,#0xff ;700
000898 e5d5102f LDRB r1,[r5,#0x2f] ;700
00089c e59f20c4 LDR r2,|L1.2408| ;700
0008a0 e7c20001 STRB r0,[r2,r1] ;700
0008a4 1a000005 BNE |L1.2240| ;700
0008a8 e5d50031 LDRB r0,[r5,#0x31] ;701
0008ac e59f10b8 LDR r1,|L1.2412| ;701
0008b0 e5d11000 LDRB r1,[r1,#0] ;701 ; OSRdyGrp
0008b4 e1c10000 BIC r0,r1,r0 ;701
0008b8 e59f10ac LDR r1,|L1.2412| ;701
0008bc e5c10000 STRB r0,[r1,#0] ;701 ; OSRdyGrp
|L1.2240|
0008c0 e5d5002c LDRB r0,[r5,#0x2c] ;703
0008c4 e3800008 ORR r0,r0,#8 ;703
0008c8 e5c5002c STRB r0,[r5,#0x2c] ;703
0008cc ef000003 SVC 0x3 ; formerly SWI ;704
0008d0 e3560001 CMP r6,#1 ;705
0008d4 1a000000 BNE |L1.2268| ;705
0008d8 ebfffffe BL OS_Sched ;706
|L1.2268|
0008dc e3a00000 MOV r0,#0 ;708
0008e0 eaffffc7 B |L1.2052| ;708
ENDP
OSTaskQuery PROC
;;;728 INT8U OSTaskQuery (INT8U prio, OS_TCB *pdata)
;;;729 {
0008e4 e92d4070 PUSH {r4-r6,lr}
0008e8 e1a04000 MOV r4,r0
0008ec e1a06001 MOV r6,r1
;;;730 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;731 OS_CPU_SR cpu_sr;
;;;732 #endif
;;;733 OS_TCB *ptcb;
;;;734
;;;735
;;;736 #if OS_ARG_CHK_EN > 0
;;;737 if (prio > OS_LOWEST_PRIO && prio != OS_PRIO_SELF) { /* Task priority valid ? */
0008f0 e354000c CMP r4,#0xc
0008f4 da000004 BLE |L1.2316|
0008f8 e35400ff CMP r4,#0xff
0008fc 0a000002 BEQ |L1.2316|
;;;738 return (OS_PRIO_INVALID);
000900 e3a0002a MOV r0,#0x2a
|L1.2308|
000904 e8bd4070 POP {r4-r6,lr}
;;;739 }
;;;740 #endif
;;;741 OS_ENTER_CRITICAL();
;;;742 if (prio == OS_PRIO_SELF) { /* See if suspend SELF */
;;;743 prio = OSTCBCur->OSTCBPrio;
;;;744 }
;;;745 ptcb = OSTCBPrioTbl[prio];
;;;746 if (ptcb == (OS_TCB *)0) { /* Task to query must exist */
;;;747 OS_EXIT_CRITICAL();
;;;748 return (OS_PRIO_ERR);
;;;749 }
;;;750 memcpy(pdata, ptcb, sizeof(OS_TCB)); /* Copy TCB into user storage area */
;;;751 OS_EXIT_CRITICAL();
;;;752 return (OS_NO_ERR);
;;;753 }
000908 e12fff1e BX lr
|L1.2316|
00090c ef000002 SVC 0x2 ; formerly SWI ;741
000910 e35400ff CMP r4,#0xff ;742
000914 1a000002 BNE |L1.2340| ;742
000918 e59f0044 LDR r0,|L1.2404| ;743
00091c e5900000 LDR r0,[r0,#0] ;743 ; OSTCBCur
000920 e5d0402d LDRB r4,[r0,#0x2d] ;743
|L1.2340|
000924 e59f0030 LDR r0,|L1.2396| ;745
000928 e7905104 LDR r5,[r0,r4,LSL #2] ;745
00092c e3550000 CMP r5,#0 ;746
000930 1a000002 BNE |L1.2368| ;746
000934 ef000003 SVC 0x3 ; formerly SWI ;747
000938 e3a00029 MOV r0,#0x29 ;748
00093c eafffff0 B |L1.2308| ;748
|L1.2368|
000940 e3a02034 MOV r2,#0x34 ;750
000944 e1a01005 MOV r1,r5 ;750
000948 e1a00006 MOV r0,r6 ;750
00094c ebfffffe BL __aeabi_memcpy4 ;750
000950 ef000003 SVC 0x3 ; formerly SWI ;751
000954 e3a00000 MOV r0,#0 ;752
000958 eaffffe9 B |L1.2308| ;752
|L1.2396|
00095c 00000000 DCD OSTCBPrioTbl ;752
|L1.2400|
000960 00000000 DCD OSMapTbl ;752
|L1.2404|
000964 00000000 DCD OSTCBCur ;752
|L1.2408|
000968 00000000 DCD OSRdyTbl ;752
|L1.2412|
00096c 00000000 DCD OSRdyGrp ;752
|L1.2416|
000970 00000000 DCD OSTaskCtr ;752
|L1.2420|
000974 00000000 DCD OSRunning ;752
|L1.2424|
000978 00000000 DCD OSIntNesting ;752
|L1.2428|
00097c 00000000 DCD OSLockNesting ;752
|L1.2432|
000980 00000000 DCD OSTCBList ;752
|L1.2436|
000984 00000000 DCD OSTCBFreeList ;752
ENDP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -