組込み教育委員会

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

この記事を読むのに必要な時間:およそ 2 分

人は多いが,人材は少ない

昨年末から始まった世界同時不況の荒波は,比較的健全と言われてきた日本経済にも押し寄せ,組込み業界にも影響を与えています。たしかに,組込み業界でも仕事の総量は減少しているようです。しかしそれでもなお,人材は不足しており,高い技能を有する技術者が今も求められています。

トロン技術者認定試験の試験問題は,このようなニーズに応えられる即戦力の人材であることを証明することを目的として作られています。このため,高得点の獲得には実践経験が重要となりますが,経験を積むためにも基礎力が必要です。

そこで今回も前回に引き続き,T-Kernel やμITRONの基礎について説明します。

タスクの生成

前回はタスクの記述形式について説明しましたので,今回は作成したタスクをカーネル(T-KernelやμITRON)に登録する方法について説明します。

T-Kernelでのタスクの登録方法の例をリスト1に示します。タスク生成用のパラメータを専用の構造体(T_CTSK ctsk)に設定し,tk_cre_tskを呼び出すことで,T-Kernelに関数をタスクとして登録します。ここでは,タスクとして登録する関数taskAの関数へのポインタをctsk.task = (FP)taskA;として設定しています。これで関数taskAをタスクとして動作させるための準備ができたことになります。

リスト1 T-Kernelでのタスクの登録例注1

void taskA( INT stacd, VP exinf )
{
    /* 処理*/
    tk_ext_tsk();
}

ER foo(void)
{
    T_CTSK ctsk;                    /* タスク生成情報*/
    ID taskAid;                     /* タスク識別子*/

    ctsk.task = (FP)taskA;          /* タスク用の関数*/
    ctsk.tskatr = TA_HLNG|TA_RNG0;  /* タスクの属性*/
    ctsk.itskpri = 1;               /* 優先度*/
    ctsk.stksz = 4096;              /* スタックサイズ*/

    taskAid = tk_cre_tsk( &ctsk );  /* タスクの生成*/
    if( tskid < 0 ){
        return( (ER)taskAid );
    }

    /* 処理*/
}

なお,T-KernelやμITRONでは,カーネルの操作対象となる資源をオブジェクトと呼びます。オブジェクトは必要になった時点で「生成」し,不要になると「削除」します。これにより,組込み機器のようなリソースが少ないシステムでも,メモリを有効に活用できるようになっています。

具体的には,セマフォ,イベントフラグ,メモリプール,メールボックスなどがオブジェクトです。タスクもオブジェクトの一種ですので,ここで説明したタスクの登録は「タスクの生成」と呼びます。

注1)
μITRONではcre_tsk,acre_tsk,CRE_TSKなどで登録します。ただし,各機能を使えるかどうかは各OSの実装に依存します。

タスクの生成とスタックサイズ

今回は,タスクの生成の際に指定するスタックサイズ(stksz)に関する問題を用意しました。まずは解けるかどうか挑戦してみてください。

【問】T-KernelやμITRONでは,タスクの生成時にスタックサイズ(stksz)を指定する。スタックサイズの指定に関する説明として正しいものを,以下の中からすべて選べ。
  • ① スタックサイズには,そのタスクが使用するすべてのメモリの合計サイズを指定する。
  • ② タスクの動作中にスタックが不足した場合,自動的にスタックが追加(拡張)される。
  • ③ スタックサイズに指定されたサイズのメモリ領域を確保できない場合,エラーとしてE_NOMEMが返される。
  • ④ スタックサイズにNULL(=0)を指定すると,デフォルトのスタックサイズ(4Kバイト)が確保される。

※正解は③です。

例題の解説

いかがだったでしょうか? 常識を働かせるだけでもある程度は判断できますが,T-KernelやμITRONの仕様を理解していなければ正解することはできません。

さて,この例題では,選択肢の説明が正しいかどうかを判定しなければなりませんので,各選択肢について個別に確認します。

選択肢①では,「すべてのメモリの合計サイズを指定する」となっていますが,タスクではメモリプールなどで確保する動的メモリやグローバル変数なども利用できます。これらはタスクのスタックには確保されませんので,スタックサイズに含める必要はありません。つまり,この説明は誤りとなります。

選択肢②では,「自動的にスタックが追加(拡張)される」となっていますが,そのような機能はT-KernelやμITRONにはありません。つまり,この説明も誤りです(一般的なOSには,このような機能はありません)。

選択肢③は正しい説明です。この点は,T-KernelやμITRON4.0の仕様書にも記載されています。

選択肢④で説明しているような機能は,T-KernelやμITRONにはありません。つまり,この説明は誤りです(T-KernelやμITRONでは,stkszにNULL(=0)を指定した場合,実装にもよりますが,通常はE_PARのエラーが返されます)。

結局,選択肢③だけが正しいことになり,正解は③となります。

ところで,この例題では「すべて選べ」となっていましたが,必ずしも複数の正解があるとは限りません。この例題のように,正解が1つだけという場合もありますので注意してください。

まとめ

巷では派遣切り,内定取消などが社会問題となっています。2009年に入ってからは正社員を解雇する動きまで出てきました。さまざまな対策が打ち出されていますが,この状況がすぐに好転することはないでしょう。しかし,経営の四大要素は「人・物・金・情報」であることに変わりはありません。企業としてはどれが欠けても存続できないことを,経営者であれば理解しています。

一方で技術者には,高い技能を持つ「人材」になるための不断の努力が要求されています。経験はスキルとなり技術者自身の資産として残りますが,その経験を客観的に示して他人にも理解してもらわなければ自己満足に終わってしまいます。自身が物・金・情報よりも有益な資源=「人材」であることを示すためには,客観的な評価の尺度が必要です。

トロン技術者認定試験では,T-KernelやμITRONを用いた組込みシステム開発の技術力を客観的に評価する尺度を提供します。次回の試験は,2009年3月7日(土)に東京で実施する予定です。公式Webサイトを通じてお申し込みいただけますので,ぜひトロン技術者認定試験をみなさんの技術力の「見える化」に役立ててください。

コメント

コメントの記入