📄 os_core.txt
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 919] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o.\rvmdk\os_core.o --depend=.\rvmdk\os_core.d --device=DARMP --apcs=interwork -I. -I..\BSP -I..\..\..\..\..\uCOS-II\Ports\ARM\Generic\RealView -I..\..\..\..\..\uCOS-II\Source -I..\..\..\..\..\uCOSView\Source -I..\..\..\..\..\uCOSView\Ports\ARM7\LPC2000\IAR -I..\..\..\..\..\uC-CPU -I..\..\..\..\..\uC-CPU\ARM\RealView -I..\..\..\..\..\uC-LIB -I..\..\..\..\..\uC-Probe\Target\Plugins\uCOS-II -IC:\Keil\ARM\INC\Philips --omf_browse=.\rvmdk\os_core.crf ..\..\..\..\..\uCOS-II\Source\os_core.c]
ARM
AREA ||.text||, CODE, READONLY, ALIGN=2
OS_StrCopy PROC
000000 e3a02000 MOV r2,#0
|L1.4|
000004 e5d13000 LDRB r3,[r1,#0]
000008 e3530000 CMP r3,#0
00000c 12822001 ADDNE r2,r2,#1
000010 12811001 ADDNE r1,r1,#1
000014 120220ff ANDNE r2,r2,#0xff
000018 14c03001 STRBNE r3,[r0],#1
00001c 1afffff8 BNE |L1.4|
000020 e3a01000 MOV r1,#0
000024 e5c01000 STRB r1,[r0,#0]
000028 e1a00002 MOV r0,r2
00002c e12fff1e BX lr
ENDP
OSEventNameGet PROC
;;;108 INT8U OSEventNameGet (OS_EVENT *pevent, INT8U *pname, INT8U *perr)
;;;109 {
000030 e92d4070 PUSH {r4-r6,lr}
000034 e1a05000 MOV r5,r0
;;;110 INT8U len;
;;;111 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;112 OS_CPU_SR cpu_sr = 0;
;;;113 #endif
;;;114
;;;115
;;;116
;;;117 #if OS_ARG_CHK_EN > 0
;;;118 if (perr == (INT8U *)0) { /* Validate 'perr' */
;;;119 return (0);
;;;120 }
;;;121 if (pevent == (OS_EVENT *)0) { /* Is 'pevent' a NULL pointer? */
;;;122 *perr = OS_ERR_PEVENT_NULL;
;;;123 return (0);
;;;124 }
;;;125 if (pname == (INT8U *)0) { /* Is 'pname' a NULL pointer? */
;;;126 *perr = OS_ERR_PNAME_NULL;
;;;127 return (0);
;;;128 }
;;;129 #endif
;;;130 if (OSIntNesting > 0) { /* See if trying to call from an ISR */
000038 e59f0590 LDR r0,|L1.1488|
00003c e1a06001 MOV r6,r1 ;109
000040 e5d00002 LDRB r0,[r0,#2] ; OSIntNesting
000044 e1a04002 MOV r4,r2 ;109
000048 e3500000 CMP r0,#0
;;;131 *perr = OS_ERR_NAME_GET_ISR;
00004c 13a00011 MOVNE r0,#0x11
;;;132 return (0);
000050 1a000006 BNE |L1.112|
;;;133 }
;;;134 switch (pevent->OSEventType) {
000054 e5d50000 LDRB r0,[r5,#0]
000058 e3500001 CMP r0,#1
00005c 13500002 CMPNE r0,#2
000060 13500003 CMPNE r0,#3
000064 13500004 CMPNE r0,#4
000068 0a000004 BEQ |L1.128|
;;;135 case OS_EVENT_TYPE_SEM:
;;;136 case OS_EVENT_TYPE_MUTEX:
;;;137 case OS_EVENT_TYPE_MBOX:
;;;138 case OS_EVENT_TYPE_Q:
;;;139 break;
;;;140
;;;141 default:
;;;142 *perr = OS_ERR_EVENT_TYPE;
00006c e3a00001 MOV r0,#1
|L1.112|
000070 e5c40000 STRB r0,[r4,#0]
;;;143 return (0);
000074 e3a00000 MOV r0,#0
|L1.120|
000078 e8bd4070 POP {r4-r6,lr}
;;;144 }
;;;145 OS_ENTER_CRITICAL();
;;;146 len = OS_StrCopy(pname, pevent->OSEventName); /* Copy name from OS_EVENT */
;;;147 OS_EXIT_CRITICAL();
;;;148 *perr = OS_ERR_NONE;
;;;149 return (len);
;;;150 }
00007c e12fff1e BX lr
|L1.128|
000080 ebfffffe BL OS_CPU_SR_Save
000084 e1a0c000 MOV r12,r0 ;145
000088 e285100f ADD r1,r5,#0xf ;146
00008c e1a00006 MOV r0,r6 ;146
000090 ebfffffe BL OS_StrCopy
000094 e1a05000 MOV r5,r0 ;146
000098 e1a0000c MOV r0,r12 ;147
00009c ebfffffe BL OS_CPU_SR_Restore
0000a0 e3a00000 MOV r0,#0 ;148
0000a4 e5c40000 STRB r0,[r4,#0] ;148
0000a8 e1a00005 MOV r0,r5 ;149
0000ac eafffff1 B |L1.120|
;;;151 #endif
ENDP
OS_StrLen PROC
0000b0 e3a01000 MOV r1,#0 ;0
|L1.180|
0000b4 e5d02000 LDRB r2,[r0,#0] ;0
0000b8 e3520000 CMP r2,#0 ;0
0000bc 12811001 ADDNE r1,r1,#1 ;0
0000c0 12800001 ADDNE r0,r0,#1 ;0
0000c4 120110ff ANDNE r1,r1,#0xff ;0
0000c8 1afffff9 BNE |L1.180|
0000cc e1a00001 MOV r0,r1 ;0
0000d0 e12fff1e BX lr ;0
ENDP
OSEventNameSet PROC
;;;182 void OSEventNameSet (OS_EVENT *pevent, INT8U *pname, INT8U *perr)
;;;183 {
0000d4 e92d4070 PUSH {r4-r6,lr}
0000d8 e1a05000 MOV r5,r0
;;;184 INT8U len;
;;;185 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;186 OS_CPU_SR cpu_sr = 0;
;;;187 #endif
;;;188
;;;189
;;;190
;;;191 #if OS_ARG_CHK_EN > 0
;;;192 if (perr == (INT8U *)0) { /* Validate 'perr' */
;;;193 return;
;;;194 }
;;;195 if (pevent == (OS_EVENT *)0) { /* Is 'pevent' a NULL pointer? */
;;;196 *perr = OS_ERR_PEVENT_NULL;
;;;197 return;
;;;198 }
;;;199 if (pname == (INT8U *)0) { /* Is 'pname' a NULL pointer? */
;;;200 *perr = OS_ERR_PNAME_NULL;
;;;201 return;
;;;202 }
;;;203 #endif
;;;204 if (OSIntNesting > 0) { /* See if trying to call from an ISR */
0000dc e59f04ec LDR r0,|L1.1488|
0000e0 e1a06001 MOV r6,r1 ;183
0000e4 e5d00002 LDRB r0,[r0,#2] ; OSIntNesting
0000e8 e1a04002 MOV r4,r2 ;183
0000ec e3500000 CMP r0,#0
;;;205 *perr = OS_ERR_NAME_SET_ISR;
0000f0 13a00012 MOVNE r0,#0x12
;;;206 return;
0000f4 1a000016 BNE |L1.340|
;;;207 }
;;;208 switch (pevent->OSEventType) {
0000f8 e5d50000 LDRB r0,[r5,#0]
0000fc e3500001 CMP r0,#1
000100 13500002 CMPNE r0,#2
000104 13500003 CMPNE r0,#3
000108 13500004 CMPNE r0,#4
;;;209 case OS_EVENT_TYPE_SEM:
;;;210 case OS_EVENT_TYPE_MUTEX:
;;;211 case OS_EVENT_TYPE_MBOX:
;;;212 case OS_EVENT_TYPE_Q:
;;;213 break;
;;;214
;;;215 default:
;;;216 *perr = OS_ERR_EVENT_TYPE;
00010c 13a00001 MOVNE r0,#1
;;;217 return;
000110 1a00000f BNE |L1.340|
;;;218 }
;;;219 OS_ENTER_CRITICAL();
000114 ebfffffe BL OS_CPU_SR_Save
000118 e1a0c000 MOV r12,r0
;;;220 len = OS_StrLen(pname); /* Can we fit the string in the storage area? */
00011c e1a00006 MOV r0,r6
000120 ebfffffe BL OS_StrLen
;;;221 if (len > (OS_EVENT_NAME_SIZE - 1)) { /* No */
000124 e350000f CMP r0,#0xf
000128 9a000003 BLS |L1.316|
;;;222 OS_EXIT_CRITICAL();
00012c e1a0000c MOV r0,r12
000130 ebfffffe BL OS_CPU_SR_Restore
;;;223 *perr = OS_ERR_EVENT_NAME_TOO_LONG;
000134 e3a0000b MOV r0,#0xb
;;;224 return;
000138 ea000005 B |L1.340|
|L1.316|
;;;225 }
;;;226 (void)OS_StrCopy(pevent->OSEventName, pname); /* Yes, copy name to the event control block */
00013c e1a01006 MOV r1,r6
000140 e285000f ADD r0,r5,#0xf
000144 ebfffffe BL OS_StrCopy
;;;227 OS_EXIT_CRITICAL();
000148 e1a0000c MOV r0,r12
00014c ebfffffe BL OS_CPU_SR_Restore
;;;228 *perr = OS_ERR_NONE;
000150 e3a00000 MOV r0,#0
|L1.340|
000154 e5c40000 STRB r0,[r4,#0]
;;;229 }
000158 e8bd4070 POP {r4-r6,lr}
00015c e12fff1e BX lr
;;;230 #endif
ENDP
OS_TaskStatStkChk PROC
;;;1465 void OS_TaskStatStkChk (void)
;;;1466 {
000160 e92d407c PUSH {r2-r6,lr}
;;;1467 OS_TCB *ptcb;
;;;1468 OS_STK_DATA stk_data;
;;;1469 INT8U err;
;;;1470 INT8U prio;
;;;1471
;;;1472
;;;1473 for (prio = 0; prio <= OS_TASK_IDLE_PRIO; prio++) {
000164 e59f5468 LDR r5,|L1.1492|
000168 e3a04000 MOV r4,#0
|L1.364|
;;;1474 err = OSTaskStkChk(prio, &stk_data);
00016c e28d1000 ADD r1,sp,#0
000170 e1a00004 MOV r0,r4
000174 ebfffffe BL OSTaskStkChk
;;;1475 if (err == OS_ERR_NONE) {
000178 e3500000 CMP r0,#0
00017c 1a000009 BNE |L1.424|
;;;1476 ptcb = OSTCBPrioTbl[prio];
000180 e7950104 LDR r0,[r5,r4,LSL #2]
;;;1477 if (ptcb != (OS_TCB *)0) { /* Make sure task 'ptcb' is ... */
000184 e3500000 CMP r0,#0
;;;1478 if (ptcb != OS_TCB_RESERVED) { /* ... still valid. */
000188 13500001 CMPNE r0,#1
00018c 0a000005 BEQ |L1.424|
;;;1479 #if OS_TASK_PROFILE_EN > 0
;;;1480 #if OS_STK_GROWTH == 1
;;;1481 ptcb->OSTCBStkBase = ptcb->OSTCBStkBottom + ptcb->OSTCBStkSize;
000190 e2802008 ADD r2,r0,#8
000194 e8920006 LDM r2,{r1,r2}
000198 e0811102 ADD r1,r1,r2,LSL #2
;;;1482 #else
;;;1483 ptcb->OSTCBStkBase = ptcb->OSTCBStkBottom - ptcb->OSTCBStkSize;
;;;1484 #endif
;;;1485 ptcb->OSTCBStkUsed = stk_data.OSUsed; /* Store the number of bytes used */
00019c e5801040 STR r1,[r0,#0x40]
0001a0 e59d1004 LDR r1,[sp,#4]
0001a4 e5801044 STR r1,[r0,#0x44]
|L1.424|
0001a8 e2840001 ADD r0,r4,#1 ;1473
0001ac e20040ff AND r4,r0,#0xff ;1473
0001b0 e354001f CMP r4,#0x1f ;1473
0001b4 9affffec BLS |L1.364|
;;;1486 #endif
;;;1487 }
;;;1488 }
;;;1489 }
;;;1490 }
;;;1491 }
0001b8 e8bd407c POP {r2-r6,lr}
0001bc e12fff1e BX lr
;;;1492 #endif
ENDP
OS_TaskStat PROC
;;;1410 void OS_TaskStat (void *p_arg)
;;;1411 {
0001c0 e92d41f0 PUSH {r4-r8,lr}
0001c4 e59f4404 LDR r4,|L1.1488|
;;;1412 INT32U run;
;;;1413 INT32U max;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -