#概要
athrill(アスリル)のプログラム実行制御について解説します.
#CPU実行ログ表示切り替え(v)
CPU実行ログ表示切り替え(v)コマンドの書式は以下のとおりです.
* view(v):
1) view
select the logging mode
v コマンドを実行毎にモードが以下のように切り替わります.
[DBG>v
VIEW_MODE=ON
[DBG>v
VIEW_MODE=OFF
VIEW_MODE=ONの場合,CPU命令の実行ログが athrill 実行フォルダ直下のlog.txtに保存されます.1命令毎に保存されますので,athrillの実行処理速度は遅くなります.
VIEW_MODE=OFFの場合,log.txtに命令ログは保存されません(処理速度は速くなる).
#CPUレジスタ表示(cpu)
CPUレジスタ表示(cpu)コマンドの書式は以下のとおりです.
* cpu(-):
1) cpu
show all cpu registers
2) cpu <core_id>
show cpu(<core_id>)
1) cpu
CPUレジスタ情報が表示されます.
以下は,v850e2mの場合の実行例です.
[DBG>cpu
***CPU<0>***
PC 0x51d0
R0 0x0
R1 0x0
R2 0x1a94 do_stop(+0x0)
R3 0x5ff95c8 _kernel_stack_MAIN_TASK(+0x0) Stack Pointer
R4 0x200008 version_banner___2674(+0x0)
R5 0x7d0
R6 0x5ff9554 _kernel_istack(+0x1f8c) Arg1
R7 0xbebe90f Arg2
R8 0x186a0 Arg3
R9 0x0 Arg4
R10 0x2004cc athrill_device_func_call(+0x0) Return Value
R11 0x1b
R12 0xbebe90e
R13 0xf46ee179
R14 0x5ffef4c _kernel_current_evttim(+0x0)
R15 0xf46ee179
R16 0x5ffef38 _kernel_monotonic_evttim(+0x0)
R17 0x5aa378
R18 0x1473c _kernel_tinib_table(+0x0)
R19 0x1000 brick_button_cyc(+0x18c)
R20 0x5ffee9c _kernel_p_schedtsk(+0x0)
R21 0x5ffee98 _kernel_p_runtsk(+0x0)
R22 0x0
R23 0x1a32 check_color_sensor(+0x0)
R24 0x39da ev3_ultrasonic_sensor_get_distance(+0x0)
R25 0x5ff7544 ultrasonic_value(+0x0)
R26 0x1b1c blink_led(+0x0)
R27 0x3056 ev3_motor_set_power(+0x0)
R28 0x838e tslp_tsk(+0x0)
R29 0x186a0
R30 0x5ff9578 _kernel_istack(+0x1fb0)
R31 0x5866
EIPC 0x5730
EIPSW 0x1
ECR 0x1e0
PSW 0x21
SCCFG 0x0
SCBP 0x0
EIIC 0x0
FEIC 0x0
FEPC 0x0
FEPSW 0x0
CTBP 0x134e0
EIWR 0x0
FEWR 0x0
BSEL 0x0
VSECR = 0x00000000
VSTID = 0x00000000
VSADR = 0x00000000
VMECR = 0x00000000
VMTID = 0x00000000
VMADR = 0x00000000
MPM = 0x00000000
MPC = 0x00000000
TID = 0x00000000
#関数実行トレース表示(ft)
関数実行トレース表示(ft)コマンドの書式は以下のとおりです.
* ft(-):
1) ft <number>
show function trace log(show size=<number>) from latest log
2) ft <number> r
show function trace log(show size=<number>) from oldest log
1) ft <number>
CPUが実行した関数の履歴を終端から<number>分だけ表示します(デフォルトで1024個まで).
[DBG>ft 10
core0: <_kernel_istack (0x1fac)> [ 9] <0x04e> _kernel_set_hrt_event
core0: <_kernel_istack (0x1fb0)> [ 8] <0x142> _kernel_signal_time
core0: <_kernel_istack (0x1fb0)> [ 7] <0x000> x_unlock_cpu
core0: <_kernel_istack (0x1f8c)> [ 6] <0x000> athrill_syscall
core0: <_kernel_istack (0x1f8c)> [ 5] <0x02e> x_unlock_cpu
core0: <_kernel_istack (0x1fb0)> [ 4] <0x14a> _kernel_signal_time
core0: <_kernel_istack (0x1ff8)> [ 3] <0x014> _kernel_target_hrt_handler
core0: <_kernel_istack (0x1fb0)> [ 2] <0x000> set_intpri
core0: <_kernel_istack (0x1f8c)> [ 1] <0x000> athrill_syscall
core0: <_kernel_istack (0x1f8c)> [ 0] <0x032> set_intpri
2) ft <number> r
CPUが実行した関数の履歴を先頭から<number>分だけ表示します(デフォルトで1024個まで).
[DBG>ft 10 r
core0: <_kernel_istack (0x1f8c)> [1023] <0x032> set_intpri
core0: <_kernel_istack (0x1f8c)> [1022] <0x000> athrill_syscall
core0: <_kernel_istack (0x1fb0)> [1021] <0x000> set_intpri
core0: <_kernel_istack (0x1ff8)> [1020] <0x014> _kernel_target_hrt_handler
core0: <_kernel_istack (0x1fb0)> [1019] <0x14a> _kernel_signal_time
core0: <_kernel_istack (0x1f8c)> [1018] <0x02e> x_unlock_cpu
core0: <_kernel_istack (0x1f8c)> [1017] <0x000> athrill_syscall
core0: <_kernel_istack (0x1fb0)> [1016] <0x000> x_unlock_cpu
core0: <_kernel_istack (0x1fb0)> [1015] <0x142> _kernel_signal_time
core0: <_kernel_istack (0x1fac)> [1014] <0x04e> _kernel_set_hrt_event
#関数プロファイル(prof)
関数プロファイル(prof)コマンドの書式は以下のとおりです.
* prof(-):
1) profile
show profile result
関数プロファイル情報を表示します.
- funcname
- 関数名
- call_num
- 関数呼び出し回数
- func_time
- 当該関数内の命令を実行した総クロック数(関数呼び出し分は含まず)
- total_time
- 当該関数内の命令を実行した総クロック数(関数呼び出し分を含む)
[DBG>prof
*** coreId=0 ***
funcname call_num func_time total_time
initialize 1 19 17871
softreset 1 126 16643
check_color_sensor 60 8 111
blink_led 60 22 206
do_turn.part___0 60 21 291
convert 3 31 353
uart_sensor_fetch_data 180 34 44
serialPort_writeChar 257 33 88
logtask_putc 254 8 324
__sbprintf 11 41 992
tInterruptRequest_CB_initialize 1 1 1
:
#消費クロック(e)
消費クロック(e)コマンドの書式は以下のとおりです.
* elaps(e):
1) elaps
show elapsed cpu clocks
cpu 消費クロック数を表示します.
- cpu_clock[<core_id>]
- <core_id>の総CPU消費クロック数(命令毎の消費クロック数を換算した結果)
- loops
- 総命令実行数
- intc
- 割り込みモードで実行した総命令数
- real_time
- loops 分の命令実行に要した総処理時間(実時間)
[DBG>e
cpu_clock[0] = 1473484
loops 2380079608 intc 37279 real_time 0.862017