Help us understand the problem. What is going on with this article?

athrill2を使用してTOPPERS/ATK2-SC1を実行する

More than 1 year has passed since last update.

概要

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が起動できたことを確認できました.

kanetugu2018
福井在住の組み込みエンジニアです。
https://github.com/tmori/athrill
toppers
TOPPERSプロジェクトは、ITRON仕様の技術開発成果を出発点として、組込みシステム構築の基盤となる各種のソフトウェアを開発し、良質なオープンソースソフトウェアとして公開することで、組込みシステム技術と産業の振興を図ることを目的としたプロジェクトです。
https://www.toppers.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away