📄 os_core.txt
字号:
;;;598 }
00073c e12fff1e BX lr
;;;599 #endif
ENDP
OS_TCBInit PROC
;;;1035 INT8U OS_TCBInit (INT8U prio, OS_STK *ptos, OS_STK *pbos, INT16U id, INT32U stk_size, void *pext, INT16U opt)
;;;1036 {
000740 e92d5fff PUSH {r0-r12,lr}
000744 e28db038 ADD r11,sp,#0x38
000748 e89b0e00 LDM r11,{r9-r11}
00074c e1a05000 MOV r5,r0
000750 e1a06001 MOV r6,r1
000754 e1a08002 MOV r8,r2
;;;1037 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;1038 OS_CPU_SR cpu_sr;
;;;1039 #endif
;;;1040 OS_TCB *ptcb;
;;;1041
;;;1042
;;;1043 OS_ENTER_CRITICAL();
000758 ef000002 SVC #0x2
;;;1044 ptcb = OSTCBFreeList; /* Get a free TCB from the free TCB list */
00075c e59f70f8 LDR r7,|L1.2140|
000760 e5974024 LDR r4,[r7,#0x24] ; OSTCBFreeList
;;;1045 if (ptcb != (OS_TCB *)0) {
000764 e3540000 CMP r4,#0
000768 0a000038 BEQ |L1.2128|
;;;1046 OSTCBFreeList = ptcb->OSTCBNext; /* Update pointer to free TCB list */
00076c e5940014 LDR r0,[r4,#0x14]
000770 e5870024 STR r0,[r7,#0x24] ; OSTCBFreeList
;;;1047 OS_EXIT_CRITICAL();
000774 ef000003 SVC #0x3
;;;1048 ptcb->OSTCBStkPtr = ptos; /* Load Stack pointer in TCB */
000778 e5846000 STR r6,[r4,#0]
;;;1049 ptcb->OSTCBPrio = (INT8U)prio; /* Load task priority into TCB */
00077c e5c4502d STRB r5,[r4,#0x2d]
;;;1050 ptcb->OSTCBStat = OS_STAT_RDY; /* Task is ready to run */
000780 e3a06000 MOV r6,#0
000784 e5c4602c STRB r6,[r4,#0x2c]
;;;1051 ptcb->OSTCBDly = 0; /* Task is not delayed */
000788 e1c462ba STRH r6,[r4,#0x2a]
;;;1052
;;;1053 #if OS_TASK_CREATE_EXT_EN > 0
;;;1054 ptcb->OSTCBExtPtr = pext; /* Store pointer to TCB extension */
00078c e584a004 STR r10,[r4,#4]
;;;1055 ptcb->OSTCBStkSize = stk_size; /* Store stack size */
000790 e584900c STR r9,[r4,#0xc]
;;;1056 ptcb->OSTCBStkBottom = pbos; /* Store pointer to bottom of stack */
000794 e5848008 STR r8,[r4,#8]
;;;1057 ptcb->OSTCBOpt = opt; /* Store task options */
000798 e1c4b1b0 STRH r11,[r4,#0x10]
;;;1058 ptcb->OSTCBId = id; /* Store task ID */
00079c e59d000c LDR r0,[sp,#0xc]
0007a0 e1c401b2 STRH r0,[r4,#0x12]
;;;1059 #else
;;;1060 pext = pext; /* Prevent compiler warning if not used */
;;;1061 stk_size = stk_size;
;;;1062 pbos = pbos;
;;;1063 opt = opt;
;;;1064 id = id;
;;;1065 #endif
;;;1066
;;;1067 #if OS_TASK_DEL_EN > 0
;;;1068 ptcb->OSTCBDelReq = OS_NO_ERR;
0007a4 e5c46032 STRB r6,[r4,#0x32]
;;;1069 #endif
;;;1070
;;;1071 ptcb->OSTCBY = prio >> 3; /* Pre-compute X, Y, BitX and BitY */
0007a8 e1a001a5 LSR r0,r5,#3
0007ac e5c4002f STRB r0,[r4,#0x2f]
;;;1072 ptcb->OSTCBBitY = OSMapTbl[ptcb->OSTCBY];
0007b0 e5d4002f LDRB r0,[r4,#0x2f]
0007b4 e59f10d0 LDR r1,|L1.2188|
0007b8 e7d10000 LDRB r0,[r1,r0]
0007bc e5c40031 STRB r0,[r4,#0x31]
;;;1073 ptcb->OSTCBX = prio & 0x07;
0007c0 e2050007 AND r0,r5,#7
0007c4 e5c4002e STRB r0,[r4,#0x2e]
;;;1074 ptcb->OSTCBBitX = OSMapTbl[ptcb->OSTCBX];
0007c8 e7d10000 LDRB r0,[r1,r0]
0007cc e5c40030 STRB r0,[r4,#0x30]
;;;1075
;;;1076 #if OS_EVENT_EN > 0
;;;1077 ptcb->OSTCBEventPtr = (OS_EVENT *)0; /* Task is not pending on an event */
0007d0 e584601c STR r6,[r4,#0x1c]
;;;1078 #endif
;;;1079
;;;1080 #if (OS_VERSION >= 251) && (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0) && (OS_TASK_DEL_EN > 0)
;;;1081 ptcb->OSTCBFlagNode = (OS_FLAG_NODE *)0; /* Task is not pending on an event flag */
0007d4 e5846024 STR r6,[r4,#0x24]
;;;1082 #endif
;;;1083
;;;1084 #if (OS_MBOX_EN > 0) || ((OS_Q_EN > 0) && (OS_MAX_QS > 0))
;;;1085 ptcb->OSTCBMsg = (void *)0; /* No message received */
0007d8 e5846020 STR r6,[r4,#0x20]
;;;1086 #endif
;;;1087
;;;1088 #if OS_VERSION >= 204
;;;1089 OSTCBInitHook(ptcb);
0007dc e1a00004 MOV r0,r4
0007e0 ebfffffe BL OSTCBInitHook
;;;1090 #endif
;;;1091
;;;1092 OSTaskCreateHook(ptcb); /* Call user defined hook */
0007e4 e1a00004 MOV r0,r4
0007e8 ebfffffe BL OSTaskCreateHook
;;;1093
;;;1094 OS_ENTER_CRITICAL();
0007ec ef000002 SVC #0x2
;;;1095 OSTCBPrioTbl[prio] = ptcb;
0007f0 e59f0084 LDR r0,|L1.2172|
0007f4 e7804105 STR r4,[r0,r5,LSL #2]
;;;1096 ptcb->OSTCBNext = OSTCBList; /* Link into TCB chain */
0007f8 e597002c LDR r0,[r7,#0x2c] ; OSTCBList
0007fc e5840014 STR r0,[r4,#0x14]
;;;1097 ptcb->OSTCBPrev = (OS_TCB *)0;
000800 e5846018 STR r6,[r4,#0x18]
;;;1098 if (OSTCBList != (OS_TCB *)0) {
000804 e3500000 CMP r0,#0
000808 0a000000 BEQ |L1.2064|
;;;1099 OSTCBList->OSTCBPrev = ptcb;
00080c e5804018 STR r4,[r0,#0x18]
|L1.2064|
;;;1100 }
;;;1101 OSTCBList = ptcb;
000810 e587402c STR r4,[r7,#0x2c] ; OSTCBList
;;;1102 OSRdyGrp |= ptcb->OSTCBBitY; /* Make task ready to run */
000814 e5d40031 LDRB r0,[r4,#0x31]
000818 e5d71007 LDRB r1,[r7,#7] ; OSRdyGrp
00081c e1800001 ORR r0,r0,r1
000820 e5c70007 STRB r0,[r7,#7] ; OSRdyGrp
;;;1103 OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
000824 e5d4002f LDRB r0,[r4,#0x2f]
000828 e59f1058 LDR r1,|L1.2184|
00082c e5d43030 LDRB r3,[r4,#0x30]
000830 e7d12000 LDRB r2,[r1,r0]
000834 e1822003 ORR r2,r2,r3
000838 e7c12000 STRB r2,[r1,r0]
;;;1104 OS_EXIT_CRITICAL();
00083c ef000003 SVC #0x3
;;;1105 return (OS_NO_ERR);
000840 e3a00000 MOV r0,#0
|L1.2116|
000844 e28dd010 ADD sp,sp,#0x10
000848 e8bd5ff0 POP {r4-r12,lr}
;;;1106 }
;;;1107 OS_EXIT_CRITICAL();
;;;1108 return (OS_NO_MORE_TCB);
;;;1109 }
00084c e12fff1e BX lr
|L1.2128|
000850 ef000003 SVC #0x3 ;1107
000854 e3a00046 MOV r0,#0x46 ;1108
000858 eafffff9 B |L1.2116|
ENDP
|L1.2140|
00085c 00000000 DCD ||.data||
|L1.2144|
000860 00000018 DCD ||.bss||+0x18
|L1.2148|
000864 0000fffe DCD 0x0000fffe
|L1.2152|
000868 00000814 DCD ||.bss||+0x814
|L1.2156|
00086c 00000818 DCD ||.bss||+0x818
|L1.2160|
000870 0000ffff DCD 0x0000ffff
|L1.2164|
000874 00001014 DCD ||.bss||+0x1014
|L1.2168|
000878 00000000 DCD ||.bss||
|L1.2172|
00087c 00001018 DCD ||.bss||+0x1018
|L1.2176|
000880 0000104c DCD ||.bss||+0x104c
|L1.2180|
000884 00000008 DCD ||.constdata||+0x8
|L1.2184|
000888 0000000a DCD ||.data||+0xa
|L1.2188|
00088c 00000000 DCD ||.constdata||
AREA ||.data||, DATA, ALIGN=2
OSCPUUsage
000000 00 DCB 0x00
OSStatRdy
000001 00 DCB 0x00
OSIntNesting
000002 00 DCB 0x00
OSIntExitY
000003 00 DCB 0x00
OSLockNesting
000004 00 DCB 0x00
OSPrioCur
000005 00 DCB 0x00
OSPrioHighRdy
000006 00 DCB 0x00
OSRdyGrp
000007 00 DCB 0x00
OSRunning
000008 00 DCB 0x00
OSTaskCtr
000009 00 DCB 0x00
OSRdyTbl
00000a 0000 DCB 0x00,0x00
OSCtxSwCtr
00000c 00000000 DCD 0x00000000
OSEventFreeList
000010 00000000 DCD 0x00000000
OSIdleCtrMax
000014 00000000 DCD 0x00000000
OSIdleCtrRun
000018 00000000 DCD 0x00000000
OSIdleCtr
00001c 00000000 DCD 0x00000000
OSTCBCur
000020 00000000 DCD 0x00000000
OSTCBFreeList
000024 00000000 DCD 0x00000000
OSTCBHighRdy
000028 00000000 DCD 0x00000000
OSTCBList
00002c 00000000 DCD 0x00000000
OSTime
000030 00000000 DCD 0x00000000
AREA ||.constdata||, DATA, READONLY, ALIGN=0
OSMapTbl
000000 01020408 DCB 0x01,0x02,0x04,0x08
000004 10204080 DCB 0x10,0x20,0x40,0x80
OSUnMapTbl
000008 00000100 DCB 0x00,0x00,0x01,0x00
00000c 02000100 DCB 0x02,0x00,0x01,0x00
000010 03000100 DCB 0x03,0x00,0x01,0x00
000014 02000100 DCB 0x02,0x00,0x01,0x00
000018 04000100 DCB 0x04,0x00,0x01,0x00
00001c 02000100 DCB 0x02,0x00,0x01,0x00
000020 03000100 DCB 0x03,0x00,0x01,0x00
000024 02000100 DCB 0x02,0x00,0x01,0x00
000028 05000100 DCB 0x05,0x00,0x01,0x00
00002c 02000100 DCB 0x02,0x00,0x01,0x00
000030 03000100 DCB 0x03,0x00,0x01,0x00
000034 02000100 DCB 0x02,0x00,0x01,0x00
000038 04000100 DCB 0x04,0x00,0x01,0x00
00003c 02000100 DCB 0x02,0x00,0x01,0x00
000040 03000100 DCB 0x03,0x00,0x01,0x00
000044 02000100 DCB 0x02,0x00,0x01,0x00
000048 06000100 DCB 0x06,0x00,0x01,0x00
00004c 02000100 DCB 0x02,0x00,0x01,0x00
000050 03000100 DCB 0x03,0x00,0x01,0x00
000054 02000100 DCB 0x02,0x00,0x01,0x00
000058 04000100 DCB 0x04,0x00,0x01,0x00
00005c 02000100 DCB 0x02,0x00,0x01,0x00
000060 03000100 DCB 0x03,0x00,0x01,0x00
000064 02000100 DCB 0x02,0x00,0x01,0x00
000068 05000100 DCB 0x05,0x00,0x01,0x00
00006c 02000100 DCB 0x02,0x00,0x01,0x00
000070 03000100 DCB 0x03,0x00,0x01,0x00
000074 02000100 DCB 0x02,0x00,0x01,0x00
000078 04000100
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -