組込み教育委員会

7-2 トロン技術者認定試験(TRON) 第2回

即戦力の人材がほしい

「トロン技術者認定試験」は、現場ですぐに役立つ人材であることを証明するための試験です。組込みの入門試験ではありませんので、高得点を取るには実践的な知識が必要となります。そのため、前回(第1回)に掲載した例題[1]のように、組込みリアルタイムに関する一般的な問題も出題されますが、T-KernelやμITRONを用いてリアルタイムシステムを構築する技術を確認する問題が多数出題されます。

そこで今回は、手始めとしてT-KernelやμITRONのタスクについて説明します。

タスクの形式

T-KernelやμITRONでは、プログラムを実行する際の機能単位を「タスク」と呼びます。一般には1つ、または、複数のタスクを集めて1つの機能を構成し、その機能単位をいくつも集めて実際の機器を構築します。

T-KernelやμITRONでは、タスクはC言語の関数として記述できますリスト1、2。関数名は任意です⁠⁠。

このような形式で記述した関数をT-KernelやμITRONに登録するとタスクとなります。ただし、形式は関数であっても、登録後はT-KernelやμITRONがタスクとして扱いますので、いくつか注意しなければならない点があります。その1つが関数の終了方法です。

リスト1 T-Kernelのタスクの例
void taskA(INT stacd, VP exinf)
{
    /* 処理 */
    tk_ext_tsk();
}
リスト2 μITRON4.0のタスクの例
void taskA(VP_INT exinf)
{
    /* 処理 */
    ext_tsk();
}

タスクの終了

まずは次の例題(タスクの終了:第1区分)を解いてみてください。

【問】T-Kernelにおいて、タスクとして動作させる関数task1~task4を作成した。この中でいくつかのタスクは正常に動作しない(動作が不定となる)

正常に動作しないタスクを次の中からすべて選べ。
[1]task1
void task1(INT stacd, VP exinf)
{
    /* 処理 */
    tk_exd_tsk();
}
[2]task2
void task2(INT stacd, VP exinf)
{
    /* 処理 */
    tk_ter_tsk(TSK_SELF);
}
[3]task3
void task3(INT stacd, VP exinf)
{
    /* 処理 */
    tk_del_tsk(TSK_SELF);
}
[4]task4
void task4(INT stacd, VP exinf)
{
    /* 処理 */
    return;
}

※正解は[2⁠⁠、⁠3⁠⁠、⁠4]です。

例題の解説

正解できたでしょうか? この例題はT-Kernelに絞った内容になっていますので、業務でT-Kernelを利用していれば即答できますが、知らなければお手上げです。細かい内容に関する問題になっていますが、非常に重要なポイントを確認しています。

T-Kernelではタスクの終わり方について次のように定義しています。

「関数からの単純なリターン(return)でタスクを終了することはできない(してはいけない⁠⁠。その場合の動作は不定(実装依存)である[2]⁠」

T-Kernelでは、必ずtk_ext_tskか、tk_exd_tskのいずれかのシステムコールでタスクを終了します。つまり、選択肢[1]は正常に動作するが、選択肢[4]は動作が不定になるということです。また、選択肢[2]のtk_ter_tskと選択肢[3]のtk_del_tskはエラー終了します。その上でタスクの終端(})に処理が移りますので、単純なreturnを実行した場合(選択肢[4⁠⁠)と同じことになり、動作は不定となります。

tk_ter_tskとtk_del_tskはほかのタスクを操作するシステムコールです。自タスクは指定できませんので、自タスクを示すTSK_SELFを指定して発行するとエラー終了します。

T-Kernelでは、自タスクを操作するシステムコールと他タスクを操作するシステムコールを明確に分離しています。これにより、タスクの状態遷移を明確にし、システムコールの理解を容易にしています。

これに対し、μITRONでは単なる関数のリターンによってタスクを終了させることもできます。便利そうではありますが、移植性やメインテナンス性に問題があるためT-Kernelでは必ずシステムコールによって終了すると定義しています。

まとめ

μITRONは8ビットから32ビット以上のCPUまで対応し、今でも幅広く利用されている代表的な組込み用RTOSです。多くの組込みCPUで利用できるようにするため、移植性よりも最適化を優先して設計されています。

一方のT-Kernelは新しいRTOSであり、複雑化するこれからの組込み機器での利用を想定しています。このため、T-Kernel自身だけでなく、その上で動作するミドルウェアを含めた移植性を重視した設計になっています。今回の例題は、このような設計ポリシーの違いが仕様の違い[3]として表れた例になります。

μITRONにはこれまで開発されてきたさまざまなソフトウェアがありますので、これらのソフトウェアをT-Kernelに移植することもあるでしょう。その場合、今回説明したような違いを知っているかどうかで作業効率にも差が出てしまいます。

トロン技術者認定試験では、今回のような開発のコツとも言える知識に関する問題も出題されますが、それはみなさんの技術力(効率的な開発ができること)を確認して証明するためです。経験を積むごとに技術力は高くなります。実践的な技術を効率的に向上させるため、ぜひトロン技術者認定試験を活用してください。

おすすめ記事

記事・ニュース一覧