📄 os_probe.lst
字号:
\ 00000000 00B5 PUSH {LR}
306 INT32U cycles;
307
308
309 cycles = OSProbe_TimeGetCycles(); /* This task is done. */
\ 00000002 ........ BL OSProbe_TimeGetCycles
310 OSTCBCur->OSTCBCyclesTot += cycles - OSTCBCur->OSTCBCyclesStart;
\ 00000006 0549 LDR.N R1,??OSProbe_TaskSwHook_0 ;; OSTCBCur
\ 00000008 0968 LDR R1,[R1, #+0]
\ 0000000A CA6B LDR R2,[R1, #+60]
\ 0000000C 1218 ADDS R2,R2,R0
\ 0000000E 0B6C LDR R3,[R1, #+64]
\ 00000010 D21A SUBS R2,R2,R3
\ 00000012 CA63 STR R2,[R1, #+60]
311 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 0864 STR R0,[R1, #+64]
312 }
\ 0000001A 00BD POP {PC} ;; return
\ ??OSProbe_TaskSwHook_0:
\ 0000001C ........ DC32 OSTCBCur
\ 00000020 ........ DC32 OSTCBHighRdy
313 #endif
314
315
316 /*
317 *********************************************************************************************************
318 * OSProbe_TickHook()
319 *
320 * Description : This function is called every tick.
321 *
322 * Argument(s) : none.
323 *
324 * Return(s) : none.
325 *
326 * Caller(s) : App_TimeTickHook().
327 *
328 * Note(s) : (1) Interrupts may or may not be ENABLED during this call.
329 *
330 * (2) This MUST be called from user's time tick hook function App_TimeTickHook().
331 *********************************************************************************************************
332 */
333
334 #if (OS_PROBE_HOOKS_EN > 0)
\ In segment CODE, align 4, keep-with-next
335 void OSProbe_TickHook (void)
336 {
\ OSProbe_TickHook:
\ 00000000 00B5 PUSH {LR}
337 (void)OSProbe_TimeGetCycles();
\ 00000002 ........ BL OSProbe_TimeGetCycles
338 }
\ 00000006 00BD POP {PC} ;; return
339 #endif
340
341
342 /*
343 *********************************************************************************************************
344 *********************************************************************************************************
345 * LOCAL FUNCTIONS
346 *********************************************************************************************************
347 *********************************************************************************************************
348 */
349
350
351 /*
352 *********************************************************************************************************
353 * OSProbe_InitOS()
354 *
355 * Description : Create the task for the Probe Plug-In for uC/OS-II.
356 *
357 * Argument(s) : none.
358 *
359 * Return(s) : none.
360 *
361 * Caller(s) : OSProbe_Init().
362 *
363 * Note(s) : none.
364 *********************************************************************************************************
365 */
366
367 #if (OS_PROBE_TASK > 0)
\ In segment CODE, align 4, keep-with-next
368 static void OSProbe_InitOS (void)
369 {
\ OSProbe_InitOS:
\ 00000000 01B5 PUSH {R0,LR}
370 INT8U err;
371
372
373 #if (OS_TASK_CREATE_EXT_EN > 0)
374 #if (OS_STK_GROWTH == 1)
375 err = OSTaskCreateExt((void (*)(void *)) OSProbe_Task,
376 (void * ) 0,
377 (OS_STK * )&OSProbe_TaskStk[OS_PROBE_TASK_STK_SIZE - 1],
378 (INT8U ) OS_PROBE_TASK_PRIO,
379 (INT16U ) OS_PROBE_TASK_PRIO,
380 (OS_STK * )&OSProbe_TaskStk[0],
381 (INT32U ) OS_PROBE_TASK_STK_SIZE,
382 (void * ) 0,
383 (INT16U )(OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR));
\ 00000002 0B48 LDR.N R0,??OSProbe_InitOS_0 ;; OSProbe_TaskStk
\ 00000004 0323 MOVS R3,#+3
\ 00000006 0022 MOVS R2,#+0
\ 00000008 8021 MOVS R1,#+128
\ 0000000A 0FB4 PUSH {R0-R3}
\ 0000000C 1C21 MOVS R1,#+28
\ 0000000E 02B4 PUSH {R1}
\ 00000010 0B46 MOV R3,R1
\ 00000012 00F2FC12 ADDW R2,R0,#+508
\ 00000016 0021 MOVS R1,#+0
\ 00000018 0648 LDR.N R0,??OSProbe_InitOS_0+0x4 ;; OSProbe_Task
\ 0000001A ........ _BLF OSTaskCreateExt,??OSTaskCreateExt??rT
\ 0000001E 8DF81400 STRB R0,[SP, #+20]
384 #else
385 err = OSTaskCreateExt((void (*)(void *)) OSProbe_Task,
386 (void * ) 0,
387 (OS_STK * )&OSProbe_TaskStk[0],
388 (INT8U ) OS_PROBE_TASK_PRIO,
389 (INT16U ) OS_PROBE_TASK_PRIO,
390 (OS_STK * )&OSProbe_TaskStk[OS_PROBE_TASK_STK_SIZE - 1],
391 (INT32U ) OS_PROBE_TASK_STK_SIZE,
392 (void * ) 0,
393 (INT16U )(OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR));
394 #endif
395 #else
396 #if (OS_STK_GROWTH == 1)
397 err = OSTaskCreate((void (*)(void *)) OSProbe_Task,
398 (void * ) 0,
399 (OS_STK * )&OSProbe_TaskStk[OS_PROBE_TASK_STK_SIZE - 1],
400 (INT8U ) OS_PROBE_TASK_PRIO);
401 #else
402 err = OSTaskCreate((void (*)(void *)) OSProbe_Task,
403 (void * ) 0,
404 (OS_STK * )&OSProbe_TaskStk[0],
405 (INT8U ) OS_PROBE_TASK_PRIO);
406 #endif
407 #endif
408
409 #if (OS_TASK_NAME_SIZE > 15)
410 OSTaskNameSet(OS_PROBE_TASK_PRIO, (INT8U *)"Probe OS PlugIn", &err);
\ 00000022 05AA ADD R2,SP,#+20
\ 00000024 0449 LDR.N R1,??OSProbe_InitOS_0+0x8 ;; `?<Constant "Probe OS PlugIn">`
\ 00000026 1C20 MOVS R0,#+28
\ 00000028 ........ _BLF OSTaskNameSet,??OSTaskNameSet??rT
411 #endif
412
413 (void)&err;
414 }
\ 0000002C 06B0 ADD SP,SP,#+24
\ 0000002E 00BD POP {PC} ;; return
\ ??OSProbe_InitOS_0:
\ 00000030 ........ DC32 OSProbe_TaskStk
\ 00000034 ........ DC32 OSProbe_Task
\ 00000038 ........ DC32 `?<Constant "Probe OS PlugIn">`
415 #endif
416
417
418 /*
419 *********************************************************************************************************
420 * OSProbe_Task()
421 *
422 * Description : Updates task CPU usage and task stack usage statistics and calls a user-specified
423 * callback functions, if the user sets this function.
424 *
425 * Argument(s) : p_arg Argument passed to OSProbe_Task() by 'OSTaskCreate()'.
426 *
427 * Return(s) : none.
428 *
429 * Caller(s) : This is a task.
430 *
431 * Note(s) : none.
432 *********************************************************************************************************
433 */
434
435 #if (OS_PROBE_TASK > 0)
\ In segment CODE, align 4, keep-with-next
436 static void OSProbe_Task (void *p_arg)
437 {
\ OSProbe_Task:
\ 00000000 2DE9F04F PUSH {R4-R11,LR}
438 OS_TCB *ptcb;
439 INT16U i;
440 INT32U cycles_tot;
441 static INT32U cycles_dif[OS_MAX_TASKS];
442 static INT32U cycles_tot_last[OS_MAX_TASKS];
443 #if (OS_PROBE_USE_FP == 0)
444 INT32U max;
445 #endif
446
447
448 (void)p_arg;
449
450 /* Initialize stored CyclesTot values. */
451 for (i = 0; i < OS_MAX_TASKS; i++) {
\ 00000004 0020 MOVS R0,#+0
\ 00000006 8046 MOV R8,R0
\ 00000008 4646 MOV R6,R8
\ 0000000A 3A49 LDR.N R1,??OSProbe_Task_0 ;; OSProbe_TaskStkUsage
\ 0000000C 09E0 B.N ??OSProbe_Task_1
452 cycles_tot_last[i] = 0;
\ ??OSProbe_Task_2:
\ 0000000E 49F82080 STR R8,[R9, R0, LSL #+2]
453 OSProbe_TaskStkUsage[i] = 0;
\ 00000012 41F820A0 STR R10,[R1, R0, LSL #+2]
454 OSProbe_TaskCPUUsage[i] = 0;
\ 00000016 1BEB8000 ADDS R0,R11,R0, LSL #+2
\ 0000001A C0F808A0 STR R10,[R0, #+8]
455 }
\ 0000001E 761C ADDS R6,R6,#+1
\ 00000020 B6B2 UXTH R6,R6
\ ??OSProbe_Task_1:
\ 00000022 4046 MOV R0,R8
\ 00000024 8246 MOV R10,R0
\ 00000026 3448 LDR.N R0,??OSProbe_Task_0+0x4 ;; ??cycles_tot_last
\ 00000028 8146 MOV R9,R0
\ 0000002A .... LDR.N R0,??DataTable3 ;; OSProbe_Delay
\ 0000002C 8346 MOV R11,R0
\ 0000002E 3000 MOVS R0,R6
\ 00000030 1428 CMP R0,#+20
\ 00000032 ECD3 BCC.N ??OSProbe_Task_2
456
457 while (1) {
458 OSTimeDlyHMSM(0, 0, 0, OSProbe_Delay);
\ ??OSProbe_Task_3:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -