📄 os_probe.lst
字号:
\ 00000000 00B5 PUSH {LR}
273 INT32U cycles;
274
275
276 cycles = OSProbe_TimeGetCycles(); /* This task is done */
\ 00000002 ........ BL OSProbe_TimeGetCycles
277 OSTCBCur->OSTCBCyclesTot += cycles - OSTCBCur->OSTCBCyclesStart;
\ 00000006 0549 LDR.N R1,??OSProbe_TaskSwHook_0 ;; OSTCBCur
\ 00000008 0968 LDR R1,[R1, #+0]
\ 0000000A 8A6B LDR R2,[R1, #+56]
\ 0000000C 1218 ADDS R2,R2,R0
\ 0000000E CB6B LDR R3,[R1, #+60]
\ 00000010 D21A SUBS R2,R2,R3
\ 00000012 8A63 STR R2,[R1, #+56]
278 OSTCBHighRdy->OSTCBCyclesStart = cycles; /* Save absolute #cycles at task activation */
\ 00000014 0249 LDR.N R1,??OSProbe_TaskSwHook_0+0x4 ;; OSTCBHighRdy
\ 00000016 0968 LDR R1,[R1, #+0]
\ 00000018 C863 STR R0,[R1, #+60]
279 }
\ 0000001A 00BD POP {PC} ;; return
\ ??OSProbe_TaskSwHook_0:
\ 0000001C ........ DC32 OSTCBCur
\ 00000020 ........ DC32 OSTCBHighRdy
280 #endif
281
282
283 /*
284 *********************************************************************************************************
285 * uC/Probe Plug-in for uC/OS-II TICK HOOK
286 *
287 * Description: This function is currently unused.
288 *
289 * Returns : None
290 *********************************************************************************************************
291 */
292
293 #if OS_PROBE_HOOKS_EN > 0
\ In segment CODE, align 4, keep-with-next
294 void OSProbe_TickHook (void)
295 {
\ OSProbe_TickHook:
\ 00000000 00B5 PUSH {LR}
296 (void)OSProbe_TimeGetCycles();
\ 00000002 ........ BL OSProbe_TimeGetCycles
297 }
\ 00000006 00BD POP {PC} ;; return
298 #endif
299
300
301 /*
302 *********************************************************************************************************
303 * Get time [cycles]
304 *
305 * Description: This routine is required for task execution time measurement. This function needs to
306 * return time as accurately as possible and in a 32-bit variable.
307 *
308 * Returns : A 32-bit representation of time.
309 *********************************************************************************************************
310 */
311
312 #if OS_PROBE_HOOKS_EN > 0
\ In segment CODE, align 4, keep-with-next
313 INT32U OSProbe_TimeGetCycles(void)
314 {
\ OSProbe_TimeGetCycles:
\ 00000000 30B5 PUSH {R4,R5,LR}
315 INT32U cycles;
316 #if OS_PROBE_TMR_32_BITS > 0
317 INT32U cnts32;
318 INT32U cnts32_delta;
319 #else
320 INT16U cnts16;
321 INT16U cnts16_delta;
322 #endif
323 #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
324 OS_CPU_SR cpu_sr = 0;
325 #endif
326
327
328 OS_ENTER_CRITICAL();
\ 00000002 ........ _BLF OS_CPU_SR_Save,??OS_CPU_SR_Save??rT
\ 00000006 0400 MOVS R4,R0
329 #if OS_PROBE_TMR_32_BITS > 0
330 cnts32 = OSProbe_TmrRd(); /* Read current counts of the free running counter */
331 cnts32_delta = cnts32 - OSProbe_TmrCntsPrev;
332 OSProbe_TmrCntsPrev = cnts32; /* Save current counts for next time */
333 OSProbe_CyclesCtr += cnts32_delta;
334 #else
335 cnts16 = (INT16U)OSProbe_TmrRd(); /* Read current counts of the free running counter */
\ 00000008 ........ _BLF OSProbe_TmrRd,??OSProbe_TmrRd??rT
\ 0000000C 80B2 UXTH R0,R0
336 cnts16_delta = cnts16 - OSProbe_TmrCntsPrev;
\ 0000000E .... LDR.N R1,??DataTable2 ;; OSProbe_TmrCntsPrev
\ 00000010 0200 MOVS R2,R0
\ 00000012 0B88 LDRH R3,[R1, #+0]
\ 00000014 D21A SUBS R2,R2,R3
\ 00000016 92B2 UXTH R2,R2
337 OSProbe_TmrCntsPrev = cnts16; /* Save current counts for next time */
\ 00000018 0880 STRH R0,[R1, #+0]
338 OSProbe_CyclesCtr += (INT32U)cnts16_delta;
\ 0000001A 4868 LDR R0,[R1, #+4]
\ 0000001C 8518 ADDS R5,R0,R2
\ 0000001E 4D60 STR R5,[R1, #+4]
339 #endif
340 cycles = OSProbe_CyclesCtr;
341 OS_EXIT_CRITICAL();
\ 00000020 2000 MOVS R0,R4
\ 00000022 ........ _BLF OS_CPU_SR_Restore,??OS_CPU_SR_Restore??rT
342
343 return (cycles);
\ 00000026 2800 MOVS R0,R5
\ 00000028 30BD POP {R4,R5,PC} ;; return
344 }
345 #endif
346
347
348 /*
349 *********************************************************************************************************
350 *********************************************************************************************************
351 ** LOCAL FUNCTION
352 *********************************************************************************************************
353 *********************************************************************************************************
354 */
355
356 /*
357 *********************************************************************************************************
358 * uC/OS-II Task
359 *
360 * Description: This function updates OSProbe_TaskStkUsage[] and OSProbe_TaskCPUUsage[] and calls
361 * a user-specified callback functions (OSProbe_CallbackFnct()), if the user sets this
362 * function.
363 *
364 * Argument(s): p_arg is the argument passed to OSProbe_Task() by 'OSTaskCreate()'.
365 *
366 * Returns : None
367 *********************************************************************************************************
368 */
369
370 #if OS_PROBE_TASK > 0
\ In segment CODE, align 4, keep-with-next
371 static void OSProbe_Task (void *p_arg)
372 {
\ OSProbe_Task:
\ 00000000 2DE9F04F PUSH {R4-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++) {
\ 00000004 0020 MOVS R0,#+0
\ 00000006 8046 MOV R8,R0
\ 00000008 4546 MOV R5,R8
\ 0000000A 3949 LDR.N R1,??OSProbe_Task_0 ;; ??cycles_tot_last
\ 0000000C 394C LDR.N R4,??OSProbe_Task_0+0x4 ;; OSProbe_TaskStkUsage
\ 0000000E 09E0 B.N ??OSProbe_Task_1
385 cycles_tot_last[i] = 0;
\ ??OSProbe_Task_2:
\ 00000010 41F82080 STR R8,[R1, R0, LSL #+2]
386 OSProbe_TaskStkUsage[i] = 0;
\ 00000014 44F82090 STR R9,[R4, R0, LSL #+2]
387 OSProbe_TaskCPUUsage[i] = 0;
\ 00000018 1AEB8000 ADDS R0,R10,R0, LSL #+2
\ 0000001C C0F80890 STR R9,[R0, #+8]
388 }
\ 00000020 6D1C ADDS R5,R5,#+1
\ 00000022 ADB2 UXTH R5,R5
\ ??OSProbe_Task_1:
\ 00000024 4046 MOV R0,R8
\ 00000026 8146 MOV R9,R0
\ 00000028 .... LDR.N R0,??DataTable3 ;; OSProbe_Delay
\ 0000002A 8246 MOV R10,R0
\ 0000002C 2800 MOVS R0,R5
\ 0000002E 1028 CMP R0,#+16
\ 00000030 EED3 BCC.N ??OSProbe_Task_2
389
390 while (1) {
391 OSTimeDlyHMSM(0, 0, 0, OSProbe_Delay);
\ ??OSProbe_Task_3:
\ 00000032 BAF80030 LDRH R3,[R10, #+0]
\ 00000036 4246 MOV R2,R8
\ 00000038 1146 MOV R1,R2
\ 0000003A 0846 MOV R0,R1
\ 0000003C ........ _BLF OSTimeDlyHMSM,??OSTimeDlyHMSM??rT
392 if ((INT32U)OSProbe_CallbackFnct != 0) {
\ 00000040 DAF80400 LDR R0,[R10, #+4]
\ 00000044 0028 CMP R0,#+0
\ 00000046 00D0 BEQ.N ??OSProbe_Task_4
393 OSProbe_CallbackFnct();
\ 00000048 8047 BLX R0
394 }
395
396 /* Update task CPU usage */
397 i = 0;
\ ??OSProbe_Task_4:
\ 0000004A 4546 MOV R5,R8
398 cycles_tot = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -