athrill(アスリル)機能マニュアル(プログラム実行状況)

#概要
[athrill(アスリル)](https://qiita.com/kanetugu2018/items/cf3dea16710a3f0737e8)のプログラム実行制御について解説します．

#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に保存されます．１命令毎に保存されますので，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
```