athrill(アスリル)機能マニュアル(パラメータ)

#概要
[athrill(アスリル)](https://qiita.com/kanetugu2018/items/cf3dea16710a3f0737e8)のパラメータについて解説します．

#パラメータ

##ソースパス設定
athrill上でソースデバッグする際に，デバッグ対象ファイルのパス指定が必要になる場合があります．
設定パラメタは以下のとおりです．

|パラメータ|説明|
|---|---|
|EDITOR_SEARCH_PATH_NUM|設定するパスの数であり，下記パラメータの個数と一致させてください|
|EDITOR_SEARCH_PATH_${index}|対象ファイルパスを指定してください．${index}は0からの連番としてください|

以下，設定例です．

```
EDITOR_SEARCH_PATH_NUM 2
EDITOR_SEARCH_PATH_0 /home/tmori/project/athrill/sample/os/atk2-sc1-mc_1.4.2/kernel
EDITOR_SEARCH_PATH_1 /home/tmori/project/athrill/sample/os/atk2-sc1-mc_1.4.2/arch/v850_gcc
```

##シリアル外部入出力ファイル設定
athrillはデフォルトで，２チャンネルのシリアルデバイスをサポートしています．
このうち，チャネル１は外部入出力用に使用することができます．
※チャネル０は，デバッガ用に使用しています．

|パラメータ|説明|
|---|---|
|SERIAL_FILE_PATH|シリアル入出力ファイル格納フォルダパスを指定してください．|

また，本フォルダ配下に以下の2ファイルを作成してください(空ファイル)

|パラメータ|説明|
|---|---|
|serial_out.txt|athrillへのシリアル出力ファイル．athrillはチャネル１の外部データを本ファイルから取得します|
|serial_in.txt|athrillからのシリアル入力ファイル．athrillはチャネル１へ送出要求のあったシリアルデータを本ファイルに追加書きします．|

シリアルの入出力レジスタ・アドレスは以下のとおりです．

```
/*
 * UARTDn送信データ・レジスタ（ UDnTX）
 */
#define UDnTX_BASE				UINT_C(0xFFFFFA07)
#define UDnTX(CH)				(UDnTX_BASE + ((CH) * 16U))

/*
 * UARTDn受信データ・レジスタ（ UDnRX）
 */
#define UDnRX_BASE				UINT_C(0xFFFFFA06)
#define UDnRX(CH)				(UDnRX_BASE + ((CH) * 16U))
```

##起動時変数初期値設定
変数の初期値を本パラメータで設定できます．
ただし，変更可能な変数は，ブートストラップで初期化されないセクション(bss/data)に配置されている必要があります．

本機能の利用シーンは，
　　**『同じバイナリ』**で，
　　**『複数存在するテスト切り替えを手軽に実行したい』**
場合です．

例えば，下記コードのようにテスト実行をtest_modeで切り替えしている場合，
test_modeの値をathrill起動時に指定できると，バイナリ変更なし(リビルド不要)でテストを連続実行できます．

```
unsigned int test_mode;

static void do_test()
{
    switch(test_mode) {
    case 0:
        do_test_0();
        break;
    case 1:
        do_test_1();
        break;
    case 2:
        do_test_2();
        break;
    case 3:
        do_test_3();
        break;
    default:
        break;
    }
    return;
}
int main(void)
{
    do_test();
}
```

|パラメータ|説明|
|---|---|
|DEBUG_ROM_DEFINE_NUM|起動時に設定したい変数の数を指定してください|
|DEBUG_ROM_DEFINE_${index}|起動時に設定したい変数および設定値を指定して下さい．${index}は0からの連番としてください|


以下，設定例です．

```
DEBUG_ROM_DEFINE_NUM 1
DEBUG_ROM_DEFINE_0 test_mode=2
```

##デバッグ機能有効/無効設定
デバッグ機能を有効にしていると，処理性能が悪くなる場合があります．
そのため，処理性能に影響を与える可能性が高い以下の機能は有効/無効設定ができます．
※パラメータ未設定の場合は有効化されます．

|パラメータ|対象デバッグ機能|設定値|
|---|---|---|
|DEBUG_FUNC_ENABLE_BT|スタックトレース表示|0:無効, 1:有効|
|DEBUG_FUNC_ENABLE_FT|関数実行トレース表示|0:無効, 1:有効|
|DEBUG_FUNC_ENABLE_PROF|関数プロファイル|0:無効, 1:有効|
|DEBUG_FUNC_ENABLE_WATCH|データウォッチ|0:無効, 1:有効|

##タイマの分周設定
タイマの分周を変更できます．
デフォルトは32ですが，本パラメータの値を高い値にすることで，CPU周波数を間接的に上げることができます．

|パラメータ|説明|
|---|---|
|DEVICE_CONFIG_TIMER_FD|10進数で分周値を指定してください|

##時間飛ばし機能設定
RTOSがHALT命令を実行した場合，CPUは割り込み待ちに入ります．
使用している割り込みがタイマしかない場合，次の割り込みタイミングは，タイマに割り込み設定した値に依存します．

この期間中は，athrillはCPUにクロック供給しても何も処理されることはないため，次の割り込み発生タイミングまで，CPUのクロックを進めます．

こうすることで，athrillの実行性能を上げることができます．

|パラメータ|説明|
|---|---|
|DEBUG_FUNC_ENABLE_SKIP_CLOCK|0:無効, 1:有効|

以下，時間飛ばしの具体例です．

### 時間飛ばしがない場合のシミュレーション実行の流れ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244147/c215be0f-a34f-2456-b947-11f1bd5bcf47.png)

本例では，CPUは，3クロック目でHALT状態になります．その後，7クロック目で，デバイス１が割り込み通知を上げます．シミュレーション視点では，４～６クロック期間は，何も処理する必要がありませんので，無駄な期間といえます．

### 時間飛ばしがある場合のシミュレーション実行の流れ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244147/66bceb85-3009-14fb-ccaa-dea3281f3861.png)

そのため，Athrillは，CPUがHALT状態に入ったことを検出した場合，各デバイスの次の割り込みタイミングをチェックして，割り込みタイミングが最も時間的に近いポイントまで，シミュレーション時間を進めます．