os_probe.txt
来自「针对STM32F103的UCOS移植」· 文本 代码 · 共 439 行 · 第 1/2 页
TXT
439 行
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 942] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o.\rvmdk\os_probe.o --depend=.\rvmdk\os_probe.d --device=DARMSTM --apcs=interwork -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 -IC:\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 e92d4ff8 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 f8dfa184 LDR r10,|L1.396|
00000a f04f0b00 MOV r11,#0
00000e f10a0780 ADD r7,r10,#0x80
000012 f1a70140 SUB r1,r7,#0x40
|L1.22|
;;;385 cycles_tot_last[i] = 0;
000016 f84ab020 STR r11,[r10,r0,LSL #2]
;;;386 OSProbe_TaskStkUsage[i] = 0;
00001a f847b020 STR r11,[r7,r0,LSL #2]
;;;387 OSProbe_TaskCPUUsage[i] = 0;
00001e f841b020 STR r11,[r1,r0,LSL #2]
000022 1c40 ADDS r0,r0,#1 ;384
000024 b280 UXTH r0,r0 ;384
000026 2810 CMP r0,#0x10 ;384
000028 d3f5 BCC |L1.22|
;;;388 }
;;;389
;;;390 while (1) {
00002a f8df8164 LDR r8,|L1.400|
00002e f04f0964 MOV r9,#0x64
000032 e045 B |L1.192|
|L1.52|
;;;391 OSTimeDlyHMSM(0, 0, 0, OSProbe_Delay);
;;;392 if ((INT32U)OSProbe_CallbackFnct != 0) {
;;;393 OSProbe_CallbackFnct();
000034 4780 BLX r0
|L1.54|
;;;394 }
;;;395
;;;396 /* Update task CPU usage */
;;;397 i = 0;
000036 2500 MOVS r5,#0
;;;398 cycles_tot = 0;
000038 2600 MOVS r6,#0
;;;399 ptcb = &OSTCBTbl[0]; /* ... Get pointer to first TCB ... */
00003a 4c56 LDR r4,|L1.404|
|L1.60|
;;;400 while (i < OS_MAX_TASKS) {
;;;401 if (ptcb == (OS_TCB *)0 || ptcb == (OS_TCB *)1) {
00003c 2c00 CMP r4,#0
00003e d02a BEQ |L1.150|
000040 2c01 CMP r4,#1
000042 d028 BEQ |L1.150|
;;;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);
000044 f85a1025 LDR r1,[r10,r5,LSL #2]
000048 6ba0 LDR r0,[r4,#0x38]
00004a 1a40 SUBS r0,r0,r1
00004c f8581025 LDR r1,[r8,r5,LSL #2]
000050 0840 LSRS r0,r0,#1
000052 eb000051 ADD r0,r0,r1,LSR #1
000056 f8480025 STR r0,[r8,r5,LSL #2]
;;;411 cycles_tot_last[i] = ptcb->OSTCBCyclesTot;
00005a 6ba1 LDR r1,[r4,#0x38]
00005c f84a1025 STR r1,[r10,r5,LSL #2]
;;;412 cycles_tot += cycles_dif[i];
000060 4406 ADD r6,r6,r0
;;;413
;;;414 if (ptcb->OSTCBStkSize == 0) {
000062 68e0 LDR r0,[r4,#0xc]
000064 b910 CBNZ r0,|L1.108|
;;;415 OSProbe_TaskStkUsage[i] = 0;
000066 f847b025 STR r11,[r7,r5,LSL #2]
00006a e00f B |L1.140|
|L1.108|
;;;416 } else {
;;;417 #if OS_STK_GROWTH == 1
;;;418 OSProbe_TaskStkUsage[i] = (FP32)(((INT32U)(ptcb->OSTCBStkBase) - (INT32U)(ptcb->OSTCBStkPtr)) * 100)
00006c 0080 LSLS r0,r0,#2
00006e f7fffffe BL __aeabi_ui2f
000072 9000 STR r0,[sp,#0]
000074 6821 LDR r1,[r4,#0]
000076 6c20 LDR r0,[r4,#0x40]
000078 1a40 SUBS r0,r0,r1
00007a fb00f009 MUL r0,r0,r9
00007e f7fffffe BL __aeabi_ui2f
000082 9900 LDR r1,[sp,#0]
000084 f7fffffe BL __aeabi_fdiv
000088 f8470025 STR r0,[r7,r5,LSL #2]
|L1.140|
;;;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;
00008c 69a4 LDR r4,[r4,#0x18]
;;;427
;;;428 i++;
00008e 1c68 ADDS r0,r5,#1
000090 b285 UXTH r5,r0
000092 2d10 CMP r5,#0x10 ;400
000094 d3d2 BCC |L1.60|
|L1.150|
;;;429 }
;;;430 /* ... For each task, calculate percent CPU usage. */
;;;431 for (i = 0; i < OS_MAX_TASKS; i++) {
000096 2400 MOVS r4,#0
000098 4d3f LDR r5,|L1.408|
00009a 4630 MOV r0,r6
00009c f7fffffe BL __aeabi_ui2f
0000a0 4606 MOV r6,r0
|L1.162|
;;;432 OSProbe_TaskCPUUsage[i] = (FP32)(cycles_dif[i] * 100) / cycles_tot;
0000a2 f8580024 LDR r0,[r8,r4,LSL #2]
0000a6 fb00f009 MUL r0,r0,r9
0000aa f7fffffe BL __aeabi_ui2f
0000ae 4631 MOV r1,r6
0000b0 f7fffffe BL __aeabi_fdiv
0000b4 f8450024 STR r0,[r5,r4,LSL #2]
0000b8 1c60 ADDS r0,r4,#1 ;431
0000ba b284 UXTH r4,r0 ;431
0000bc 2c10 CMP r4,#0x10 ;431
0000be d3f0 BCC |L1.162|
|L1.192|
0000c0 4c36 LDR r4,|L1.412|
0000c2 2200 MOVS r2,#0 ;391
0000c4 8823 LDRH r3,[r4,#0] ;391 ; OSProbe_Delay
0000c6 4611 MOV r1,r2 ;391
0000c8 4610 MOV r0,r2 ;391
0000ca f7fffffe BL OSTimeDlyHMSM
0000ce 6860 LDR r0,[r4,#4] ;392 ; OSProbe_CallbackFnct
0000d0 2800 CMP r0,#0 ;392
0000d2 d0b0 BEQ |L1.54|
0000d4 e7ae B |L1.52|
;;;433 }
;;;434 }
;;;435 }
;;;436 #endif
ENDP
OSProbe_InitOS PROC
;;;143 static void OSProbe_InitOS (void)
;;;144 {
0000d6 b500 PUSH {lr}
0000d8 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,
0000da 2303 MOVS r3,#3
0000dc 2200 MOVS r2,#0
0000de e9cd2303 STRD r2,r3,[sp,#0xc]
0000e2 f44f7180 MOV r1,#0x100
0000e6 482e LDR r0,|L1.416|
0000e8 9102 STR r1,[sp,#8]
0000ea 2308 MOVS r3,#8
0000ec 9001 STR r0,[sp,#4]
0000ee f500727f ADD r2,r0,#0x3fc
0000f2 2100 MOVS r1,#0
0000f4 f2af00f7 ADR r0,OSProbe_Task + 1
0000f8 9300 STR r3,[sp,#0]
0000fa f7fffffe 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
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?