📄 os_probe.lst
字号:
\ 0000004C C346 MOV R11,R8
399 ptcb = &OSTCBTbl[0]; /* ... Get pointer to first TCB ... */
\ 0000004E 2A4E LDR.N R6,??OSProbe_Task_0+0x8 ;; OSTCBTbl
\ 00000050 15E0 B.N ??OSProbe_Task_5
400 while (i < OS_MAX_TASKS) {
401 if (ptcb == (OS_TCB *)0 || ptcb == (OS_TCB *)1) {
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);
411 cycles_tot_last[i] = ptcb->OSTCBCyclesTot;
412 cycles_tot += cycles_dif[i];
413
414 if (ptcb->OSTCBStkSize == 0) {
415 OSProbe_TaskStkUsage[i] = 0;
416 } else {
417 #if OS_STK_GROWTH == 1
418 OSProbe_TaskStkUsage[i] = (FP32)(((INT32U)(ptcb->OSTCBStkBase) - (INT32U)(ptcb->OSTCBStkPtr)) * 100)
419 / ((ptcb->OSTCBStkSize) * sizeof (OS_STK));
\ ??OSProbe_Task_6:
\ 00000052 02B4 PUSH {R1}
\ 00000054 306C LDR R0,[R6, #+64]
\ 00000056 3168 LDR R1,[R6, #+0]
\ 00000058 401A SUBS R0,R0,R1
\ 0000005A 6421 MOVS R1,#+100
\ 0000005C 4843 MULS R0,R1,R0
\ 0000005E ........ _BLF __ulongToFloat,??__ulongToFloat??rT
\ 00000062 0700 MOVS R7,R0
\ 00000064 F068 LDR R0,[R6, #+12]
\ 00000066 8000 LSLS R0,R0,#+2
\ 00000068 ........ _BLF __ulongToFloat,??__ulongToFloat??rT
\ 0000006C 0100 MOVS R1,R0
\ 0000006E 3800 MOVS R0,R7
\ 00000070 ........ _BLF __fDiv,??__fDiv??rT
\ 00000074 02BC POP {R1}
\ 00000076 0860 STR R0,[R1, #+0]
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;
\ ??OSProbe_Task_7:
\ 00000078 B669 LDR R6,[R6, #+24]
427
428 i++;
\ 0000007A 6D1C ADDS R5,R5,#+1
\ 0000007C ADB2 UXTH R5,R5
\ ??OSProbe_Task_5:
\ 0000007E 2800 MOVS R0,R5
\ 00000080 1028 CMP R0,#+16
\ 00000082 1CD2 BCS.N ??OSProbe_Task_8
\ 00000084 002E CMP R6,#+0
\ 00000086 1AD0 BEQ.N ??OSProbe_Task_8
\ 00000088 012E CMP R6,#+1
\ 0000008A 18D0 BEQ.N ??OSProbe_Task_8
\ 0000008C 14EB8001 ADDS R1,R4,R0, LSL #+2
\ 00000090 174A LDR.N R2,??OSProbe_Task_0 ;; ??cycles_tot_last
\ 00000092 12EB8002 ADDS R2,R2,R0, LSL #+2
\ 00000096 B36B LDR R3,[R6, #+56]
\ 00000098 1768 LDR R7,[R2, #+0]
\ 0000009A DB1B SUBS R3,R3,R7
\ 0000009C 0F6C LDR R7,[R1, #+64]
\ 0000009E 7F08 LSRS R7,R7,#+1
\ 000000A0 17EB5303 ADDS R3,R7,R3, LSR #+1
\ 000000A4 0B64 STR R3,[R1, #+64]
\ 000000A6 B16B LDR R1,[R6, #+56]
\ 000000A8 1160 STR R1,[R2, #+0]
\ 000000AA 13EB0B0B ADDS R11,R3,R11
\ 000000AE 14EB8001 ADDS R1,R4,R0, LSL #+2
\ 000000B2 F068 LDR R0,[R6, #+12]
\ 000000B4 0028 CMP R0,#+0
\ 000000B6 CCD1 BNE.N ??OSProbe_Task_6
\ 000000B8 C1F80090 STR R9,[R1, #+0]
\ 000000BC DCE7 B.N ??OSProbe_Task_7
429 }
430 /* ... For each task, calculate percent CPU usage. */
431 for (i = 0; i < OS_MAX_TASKS; i++) {
\ ??OSProbe_Task_8:
\ 000000BE 4546 MOV R5,R8
\ ??OSProbe_Task_9:
\ 000000C0 2800 MOVS R0,R5
\ 000000C2 1028 CMP R0,#+16
\ 000000C4 B5D2 BCS.N ??OSProbe_Task_3
432 OSProbe_TaskCPUUsage[i] = (FP32)(cycles_dif[i] * 100) / cycles_tot;
\ 000000C6 1AEB8006 ADDS R6,R10,R0, LSL #+2
\ 000000CA 14EB8000 ADDS R0,R4,R0, LSL #+2
\ 000000CE 006C LDR R0,[R0, #+64]
\ 000000D0 6421 MOVS R1,#+100
\ 000000D2 4843 MULS R0,R1,R0
\ 000000D4 ........ _BLF __ulongToFloat,??__ulongToFloat??rT
\ 000000D8 0700 MOVS R7,R0
\ 000000DA 5846 MOV R0,R11
\ 000000DC ........ _BLF __ulongToFloat,??__ulongToFloat??rT
\ 000000E0 0100 MOVS R1,R0
\ 000000E2 3800 MOVS R0,R7
\ 000000E4 ........ _BLF __fDiv,??__fDiv??rT
\ 000000E8 B060 STR R0,[R6, #+8]
433 }
\ 000000EA 6D1C ADDS R5,R5,#+1
\ 000000EC ADB2 UXTH R5,R5
\ 000000EE E7E7 B.N ??OSProbe_Task_9
\ ??OSProbe_Task_0:
\ 000000F0 ........ DC32 ??cycles_tot_last
\ 000000F4 ........ DC32 OSProbe_TaskStkUsage
\ 000000F8 ........ DC32 OSTCBTbl
434 }
435 }
\ In segment DATA_Z, align 4, align-sorted
\ FP32 __data OSProbe_TaskStkUsage[16]
\ OSProbe_TaskStkUsage:
\ 00000000 DS8 64
\ 00000040 DS8 64
\ In segment DATA_Z, align 4, align-sorted
\ INT16U __data OSProbe_TmrCntsPrev
\ OSProbe_TmrCntsPrev:
\ 00000000 DS8 2
\ 00000002 DS8 2
\ INT32U __data OSProbe_CyclesCtr
\ OSProbe_CyclesCtr:
\ 00000004 DS8 4
\ In segment DATA_Z, align 4, align-sorted
\ OSProbe_TaskStk:
\ 00000000 DS8 1024
\ In segment DATA_Z, align 4, align-sorted
\ ??cycles_tot_last:
\ 00000000 DS8 64
\ In segment CODE, align 4, keep-with-next
\ ??DataTable2:
\ 00000000 ........ DC32 OSProbe_TmrCntsPrev
\ In segment CODE, align 4, keep-with-next
\ ??DataTable3:
\ 00000000 ........ DC32 OSProbe_Delay
\ In segment DATA_C, align 4, align-sorted
\ `?<Constant "uC/Probe OS">`:
\ 00000000 75432F50726F DC8 "uC/Probe OS"
\ 6265204F5300
436 #endif
Maximum stack usage in bytes:
Function CSTACK
-------- ------
OSProbe_Init 4
OSProbe_InitOS 28
OSProbe_SetCallback 0
OSProbe_SetDelay 0
OSProbe_Task 40
OSProbe_TaskCreateHook 8
OSProbe_TaskSwHook 4
OSProbe_TickHook 4
OSProbe_TimeGetCycles 12
Segment part sizes:
Function/Label Bytes
-------------- -----
OSProbe_Delay 72
OSProbe_Init 32
OSProbe_InitOS 60
OSProbe_SetCallback 12
OSProbe_SetDelay 6
OSProbe_TaskCreateHook 16
OSProbe_TaskSwHook 36
OSProbe_TickHook 8
OSProbe_TimeGetCycles 42
OSProbe_Task 252
OSProbe_TaskStkUsage 128
OSProbe_TmrCntsPrev 8
OSProbe_TaskStk 1024
cycles_tot_last 64
??DataTable2 4
??DataTable3 4
?<Constant "uC/Probe OS"> 12
Others 100
560 bytes in segment CODE
12 bytes in segment DATA_C
1 296 bytes in segment DATA_Z
12 bytes in segment INITTAB
472 bytes of CODE memory (+ 100 bytes shared)
12 bytes of CONST memory
1 296 bytes of DATA memory
Errors: none
Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -