?? os_probe.txt
字號:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 914] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o.\rvmdk\os_probe.o --depend=.\rvmdk\os_probe.d --device=DARMSTM -O1 -Otime -I. -I..\BSP -I..\..\..\..\..\uCOS-II\Ports\arm-cortex-m3\Generic\RealView -I..\..\..\..\..\uCOS-II\Source -I..\..\..\..\..\CPU\ST\STM32\inc -I..\..\..\..\..\uC-CPU -I..\..\..\..\..\uC-CPU\Arm-Cortex-M3\RealView -I..\..\..\..\..\uC-LIB -I..\..\..\..\..\uC-Probe\Target\Plugins\uCOS-II -I..\..\..\..\..\uC-Probe\Target\Communication\Generic\Source -I..\..\..\..\..\uC-Probe\Target\Communication\Generic\RS-232\Ports\ST\STM32 -I..\..\..\..\..\uC-Probe\Target\Communication\Generic\RS-232\Source -ID:\Keil\ARM\INC\ST\STM32F10x ..\..\..\..\..\uC-Probe\Target\Plugins\uCOS-II\os_probe.c]
THUMB
AREA ||.text||, CODE, READONLY, ALIGN=2
OSProbe_Task PROC
;;;371 static void OSProbe_Task (void *p_arg)
;;;372 {
000000 e92de92d PUSH {r3-r11,lr}
;;;373 OS_TCB *ptcb;
;;;374 INT16U i;
;;;375 INT32U cycles_tot;
;;;376 static INT32U cycles_dif[OS_MAX_TASKS];
;;;377 static INT32U cycles_tot_last[OS_MAX_TASKS];
;;;378
;;;379
;;;380
;;;381 (void)p_arg;
;;;382
;;;383 /* Initialize stored CyclesTot values */
;;;384 for (i = 0; i < OS_MAX_TASKS; i++) {
000004 2000 MOVS r0,#0
000006 4f62 LDR r7,|L1.400|
000008 f8dff8df LDR r10,|L1.396|
00000c f04ff04f MOV r11,#0
000010 f1a7f1a7 SUB r1,r7,#0x40
|L1.20|
000014 f84af84a STR r11,[r10,r0,LSL #2]
000018 f847f847 STR r11,[r7,r0,LSL #2]
00001c f841f841 STR r11,[r1,r0,LSL #2]
000020 1c40 ADDS r0,r0,#1
000022 b280 UXTH r0,r0
000024 2810 CMP r0,#0x10
000026 d3f5 BCC |L1.20|
;;;385 cycles_tot_last[i] = 0;
;;;386 OSProbe_TaskStkUsage[i] = 0;
;;;387 OSProbe_TaskCPUUsage[i] = 0;
;;;388 }
;;;389
;;;390 while (1) {
000028 f8dff8df LDR r8,|L1.404|
00002c f04ff04f MOV r9,#0x64
000030 e045 B |L1.190|
|L1.50|
;;;391 OSTimeDlyHMSM(0, 0, 0, OSProbe_Delay);
;;;392 if ((INT32U)OSProbe_CallbackFnct != 0) {
;;;393 OSProbe_CallbackFnct();
000032 4780 BLX r0
|L1.52|
;;;394 }
;;;395
;;;396 /* Update task CPU usage */
;;;397 i = 0;
000034 2500 MOVS r5,#0
;;;398 cycles_tot = 0;
000036 2600 MOVS r6,#0
;;;399 ptcb = &OSTCBTbl[0]; /* ... Get pointer to first TCB ... */
000038 4c57 LDR r4,|L1.408|
|L1.58|
;;;400 while (i < OS_MAX_TASKS) {
;;;401 if (ptcb == (OS_TCB *)0 || ptcb == (OS_TCB *)1) {
00003a 2c00 CMP r4,#0
00003c d02a BEQ |L1.148|
00003e 2c01 CMP r4,#1
000040 d028 BEQ |L1.148|
;;;402 break; /* ... If ptcb is NULL, then last TCB reached ... */
;;;403 }
;;;404
;;;405 /* ... Calculate new CyclesDif, the number of cycles */
;;;406 /* ... used by the task since the last reading. Half */
;;;407 /* ... the previous value is added to provide some */
;;;408 /* ... hysteresis, thereby reducing the natural */
;;;409 /* ... "jitter" in the data. */
;;;410 cycles_dif[i] = (ptcb->OSTCBCyclesTot - cycles_tot_last[i]) / 2 + (cycles_dif[i] / 2);
000042 f85af85a LDR r1,[r10,r5,LSL #2]
000046 6ba0 LDR r0,[r4,#0x38]
000048 1a40 SUBS r0,r0,r1
00004a f858f858 LDR r1,[r8,r5,LSL #2]
00004e 0840 LSRS r0,r0,#1
000050 eb00eb00 ADD r0,r0,r1,LSR #1
000054 f848f848 STR r0,[r8,r5,LSL #2]
;;;411 cycles_tot_last[i] = ptcb->OSTCBCyclesTot;
000058 6ba1 LDR r1,[r4,#0x38]
00005a f84af84a STR r1,[r10,r5,LSL #2]
;;;412 cycles_tot += cycles_dif[i];
00005e 4406 ADD r6,r6,r0
;;;413
;;;414 if (ptcb->OSTCBStkSize == 0) {
000060 68e0 LDR r0,[r4,#0xc]
000062 b910 CBNZ r0,|L1.106|
;;;415 OSProbe_TaskStkUsage[i] = 0;
000064 f847f847 STR r11,[r7,r5,LSL #2]
000068 e00f B |L1.138|
|L1.106|
;;;416 } else {
;;;417 #if OS_STK_GROWTH == 1
;;;418 OSProbe_TaskStkUsage[i] = (FP32)(((INT32U)(ptcb->OSTCBStkBase) - (INT32U)(ptcb->OSTCBStkPtr)) * 100)
00006a 0080 LSLS r0,r0,#2
00006c f7fff7ff BL __aeabi_ui2f
000070 9000 STR r0,[sp,#0]
000072 6821 LDR r1,[r4,#0]
000074 6c20 LDR r0,[r4,#0x40]
000076 1a40 SUBS r0,r0,r1
000078 fb00fb00 MUL r0,r0,r9
00007c f7fff7ff BL __aeabi_ui2f
000080 9900 LDR r1,[sp,#0]
000082 f7fff7ff BL __aeabi_fdiv
000086 f847f847 STR r0,[r7,r5,LSL #2]
|L1.138|
;;;419 / ((ptcb->OSTCBStkSize) * sizeof (OS_STK));
;;;420 #else
;;;421 OSProbe_TaskStkUsage[i] = (FP32)(((INT32U)(ptcb->OSTCBStkPtr) - (INT32U)(ptcb->OSTCBStkBase)) * 100)
;;;422 / ((ptcb->OSTCBStkSize) * sizeof (OS_STK));
;;;423 #endif
;;;424 }
;;;425
;;;426 ptcb = ptcb->OSTCBPrev;
00008a 69a4 LDR r4,[r4,#0x18]
00008c 1c68 ADDS r0,r5,#1
;;;427
;;;428 i++;
00008e b285 UXTH r5,r0
000090 2d10 CMP r5,#0x10
000092 d3d2 BCC |L1.58|
|L1.148|
000094 2400 MOVS r4,#0
000096 4d41 LDR r5,|L1.412|
000098 4630 MOV r0,r6
00009a f7fff7ff BL __aeabi_ui2f
;;;429 }
;;;430 /* ... For each task, calculate percent CPU usage. */
;;;431 for (i = 0; i < OS_MAX_TASKS; i++) {
00009e 4606 MOV r6,r0
|L1.160|
0000a0 f858f858 LDR r0,[r8,r4,LSL #2]
0000a4 fb00fb00 MUL r0,r0,r9
0000a8 f7fff7ff BL __aeabi_ui2f
0000ac 4631 MOV r1,r6
0000ae f7fff7ff BL __aeabi_fdiv
0000b2 f845f845 STR r0,[r5,r4,LSL #2]
0000b6 1c60 ADDS r0,r4,#1
0000b8 b284 UXTH r4,r0
0000ba 2c10 CMP r4,#0x10
0000bc d3f0 BCC |L1.160|
|L1.190|
0000be 4c38 LDR r4,|L1.416|
0000c0 2200 MOVS r2,#0
0000c2 8823 LDRH r3,[r4,#0] ; OSProbe_Delay
0000c4 4611 MOV r1,r2
0000c6 4610 MOV r0,r2
0000c8 f7fff7ff BL OSTimeDlyHMSM
0000cc 6860 LDR r0,[r4,#4] ; OSProbe_CallbackFnct
0000ce 2800 CMP r0,#0
0000d0 d0b0 BEQ |L1.52|
0000d2 e7ae B |L1.50|
;;;432 OSProbe_TaskCPUUsage[i] = (FP32)(cycles_dif[i] * 100) / cycles_tot;
;;;433 }
;;;434 }
;;;435 }
;;;436 #endif
ENDP
OSProbe_InitOS PROC
;;;143 static void OSProbe_InitOS (void)
;;;144 {
0000d4 b500 PUSH {lr}
0000d6 b087 SUB sp,sp,#0x1c
;;;145 #if OS_TASK_NAME_SIZE > 12
;;;146 INT8U err;
;;;147 #endif
;;;148
;;;149
;;;150 #if OS_TASK_CREATE_EXT_EN > 0
;;;151 #if OS_STK_GROWTH == 1
;;;152 (void)OSTaskCreateExt(OSProbe_Task,
0000d8 2303 MOVS r3,#3
0000da 2200 MOVS r2,#0
0000dc e9cde9cd STRD r2,r3,[sp,#0xc]
0000e0 f44ff44f MOV r1,#0x100
0000e4 482f LDR r0,|L1.420|
0000e6 9102 STR r1,[sp,#8]
0000e8 2308 MOVS r3,#8
0000ea 9001 STR r0,[sp,#4]
0000ec f500f500 ADD r2,r0,#0x3fc
0000f0 2100 MOVS r1,#0
0000f2 f2aff2af ADR r0,OSProbe_Task + 1
0000f6 9300 STR r3,[sp,#0]
0000f8 f7fff7ff BL OSTaskCreateExt
;;;153 (void *)0, /* No arguments passed to OSProbe_Task() */
;;;154 &OSProbe_TaskStk[OS_PROBE_TASK_STK_SIZE - 1], /* Set Top-Of-Stack */
;;;155 OS_PROBE_TASK_PRIO, /* Lowest priority level */
;;;156 OS_PROBE_TASK_ID,
;;;157 &OSProbe_TaskStk[0], /* Set Bottom-Of-Stack */
;;;158 OS_PROBE_TASK_STK_SIZE,
;;;159 (void *)0, /* No TCB extension */
;;;160 OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR); /* Enable stack checking + clear stack */
;;;161 #else
;;;162 (void)OSTaskCreateExt(OSProbe_Task,
;;;163 (void *)0, /* No arguments passed to OSProbe_Task() */
;;;164 &OSProbe_TaskStk[0], /* Set Top-Of-Stack */
;;;165 OS_PROBE_TASK_PRIO, /* Lowest priority level */
;;;166 OS_PROBE_TASK_ID,
;;;167 &OSProbe_TaskStk[OS_PROBE_TASK_STK_SIZE - 1], /* Set Bottom-Of-Stack */
;;;168 OS_PROBE_TASK_STK_SIZE,
;;;169 (void *)0, /* No TCB extension */
;;;170 OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR); /* Enable stack checking + clear stack */
;;;171 #endif
;;;172 #else
;;;173 #if OS_STK_GROWTH == 1
;;;174 (void)OSTaskCreate(OSProbe_Task,
;;;175 (void *)0,
;;;176 &OSProbe_TaskStk[OS_PROBE_TASK_STK_SIZE - 1],
;;;177 OS_PROBE_TASK_PRIO);
;;;178 #else
;;;179 (void)OSTaskCreate(OSProbe_Task,
;;;180 (void *)0,
;;;181 &OSProbe_TaskStk[0],
;;;182 OS_PROBE_TASK_PRIO);
;;;183 #endif
;;;184 #endif
;;;185
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -