#概要
athrill2を使用してTOPPERS/ATK2-SC1のサンプルプログラム動作確認を行います.
動作確認内容は以下の通りです.
- atk2-sc1のカーネル起動
- 周期アラームコールバック起動確認(500ms周期)
- アラーム実行をキャンセル
- タスク起動確認(Task3)
#atk2-sc1のバイナリ配置場所
athrill開発プロジェクトの以下を参照ください.
athrill/sample/os/atk2-sc1_1.4.2/OBJ/
#動作確認
##atk2-sc1のカーネル起動
以下のコマンドを実行して,カーネル起動します.
$ athrill2 -i -c1 -m memory.txt -d device_config.txt atk2-sc1
athrill2 では,-c オプションでコア数を指定できます.今回の場合はシングルコアになりますので,「1」を指定します.本コマンドを実行すると,以下のathrill起動ログが出力され,デバッグコマンド入力待ちになります.
core id num=1
ROM : START=0x0 SIZE=512
RAM : START=0x3ff7000 SIZE=512
Elf loading was succeeded:0x0 - 0xffd2 : 63.978 KB
Elf loading was succeeded:0xffd4 - 0x12b30 : 0.220 KB
ELF SYMBOL SECTION LOADED:index=17
ELF SYMBOL SECTION LOADED:sym_num=499
ELF STRING TABLE SECTION LOADED:index=18
[DBG>
HIT break:0x0
[NEXT> pc=0x0 Os_Lcfg_asm.S 8
「c」コマンドを実行し,CPUの動作開始すると,以下のようにカーネル起動メッセージが出力され,シリアル入力待ちとなります.
c
[CPU>
TOPPERS/ATK2-SC1 Release 1.4.2 for V850ESFK3 (Aug 14 2018, 12:52:01)
Input Command:
##周期アラームコールバック起動確認(500ms周期)
シリアル入力できるように,まず,「q」コマンドでデバッグモードに遷移させます.
q
[NEXT> pc=0x55a6 prc_support.S 1129
次に,アラームコールバックの起動周期を確認できるように,アラームコールバック関数にブレーク設定します.
[DBG>b AlarmMainSysTimerAlmCb
break AlarmMainSysTimerAlmCb 0x3318
athrillのシリアル入力機能を使用して,「N」を入力し,処理継続させます.
[DBG>S 0 N
[DBG>c
[CPU>N
Call SetRelAlarm(CallBackArm, 9000, 5000)
Input Command:
HIT break:0x3318 AlarmMainSysTimerAlmCb(+0x0)
[NEXT> pc=0x3318 sample1.c 1551
e
clock = cpu 2886052322 intc 5638480 real_time 21.536603
[DBG>c
[CPU>CallBackArm Expire
HIT break:0x3318 AlarmMainSysTimerAlmCb(+0x0)
[NEXT> pc=0x3318 sample1.c 1551
e
clock = cpu 2936052322 intc 5723803 real_time 21.911723
[DBG>c
[CPU>CallBackArm Expire
HIT break:0x3318 AlarmMainSysTimerAlmCb(+0x0)
[NEXT> pc=0x3318 sample1.c 1551
e
clock = cpu 2986052322 intc 5809126 real_time 22.290978
上記は,アラームコールバック関数でブレーク発生したタイミングで,CPU消費クロックを表示した結果です.
回数 | clock | 差分 |
---|---|---|
1 | 2886052322 | - |
2 | 2936052322 | 50,000,000 |
3 | 2986052322 | 50,000,000 |
消費クロックの差分を見ることで,アラームコールバック関数の起動間隔が「50,000,000クロック」であることがわかります.
今回の設定では,athrill2のCPU周波数は100MHzとし,OSハードウェアカウンタのクロックは10ms/clockとしたため,きっちり「500ms周期」で起動していることがわかります.
##アラーム実行をキャンセル
次に,周期起動しているアラームをキャンセルさせるために,シリアルで「h」コマンドを入力します.
[DBG>S 0 h
[DBG>c
[CPU>CallBackArm Expire
h
Call CancelAlarm(CallBackArm)
Input Command:
上記のとおり,「Call CancelAlarm(CallBackArm)」というメッセージ出力後,周期起動していたアラームコールバック関数は実行されなくなりました.
##タスク起動確認(Task3)
最後に,この状態から,シリアルで「3a」コマンドを入力し,Task3を起動してみましょう.
Input Command:
q
[NEXT> pc=0x55a6 prc_support.S 1129
[DBG>S 0 3a
[DBG>c
[CPU>3
Input Command:
a
Call ActivateTask(Task3)
Task3 ACTIVATE
上記の通り,「Task3 ACTIVATE」というメッセージが出力されていることから無事Task3が起動できたことを確認できました.