?? os_core.txt
字號:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.0 [Build 951] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o.\ULINK-RAM\Obj\os_core.o --device=DARMATS --apcs=interwork -I..\..\..\..\uCOS-II\Source -I..\..\..\..\uCOS-II\Ports\ARM\Generic\KEILRV -I.\APP -I.\BSP -IC:\DEVELOP\Keil\ARM\INC\Atmel\SAM7S ..\..\..\..\uCOS-II\Source\os_core.c]
ARM
AREA ||.text.7||, CODE, READONLY, ALIGN=2
OS_TaskStatStkChk PROC
;;;1425 void OS_TaskStatStkChk (void)
;;;1426 {
000000 e92d407c PUSH {r2-r6,lr}
;;;1427 OS_TCB *ptcb;
;;;1428 OS_STK_DATA stk_data;
;;;1429 INT8U err;
;;;1430 INT8U prio;
;;;1431
;;;1432
;;;1433 for (prio = 0; prio <= OS_IDLE_PRIO; prio++) {
000004 e59f547c LDR r5,|L1.1160|
000008 e3a04000 MOV r4,#0
;;;1434 err = OSTaskStkChk(prio, &stk_data);
|L1.12|
00000c e1a0100d MOV r1,sp
000010 e1a00004 MOV r0,r4
000014 ebfffffe BL OSTaskStkChk
;;;1435 if (err == OS_NO_ERR) {
000018 e3500000 CMP r0,#0
00001c 1a000009 BNE |L1.72|
;;;1436 ptcb = OSTCBPrioTbl[prio];
000020 e7950104 LDR r0,[r5,r4,LSL #2]
;;;1437 if (ptcb != (OS_TCB *)0) { /* Make sure task 'ptcb' is ... */
000024 e3500000 CMP r0,#0
;;;1438 if (ptcb != (OS_TCB *)1) { /* ... still valid. */
000028 13500001 CMPNE r0,#1
00002c 0a000005 BEQ |L1.72| ;1437
;;;1439 #if OS_TASK_PROFILE_EN > 0
;;;1440 #if OS_STK_GROWTH == 1
;;;1441 ptcb->OSTCBStkBase = ptcb->OSTCBStkBottom + ptcb->OSTCBStkSize;
000030 e2802008 ADD r2,r0,#8
000034 e8920006 LDM r2,{r1,r2}
000038 e0811102 ADD r1,r1,r2,LSL #2
;;;1442 #else
;;;1443 ptcb->OSTCBStkBase = ptcb->OSTCBStkBottom - ptcb->OSTCBStkSize;
;;;1444 #endif
;;;1445 ptcb->OSTCBStkUsed = stk_data.OSUsed; /* Store the number of bytes used */
00003c e5801034 STR r1,[r0,#0x34]
000040 e59d1004 LDR r1,[sp,#4]
000044 e5801038 STR r1,[r0,#0x38]
|L1.72|
000048 e2840001 ADD r0,r4,#1 ;1433
00004c e20040ff AND r4,r0,#0xff ;1433
000050 e354000f CMP r4,#0xf ;1433
000054 9affffec BLS |L1.12| ;1433
;;;1446 #endif
;;;1447 }
;;;1448 }
;;;1449 }
;;;1450 }
;;;1451 }
000058 e8bd407c POP {r2-r6,lr}
00005c e12fff1e BX lr
ENDP
OS_TaskStat PROC
;;;1370 void OS_TaskStat (void *p_arg)
;;;1371 {
|L1.96|
000060 e92d41f0 PUSH {r4-r8,lr}
000064 e59f4420 LDR r4,|L1.1164|
;;;1372 INT32U run;
;;;1373 INT32U max;
;;;1374 INT8S usage;
;;;1375 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;1376 OS_CPU_SR cpu_sr = 0;
;;;1377 #endif
;;;1378
;;;1379
;;;1380
;;;1381 p_arg = p_arg; /* Prevent compiler warning for not using 'parg' */
;;;1382 while (OSStatRdy == FALSE) {
000068 ea000001 B |L1.116|
;;;1383 OSTimeDly(2 * OS_TICKS_PER_SEC / 10); /* Wait until statistic task is ready */
|L1.108|
00006c e3a00014 MOV r0,#0x14
000070 ebfffffe BL OSTimeDly
|L1.116|
000074 e5d40001 LDRB r0,[r4,#1] ;1382 ; OSStatRdy
000078 e3500000 CMP r0,#0 ;1382
00007c 0afffffa BEQ |L1.108| ;1382
;;;1384 }
;;;1385 max = OSIdleCtrMax / 100L;
000080 e5940010 LDR r0,[r4,#0x10] ; OSIdleCtrMax
000084 e3a01064 MOV r1,#0x64
000088 ebfffffe BL __aeabi_uidivmod
00008c e1a06000 MOV r6,r0
000090 e3a05000 MOV r5,#0
;;;1386 for (;;) {
;;;1387 OS_ENTER_CRITICAL();
|L1.148|
000094 ebfffffe BL OS_CPU_SR_Save
;;;1388 OSIdleCtrRun = OSIdleCtr; /* Obtain the of the idle counter for the past second */
000098 e5941018 LDR r1,[r4,#0x18] ; OSIdleCtr
;;;1389 run = OSIdleCtr;
00009c e5841014 STR r1,[r4,#0x14] ; OSIdleCtrRun
0000a0 e5947018 LDR r7,[r4,#0x18] ; OSIdleCtr
;;;1390 OSIdleCtr = 0L; /* Reset the idle counter for the next second */
0000a4 e5845018 STR r5,[r4,#0x18] ; OSIdleCtr
;;;1391 OS_EXIT_CRITICAL();
0000a8 ebfffffe BL OS_CPU_SR_Restore
;;;1392 if (max > 0L) {
0000ac e3560000 CMP r6,#0
0000b0 0a000008 BEQ |L1.216|
;;;1393 usage = (INT8S)(100L - run / max);
0000b4 e1a01006 MOV r1,r6
0000b8 e1a00007 MOV r0,r7
0000bc ebfffffe BL __aeabi_uidivmod
0000c0 e2600064 RSB r0,r0,#0x64
0000c4 e1a00c00 LSL r0,r0,#24
0000c8 e1b00c40 ASRS r0,r0,#24
;;;1394 if (usage >= 0) { /* Make sure we don't have a negative percentage */
;;;1395 OSCPUUsage = usage;
;;;1396 } else {
;;;1397 OSCPUUsage = 0;
0000cc 45c45000 STRBMI r5,[r4,#0] ; OSCPUUsage
0000d0 55c40000 STRBPL r0,[r4,#0] ;1395 ; OSCPUUsage
0000d4 ea000004 B |L1.236| ;1395
;;;1398 }
;;;1399 } else {
;;;1400 OSCPUUsage = 0;
|L1.216|
0000d8 e5c45000 STRB r5,[r4,#0] ; OSCPUUsage
;;;1401 max = OSIdleCtrMax / 100L;
0000dc e5940010 LDR r0,[r4,#0x10] ; OSIdleCtrMax
0000e0 e3a01064 MOV r1,#0x64
0000e4 ebfffffe BL __aeabi_uidivmod
0000e8 e1a06000 MOV r6,r0
;;;1402 }
;;;1403 OSTaskStatHook(); /* Invoke user definable hook */
|L1.236|
0000ec ebfffffe BL OSTaskStatHook
;;;1404 #if (OS_TASK_STAT_STK_CHK_EN > 0) && (OS_TASK_CREATE_EXT_EN > 0)
;;;1405 OS_TaskStatStkChk(); /* Check the stacks for each task */
0000f0 ebfffffe BL OS_TaskStatStkChk
;;;1406 #endif
;;;1407 OSTimeDly(OS_TICKS_PER_SEC / 10); /* Accumulate OSIdleCtr for the next 1/10 second */
0000f4 e3a0000a MOV r0,#0xa
0000f8 ebfffffe BL OSTimeDly
0000fc eaffffe4 B |L1.148|
;;;1408 }
;;;1409 }
ENDP
OS_TaskIdle PROC
;;;1328 void OS_TaskIdle (void *p_arg)
;;;1329 {
|L1.256|
000100 e92d4010 PUSH {r4,lr}
000104 e59f4380 LDR r4,|L1.1164|
;;;1330 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
;;;1331 OS_CPU_SR cpu_sr = 0;
;;;1332 #endif
;;;1333
;;;1334
;;;1335
;;;1336 (void)p_arg; /* Prevent compiler warning for not using 'parg' */
;;;1337 for (;;) {
;;;1338 OS_ENTER_CRITICAL();
|L1.264|
000108 ebfffffe BL OS_CPU_SR_Save
;;;1339 OSIdleCtr++;
00010c e5941018 LDR r1,[r4,#0x18] ; OSIdleCtr
000110 e2811001 ADD r1,r1,#1
000114 e5841018 STR r1,[r4,#0x18] ; OSIdleCtr
;;;1340 OS_EXIT_CRITICAL();
000118 ebfffffe BL OS_CPU_SR_Restore
;;;1341 OSTaskIdleHook(); /* Call user definable HOOK */
00011c ebfffffe BL OSTaskIdleHook
000120 eafffff8 B |L1.264|
;;;1342 }
;;;1343 }
ENDP
OS_MemClr PROC
;;;1114 void OS_MemClr (INT8U *pdest, INT16U size)
;;;1115 {
000124 e3a02000 MOV r2,#0
;;;1116 while (size > 0) {
|L1.296|
000128 e3510000 CMP r1,#0
;;;1117 *pdest++ = (INT8U)0;
;;;1118 size--;
00012c 12411001 SUBNE r1,r1,#1
000130 11a01801 LSLNE r1,r1,#16
000134 11a01821 LSRNE r1,r1,#16
000138 14c02001 STRBNE r2,[r0],#1 ;1117
00013c 1afffff9 BNE |L1.296|
;;;1119 }
;;;1120 }
000140 e12fff1e BX lr
ENDP
OSInit PROC
;;;223 void OSInit (void)
;;;224 {
000144 e92d4010 PUSH {r4,lr}
000148 e24dd018 SUB sp,sp,#0x18
;;;225 #if OS_VERSION >= 204
;;;226 OSInitHookBegin(); /* Call port specific initialization code */
00014c ebfffffe BL OSInitHookBegin
000150 e59fc334 LDR r12,|L1.1164| ;874
000154 e3a03000 MOV r3,#0 ;874
000158 e5cc3002 STRB r3,[r12,#2] ;874 ; OSIntNesting
00015c e5cc3003 STRB r3,[r12,#3] ;875 ; OSLockNesting
000160 e5cc3008 STRB r3,[r12,#8] ;877 ; OSTaskCtr
000164 e5cc3007 STRB r3,[r12,#7] ;879 ; OSRunning
000168 e58c300c STR r3,[r12,#0xc] ;882 ; OSCtxSwCtr
00016c e58c3018 STR r3,[r12,#0x18] ;882 ; OSIdleCtr
000170 e58c3014 STR r3,[r12,#0x14] ;886 ; OSIdleCtrRun
000174 e58c3010 STR r3,[r12,#0x10] ;886 ; OSIdleCtrMax
000178 e5cc3001 STRB r3,[r12,#1] ;887 ; OSStatRdy
00017c e28c1009 ADD r1,r12,#9 ;915
000180 e1a00003 MOV r0,r3 ;916
000184 e5cc3006 STRB r3,[r12,#6] ;914 ; OSRdyGrp
|L1.392|
000188 e2800001 ADD r0,r0,#1 ;916
00018c e20000ff AND r0,r0,#0xff ;916
000190 e3500002 CMP r0,#2 ;916
000194 e4c13001 STRB r3,[r1],#1 ;917
000198 3afffffa BCC |L1.392| ;916
00019c e5cc3004 STRB r3,[r12,#4] ;920 ; OSPrioCur
0001a0 e5cc3005 STRB r3,[r12,#5] ;921 ; OSPrioHighRdy
0001a4 e58c3024 STR r3,[r12,#0x24] ;924 ; OSTCBHighRdy
0001a8 e59f02e0 LDR r0,|L1.1168| ;1072
0001ac e3a01e39 MOV r1,#0x390 ;1072
0001b0 e58c301c STR r3,[r12,#0x1c] ;1072 ; OSTCBCur
0001b4 ebfffffe BL OS_MemClr ;1072
0001b8 e59f02c8 LDR r0,|L1.1160| ;1073
0001bc e3a01040 MOV r1,#0x40 ;1073
0001c0 ebfffffe BL OS_MemClr ;1073
0001c4 e59f02c4 LDR r0,|L1.1168| ;1074
0001c8 e3a01000 MOV r1,#0 ;1076
0001cc e2804000 ADD r4,r0,#0 ;1075
0001d0 e284204c ADD r2,r4,#0x4c ;1075
0001d4 e3a0e03f MOV lr,#0x3f ;1076
|L1.472|
0001d8 e5802014 STR r2,[r0,#0x14] ;1077
0001dc e2811001 ADD r1,r1,#1 ;1076
0001e0 e5c0e03c STRB lr,[r0,#0x3c] ;1079
0001e4 e20110ff AND r1,r1,#0xff ;1076
0001e8 e5c0303d STRB r3,[r0,#0x3d] ;1080
0001ec e351000b CMP r1,#0xb ;1076
0001f0 e280004c ADD r0,r0,#0x4c ;1082
0001f4 e282204c ADD r2,r2,#0x4c ;1083
0001f8 3afffff6 BCC |L1.472| ;1076
0001fc e5803014 STR r3,[r0,#0x14] ;1085
000200 e5c0e03c STRB lr,[r0,#0x3c] ;1087
000204 e5c0303d STRB r3,[r0,#0x3d] ;1088
000208 e5ac4020 STR r4,[r12,#0x20]! ;1091 ; OSTCBList, OSTCBFreeList
00020c e59f0280 LDR r0,|L1.1172| ;950
000210 e58c3008 STR r3,[r12,#8] ;1091
000214 e3a03003 MOV r3,#3 ;950
000218 e3a02000 MOV r2,#0 ;950
00021c e3a01080 MOV r1,#0x80 ;950
000220 e98d000f STMIB sp,{r0-r3} ;950
000224 e59f326c LDR r3,|L1.1176| ;950
000228 e2802f7f ADD r2,r0,#0x1fc ;950
00022c e58d3000 STR r3,[sp,#0] ;950
000230 e3a0300f MOV r3,#0xf ;950
000234 e3a01000 MOV r1,#0 ;950
000238 e24f0d05 ADR r0,|L1.256| ;950
00023c ebfffffe BL OSTaskCreateExt ;950
000240 e28d2014 ADD r2,sp,#0x14 ;985
000244 e28f1e25 ADR r1,|L1.1180| ;985
000248 e3a0000f MOV r0,#0xf ;985
00024c ebfffffe BL OSTaskNameSet ;985
000250 e59f0254 LDR r0,|L1.1196| ;1012
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -