TEF022-W001-01.00.00/ja μITRON から μT-Kernel/T-Kernel への 移行ガイド Version 1.00.00 (2010/11/01) T-Engine フォーラム Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. TEF022-W001-01.00.00/ja 目次 第 1章 概 要 ................................................................................................................. 1 1.1. μITRONとμT-Kernel ........................................................................................ 1 1.2. 本 書 の目 的 ....................................................................................................... 2 1.3. μT-Kernelに移 行 する理 由 .................................................................................. 2 1.4. 対 象 とするITRON .............................................................................................. 5 1.5. 対 象 とするμT-Kernel ........................................................................................ 5 第 2章 2.1. μITRON4.0 からμT-Kernelへの移 行 .................................................................. 6 μITRON4.0 からの主 な変 更 点 ............................................................................. 7 2.1.1. システムコール名 の変 更 .................................................................................... 8 2.1.2. オブジェクトIDの割 り当 て方 法 の変 更 .................................................................. 9 2.1.3. 動 的 APIへの統 一 .......................................................................................... 10 2.1.4. 拡 張 情 報 exinfの使 い方 の統 一 ........................................................................ 12 2.1.5. 同 期 ・通 信 オブジェクトなどへの拡 張 情 報 exinfの追 加 ........................................... 13 2.1.6. デバッガサポート機 能 の追 加 (dsname) .............................................................. 14 2.1.7. 類 似 したシステムコールの統 一 .......................................................................... 15 2.2. タスク管 理 機 能 .................................................................................................. 16 2.2.1. タスクの生 成 (CRE_TSK / cre_tsk / acre_tsk) .................................................. 17 2.2.2. タスクの削 除 (del_tsk) .................................................................................... 25 2.3. タスク付 属 同 期 機 能 ........................................................................................... 26 2.3.1. 起 床 待 ち(slp_tsk / tslp_tsk) .......................................................................... 28 2.3.2. タスクの起 床 (wup_tsk / iwup_tsk) .................................................................. 30 2.3.3. 強 制 待 ち状 態 への移 行 (sus_tsk) ..................................................................... 34 2.3.4. 強 制 待 ち状 態 からの再 開 (rsm_tsk / frsm_tsk) .................................................. 37 2.3.5. 自 タスクの遅 延 (dly_tsk) ................................................................................. 38 2.4. 同 期 ・通 信 機 能 ................................................................................................. 42 2.4.1. 同 期 ・通 信 機 能 (セマフォ) ............................................................................... 43 2.4.1.1. セマフォの生 成 (CRE_SEM / cre_sem / acre_sem) ........................................ 45 2.4.1.2. セマフォの削 除 (del_sem) ............................................................................ 50 2.4.1.3. セマフォ資 源 の返 却 (sig_sem / isig_sem)...................................................... 51 2.4.1.4. セマフォ資 源 の獲 得 (wai_sem / pol_sem / twai_sem) .................................... 52 2.4.1.5. セマフォの状 態 参 照 (ref_sem) ...................................................................... 57 2.4.1.6. 追 加 機 能 ................................................................................................... 58 2.4.1.7. セマフォ資 源 の獲 得 /返 却 の複 数 個 対 応 について .............................................. 58 2.4.2. 同 期 ・通 信 機 能 (メールボックス) ........................................................................ 62 2.4.2.1. メールボックスの生 成 (CRE_MBX / cre_mbx / acre_mbx → tk_cre_mbx) ........ 64 2.4.2.2. メールボックスの削 除 (del_mbx → tk_del_mbx) ............................................ 69 2.4.2.3. メールボックスへの送 信 (snd_mbx → tk_snd_mbx) ........................................ 70 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. i TEF022-W001-01.00.00/ja 2.4.2.4. メールボックスからの受 信 (rcv_mbx / prcv_mbx / trcv_mbx → tk_rcv_mbx) .... 71 2.4.2.5. メールボックスの状 態 参 照 (ref_mbx) .............................................................. 76 2.5. 相 違 点 ............................................................................................................ 77 2.5.1. 共 通 項 目 ...................................................................................................... 77 2.5.1.1. データ型 .................................................................................................... 77 2.5.1.2. エラーコード [FEI] ...................................................................................... 82 2.5.1.3. 定 数 .......................................................................................................... 86 第 3 章 ラッパーを使 った移 行 方 法 ...................................................................................... 88 3.1. ラッパーとは ...................................................................................................... 89 3.1.1. ソースプログラムを直 接 書 き変 える方 法 ................................................................ 89 3.1.2. ラッパーを使 う方 法 .......................................................................................... 89 3.2. ラッパー内 部 の処 理 ........................................................................................... 90 3.2.1. API名 の変 換 ................................................................................................ 90 3.2.2. 固 定 IDと動 的 IDの変 換 ................................................................................... 90 3.2.3. エラーコードの変 換 ......................................................................................... 90 3.2.4. T-Kernelにない機 能 、細 かい仕 様 の違 い ........................................................... 90 3.3. ラッパー内 部 の処 理 の具 体 例 .............................................................................. 91 3.4. 移 行 の具 体 例 ................................................................................................... 93 3.4.1. 元 のITRON用 ソースプログラム.......................................................................... 93 3.4.2. I-right/TKを使 ってT-Kernelに移 行 する場 合 ..................................................... 95 3.4.3. ソースプログラムを書 き換 えてT-Kernelに移 行 する場 合 ......................................... 97 3.5. この章 のまとめ ................................................................................................. 100 第 4 章 開 発 環 境 /関 連 製 品 .......................................................................................... 101 4.1. μT-Kernelの開 発 環 境 ..................................................................................... 101 4.1.1. リファレンスコードの開 発 環 境 (GCC) ................................................................. 101 4.1.2. SOFTUNE μT-REALOS/FR [FML].............................................................. 108 4.2. 関 連 製 品 ....................................................................................................... 115 4.2.1. I-right/TK ................................................................................................. 115 第 5章 参 考 資 料 ....................................................................................................... 117 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. ii TEF022-W001-01.00.00/ja 図目次 図 1-1 μITRONとT-Kernelの公 開 時 期 ...................................................................... 1 図 1-2 各 種 CPU間 でのミドルウェアの高 い流 通 性 ............................................................ 4 図 1-3 T-Kernelシリーズの高 い互 換 性 .......................................................................... 4 図 2-1 システムコンフィギュレーションファイルの処 理 手 順 ................................................. 22 図 2-2 μT-Kernelの初 期 タスクを使 用 したオブジェクトの生 成 手 順 .................................... 22 図 2-3 wup_tsk(TSK_SELF)を使 った処 理 .................................................................. 31 図 2-4 セマフォによる代 替 例 ....................................................................................... 31 図 2-5 sus_tsk(TSK_SELF)を使 った処 理 ................................................................... 35 図 2-6 優 先 度 の高 いタスクによる代 替 例 ....................................................................... 35 図 2-7 タイムアウトが発 生 するタイミング ......................................................................... 41 図 2-8 μITRON4.0 のセマフォ管 理 機 能 ..................................................................... 59 図 2-9 μT-Kernelのセマフォ管 理 機 能 ....................................................................... 59 図 2-10 待 ち行 列 先 頭 のタスクを優 先 (TA_FIRST属 性 )................................................. 60 図 2-11 要 求 数 の少 ないタスクを優 先 (TA_CNT属 性 ) .................................................... 61 図 2-12 エラーコードの構 成 ....................................................................................... 82 図 4-1 開 発 環 境 の構 成 ........................................................................................... 101 図 4-2 開 発 環 境 構 築 手 順 ....................................................................................... 101 図 4-3 ダウンロードページ ......................................................................................... 102 図 4-4 μT-Kernelソースコードダウンロードページ .......................................................... 103 図 4-5 パッケージの選 択 .......................................................................................... 104 図 4-6 GNUツールダウンロードページ ......................................................................... 105 図 4-7 GNUツールダウンロードページ ......................................................................... 107 図 4-8 開 発 の流 れ.................................................................................................. 108 図 4-9 統 合 開 発 環 境 SOFTUNEの構 成 .................................................................. 108 図 4-10 統 合 開 発 環 境 SOFTUNE .......................................................................... 108 図 4-11 μT-REALOSコンフィギュレータ (コンフィギュレーション定 義 ) ............................... 109 図 4-12 μT-REALOSコンフィギュレータ (割 込 みハンドラの編 集 ) .................................... 110 図 4-13 μT-REALOSアナライザ ................................................................................ 110 図 4-14 μT-REALOSアナライザ (スタック情 報 表 示 機 能 ) .............................................. 111 図 4-15 統 合 開 発 環 境 SOFTUNEの起 動 画 面 .......................................................... 111 図 4-16 SOFTUNEのプロジェクトメニュー .................................................................... 112 図 4-17 デバッガのセットアップウィザード(その 1).......................................................... 112 図 4-18 デバッガのセットアップウィザード(その 2).......................................................... 113 図 4-19 デバッグ開 始 直 後 の画 面 .............................................................................. 113 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. iii TEF022-W001-01.00.00/ja 表目次 表 2-1 μITRON4.0 とT-Kernelのシステムコールの対 応 ................................................ 16 表 2-2 T-Kernelの保 護 レベル ................................................................................... 18 表 2-3 μITRON4.0 とT-Kernelのシステムコールの対 応 ................................................ 27 表 2-4 μITRON4.0 とT-Kernelのシステムコールの対 応 ................................................ 43 表 2-5 変 更 点 ......................................................................................................... 44 表 2-6 追 加 機 能 ...................................................................................................... 44 表 2-7 μITRON4.0 とT-Kernelのシステムコールの対 応 ................................................ 62 表 2-8 変 更 点 ......................................................................................................... 63 表 2-9 追 加 機 能 ...................................................................................................... 63 表 2-10 実 装 による返 値 の違 い ................................................................................... 73 表 2-11 そのまま利 用 できるデータ型 ............................................................................ 77 表 2-12 μT-Kernelでは定 義 されていないデータ型 ....................................................... 78 表 2-13 システム毎 に異 なる定 義 となる可 能 性 のあるデータ型 ........................................... 80 表 2-14 μITRON4.0 仕 様 では定 義 されていないデータ型 .............................................. 81 表 2-15 そのまま利 用 できるエラーコード ....................................................................... 84 表 2-16 μT-Kernelでは定 義 されていないエラーコード ................................................... 85 表 2-17 μITRON4.0 仕 様 では定 義 されていないエラーコード ......................................... 85 表 2-18 μITRON4.0 仕 様 でしか定 義 されていない定 数 ................................................. 86 表 2-19 μT-Kernel仕 様 でしか定 義 されていない定 数 .................................................... 87 表 4-1 Cygwinツールのバージョン ............................................................................ 104 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. iv TEF022-W001-01.00.00/ja 本書の構成と読み方 本 書 では移 植 対 象 としてμT-Kernel を例 にとり説 明 しています。ただし、本 書 の説 明 は基 本 的 に T-Kernel にも適 応 可 能 な内 容 になっています。μITRON から T-Kernel に移 植 される 方 も活 用 してください。 μT-Kernel と T-Kernel の差 異 についてはμT-Kernel 仕 様 書 に記 載 されています。 第 1 章 ではμITRON とμT-Kernel のそれぞれの特 徴 や違 い、登 場 した背 景 について説 明 します。 第 2 章 では、μITRON4.0 からμT-Kernel への移 行 について説 明 します。 一 般 に移 行 方 法 としては、以 下 のような方 法 があります。 • μT-Kernel のシステムコールに置 換 する • ラッパ関 数 などを利 用 して移 行 する この章 ではμITRON からμT-Kernel に移 行 するための具 体 的 手 順 について説 明 します。 どの移 行 方 法 を採 用 すべきか検 討 している開 発 者 にとっては移 行 のコストや開 発 期 間 を算 出 する根 拠 として利 用 できるでしょう。また、実 際 に移 行 作 業 を行 う開 発 者 はリファレンスガイドと して利 用 できます。 第 3 章 では、ラッパーを利 用 してのμITRON4.0 からμT-Kernel への移 行 について説 明 し ます。 ラッパーを利 用 すれば、ほとんど変 更 することなくμITRON のプログラムをμT-Kernel で利 用 できるようになります。 第 4 章 では、具 体 的 にターゲットとする機 器 の開 発 環 境 においてμT-Kernel を利 用 する方 法 やラッパーなどの移 行 に利 用 できる関 連 製 品 について説 明 します。 開 発 環 境 については様 々な組 み合 わせがあるため特 定 の開 発 環 境 の移 行 方 法 を示 すこと はできませんが、本 章 を読 むことにより参 考 になると思 います。 なお、各 章 に掲 載 されているサンプルプログラムでは、タスク ID やセマフォ ID などは特 に断 り なく task_id や sem_id などとして使 用 しています。これらには別 途 値 が設 定 されている必 要 が ありますが、サンプルプログラムの要 点 を明 確 にするために省 略 してあります。各 変 数 に設 定 す べき ID については各 オブジェクトの生 成 に関 するシステムコールの説 明 、または、静 的 API の 説 明 を参 照 してください。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. v TEF022-W001-01.00.00/ja 各 システムコールの移 行 方 法 のページ構 成 は以 下 のとおりです。 移 行 の手 順 各 システムコール毎 に、 μIT RON から T-Kernel に移 行 する手 順 を記 載 していま す。 移 行 元 のソース例 移 行 元 のμIT RON におけ る対 象 システムコールの記 述 例 を記 載 していま す。 移 行 後 のソース例 移 行 後 のμT-Kerne l におけ る 対 象 システムコールの記 述 例 を 記 載 しています。 解説 各 システムコールの移 行 に関 す る解 説 を記 載 していま す。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. vi TEF022-W001-01.00.00/ja 第 1章 概 要 本 章 で は 、μ I T R O N か ら μ T- K er n e l への 移 行 を 開 始 する前 に 、 μ ITR O N や μ T- Ke r n el とは どの よう な もの で 、ど の よ うに 違 う の かな どにつ い て 説 明 し ま す。 1 . 1 . μ I T R O N と μ T- Ker ne l μ I T R O N(マイク ロ・ アイト ロ ン)の I T R O N とは In d u s t r i al T R O N (― ・ ト ロ ン )の 略 で す 。 組 込 み 機 器 な どの 機 械 を 制 御 す るため の R T OS ( リ ア ル タ イ ム オ ー エ ス )とし て 設 計 されま し た。 1 9 8 7 年 に 最 初 の I TR O N 仕 様 書 が 発 行 され、 既 に 2 0 年 以 上 の実 績 を 持 ってい ま す 。 現 在 で も 多 く の 組 込 み機 器 に 採 用 さ れて お り 、 R T O S の デフ ァ ク ト ス タ ンダ ー ド と な って い ま す。 トロンプロジェクト発足 ▼ トロン協会発足 ▼ AMP TKSE SMP TKSE T-Engineフォーラム発足 ▼ TKSE ▼ ITRON2 ▼ T-Kernel ▼ ITRON1 ▼ μITRON3.0 ▼ μITRON4.0 ▼ μITRON2.0 ▼ 1984 1987 1988 1989 1990 ▽ AMP T-Kernel SMP T-Kernel ▽ μT-Kernel ▼ 1991 1993 1999 2002 2004 2006 2007 2009 ▲ T-Engine開発キット発売開始 ▲ トヨタ「プラド」にμITRONを採用 ▲ PHSサービス開始 NTT personal ▲ 国鉄からJRへ ▲ ワンセグサービス開始 ▲ OADG結成 ▲ NTTが携帯電話サービスを開始 ▲ アサヒスーパードライ発売 ※TKSE : T-Kernel Standard Extension 図 1 - 1 μ ITR ON と T- Ke rne l の公 開 時 期 μ T- Ke r n el( マ イク ロ ・ティ ー・ カ ーネル ) は I T R ON の 流 れを汲 む 次 世 代 R T O S である T- K e rn e l の 小 型 版 とし て 開 発 されま し た。 μT- K e rn e l は 、 T-E n gin e フ ォ ーラム が 仕 様 書 とリ フ ァ レ ン スコー ド を 無 償 で 公 開 して い ま す。 T-K e r ne l とμT- K e rn e l は I T R O N と 違 っ て リ フ ァ レ ン ス とな る ソ ー ス コー ド を T-E ng i n e フ ォ ーラ ムが 無 償 で 公 開 し ていま す 。リ ファレ ン ス コー ド を 公 開 す るこ とで 仕 様 書 だけで は 規 定 するこ とが で きな い 細 かな部 分 を 含 めて O S の 仕 様 を 一 定 に し 、ア プリケー シ ョ ン やミ ド ルウ ェアな どの 上 位 ソ フ トウ ェアの 流 通 性 を向 上 さ せ るようにしています。 A会員配布限定資料 Copyright © 2009 T-Engine Forum. All Rights Reserved. 1 TEF022-W001-01.00.00/ja 1.2. 本 書 の 目 的 本 書 は 、 μITR O N を 用 い て のシ ステム 開 発 経 験 は ある次 の よう な 開 発 者 を 読 者 として想 定 し て います 。 ・ μ I T R O N か ら μ T- K er n e l への 移 行 を 検 討 して い る開 発 者 ・ μ I T R O N の 知 識 が あり 、 シ ステ ムを μ T- Ke r ne l で 構 築 しよ う とし て いる開 発 者 こ の よ うな 開 発 者 が 、既 存 のシ ス テム の R T O S を μ I T R ON か ら μ T-K e r ne l に移 行 す る 場 合 や 、 μ T- K e r ne l を用 い て 新 規 に シス テ ムを構 築 し よ う とす る場 合 、 しば し ば 次 のよ う な 課 題 に 直 面 し ま す。 ・ 移 行 方 法 が確 立 さ れてい な い ・ 移 行 に 伴 い発 生 す る問 題 点 が 見 えな い ・ 移 行 に 要 する全 体 の 作 業 量 が 見 えな い 本 書 の 目 的 は 、 移 行 に必 要 な 作 業 を 具 体 的 に示 す こ とで 、μ T- Ke r n el を 初 め て 利 用 す る開 発 者 が ス ム ーズに作 業 を 進 めら れるよ う 支 援 す るこ とにあり ま す 。 そ こ で 本 書 で は 基 本 的 な 移 行 作 業 に つ いて 、以 下 の 機 能 を 例 に とり 説 明 し ま す。 ・ タスク管 理 機 能 ・ タスク付 属 同 期 機 能 ・ セマフォ ( 同 期 ・通 信 機 能 ) ・ メ ー ル ボッ ク ス ( 同 期 ・通 信 機 能 ) 本 書 で 説 明 す る例 に 基 づ い て 基 本 的 な 移 行 方 法 を 理 解 するこ とで 、 μ T- K e rn e l が 提 供 す る他 の多 く の機 能 に つ いて も同 様 の 手 順 で 移 行 す るこ とが で きるよ う に なり ます 。 な お 、 本 書 の 説 明 は 基 本 的 に T- Ke r n el にも適 応 可 能 な内 容 にな って い ま す。 μ I T R O N か ら T- Ke r ne l に 移 植 される方 も 活 用 し てく ださい 。 μ T- Ke rn e l と T-K er n e l の 差 異 に ついて は μ T- Ker n e l 仕 様 書 を 参 照 して くだ さ い 。 1 . 3 . μ T- K e r n e l に 移 行 す る 理 由 μ T- Ke r n el を 含 む T-K e r ne l シリー ズに は 、次 の よ うな 共 通 す る特 長 が あり 、 一 度 作 成 し た ア プリ ケ ー シ ョ ンや ミ ド ル ウ ェ ア を様 々 な シ ステ ム に 流 用 す る こ と が でき ま す 。 その結 果 、 低 コス ト と短 納 期 が 実 現 可 能 とな り ます 。 A .各 種 C PU 間 で の ミ ドル ウ ェアの高 い 流 通 性 B . T- Ke r n el シ リ ーズの高 い 互 換 性 A .各 種 C PU 間 で の ミ ドル ウ ェアの高 い 流 通 性 T- K e rn el シリ ー ズは 、 ミド ル ウ ェアの流 通 性 を 高 め るこ とを 目 的 とし て O S の 仕 様 だけで な く 実 装 や動 作 が 同 じに な るよ う 設 計 さ れて います 。 ま た、ミ ドル ウ ェアの作 成 方 法 につ い て も 規 定 が決 め ら れてお り 、 こ れに則 っ て 作 成 し たミ ド ルウェア は イ ン タフ ェー ス 上 の問 題 を 引 き起 こ す こと な く 別 の シ ス テ ムに 移 植 す る こ と が 可 能 で す 。そ の 結 果 、様 々 な ミ ド ル ウ ェ ア を 利 用 す るこ とが で きます 。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 2 TEF022-W001-01.00.00/ja Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 3 TEF022-W001-01.00.00/ja ア プ リ ケ ーショ ン ア プ リ ケ ーショ ン ア プ リ ケ ーショ ン 流通 ミ ド ルウ ェ ア ミ ド ルウ ェ ア ミ ド ルウ ェ ア 流通 T- K e rn el CPU A T- K e rn el T- K e rn el CPU B CPU C ハードウェア 依存部 図 1 - 2 各 種 CPU 間 で の ミド ルウェ ア の 高 い流 通 性 B . T- K e r nel シ リ ーズの高 い 互 換 性 T- K e rn e l シ リ ーズ は、ワ ン チ ッ プ マイ コ ン に も 対 応 し た 1 6 ビッ ト C P U 向 け の μ T- Ke r n el、 3 2 ビット CPU 向 け の T- K e rn el 、さ ら に マル チプ ロセッ サ /マ ル チ コ ア プ ロ セ ッ サ 対 応 の M P T- Ker n e l か ら構 成 さ れ て いま す 。 ま た 、 T-K e r ne l 、MP T- Ke rne l は 、 T- K e rn e l S t a n d a r d E x t e n s i o n を組 み 込 む ことに よ り 大 規 模 な ソ フトウェア 開 発 に対 応 し ま す。 T- Ke r n el シリ ーズ の大 きな特 長 とし て 、各 O S は 、 API レ ベ ル で高 い 互 換 性 を 持 っ て い ることが 挙 げら れま す 。 M P T- K e r n e l 機能拡張 T- K e r n e l Standard Extension 機能拡張 T- K e r n e l A P I レ ベ ルで の 高 い 互 換 性 の た め 、 ソ フト ウ ェア を ほ と んど修 正 す る μ T- K e r n e l こ とな く 上 位 の O S で 利 用 す る こ と が可 能 。 図 1-3 T-Kernel シ リー ズ の 高 い互 換 性 そ の た め μ T- K e r ne l で作 成 し たアプ リ ケー ション や ミ ド ルウェア は わ ずか な 修 正 で他 の T- K e rn e l に も利 用 するこ とが で き、 開 発 コス トの 低 減 と短 納 期 に つなが り ます 。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 4 TEF022-W001-01.00.00/ja 1.4. 対 象 と す る ITRON 本 書 で は 、μ I T R O N の 最 新 バージ ョ ン で あるμ I T R O N 4 .0 を 対 象 として い ま す。 1 . 5 . 対 象 と す る μ T- K e r n e l 本 書 の 内 容 は 、 μ T- K e rn e l 1 . 0 1 . 00 仕 様 に 基 づ い て 説 明 し ま す。 本 書 の 説 明 は 、 他 の バー ジ ョ ンの μT- K e rn e l や T- Ke r n el にも 共 通 的 に 適 用 できる内 容 にな っ て い ま す 。 他 の バ ー ジ ョ ン の μ T- Ke r n el や T- Ke r ne l を 利 用 される場 合 も参 考 に し て く だ さい。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 5 TEF022-W001-01.00.00/ja 第 2章 μ ITRON4.0 か ら μ T-Kernel へ の 移 行 本 章 で は 、μ I T R O N 4 .0 か ら μ T- Ke r n el への移 行 方 法 およ び 仕 様 の相 違 点 など、 移 行 の 際 に 注 意 す るポ イ ント につ い て説 明 し ま す。 μ I T R O N 4 .0 仕 様 R T OS 上 で 動 作 し て い たプ ログラ ム を μ T-K e r ne lに 移 行 す るため に は 、 μ I T RON4. 0 の システ ム コー ル 1 を μ T- Ke r ne lの シ ス テ ムコー ル に 置 き 換 え る か 、ま た は ラ ッパ 関 数 を 利 用 するな ど の対 応 が 必 要 とな り ます 。 単 純 に 名 称 を置 き換 え ることで 対 応 で き る シ ス テ ム コ ー ル も あり ま すが 、シス テ ム コ ー ル に よ って は パラ メ ー タ や周 辺 の プ ロ グラム コー ド に 対 して も 調 整 が必 要 とな る場 合 も あります 。 本 章 で は 、μ I T R O N 4 .0 の シ ス テ ムコー ル を μ T- K e r ne l の シ ス テ ム コ ー ル に 置 き 換 え る こ と で μ T- Ke r n el に移 行 す る方 法 に つ いて 説 明 し ま す。 シ ス テ ム コール を 置 き換 え る方 法 は、 利 用 して いるシ ス テ ム コー ル とシ ステム コー ル を利 用 し て い る箇 所 に 応 じ た変 更 が 個 別 に 必 要 となりま すが 、 ラッパ 関 数 を 利 用 す るよ り も高 速 に システムコールの処 理 が行 えるので、アプリケーションの実 行 速 度 を犠 牲 にすることなく移 行 で きるとい っ た特 徴 が あり ま す 。ま た、 シ ステ ム コー ルの 置 き換 え に よ る移 行 が 完 了 す れば 、 プ ロ グ ラ ム が 利 用 す る シ ス テ ム コ ー ル は μ T-K e r ne l に 統 一 されま す ので 、プ ロ グラ ム のメ ン テ ナンスが 容 易 になります。 以 下 で は 、シ ス テ ム コール を 置 き換 え る際 に 調 整 が 必 要 とな る項 目 につ い て 、シ ステ ム コー ル 毎 にま とめ て ありま す 。 移 行 作 業 の 参 考 に して くだ さい 。 1 μ I T R O N 4 . 0 仕 様 で は 「 サ ー ビ ス コ ー ル 」 と 呼 び ま す が 、 本 書 で は μ T- K e r n e l に 合 わ せ て 「 シ ス テ ム コ ー ル 」 と し て あ り ま す。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 6 TEF022-W001-01.00.00/ja 2.1. μ ITRON4.0 か ら の 主 な 変 更 点 ( 1 ) シ ス テ ム コ ール 名 の 変 更 ( 2 ) オ ブ ジ ェ ク ト I D の 割 り当 て 方 法 の 変 更 (3) 動 的 API への統 一 ( 4 ) 拡 張 情 報 e x i n f の 使 い方 の 統 一 ( 5 ) 同 期 ・ 通 信 オ ブ ジ ェクトな ど への 拡 張 情 報 e xin f の 追 加 ( 6 ) デ バ ッ ガ サ ポー ト 機 能 の 追 加 ( d s n ame ) (7) 類 似 したシステムコールの統 一 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 7 TEF022-W001-01.00.00/ja 2.1.1. シ ス テ ム コ ー ル 名 の 変 更 【解 説 】 μ T- Ke r n el で は シ ス テ ム コー ル の先 頭 に ” t k_ ” が 付 きます。 全 ての シ ステ ム コー ルが“ t k _” を付 け る こ と で 移 行 で き る 訳 で は あ り ま せ ん が 、 多 く の シ ス テ ム コー ルがこ の 方 法 で移 行 可 能 です 。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 8 TEF022-W001-01.00.00/ja 2 . 1 . 2 . オ ブ ジ ェ ク ト ID の 割 り 当 て 方 法 の 変 更 【解 説 】 μ T- Ke r n el ではオブジェクトを生 成 す る場 合 に、 I D を 自 動 的 に 割 り当 て ま す。 μ I T R O N 4 .0 に お いて ID を 即 値 で指 定 し て オブ ジ ェクト を生 成 し て いるプ ロ グラ ム で は 、 I D を 自 動 生 成 す る方 法 に 変 更 して くだ さ い 。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 9 TEF022-W001-01.00.00/ja 2 . 1 . 3 . 動 的 API へ の 統 一 【 移 行 の手 順 】 ( 1 ) 初 期 起 動 タス クの 優 先 度 を 最 高 ( 1) に 変 更 する。 ( 2 ) 各 オ ブジ ェ クトを 動 的 生 成 する 。 【解 説 】 静 的 生 成 のみ を 利 用 したμ I T R O N4 . 0 で 動 作 す るプ ロ グラム を μ T-K er n e l に 移 行 す る 場 合 、 初 期 起 動 タ ス クの優 先 度 を 最 高 ( 1 )に 変 更 し て おく必 要 が あります 。 μ T- Ke r n el で は 動 的 生 成 の みをサ ポ ー トし てい ま す 。こ のため 、 TA _AC T 属 性 を指 定 し て の タス ク 生 成 を 行 ってい る箇 所 にお い て TA_A C T の代 わりに タ スクの実 行 ( t k_ s ta _ t s k ) を 呼 び 出 す処 理 を 追 加 し た場 合 、初 期 起 動 タス クが プ リ エン プ ト さ れてし ま い 、意 図 し た状 態 にな る前 に アプ リ ケーシ ョ ンの 実 行 が 開 始 さ れて しま い 、 移 植 前 とは 同 じ 動 作 に なら な い こ とも あります。 以 下 の 例 では 初 期 優 先 度 の 高 い 順 に t a s k 3 、 ta sk 2 、 t a s k1 と実 行 さ れるこ とを 期 待 し て い ま す。 リ ス ト 2-1 μ IT RON4. 0 の静 的 生 成 例 : 初期優先度 : : CRE_TSK( 1, {TA_HLNG|TA_ACT,0x00000001, task1, 3, 0x400, NULL }); CRE_TSK( 2, {TA_HLNG|TA_ACT,0x00000002, task2, 2, 0x400, NULL }); CRE_TSK( 3, {TA_HLNG|TA_ACT,0x00000003, task3, 1, 0x400, NULL }); : T- K e rn e l の u s e r m ai n で の 記 述 例 に ある、 初 期 タ ス クの 優 先 度 を 一 時 的 に 最 高 優 先 度 ( 1 )に 引 き上 げ る記 述 を 忘 れると、 t a s k 1 が 最 初 に 起 動 されて し ま い、t a s k 1 が 待 ち 状 態 か 終 了 状 態 に な るま で 初 期 タ ス クに は戻 っ て きません 。 こ れで はμ I T R O N 4 .0 の 静 的 生 成 の 例 と同 様 の 動 作 に はな り ませ ん 。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 10 TEF022-W001-01.00.00/ja リ ス ト 2-2 μ T-Ke rnel の usermain で の記 述 例 EXPORT INT usermain( void ) { T_CTSK pk_ctsk; 各 タスクが 個 別 に 実 行 されな い よ う に ER ercd; す るため に必 要 な 記 述 。 : tk_chg_pri( TSK_SELF, 1 ); /* オ ブ ジ ェ ク ト の 生 成 : /* 優 先 度 を 最 高 に 設 定 */ */ /* task1 の 生 成 と 起 動 */ pk_ctsk.tskatr = TA_HLNG | TA_RNG0 | TA_USERBUF; pk_ctsk.task = task1; pk_ctsk.itskpri = 3; pk_ctsk.stksz = sizeof(task_stack1); pk_ctsk.bufptr = task_stack1; task_id = tk_cre_tsk( &pk_ctsk ); ercd = tk_sta_tsk( task_id, 0 ); /* TA_ACT の 代 わ り */ /* task2 の 生 成 と 起 動 */ pk_ctsk.tskatr = TA_HLNG | TA_RNG0 | TA_USERBUF; pk_ctsk.task = task2; pk_ctsk.itskpri = 2; pk_ctsk.stksz = sizeof(task_stack2); pk_ctsk.bufptr = task_stack2; task_id = tk_cre_tsk( &pk_ctsk ); ercd = tk_sta_tsk( task_id, 0 ); /* TA_ACT の 代 わ り */ /* task3 の 生 成 と 起 動 */ pk_ctsk.tskatr = TA_HLNG | TA_RNG0 | TA_USERBUF; pk_ctsk.task = task3; pk_ctsk.itskpri = 1; pk_ctsk.stksz = sizeof(task_stack3); pk_ctsk.bufptr = task_stack3; task_id = tk_cre_tsk( &pk_ctsk ); ercd = tk_sta_tsk( task_id, 0 ); /* TA_ACT の 代 わ り : */ こ の 待 ち 状 態 にな っ た時 点 で 、 静 的 生 成 と 同 様 の 状 態 を 作 るこ とがで きる。 tk_slp_tsk( TMO_FEVR ); return 0; /* 関 数 を 終 了 さ せ な い */ } Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 11 TEF022-W001-01.00.00/ja 2 . 1 . 4 . 拡 張 情 報 exin f の 使 い 方 の 統 一 【解 説 】 μ I T R O N で は タ ス クを起 動 す る際 に はそ の タスク の拡 張 情 報 が 渡 さ れま す 。 ただ し、 起 動 コー ド を指 定 し て タスク を 起 動 する サ ー ビ ス コ ー ル ( s t a_ t sk ) に よっ て タス クが 起 動 された 場 合 には 、タ ス クの 生 成 時 に 指 定 した拡 張 情 報 で は なく 、 指 定 さ れた起 動 コー ド を渡 す 仕 様 にな っ てい ま す 。 こ れ に 対 しμ T- Ke r n el で は 、 タ スク の生 成 時 に 指 定 さ れた拡 張 情 報 e x in f とタスクの起 動 時 に 指 定 さ れたタ ス ク起 動 コー ド s t a c d の 両 方 が そ れぞれ別 の 変 数 とし て 渡 さ れます 。 リ ス ト 2-3 μ IT RON で の タ スク のC 言 語 に よ る 記 述 形 式 void task( VP_INT exinf ) { タスク本 体 ext_tsk(); } μ I T R O N 4 . 0 仕 様 書 ( Ve r. 4 . 0 3 . 0 3 ) P. 8 0 よ り 抜 粋 リ ス ト 2-4 μ T-Ke rnel で の タス クの C 言 語 によ る 記 述 形 式 void task( INT stacd, VP exinf ) { /* 処理 */ tk_ext_tsk(); または tk_exd_tsk(); /* タスクの終 了 */ } μ T- K e r n e l 仕 様 書 ( T E F 0 2 0 - S 0 0 4 - 0 1 . 0 1 . 0 0 / j a ) P. 3 5 よ り 抜 粋 な お 、 μ T- Ke r n el も μ ITR O N も 拡 張 情 報 e xin f の 内 容 には 関 与 しませ ん 。 ユ ー ザが 自 由 に 値 を 設 定 す るこ とがで きま す 。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 12 TEF022-W001-01.00.00/ja 2 . 1 . 5 . 同 期 ・ 通 信 オ ブ ジ ェ ク ト な ど へ の 拡 張 情 報 exin f の 追 加 【解 説 】 タ ス ク 以 外 のオ ブ ジ ェクト( 同 期 ・ 通 信 の セ マ フ ォ等 )に も 拡 張 情 報 が 追 加 さ れま し た。 オ ブ ジ ェクトの 生 成 時 や、 状 態 参 照 時 に 拡 張 情 報 を 利 用 するこ とが 可 能 に な りま し た。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 13 TEF022-W001-01.00.00/ja 2 . 1 . 6 . デ バ ッ ガ サ ポ ー ト 機 能 の 追 加 ( dsn a m e) 【解 説 】 オ ブ ジ ェクトの 生 成 情 報 に 、“ d s n a me :D S オ ブジ ェクト 名 称 ” のメ ン バが追 加 さ れまし た。 TA _ D SN AM E を 指 定 し た場 合 に d s n a m e は有 効 とな り 、D S オ ブ ジ ェク ト 名 称 と して 設 定 さ れま す。D S オ ブ ジェク ト 名 称 はデ バ ッガ がオ ブ ジ ェクトを 識 別 す るため に 使 用 さ れ、 デ バ ッ ガ サポ ート 機 能 の シ ステ ム コ ー ル td_ r ef _dsname と t d _ s e t _d s n a me か ら の み操 作 可 能 です。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 14 TEF022-W001-01.00.00/ja 2.1.7. 類 似 し た シ ス テ ム コ ー ル の 統 一 【解 説 】 μ T- Ke r n el で は 、 類 似 し た シ ス テ ムコー ル が 統 一 さ れ ま し た。 た と え ば 、 待 ち 状 態 に なるシ ス テ ム コー ルに お いて 、 タ イ ムアウ ト あ りの シス テ ム コ ー ルは タ イ ム ア ウ ト な し の シ ス テ ム コー ル に 統 一 さ れ て い ま す 。 例 ) μITRON μ T- Ke r n el slp_tsk タ イ ム アウ ト指 定 な し( 無 限 待 ち) tslp_tsk タ イ ム アウ ト指 定 あり t k _ s l p_ t s k タ イ ム アウ ト指 定 あり 詳 細 に ついて は 、各 シ ステ ム コー ルの移 行 の 中 で解 説 し て いま す 。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 15 TEF022-W001-01.00.00/ja 2.2. タ ス ク 管 理 機 能 μ I T R O N 4 .0 の シ ス テ ムコー ル と μ T-K e r ne lの シ ス テ ム コ ー ル の 対 応 は 表 2 - 1 の 通 り です。 表 2 - 1 μ ITR ON4. 0 と T- Ke rnel の シ ス テ ムコ ー ル の 対 応 機能 μ I T R O N 4 .0 タ ス ク の 生 成 ( 静 的 A P I) C RE _TS K タスクの生 成 c re _ts k タ ス ク の 生 成 ( I D 番 号 自 動 割 付 け) μ T- Ke r n el t k_ cre _t sk a cr e_t sk タスクの削 除 d el _ts k t k_ del _t sk タスクの起 動 a ct _ts k t k_ slp _t sk タスクの起 動 i ac t_t sk t k_ wup _t sk タ ス ク 起 動 要 求 の キャン セ ル c an _ac t t k_ can _w up タ ス クの 起 動 ( 起 動 コー ド指 定 ) s ta _ts k t k_ sta _t sk 自 タ ス クの 終 了 e xt _ts k t k_ ext _t sk 自 タ ス クの 終 了 と削 除 e xd _ts k t k_ exd _t sk 他 タ ス クの 強 制 終 了 t er _ts k t k_ ter _t sk タスク優 先 度 の変 更 c hg _pr i t k_ chg _p ri タスク優 先 度 の参 照 g et _pr i タ ス クの 状 態 参 照 r ef _ts k タ ス クの 状 態 参 照 ( 簡 易 版 ) r ef _ts t t k_ ref _t sk μ T- Ke r n el で は タ スク生 成 の 機 能 は tk _c re_t sk に、 タ スク の情 報 を取 得 す る機 能 は t k_ ref _t sk に 集 約 されま す 。ま た、 タ ス クの 起 動 要 求 を キュー イ ン グする機 能 は ありま せ ん の で 、t k_ slp _t sk 、tk _w up _ts k、 tk _c an_ wu p な ど で 代 用 し ま す。 タ スク の起 動 要 求 を キ ュ ー イ ン グ す る こ と が な け れ ば 、 t k_e xt _ts k、 tk _s ta_ ts k へ の 変 更 で対 応 で きます 。 そ の 他 の 機 能 は 、 概 ねシ ス テ ム コール の 名 称 変 更 で 移 行 できま す 。 以 下 、 そ れぞれの シ ステム コー ル につ い て 個 別 に 説 明 し ます 。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 16 TEF022-W001-01.00.00/ja 2 . 2 . 1 . タ ス ク の 生 成 ( C R E _T S K / c r e _ ts k / a c r e _ ts k ) こ こ で は 、 タス ク 生 成 の移 行 方 法 につ い て 、 以 下 の 4つ に分 け て説 明 し ま す。 ( A ) a c r e _ t s k から t k _ c re _ ts k へ I D 番 号 自 動 割 付 けから の 移 行 ( B ) c r e _ t s k から t k _ c re _ ts k へ I D 番 号 指 定 か らの 移 行 ( C ) C RE _ T S K か ら t k _ c re_ t s k へ 静 的 API からの移 行 ( D ) タ ス クの 記 述 形 式 登 録 す る関 数 の 記 述 につ い て T- K e rn el はプ ロ グラ ム の動 的 な ロ ード を 前 提 に設 計 さ れてい ま す 。こ のため 、 タ ス クな どの オ ブ ジ ェクトは プ ロ グラ ムの ロ ー ド 時 に動 的 に 生 成 し て ID も 自 動 的 に 割 り付 け るこ とにな っ て い ま す 。 μT-K e r ne l では T- Ke r n el との 互 換 性 を 優 先 し、 タ ス クの 生 成 の t k_ c r e _ t s k で は タ ス ク I D は 自 動 割 付 け にな って いま す 。 t k _ c r e _ t s k は μ I T R O N4 . 0 の a c r e _ t s k と ほ ぼ等 価 のシ ステ ム コ ー ル です の で 、 a c r e _ t s k を利 用 し て いる場 合 は その まま μ T- Ke r n el に移 行 で きま す 。他 のシ ス テム コー ル ( CR E_ TS K/c r e _ t s k )は移 行 に 際 して 調 整 が 必 要 にな り ます。 ま た、 タ スクとし て 登 録 す る関 数 の C 言 語 での記 述 形 式 も異 な って いま すが 、 こ れは テ ン プ レ ート を 用 意 し て 変 更 し て いけ ば比 較 的 簡 単 に 対 応 で きま す 。 タ スクの 記 述 形 式 に つ い て は 、各 シ ステ ム コー ルの移 行 方 法 の説 明 後 に別 途 説 明 します 。 ( A ) a c r e _ t s k から t k _ c re _ ts k へ 【 移 行 の ポイン ト】 ( 1 ) シ ス テ ム コ ール 名 称 の 変 更 ( 2 ) タ ス ク属 性 の 追 加 ( 3 ) ス タ ッ ク指 定 用 メ ン バ 変 数 名 の 変 更 a c r e _ t s k と t k _ c r e _ t s k は 、 ほぼ 同 等 の 機 能 です 。 タ ス ク 属 性 の追 加 とタ ス ク生 成 情 報 のメ ン バ 変 数 名 を 変 更 するこ とで 移 行 で きま す 。 リ ス ト 2-5 μ IT RON4. 0 で の タスク の 生 成 ( acre_tsk) T_CTSK ID static INT pk_ctsk; task_id; task_stack[0x400/sizeof(INT)]; : pk_ctsk.exinf pk_ctsk.tskatr pk_ctsk.task pk_ctsk.itskpri pk_ctsk.stksz pk_ctsk.stk = = = = = = (VP_INT)0; /* タスクの生 成 情 報 TA_HLNG; task; 1; sizeof(task_stack); task_stack; task_id = acre_tsk( &pk_ctsk ); /* タスクの生 成 と /* タスク ID の自 動 割 当 */ */ */ : Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 17 TEF022-W001-01.00.00/ja リ ス ト 2-6 μ T-Ke rnel で の タス ク の 生 成 T_CTSK ID static INT pk_ctsk; task_id; task_stack[0x400/sizeof(INT)]; : pk_ctsk.exinf pk_ctsk.tskatr pk_ctsk.task pk_ctsk.itskpri pk_ctsk.stksz pk_ctsk.bufptr = = = = = = (VP)0; TA_HLNG | TA_RNG0 | TA_USERBUF; task; 1; sizeof(task_stack); task_stack; task_id = tk_cre_tsk( &pk_ctsk ); : T A _ R N G 0 は タ ス ク の 保 護 レ ベ ル を指 定 し て いま す 。 TA_ R NG n ( n = 0 , 1 , 2 , 3 ) で 保 護 レ ベ ル n で 動 作 す るプ ロ グラ ム で あるこ とを 指 定 します 。 μ T-K e rn e l で は 保 護 レ ベ ルは使 用 し ま せ んの で無 視 し て いま す 。 この ため 、 TA_ R NG 0 を 指 定 しな くて も 動 作 し ま すが 、 T- K e rn e l との プ ロ グラ ムの 互 換 性 を確 保 す るため 、 移 行 の際 に は必 ず保 護 レ ベルを 指 定 す るよ う に して くだ さ い 。 後 日 、 T-K er n e l に 移 植 す る際 、 プ ログラ ム の 性 質 を 考 慮 したう え で ど のレ ベ ル で 実 行 さ せ る か を 検 討 し て 決 定 し て く だ さい。 T- Ke r n el で は 各 保 護 レ ベ ル を以 下 の よ うに 規 定 し て い ます。 表 2 - 2 T-Ke rne l の保 護 レ ベル タスク属 性 保 護 レ ベル 用途 T A_ RNG 0 高 レベル 0 シ ス テ ムソ フト ウ ェ ア( O S、 デ バ イ ス ドラ イ バ な ど ) T A_ RNG 1 ↑ レベル 1 シ ス テ ムア プリ ケ ー シ ョ ン T A_ RNG 2 ↓ レベル 2 未 使 用 (予 約 ) T A_ RNG 3 低 レベル 3 ユーザアプリケーション T A _ U S E R B U F は 生 成 する タ ス ク の スタ ッ ク を ア プリ ケ ー シ ョ ン( t k _ c r e _ t s k を 発 行 す る側 ) で 確 保 し てい る場 合 に指 定 し ます 。こ の タ スク 属 性 を 指 定 するとタ ス ク 生 成 情 報 のメン バ 変 数 b u f p t r が 有 効 となりま す 。 μ I T R O N 4 .0 で は 、 タ ス ク の ス タ ッ ク は ア プ リ ケ ー シ ョ ン で 確 保 す る 必 要 があ り ま し たが、 μ T- Ke r n el で は シス テム で 自 動 的 に 確 保 さ れま す 。 この 場 合 は 、 タ スク属 性 とし て TA _ U SE RB U F を 指 定 せ ずに 、ス タ ッ ク サ イズ ( s t k s z )のみ を 指 定 しま す ( b u f p tr の 指 定 も 不 要 で す )。TA _ U SE RB U F が無 い場 合 、 μ T-K e r ne l が タス クの ス タ ック 領 域 として s t k s z バ イ トの メ モリ 領 域 を 自 動 的 に 割 当 て ま す。 タ ス ク として登 録 す る関 数 ( pk_ ct sk. ta sk = tas k; で指 定 ) の記 述 形 式 に つ いては 「 ( D) タ ス クの 記 述 形 式 」 で 説 明 します 。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 18 TEF022-W001-01.00.00/ja ( B ) c r e _ t s k から t k _ c re _ ts k へ 【 移 行 の ポイン ト】 (1) タスク ID 格 納 処 理 の追 加 ( 2 ) シ ス テ ム コ ール 名 称 の 変 更 ( 3 ) タ ス ク属 性 の 追 加 ( 4 ) ス タ ッ ク指 定 用 メ ン バ 変 数 名 の 変 更 T- K e rn e l で は タ ス ク ID を 自 動 で割 り 付 けます 。 この ため、 割 り 付 けられたタ ス ク ID を 変 数 に 保 存 し、 後 で 利 用 で きるよ う にす る処 理 を追 加 し ます 。 リ ス ト 2-7 μ IT RON4. 0 で の タスク の 生 成 ( cre_tsk) T_CTSK ER static INT pk_ctsk; ercd; task_stack[0x400/sizeof(INT)]; : pk_ctsk.exinf pk_ctsk.tskatr pk_ctsk.task pk_ctsk.itskpri pk_ctsk.stksz pk_ctsk.stk = = = = = = (VP_INT)0; TA_HLNG; task; 1; sizeof(task_stack); task_stack; ercd = cre_tsk( 10, &pk_ctsk ); /* タスク ID = 10 のタスク */ : リ ス ト 2-8 μ T-Ke rnel で の タス ク の 生 成 T_CTSK ID static INT pk_ctsk; task_id; task_stack[0x400/sizeof(INT)]; : pk_ctsk.exinf pk_ctsk.tskatr pk_ctsk.task pk_ctsk.itskpri pk_ctsk.stksz pk_ctsk.bufptr = = = = = = (VP)0; TA_HLNG | TA_RNG0 | TA_USERBUF; task; 1; sizeof(task_stack); task_stack; task_id = tk_cre_tsk( &pk_ctsk ); /* タスク ID は自 動 割 当 */ : T A _ R N G 0 、 T A _ U S E R B U F 、 b u f p t r に つ いて は(A ) を参 照 して くだ さ い 。 μ I T R O N で は c r e _ t s k を 使 用 する場 合 、 タ スク I D を アプリ ケー シ ョ ン側 で 指 定 しま す 。 即 値 を 指 定 で きるの で 、シ ス テ ムの起 動 時 か らタ ス ク を 個 別 に 識 別 で きるとい っ たメ リ ット が あ り ま すが 、シス テ ム を 開 発 す る 段 階 で 、 タ ス ク ID が 一 意 にな るよ う に 時 に 開 発 者 が調 整 し て お か なけ れば な りま せ ん。 一 方 のμ T- K e r nel では タ スク ID は 自 動 的 に割 当 て ら れま すの で 、 開 発 者 が割 り 振 る必 要 は あり ま せん。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 19 TEF022-W001-01.00.00/ja μ T- Ke r n el へ の 移 行 に 際 して は、例 え ば グロー バ ル 変 数 を 用 意 して 、そ の 変 数 に生 成 し た タ ス ク の タ ス ク I D を指 定 す るとい っ た実 装 が 必 要 となりま す 。 リ ス ト 2-9 マ ク ロ に よるタ ス ク ID の指 定 例 ( μITRON4.0) #define TID_CLIENT (10) : T_CTSK pk_ctsk; ER ercd; static INT task_stack[0x400/sizeof(INT)]; : pk_ctsk.exinf = (VP_INT)0; pk_ctsk.tskatr = TA_HLNG; pk_ctsk.task = task; pk_ctsk.itskpri = 1; pk_ctsk.stksz = sizeof(task_stack); pk_ctsk.stk = task_stack; ercd = cre_tsk( TID_CLIENT, &pk_ctsk ); : リ ス ト 2-1 0 外 部 変 数 へ の タ ス ク ID の 格 納 例 static #define ID tid_client = 0; TID_CLIENT tid_client : T_CTSK pk_ctsk; static INT task_stack[0x400/sizeof(INT)]; : pk_ctsk.exinf pk_ctsk.tskatr pk_ctsk.task pk_ctsk.itskpri pk_ctsk.stksz pk_ctsk.bufptr = = = = = = (VP)0; TA_HLNG | TA_RNG0 | TA_USERBUF; task; 1; sizeof(task_stack); task_stack; tid_client = tk_cre_tsk( &pk_ctsk ); : 上 記 のリ ス トで は 、 μ I TR O N 4 . 0 も T-K e r ne l も TI D _C LI E NT とい う マ ク ロ を 定 義 してあ り ま す 。こ の よ う に す る こと で 例 え ば 、タ ス ク I D を指 定 す る必 要 の あるシ ステ ム コー ルの移 行 に お いて パラ メ ー タ を変 更 す る必 要 が なく なり ます 。 な お 、 タ スク I D を 格 納 する変 数 t i d _c l i en t の 名 称 を 直 接 T I D_ C L I E N T と宣 言 す れば マ ク ロ を 定 義 す る必 要 はな くな り ます。 ただ 一 般 に は 、 マク ロは 大 文 字 、変 数 名 は 小 文 字 を 利 用 す るこ とが 多 い よ う です の で 、上 記 リ ス トの よう に しま し た。 実 際 の移 行 に 際 し ては 、 各 社 の コー ディ ングル ー ルに適 合 す るよ うに 調 整 し てくだ さ い 。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 20 TEF022-W001-01.00.00/ja ( C ) C RE _ T S K か ら t k _ c re_ t s k へ 【 移 行 の ポイン ト】 ( 1 ) 初 期 タ ス クで の タス クの生 成 (2) タスク ID 格 納 処 理 ( 3 ) シ ス テ ム コ ール 名 称 の 変 更 ( 4 ) タ ス ク属 性 の 追 加 ( 5 ) ス タ ッ ク指 定 用 メ ン バ 変 数 名 の 変 更 T- K e rn e l は 、 アプ リ ケー シ ョ ンプ ログラ ム の 動 的 な ロ ー ドを前 提 とし て設 計 さ れてい るため 、 静 的 A P I はサポートし ていま せ ん。 μ T- K e rn el も T-K e r nel との 互 換 性 を 重 視 し た設 計 に な っ てお り 、静 的 A P I は サ ポ ート して い ま せん 。μ I T R O N 4 .0 の 静 的 API を 使 用 して い る 場 合 は 、C RE _ T S K を t k _ c r e _ t s k に 置 き換 え 、シ ス テ ムの起 動 時 に実 行 さ れるタ ス ク な ど で タ ス ク を生 成 さ せ るこ とで 対 応 し ます 。 リ ス ト 2- 11 μ IT RON4. 0 で の タスク の 生 成 ( CRE_TSK) CRE_TSK(tsk_id, { TA_HLNG, (VP_INT)0, task, 1, sizeof(task_stack), task_stack} ); リ ス ト 2-1 2 μT-Ke rne l で の タスク の 生 成 T_CTSK ID static INT pk_ctsk; task_id; task_stack[0x400/sizeof(INT)]; : pk_ctsk.exinf pk_ctsk.tskatr pk_ctsk.task pk_ctsk.itskpri pk_ctsk.stksz pk_ctsk.bufptr = = = = = = (VP)0; TA_HLNG | TA_RNG0 | TA_USERBUF; task; 1; sizeof(task_stack); task_stack; task_id = tk_cre_tsk( &pk_ctsk ); : T A _ R N G 0 、T A _ U S E R B U F 、 b u f p t r に つ い て は( A)を 参 照 して くだ さ い 。 μ I T R O N 4 .0 の 静 的 API である CR E_ TSK の場 合 、 開 発 者 は シ ステム コン フ ィ ギュレ ー シ ョ ン フ ァイル に 静 的 に生 成 し たいタ ス クの 数 だけ 静 的 A P I を 記 述 し 、その フ ァ イル をコン フ ィ ギ ュレ ータ に 通 すこ とで タ ス ク を静 的 に 生 成 しま す 。 μ T- Ke r n el で は 静 的 A P I は あ り ませ ん の で、 tk _ c r e _ t s k を 呼 び 出 して タ ス ク を 生 成 す るこ とで 対 応 し ま す。 静 的 A P I を使 用 し た場 合 、 シ ステ ムが 起 動 し た段 階 で 既 にタ ス クが 生 成 さ れて い ます。 μ T- Ke r n el の 場 合 、 シス テ ム 起 動 後 に タ スク を生 成 す るこ とに な りま すので 、 例 え ば初 期 タ ス ク 内 で 静 的 A P I に 対 応 す る t k _ cr e _ t sk を 全 て 呼 び 出 し 、 そ の 後 、 ア プ リ ケ ー シ ョ ン タ ス ク を 起 動 す るとい っ た構 成 に す るこ とで 同 じ よ う な振 る舞 い にさ せ るこ とがで きま す 。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 21 TEF022-W001-01.00.00/ja system.cfg システムコンフィギュ レーションファイル www _cfg.c C言語プリプロセッサ ソフトウエア部品 構成・初期化ファイル ソフトウェア部品の コンフィギュレータ www _id.h ID自動割付け結果 ヘッダファイル kernel_cfg.c カーネル 構成・初期化ファイル カーネルの コンフィギュレータ kernel_id.h ID自動割付け結果 ヘッダファイル ※図中のファイル名は例である. 図 2 - 1 シス テ ムコ ンフィ ギ ュレ ー ショ ン フ ァイ ルの 処 理 手 順 (μITRON4.0 仕 様 書 「2.1.10 システムコンフィギュレーションファイル」より) シ ス テ ム の起 動 Semaphore Event Flag 初 期 タスク Mail Box tk_cre_sem : tk_cre_xxx tk_cre_tsk tk_sta_tsk Application Task Application Task 図 2 - 2 μT- Ke rne l の初 期 タ スクを 使 用 したオ ブジ ェク トの 生 成 手 順 μ T- Ke r n el で は 、 初 期 タ ス クの 関 数 名 は k n l_ i ni t _ t a s k であり 、 こ の タス ク から u s e r m a i n とい う 関 数 が呼 出 さ れます 。 初 期 タ スク 実 行 時 に動 作 さ せ たい 処 理 は 、こ の 関 数 に 記 述 し ます 。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 22 TEF022-W001-01.00.00/ja リ ス ト 2-1 3 usermain で の 記 述 例 EXPORT INT { T_CTSK ID ER : usermain( void ) pk_ctsk; task_id1; ercd; tk_chg_pri( TSK_SELF, 1 ); /* オ ブ ジ ェ ク ト の 生 成 : /* タ ス ク の 生 成 pk_ctsk.tskatr pk_ctsk.task pk_ctsk.itskpri pk_ctsk.stksz pk_ctsk.bufptr = = = = = /* 優 先 度 を 最 高 に 設 定 */ */ */ TA_HLNG | TA_RNG0 | TA_USERBUF; task; 1; sizeof(task_stack); task_stack; task_id1 = tk_cre_tsk( &pk_ctsk ); if( task_id1 < 0 ){ return 0; } ercd = tk_sta_tsk( task_id1, 0 ); if( ercd < 0 ){ return 0; } : tk_slp_tsk( TMO_FEVR ); return 0; /* 関 数 を 終 了 さ せ な い */ } タ ス ク や セ マフ ォ な ど、 必 要 な オ ブジェク トの 生 成 処 理 は この関 数 にま とめ て 記 載 するこ と で 、 ア プリ ケー シ ョ ンプ ログラ ム の 本 体 が 起 動 する時 点 で 必 要 とな るオ ブジ ェクト を 用 意 し て お く こ とが でき ま す 。 ただ し 、初 期 タ ス ク と生 成 す るタ ス クの優 先 度 に よっ て は、 タ スク を 生 成 ・ 起 動 し た時 点 で デ ィ ス パッ チが 発 生 す る場 合 が あります 。 上 の 例 で は この よ うな こ とがな いよ う に 、 タ スクの 生 成 を 開 始 する前 に 、 t k_c h g _ p ri ( TS K _ S E L F, 1 ) に よ って初 期 タ ス クの優 先 度 を 最 高 に 設 定 し て いま す 。 ま た 、 μ T- Ke r n el は 、 use r ma i n 関 数 を 終 了 するとシ ス テ ムを 終 了 す る構 成 にな って い ま す 。 この ため 、 u s e r m ai n 関 数 から戻 ら な い よ うに t k _ sl p _ t s k ( T M O _ F E V R ) に よ っ て 初 期 タ ス ク を待 ち 状 態 にし て いま す 。ま た は 、 初 期 タ ス ク をア プ リ ケ ー シ ョ ン タ ス ク の 1 つ と し て 利 用 す るこ とも 可 能 で す。 こ の場 合 、初 期 タ ス クのス タ ッ クサ イズ な どが 、 i ni t t a s k _ d e f . h で 規 定 さ れてい ま すの で 、適 宜 調 整 が必 要 とな り ます 。 必 要 な タ スクを 生 成 後 、初 期 タ ス クを停 止 ( リス ト 2 - 1 3 では 起 床 待 ち 状 態 に 移 行 ) す ると ア プ リ ケーショ ン タ ス クが動 作 を 開 始 し ま す。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 23 TEF022-W001-01.00.00/ja ( D ) タ ス クの 記 述 形 式 μ I T R O N 4 .0 とμ T- Ke r n e l の タ スクの 記 述 形 式 は そ れぞれ以 下 の 通 りで す 。 リ ス ト 2-1 4 μ IT RON4. 0 の タスクの 記 述 形 式 void { task( VP_INT exinf ) タスク本体 ext_tsk(); } (μITRON4.0 仕 様 「4.1 タスク管 理 機 能 」より) リ ス ト 2-1 5 μ T-Ke rnel の タ スク の記 述 形 式 void { task( INT stacd, VP exinf ) /* 処理 */ tk_ext_tsk(); または tk_exd_tsk(); /* タ ス ク の 終 了 */ } ( T- K e r n e l 仕 様 書 「 タ ス ク 生 成 t k _ c r e _ t s k 」 よ り ) e x in f は タスク 生 成 時 に指 定 す る拡 張 情 報 で す。 ど の よ うな値 を 指 定 するか は 自 由 で あり 、 μ I T R O N 、μ T- Ke r n el 共 に e xi nf の 内 容 につ い て は関 知 し ま せん 。 μ T- Ke r n el で は stacd が 追 加 されて い ま す。s t a c d は t k_ s t a _ t s k で指 定 し ます 。 μ I T R ON で も s t a _ t sk において st a c d を指 定 す るこ とは できま す が、 s t a _ t s k でタ スク を 起 動 し た場 合 は e xi n f の値 は 使 用 できな い こ とにな り ます 。 μ T- K e rn e l で は そ れ ぞれ別 に 指 定 し ま す(e xi nf は t k_ c re _ t s k、 stacd は t k _ s t a_ t s k )の で 、両 方 の パラメ ー タ を 利 用 す るこ とが できます。 タ ス ク の 終 了 は 自 タ スク の 終 了 ( ex t_ ts k 、 t k _ e x t_ t s k )シ ス テム コ ー ル に よっ て 行 います 。 終 了 と同 時 に タ スク を 削 除 す る場 合 は 自 タ スク の終 了 と削 除 (e x d_ t sk 、 tk _ ex d_ t s k )シ ス テ ム コー ルを利 用 し ます 。こ れら はシ ステ ム コー ルの名 称 の み変 更 す れば 対 応 で きま す 。 た だ し 、 μ I T R O N 4 . 0 仕 様 で は 「 タスク の メ イ ンルー チ ン か らリタ ー ン し た 場 合 に は, e x t_ t s k を呼 び 出 し た場 合 と同 じ振 る舞 い をす る( すな わち タ ス クを 終 了 す る) .」 と規 定 さ れ て お り 、e x t_t s k が なく ても 良 い こ とにな っ てい ま す。 一 方 、 μ T- K e r ne l では t k _ e x t_ ts k 、 ま た は 、 t k_ e x d_ t s k によ る終 了 が必 須 とな り ます の で 、 タスク を 終 了 させ るシ ス テ ムコー ル を 省 略 し て関 数 を 記 述 して い る場 合 は 対 応 が 必 要 とな り ます。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 24 TEF022-W001-01.00.00/ja 2 . 2 . 2 . タ ス ク の 削 除 ( d e l _ ts k ) 【 移 行 の ポイン ト】 ( 1 ) シ ス テ ム コ ール 名 称 の 変 更 タ ス クの 削 除 は シ ステ ム コー ル 名 を置 き換 え るだ けで 移 行 で きま す 。 リ ス ト 2-1 6 μ IT RON4. 0 で の タスク の 削 除 ID ER task_id; ercd; ercd = del_tsk( task_id ); リ ス ト 2-1 7 ID ER μT-Ke rne l で の タスク の 削 除 task_id; ercd; ercd = tk_del_tsk( task_id ); t a s k _ i d には 削 除 対 象 とな るタ ス クの I D が 指 定 さ れ て い るも の とし ま す。 上 記 の 例 では タ ス ク I D を 変 数 t a s k_ i d と して 指 定 し て います が 、μ I T R O N 4 . 0 の c r e _ t s k か C RE _ T S K で タ ス ク を生 成 し た 場 合 は 、 タ ス ク ID を 固 定 値 とし て 生 成 しま す 。 こ の 場 合 、d e l _ t s k の タ スク I D も( c r e _ t s k や CRE _ TSK で指 定 し たのと) 同 じ 固 定 値 を 指 定 し ま す。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 25 TEF022-W001-01.00.00/ja 2.3. タ ス ク 付 属 同 期 機 能 【 タス ク付 属 同 期 機 能 】 主 な変 更 点 • タ ス ク コ ン テキ ス ト 、 非 タス ク コ ン テ キス ト か ら 発 行 す る シ ス テ ム コ ー ル を 統 一 した。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 26 TEF022-W001-01.00.00/ja (A) 機 能 一 覧 タ ス ク付 属 同 期 機 能 の機 能 は 次 の通 り で す。μI T RO N 4 .0 か ら機 能 の追 加 ・ 変 更 は あ り ま せん。 (1) 起 床 待 ち (2) タスクの起 床 ( 3 ) タ ス ク起 床 要 求 の キャン セ ル ( 4 ) 待 ち 状 態 の強 制 解 除 (5) 強 制 待 ち状 態 への移 行 ( 6 ) 強 制 待 ち 状 態 か らの ( 強 制 ) 再 開 ( 7 ) 自 タ ス クの遅 延 ( B ) μ I T R O N 4 .0 とμ T- Ke r n e l の シ ス テ ム コ ー ル の 対 応 μ I T R O N 4 .0 の シ ス テ ムコー ル と μ T-K e r ne lの シ ス テ ム コ ー ル の 対 応 は 表 2 - 3 の 通 り で す。 表 2 - 3 μ ITR ON4. 0 と T- Ke rnel の シ ス テ ムコ ー ル の 対 応 μ I T R O N 4 .0 機能 起床待ち s lp _ts k 起 床 待 ち( タイ ム ア ウト あり ) t sl p_t sk タスクの起 床 タ ス ク の 起 床 ( タスク独 立 部 w up _ts k 2) i wu p_t sk タ ス ク 起 床 要 求 の キャン セ ル c an _wu p 待 ち 状 態 の強 制 解 除 r el _wa i 待 ち 状 態 の強 制 解 除 (タ ス ク 独 立 部 ) i re l_w ai μ T- Ke r n el t k_ slp _t sk t k_ wup _t sk t k_ can _w up t k_ rel _w ai 強 制 待 ち状 態 への移 行 s us _ts k t k_ sus _t sk 強 制 待 ち 状 態 か らの 再 開 r sm _ts k t k_ rsm _t sk f rs m_t sk t k_ frs m_ tsk d ly _ts k t k_ dly _t sk 強 制 待 ち 状 態 か らの 強 制 再 開 自 タ ス クの 遅 延 2 μ I T R O N 4 . 0 仕 様 で は 「 非 タ ス ク コ ン テ キ ス ト 」 と 呼 び ま す が 、 本 書 で は μ T- K e r n e l に 合 わ せ て 「 タ ス ク 独 立 部 」 と し て あ り ます。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 27 TEF022-W001-01.00.00/ja 2 . 3 . 1 . 起 床 待 ち ( s l p _ ts k / ts l p _ ts k ) 【 移 行 の ポイン ト】 ( 1 ) シ ス テ ム コ ール を t k _ s l p _ t s k に 統 一 する 。 ( 2 ) 引 数 に タ イム ア ウ ト時 間 を 指 定 する 。 T- K e rn e l で は 待 ち状 態 に 入 る可 能 性 が あるシ ス テ ム コール には 、 タイム ア ウト 指 定 の 機 能 を 持 たせて い ま す。 μT- K e rn e l で は T- Ke rn e l との 互 換 性 を 優 先 し 、 起 床 待 ち に t k _ s l p_ t s k を 用 い ま す 。 t s l p _ t s k と t k _ s l p_ t s k は 同 等 の 機 能 で あり 、 シス テ ム コー ル名 を 置 き換 え るだ け で移 行 できます。また、 s l p _ t sk と t k _ s l p_ t sk も ほぼ 同 等 の 機 能 であり 、 タ イ ムア ウト 指 定 に永 久 待 ち ( T MO _ FE VR )を 指 定 す るこ とで 移 行 で きます 。 ( A ) s l p _ t s k から t k _ s l p_ ts k へ 【 移 行 の手 順 】 ( 1 ) シ ス テ ム コ ール を t k _ s l p _ t s k に 変 更 する 。 ( 2 ) タ イ ム ア ウ ト値 に T M O _ FE V R を 追 加 する 。 リ ス ト 2-1 8 μ IT RON4. 0 で の 起 床 待 ち ER ercd; ercd = slp_tsk(); リ ス ト 2-1 9 ER μT-Ke rne l で の起 床 待 ち ercd; ercd = tk_slp_tsk(TMO_FEVR); 【解 説 】 T- K e rn e l で は 待 ち状 態 に 入 る可 能 性 が あるシ ス テ ム コール には 、 タイム ア ウト 指 定 の 機 能 を 持 たせて い るため 、タ イ ム アウ ト指 定 に 永 久 待 ち ( TM O_FE VR ) を指 定 し ま す。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 28 TEF022-W001-01.00.00/ja ( B ) t s l p _ t s k から t k _ s l p_ ts k へ 【 移 行 の手 順 】 ( 1 ) シ ス テ ム コ ール を t k _ s l p _ t s k に 変 更 する 。 ( 2 ) 指 定 する 待 ち 時 間 の 範 囲 を 確 認 する 。 ( 3 ) シ ス テ ム の タイ ム ティ ック を 確 認 する。 リ ス ト 2-2 0 μ IT RON4. 0 で の 起 床 待 ち ( タ イムア ウ ト あり ) ER ercd; ercd = tslp_tsk(100); リ ス ト 2-2 1 ER μT-Ke rne l で の起 床 待 ち ( タ イムア ウ ト あり ) ercd; ercd = tk_slp_tsk(100); 【解 説 】 t s l p _ t s k と tk _ s l p_ t s k は 引 数 の 型 と機 能 に つい て は 同 等 で あるため 、 シ ス テ ム コール 名 を置 き換 えるだ け で移 行 で きますが 、μ I TR ON 4 . 0 とμ T-K e r nel で はタ イ ム アウ ト指 定 の 時 間 単 位 とビ ッ ト 幅 が 異 なる可 能 性 があるため 、 こ の 点 は注 意 が 必 要 です。 引 数 の タイム ア ウト 指 定 は t s l p _ t s k と t k _ s l p _ ts k 共 に TMO 型 を 使 用 し ま す。 TMO 型 は μ I T R O N4 . 0 で は 「 符 号 付 き整 数 」 、 μ T- Ke rn e l では 「 符 号 付 き 3 2 ビ ッ ト 整 数 」と 定 義 さ れて います 。 μ T- Ke r n el の 時 間 単 位 は 仕 様 によ っ て ミリ 秒 と規 定 さ れて い ま すが、μ I T R O N 4 .0 の 時 間 単 位 は実 装 定 義 であるため 、 移 植 元 の 時 間 単 位 がミ リ 秒 で は な い 可 能 性 が あります 。 こ の よ うな 場 合 に は、 タ イム ア ウト 時 間 が 同 等 に なるよ う に 調 整 す る必 要 があり ま す 。 ま た 、システムに よって タイ ム ティ ックが 異 な っ ている場 合 がありま す 。タイ ム ティ ックの 設 定 に よ って は動 作 が 異 なる場 合 が ありま すの で 、 移 植 元 と移 植 先 のシ ス テム の タ イ ムティ ック を 確 認 し て、事 前 に 調 整 し て おく 必 要 が ありま す。 μ T- Ke r n el で は デ フ ォ ル ト で 1 0 ミリ 秒 に設 定 さ れて い ます。 設 定 は 以 下 の フ ァイ ルに 含 ま れ て い る CFN _ T I MER _ PE R IOD で す の で、 適 宜 調 整 し て くだ さい。 u tk ern el _so ur ce/ co nfi g/ sys de pen d/ [TA RG ET] 3 / ut k_c onf ig _de pe nd. h 3 [ TA R G E T ] と 記 さ れ た デ ィ レ ク ト リ は 対 象 と な る シ ス テ ム の タ ー ゲ ッ ト ボ ー ド 略 称 に 置 き 換 え て く だ さ い 。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 29 TEF022-W001-01.00.00/ja 2 . 3 . 2 . タ ス ク の 起 床 ( w up _ ts k / i w u p _ ts k ) 【 移 行 の ポイン ト】 ( 1 ) シ ス テ ム コ ール を t k _ wu p _ t s k に 統 一 する 。 ( 2 ) 起 床 する タス クに 自 タスクを 指 定 でき なく な った。 ( A ) w u p _ t s k から t k _ w up _ t s k へ 【 移 行 の手 順 】 ( 1 ) シ ス テ ム コ ール 名 称 を t k_ w u p _ t s k に 変 更 する 。 ( 2 ) 引 数 に 自 タス ク( T SK _ SE L F ) を指 定 し て い る場 合 は セマ フォ な どで 代 替 す る。 リ ス ト 2-2 2 μ IT RON4. 0 で の タスク の 起 床 ER ID ercd; task_id; ercd = wup_tsk(task_id); リ ス ト 2-2 3 ER ID μT-Ke rne l で の タスク の 起 床 ercd; task_id; ercd = tk_wup_tsk(task_id); 【解 説 】 w u p _ t s k と t k _ w up _ t sk は 同 等 の機 能 で あり 、シ ス テ ム コール 名 を 置 き換 え るだけで 移 行 で きま す 。 ま た 、 w u p_ ts k で は 引 数 に 自 タ ス ク ( TS K _ S E L F )を 指 定 す るこ とが 可 能 で し たが 、 t k _ w up _ t sk で は 、 こ れは エ ラ ー( E_O B J) と な りま す 。 この 場 合 、 次 ペ ージ に 示 す よ うに セ マ フ ォ な どを 利 用 す るこ とで 対 応 が 可 能 で す 。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 30 TEF022-W001-01.00.00/ja 例 とし て 、 ここ で は 、 ある条 件 を 判 定 し 、 条 件 が成 立 し て いれば 処 理 を続 行 、 成 立 し て い な け れば成 立 す るま で起 床 待 ち 状 態 を 保 つ プロ グラ ム で 説 明 し ま す 4。 タ ス ク /ハ ン ドラ タスク 起床 w u p _ t s k( TS K _ S E L F ) 条件 成立 起床 待ち slp_tsk() 処理 起床 w u p _ t s k( ta s k _ i d) 条件 成立 図 2-3 wup_ tsk(TSK_SELF)を使 っ た処 理 タ ス ク /ハ ン ドラ タスク t k _ s ig _ sem( ) 条件 成立 セマフォ 待ち t k _ w ai _ sem( ) 条件 成立 t k _ s ig _ sem( ) 処理 図 2 - 4 セマ フォ に よ る代 替 例 次 ペ ー ジ に ソ ー ス コ ー ド例 を 示 しま す 。 な お、 本 例 は セ マ フォ で 代 替 して い ま すが 、デ ー タ の 受 渡 し が発 生 す る場 合 に はメ ール ボ ック スを利 用 す るなど 、 実 際 のプ ロ グラ ム に応 じ て 適 切 な オ ブジェク ト を選 択 し て くだ さい。 s l p _ t s k 実 行 時 に 自 タス クに 対 す る起 床 要 求 キュー イ ン グ数 が 1 以 上 の場 合 は 、 待 ち 状 態 に 入 ら ず 実 行 を 継 続 す るとい う s l p _ t s k の仕 様 を 利 用 して い ま す。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 31 4 TEF022-W001-01.00.00/ja リ ス ト 2-24 wup_tsk(TSK_SELF)を 使 った 処 理 例 ( μITRON4.0) ID task_id; ... void task(VP_INT exinf) { ... if(条 件 ) { wup_tsk(TSK_SELF); } slp_tsk(); //条 件 が成 立 している場 合 は待 ち状 態 に入 らない //何 らかの処 理 } void handler(VP_INT exinf) { ... if(条 件 ) { wup_tsk(task_id); } } リ ス ト 2-2 5 セ マフ ォを利 用 し た 対 応 例 ( μT-Ke rne l) ID sem_id; ... void task(INT stacd, VP exinf) { ... if(条 件 ) { tk_sig_sem(sem_id, 1); } tk_wai_sem(sem_id, 1, TMO_FEVR); //何 らかの処 理 } void handler(VP exinf) { ... if(条 件 ) { tk_sig_sem(sem_id, 1); } } Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 32 TEF022-W001-01.00.00/ja ( B ) i w u p_ t s k か ら t k _ w up _ t s k へ 【 移 行 の手 順 】 ( 1 ) シ ス テ ム コ ール を t k _ wu p _ t s k に 変 更 する 。 リ ス ト 2-2 6 μ IT RON4. 0 で の タスク の 起 床 ER ercd; ercd = iwup_tsk( task_id ); リ ス ト 2-2 7 ER μT-Ke rne l で の タスク の 起 床 ercd; ercd = tk_wup_tsk( task_id ); 【解 説 】 t k _ w up _ t sk は タ ス ク独 立 部 お よ びデ ィ ス パッ チ禁 止 状 態 でも 発 行 で きるよ う に なっ てい ま すの で 、 シス テ ム コー ル名 を 置 き換 え るだ け で移 行 で きます 。 ま た 、 シ ス テ ム コ ー ル の 引 数 t ask _i d は タ ス ク ID で す の で、 変 更 す る必 要 は あり ませ ん 。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 33 TEF022-W001-01.00.00/ja 2 . 3 . 3 . 強 制 待 ち 状 態 へ の 移 行 ( s us _ ts k) 【 移 行 の手 順 】 ( 1 ) シ ス テ ム コ ール 名 称 を t k_ s u s _ t s k に変 更 する 。 ( 2 ) 引 数 に 自 タス ク( T SK _ SE L F ) を指 定 し て い る場 合 は 他 タスクで の 実 行 な ど で 代 替 する。 リ ス ト 2-2 8 μ IT RON4. 0 で の 強 制 待 ち 状 態 への 移 行 ER ID ercd; task_id; ercd = sus_tsk(task_id); リ ス ト 2-2 9 ER ID μT-Ke rne l で の強 制 待 ち 状 態 への 移 行 ercd; task_id; ercd = tk_sus_tsk(task_id); 【解 説 】 s u s _ t s k と t k _ s u s _ t s k は 同 等 の 機 能 で あり 、 シス テ ム コー ル名 を 置 き換 え るだ け で移 行 できます。 ま た 、 s u s _ t s k で は 引 数 に 自 タ ス ク (自 タ ス クの ID 番 号 、または T S K _ S E L F ( = 0 ) ) を指 定 す る こ と が 可 能 で し た が 、t k _ s u s _ t sk で は 、 こ れは エ ラ ー( E_O B J 、ま たは E _ I D ) とな り ます 。 こ の 場 合 、次 ペ ー ジに示 す よ う に優 先 度 の高 い タ ス クな どを 利 用 す るこ とで 対 応 が 可 能 で す。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 34 TEF022-W001-01.00.00/ja 例 とし て 、 ここ で は 、 優 先 度 の 高 いタ ス ク を 起 動 し て 、そ の タス ク から 強 制 待 ち 状 態 に移 行 さ せ る プ ロ グラ ム で 説 明 し ま す。 タスク1 強制待ち s u s _ t s k ( TS K _ S E LF) 図 2-5 sus_tsk(T SK_SELF)を 使 っ た 処 理 タスク1 タスク2 t k _ s t a_ t s k( タスク2 ) t k _ s u s _ t s k( タスク1 ) t k _ ex t_ t s k( ) 図 2 - 6 優 先 度 の 高 いタ ス ク に よる代 替 例 次 ペ ー ジ に ソ ー ス コ ー ド例 を 示 しま す 。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 35 TEF022-W001-01.00.00/ja リ ス ト 2-30 sus_tsk (TSK_SELF)を 使 った 処 理 例 ( μITRON4.0) void task(VP_INT exinf) { ... sus_tsk(TSK_SELF); ... } リ ス ト 2-3 1 優 先 度 の 高 い タ スク を利 用 し た 対 応 例 ( μT-Ke rne l) ID suspend_task_id; ... void task(INT stacd, VP exinf) { ... tk_sta_tsk(suspend_task_id, (INT)tk_get_tid()); ... } void susupend_task(INT stacd, VP exinf) { tk_sus_tsk((ID)stacd); tk_ext_tsk(); } Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 36 TEF022-W001-01.00.00/ja 2 . 3 . 4 . 強 制 待 ち 状 態 か ら の 再 開 ( rs m _ ts k / fr s m _ ts k) 【 移 行 の手 順 】 ( 1 ) シ ス テ ム コ ール 名 称 を t k_ r s m _ t sk 、 t k_ f r s m _ t s k に変 更 する 。 リ ス ト 2-3 2 μ IT RON4. 0 で の 強 制 待 ち 状 態 から の 再 開 ER ID ercd; task_id; ercd = rsm_tsk(task_id); リ ス ト 2-3 3 ER ID μT-Ke rne l で の強 制 待 ち 状 態 から の 再 開 ercd; task_id; ercd = tk_rsm_tsk(task_id); 【解 説 】 r s m _ t s k と t k _ r s m_ t sk は 同 等 の機 能 で あり 、シ ス テ ム コール 名 を 置 き換 え るだけで 移 行 で きま す 。 ま た 、 f r s m _ t s k も 同 様 に t k _ f r s m _ t s k に 移 行 で きま す 。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 37 TEF022-W001-01.00.00/ja 2 . 3 . 5 . 自 タ ス ク の 遅 延 ( d l y_ tsk ) 【 移 行 の ポイン ト】 ( 1 ) 待 ち 時 間 の変 数 の ビ ッ ト幅 に 注 意 する 。 ( 2 ) 待 ち 時 間 =ポ ーリ ン グ の時 の 動 作 の違 い に 注 意 する 。 d l y _ t s k と t k _ d l y _ t s k は 、 ほぼ 同 等 の 機 能 であり 、 シ ステム コー ル 名 を 置 き換 えるだ け で 移 行 で きます 。 ただし 、自 タ ス クの 遅 延 時 間 ( dl yt i m) が 0 の場 合 は 、 動 作 が 異 な るの で 注 意 が 必 要 です 。 引 数 の 待 ち時 間 の 指 定 は RE LTIM 型 を使 用 し ま す。 R E LTIM 型 はμI T R O N 4 . 0 で は 「 符 号 無 し整 数 」 、μ T-K e r ne l では 「 符 号 無 し 3 2 ビ ット整 数 」 と定 義 さ れて います 。 μ I T R O N で は RE LTI M 型 の ビ ット幅 が 3 2 ビット を 超 えて いる可 能 性 があり ま す 。 この 場 合 は 調 整 が必 要 とな り ます 。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 38 TEF022-W001-01.00.00/ja (A) 待 ち時 間 が 1 以 上 の場 合 【 移 行 の手 順 】 ( 1 ) シ ス テ ム コ ール 名 を t k _ d l y _ t s k に 変 更 す る 。 ( 2 ) 指 定 する 待 ち 時 間 の 範 囲 を 確 認 する 。 ( 3 ) シ ス テ ム のタ イ ム テ ィッ クを 確 認 する。 リ ス ト 2-3 4 μ IT RON4. 0 で の 自 タス ク の 遅 延 (遅 延 時 間 が 1 以 上 の 場 合 ) ER ercd; ercd = dly_tsk(100); リ ス ト 2-3 5 ER μT-Ke rne l で の自 タ ス ク の 遅 延 (遅 延 時 間 が 1 以 上 の 場 合 ) ercd; ercd = tk_dly_tsk(100); 【解 説 】 待 ち 時 間 とし て 1以 上 の値 が 指 定 されて い る場 合 は シ ステム コー ル の名 称 を 変 更 す るこ と で 対 応 で きま す 。 μ T- Ke r n el の 時 間 単 位 は 仕 様 によ っ て ミリ 秒 と規 定 さ れて い ま すが、μ I T R O N 4 .0 の 時 間 単 位 は実 装 定 義 であるため 、 移 植 元 の 時 間 単 位 がミ リ 秒 で は な い 可 能 性 が あります 。 こ の よ うな 場 合 に は、 待 ち 時 間 が 同 等 にな るよ う に 調 整 す る必 要 が あります 。 ま た 、システムに よって タイ ム ティ ックが 異 な っ ている場 合 がありま す 。タイ ム ティ ックの 設 定 に よ って は動 作 が 異 なる場 合 が ありま すの で 、 移 植 元 と移 植 先 のシ ス テム の タ イ ムティ ック を 確 認 し て、事 前 に 調 整 し て おく 必 要 が ありま す。 μ T- Ke r n el で は デ フ ォ ル ト で 1 0 ミリ 秒 に設 定 さ れて い ます。 設 定 は 以 下 の フ ァイ ルに 含 ま れ て い る CFN _ T I MER _ PE R IOD で す の で、 適 宜 調 整 し て くだ さい。 u tk ern el _so ur ce/ co nfi g/ sys de pen d/ [TA RG ET] 5 / ut k_c onf ig _de pe nd. h 5 [ TA R G E T ] と 記 さ れ た デ ィ レ ク ト リ は 対 象 と な る シ ス テ ム の タ ー ゲ ッ ト ボ ー ド 略 称 に 置 き 換 え て く だ さ い 。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 39 TEF022-W001-01.00.00/ja ( B ) 待 ち 時 間 が 0 の 場 合 ( ポー リ ン グ ) 【 移 行 の手 順 】 ( 1 ) シ ス テ ム コ ール 名 を t k _ d l y _ t s k に 変 更 す る 。 ま た は 、t k _ ro t _ r d q な ど別 の シ ス テム コ ール の利 用 を 検 討 する 。 ( 2 ) 挙 動 が 変 わる こ と に よ る影 響 の 有 無 を 確 認 する。 d l y _ t s k (0 )…待 ち 状 態 に入 る t k _ d l y _t s k (0 ) … 待 ち 状 態 に は 入 ら な い リ ス ト 2-3 6 μ IT RON4. 0 で の 自 タス ク の 遅 延 (遅 延 時 間 が 0 の 場 合 ) ER ercd; ercd = dly_tsk( 0 ); リ ス ト 2-3 7 ER μT-Ke rne l で の実 装 例 ( 待 ち を期 待 す る 場 合 ) ercd; ercd = tk_dly_tsk( 1 ); リ ス ト 2-3 8 ER 待 ちの 発 生 を 期 待 す る場 合 は 、 遅 延 時 間 を 1 に 変 更 する。 μT-Ke rne l で の実 装 例 ( 実 行 権 を 放 棄 する場 合 ) ercd; ercd = tk_rot_rdq(TPRI_RUN); 【解 説 】 リ ス ト 2- 2 7 で は シ ステ ムコー ル の名 称 と遅 延 時 間 を 変 更 しま し た。 一 般 に はこ の 変 更 で も 正 常 に 動 作 す ると考 え られま す が、 リス ト 2 - 2 6 と 2 - 2 7 と で はタ イ ム アウ ト が 発 生 す るタ イ ミ ン グが 異 な ります ( 詳 細 は後 述 ) 。 元 の プ ロ グ ラ ム に お い て こ の 部 分 で ど の よ う な 動 作 にな る こ と を 期 待 してい るの か を確 認 し たう えで 移 植 す る必 要 が あります 。 リ ス ト 2- 2 8 で は 、 タ スクに い っ たん実 行 権 を 放 棄 さ せ るために タ スク の優 先 順 位 の回 転 t k _ r o t_ r dq を 利 用 して い ま す。 この シス テ ム コー ル を 発 行 し た場 合 、同 一 優 先 度 の 実 行 可 能 状 態 の タス クが 存 在 す れば 、 実 行 状 態 の タス クが 同 一 優 先 度 の待 ち 行 列 の 最 後 尾 に つ な が れ る こ とに な りま す。リ ス ト 2- 2 6 の コー ドが 、遅 延 の 発 生 で は なく 、 実 行 権 の 放 棄 を 目 的 と し て い る 場 合 に は 、 リ ス ト 2 - 2 8 の よう に 変 更 するこ とが で きま す 。 ただ し、 同 一 優 先 度 の 実 行 可 能 状 態 の タ スク が存 在 し な い 場 合 は 何 も せず 実 行 を 継 続 す るこ とにな り ます の で、 μ I T R O N 4 .0 の d l y _ t sk ( 0 ) とは 異 な っ た挙 動 に な りま すので 、 注 意 が必 要 で す 。 こ の 他 に 、 待 ち 時 間 ( d l y _ t s k の パラメ ー タ )を 変 数 に して 動 的 に 変 更 して い るよ う な実 装 の 場 合 は 、そ れぞれのパ ラ メ ー タ でど の よ うに 動 作 す るこ とを期 待 し て いたか を よ く 検 討 し て か ら 移 植 する必 要 が ありま す 。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 40 TEF022-W001-01.00.00/ja 【 遅 延 時 間 =0 の 動 作 の 違 い に つ いて 】 μ I T R O N 4 .0 仕 様 では遅 延 時 間 に 0 を 指 定 した場 合 も 自 タ ス ク を 待 ち状 態 に 移 行 さ せ ま す 。 μ I T RON4. 0 仕 様 に は 以 下 のよ う に 記 載 されて い ま す。 「 この サ ー ビス コ ー ル は , d l y ti m に 0 が指 定 された場 合 にも , 自 タ スクを 待 ち 状 態 に 移 行 さ せ る.」 (μITRON4.0 仕 様 「dly_tsk 自 タスクの遅 延 」より) 「 相 対 時 間 に 0 が指 定 さ れると, サ ー ビ ス コー ルが 呼 出 さ れた後 の , 最 初 の タ イ ム テ ィッ ク でイベ ン ト 処 理 を行 う . 」 (μITRON4.0 仕 様 「2.1.9 相 対 時 間 とシステム時 刻 」より) こ れ に 対 し て 、 μ T- Ke r ne l で は遅 延 時 間 に 0 を指 定 し た場 合 は 、 待 ち状 態 に 移 行 せ ず に 処 理 を 継 続 し ま す( μT- K e rn el の 待 ち 状 態 に 移 行 す る可 能 性 が ある全 て のシ ステ ム コー ル にお い て共 通 ) 。 ま た 、 T-K e rn e l 、μ I T R O N 4 . 0 共 に、 タ イ ム アウ ト と し て 1 以 上 の 値 が 指 定 さ れた場 合 は 、 指 定 さ れた以 上 の 時 間 が 経 過 し た後 に タ イ ムアウ トが 発 生 す るこ とを 保 証 し なけ れば な りま せ ん 。 こ の ため 、 タ イ ム ア ウ ト 値 とし て 1 以 上 の 値 が 指 定 さ れた場 合 は 、最 低 で も1 タイ ム テ ィッ ク分 の待 ちが 発 生 す るこ とに なり ま す 。 以 上 を ま とめ ると下 図 の よ うに な りま す 。 実 際 に待 つ時 間 が異 なる tk_dly_tsk(0) dly_tsk(0) tk_dly_tsk(1) dly_tsk(1) 時刻 自 タスクの待 ち を発行 タイムティック発生 図 2 - 7 タイム ア ウ ト が 発 生 す る タ イミン グ d l y _ t s k ( 0)を 発 行 してか ら タ イ ムアウ トが 発 生 す るま で の時 間 は 一 定 し ま せん の で、 ど の 程 度 の 待 ちが 発 生 す るか は 不 定 です 。 ただし 、シ ス テ ム コール を 発 行 したタ ス クが いっ たん 待 ち 状 態 にな り ます の で、 他 の タス クに 実 行 権 が移 るこ とも あり ま す 。こ のよ う な 機 能 を利 用 す る た め に dl y _t sk ( 0) で実 装 し て いるプ ロ グラ ム で は 、 t k_ r ot _ r d q( TPRI _ R UN )に変 更 す るな ど の調 整 が 必 要 とな り ます 。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 41 TEF022-W001-01.00.00/ja 2.4. 同 期 ・ 通 信 機 能 【同 期 ・通 信 機 能 】 主 な変 更 点 オブジェクト 変更点 セ マ フォ 資 源 数 の複 数 返 却 ・確 保 イ ベ ン トフラグ 解 除 条 件 に一 致 し た ビットの み 0 クリ ア 可 能 データ キュ ー 廃 止 。 メ ール ボ ッ クスの機 能 で 一 部 代 替 可 能 メ ール ボ ッ クス 優 先 度 別 のメ ッ セ ージ キュ ーヘ ッダ 領 域 の 廃 止 【解 説 】 同 期 ・ 通 信 機 能 は 、 μT- K e r ne l では デ ー タ キ ュー が 廃 止 されて い ま す。 デ ー タ キ ューに つ いて は 、メ ー ル ボックス を 利 用 するこ とで 一 部 代 替 が 可 能 で す 。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 42 TEF022-W001-01.00.00/ja 2.4.1. 同 期 ・ 通 信 機 能 ( セ マ フ ォ ) (A) 機 能 一 覧 セ マ フォ の機 能 は 次 の通 り で す。μI T RO N 4 .0 か ら機 能 の追 加 ・ 変 更 は あ り ません。 ( 1 ) セ マ フォ の生 成 ( 2 ) セ マ フォ の削 除 ( 3 ) セ マ フォ 資 源 の 返 却 ( 4 ) セ マ フォ 資 源 の 獲 得 ( 5 ) セ マ フォ の状 態 参 照 ( B ) μ I T R O N 4 .0 とμ T- Ke r n e l の シ ス テ ム コ ー ル の 対 応 μ I T R O N 4 .0 とμ T- Ke r n e lの シ ス テ ム コ ー ル の 対 応 は 、 表 2 - 4 の 通 り で す 。 表 2 - 4 μ ITR ON4. 0 と T- Ke rnel の シ ス テ ムコ ー ル の 対 応 機能 μ I T R O N 4 .0 セ マ フ ォ の生 成 ( 静 的 A P I ) C RE _SE M セマフォの生 成 c re _se m セマフォの生 成 (ID 番 号 自 動 割 付 ) d el _se m セマフォ資 源 の返 却 s ig _se m セマフォ資 源 の返 却 i si g_s em セマフォ資 源 の獲 得 w ai _se m セ マ フ ォ 資 源 の 獲 得 (ポ ー リ ン グ) p ol _se m セ マ フ ォ の状 態 参 照 t k_ cre _s em a cr e_s em セマフォの削 除 セ マ フ ォ 資 源 の 獲 得 (タ イ ム アウ トあり ) μ T- Ke r n el t k_ del _s em t k_ sig _s em t k_ wai _s em t wa i_s em r ef _se m Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. t k_ ref _s em 43 TEF022-W001-01.00.00/ja ( C ) μ T- Ke r n el で の 変 更 点 と追 加 機 能 μ T- Ke r n el で の 変 更 点 と追 加 機 能 を 示 します 。 表 2-5 変 更 点 項目 関 連 する 備考 シ ス テ ム コ ール シ ス テ ム コ ール 名 称 が 変 更 さ れ た 。 全 シ ステ ム コー ル セ マ フ ォ I D が 自 動 割 り当 て と な っ た。 §2.4.1.1 参 照 C RE _SE M c re _se m 静 的 A P I が 廃 止 さ れた。 C RE _SE M §2.4.1.1 参 照 資 源 の 獲 得 /返 却 個 数 s ig _se m §2.4.1.3 参 照 i si g_s em §2.4.1.4 参 照 1 固 定 (指 定 不 可 ) → 任 意 の個 数 ( 指 定 要 )と な っ た 。 w ai _se m p ol _se m t wa i_s em セ マ フォ 生 成 情 報 パ ケッ トの 構 成 が 変 更 C RE _SE M された。 c re _se m §2.4.1.1 参 照 a cr e_s em セ マ フォ 状 態 パ ケ ッ トの構 成 が 変 更 さ れ た。 §2.4.1.5 参 照 r ef _se m 表 2-6 追 加 機 能 項目 備考 セマフォ属 性 に資 源 獲 得 の優 先 順 の属 性 指 定 が追 加 さ §2.4.1.1 参 照 れた。 拡 張 情 報 e x i n f が 追 加 さ れた。 §2.1.1.5 参 照 デ バ ッ グ サ ポー ト 機 能 d sn a m e が追 加 さ れた。 §2.1.1.6 参 照 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 44 TEF022-W001-01.00.00/ja 2 . 4 . 1 . 1 . セ マ フ ォ の 生 成 ( C R E_ S E M / c r e _ s e m / a c r e _ s e m ) 【 移 行 の ポイン ト】 ( 1 ) シ ス テ ム コ ール 名 称 が 変 更 さ れ た 。 ( 2 ) セ マ フ ォ I D が 自 動 割 り当 て とな っ た。 ( 3 ) 静 的 A P I が廃 止 さ れ た。 ( 4 ) セ マ フォ 生 成 情 報 パ ケッ トの 構 成 が 変 更 さ れた 。 i s e mc n t と m a x se m の型 が 変 更 され た ( U I NT→ I N T ) ( 5 ) カ ーネ ル 構 成 定 数 T MA X_ M A XSEM が 廃 止 され た 。 T- K e rn e l は プ ロ グラ ムの 動 的 な ロー ド を 前 提 に 設 計 さ れて お り 、 セ マフ ォ は 動 的 に 生 成 し て I D も 自 動 的 に 割 り付 け るこ とにな っ てい ま す。 μ T- Ke r ne l で は T- Ke r n el との互 換 性 を 優 先 し 、 セマ フ ォ の 生 成 に は t k_ cr e _ se m を用 いま す 。tk _ c r e_ s e m は μ I T R O N4 . 0 の a c r e _ se m と ほ ぼ 等 価 の シス テ ム コー ル で すので 、 あ ま り 変 更 せ ずに μT- K e rn e l に 移 行 で き ま す 。 他 のシ ス テ ム コ ール (C RE _ SE M /c r e_ s em) は 移 行 に際 し て 調 整 が 必 要 に なり ま す。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 45 TEF022-W001-01.00.00/ja ( A ) a c r e _ se m か ら t k _ c re_ s e m へ 【 移 行 の手 順 】 ( 1 ) シ ス テ ム コ ール を t k _ c r e _ s e m に 変 更 する 。 ( 2 ) セ マ フ ォ 属 性 ( s e m a t r ) に T A _ F I R ST を 追 加 する 。 ( 3 ) i s e mc n t と m a x se m の型 を 変 更 する 。 リ ス ト 2-3 9 μ IT RON4. 0 で のセ マフ ォ の 生 成 ( acre_sem) T_CSEM ID pk_csem; sem_id; : pk_csem.sematr pk_csem.isemcnt pk_csem.maxsem = TA_TFIFO; = 0U; = 10U; sem_id = acre_sem(&pk_csem); : リ ス ト 2-4 0 μT-Ke rne l で のセ マフ ォ の 生 成 T_CSEM ID pk_csem; sem_id; : pk_csem.sematr pk_csem.isemcnt pk_csem.maxsem = TA_TFIFO | TA_FIRST; = 0; = 10; sem_id = tk_cre_sem(&pk_csem); : 【解 説 】 a c r e _ se m と t k _ c r e_ s e m は 、 ほぼ同 等 の 機 能 で す 。 セ マ フ ォ 属 性 を 追 加 するこ とで 移 行 で きま す 。 TA _ FIR S T は 、 待 ち 行 列 先 頭 の タス ク を 優 先 して 資 源 を割 り 当 て るという セ マ フ ォ 属 性 で す 。 セ マ フ ォ資 源 の 要 求 数 に 関 係 なく 、 待 ち 行 列 先 頭 の タ スクか ら 順 に 資 源 を 割 り 当 て て い きます。 i s e mc n t と m a x s e m の型 が U I N T か ら I N T に変 更 さ れてい ま す 。 maxse m に 指 定 で きる最 大 値 は μ I T R O N4 . 0 とμ T- Ke r n el 共 に実 装 定 義 です 。 μ T-K e rn e l の 仕 様 で は 、 m a x s e m に 3 2 76 8 以 上 の 値 が指 定 で きるこ とを 保 証 してい な い ため 、移 植 元 のプロ グラ ム が m a x s e m に 3 2 7 68 以 上 の 値 を 指 定 してい る場 合 は実 装 仕 様 書 を 確 認 す る必 要 が あります。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 46 TEF022-W001-01.00.00/ja ( B ) c r e _ se m から t k _ c re _ se m へ 【 移 行 の手 順 】 ( 1 ) シ ス テ ム コ ール を t k _ c r e _ s e m に 変 更 する 。 ( 2 ) セ マ フ ォ 属 性 ( s e m a t r ) に T A _ F I R ST を 追 加 する 。 ( 3 ) i s e mc n t と m a x se m の型 を 変 更 する 。 ( 4 ) セ マ フォ I D を 自 動 割 当 て に 変 更 する 。 【 セ マ フ ォ ID を 変 数 に格 納 し て いる場 合 】 リ ス ト 2-4 1 μ IT RON4. 0 で のセ マフ ォ の 生 成 ( cre_sem) T_CSEM pk_csem; ER ercd; ID sem_id; : sem_id = 10; : pk_csem.sematr = TA_TFIFO; pk_csem.isemcnt = 0U; pk_csem.maxsem = 10U; ercd = cre_sem(sem_id, &pk_csem); : リ ス ト 2-4 2 μT-Ke rne l で のセ マフ ォ の 生 成 T_CSEM ID pk_csem; sem_id; : pk_csem.sematr pk_csem.isemcnt pk_csem.maxsem = TA_TFIFO | TA_FIRST; = 0; = 10; sem_id = tk_cre_sem(&pk_csem); : 【解 説 】 μ T- Ke r n el ではセマフォ I D を自 動 で 割 り 付 け るの で 、 t k_ c re _ se m が 返 す 値 を セ マ フ ォ I D 変 数 に保 存 し 、 後 で 利 用 で きるよ う に す る処 理 を 追 加 し ま す。 μ I T R O N で は c r e _ sem を 使 用 する場 合 、 セ マ フ ォ I D を アプ リ ケ ー シ ョン 側 で 指 定 し ま す 。 即 値 を指 定 で きるの で 、シ ス テム の 起 動 時 か ら セ マ フ ォを 個 別 に 識 別 で きるとい っ たメ リ ット が あります が 、シ ステム 開 発 す る段 階 で 、 セマ フ ォ I D が一 意 にな るよ う に 開 発 者 が 調 整 し て おか なけれ ば な り ま せん 。 一 方 の μ T- Ke r n el で は セ マ フ ォ I D は 自 動 的 に 割 当 て ら れま す の で 、開 発 者 が 割 り振 る必 要 はあり ま せ ん 。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 47 TEF022-W001-01.00.00/ja 【 セ マ フ ォ ID を マ ク ロ 定 義 し て い る場 合 】 リ ス ト 2-4 3 マ ク ロ に よるセ マフ ォ ID の 指 定 (μ IT RON4.0) #define SEMID_CLIENT (10) : T_CSEM pk_csem; ER ercd; : pk_csem.sematr = TA_TFIFO; pk_csem.isemcnt = 0U; pk_csem.maxsem = 10U; ercd = cre_sem(SEMID_CLIENT, &pk_csem); : リ ス ト 2-4 4 外 部 変 数 によ る セ マフォ I D の指 定 static #define ID semid_client = 0; SEMID_CLIENT semid_client : T_CSEM pk_csem; : pk_csem.sematr = TA_TFIFO | TA_FIRST; pk_csem.isemcnt = 0; pk_csem.maxsem = 10; semid_client = tk_cre_sem(&pk_csem); : 【解 説 】 μ I T R O N で は 固 定 の セ マ フ ォ I D を マ ク ロ として 定 義 す る場 合 が 多 くあり ま す 。 マク ロ とし て 定 義 し た場 合 、 マ ク ロを 指 定 す るこ とで シ ス テム 全 体 で セマ フ ォ を 一 意 に 特 定 できるとい っ た メ リ ッ ト が あ り ま す 。 μ T-K e r ne l では この 方 法 は 使 え ません の で 、移 行 に 際 し ては グロー バ ル 変 数 を用 意 し て 、そ の変 数 に 生 成 し たセ マ フ ォの セ マ フ ォ ID を 指 定 するとい っ た実 装 が 必 要 とな り ます 。 上 記 のリ ス トで は 、 μ I TR O N 4 . 0 も T-K e r ne l も SE M ID _C LIE N T と い う マ ク ロ を 定 義 し て あ り ま す 。 こ の よ う に す る こ と で 例 え ば 、 セ マ フ ォ I D を 指 定 する必 要 の あるシ ス テ ム コー ル の 移 行 に おいて パ ラ メー タを 変 更 す る必 要 がな くな り ます 。 な お 、 セ マ フ ォ I D を 格 納 す る変 数 s e m i d _ c l i e n t を 直 接 S E M I D _ C L I E N T と す れ ば マ ク ロ を 定 義 す る必 要 はな くな り ます。 ただ 一 般 に は 、 マク ロは 大 文 字 、変 数 名 は 小 文 字 を 利 用 す るこ とが多 い よ う で すの で 、 上 記 リス トの よ うにし ま し た。 実 際 の 移 行 に際 し ては 、 各 社 の コ ー デ ィ ン グル ー ル に 適 合 す る よ う に 調 整 し て く だ さ い 。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 48 TEF022-W001-01.00.00/ja ( C ) C RE _ SE M か ら t k _ c re_ s e m へ 【 移 行 の手 順 】 ( 1 ) シ ス テ ム コ ール を t k _ c r e _ s e m に 変 更 する 。 ( 2 ) セ マ フ ォ 属 性 ( s e m a t r ) に T A _ F I R ST を 追 加 する 。 ( 3 ) i s e mc n t と m a x se m の型 を 変 更 する 。 ( 4 ) セ マ フォ I D を 自 動 割 当 て に 変 更 する 。 ( 5 ) 初 期 タ ス ク内 に ソース コード を 追 加 する 。 前 述 し たとお り 、 T-K e rn e l はプ ロ グラ ム の 動 的 な ロ ー ド を前 提 とし て い るため 、 静 的 A P I を サ ポ ート して い ま せん 。μ T- Ke r n el で も 同 様 の た め 、 μ I T R O N 4 . 0 で サポ ー ト し て いる 静 的 A P I を 使 用 し て い る場 合 は 、 動 的 生 成 t k _c r e _ se m に置 き換 えます。 リ ス ト 2-4 5 μ IT RON4. 0 で のセ マフ ォ の 生 成 ( CR E_SE M) CRE_SEM(sem_id, { TA_TFIFO, 0U, 10U } ); リ ス ト 2-4 6 μT-Ke rne l で のセ マフ ォ の 生 成 T_CSEM ID pk_csem; sem_id; : pk_csem.sematr pk_csem.isemcnt pk_csem.maxsem = TA_TFIFO | TA_FIRST; = 0; = 10; sem_id = tk_cre_sem(&pk_csem); : 【解 説 】 μ I T R O N 4 .0 の 静 的 A PI である C R E _ SE M の場 合 、 開 発 者 は シ ステム コン フ ィ ギュレ ー シ ョ ン フ ァイル に 静 的 に生 成 し たいセ マ フ ォ の数 だけ 静 的 A P I を 記 述 し 、 その フ ァイ ル を コ ン フ ィ ギ ュレ ータ に 通 すこ とで セ マ フ ォ が静 的 に 生 成 さ れま す 。μ T- K e rn e l で は 静 的 API の 仕 様 そ のもの がな い ため 、 t k _ c re _s e m を 呼 び出 す だ け でセ マ フ ォ を 生 成 す る こ と が で き ま す 。 静 的 API を 使 用 した場 合 、 シ ステ ム が起 動 し た段 階 で既 に セ マ フォ が 生 成 されて い ま す 。 μ T-K e rn e l の 場 合 、 初 期 タ スク内 で t k _ c r e_ s e m を 呼 び 出 す こ と で同 じ よ う な 振 る 舞 いになります。 セ マ フ ォ 生 成 の ソー ス コー ド は 、ア プリ ケー シ ョ ンが 動 きだすま で に実 行 さ れる位 置 に 記 述 し な け れ ば な り ま せ ん。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 49 TEF022-W001-01.00.00/ja 2 . 4 . 1 . 2 . セ マ フ ォ の 削 除 ( d e l _s e m) 【 移 行 の手 順 】 ( 1 ) シ ス テ ム コ ール を t k _ d e l _ s e m に 変 更 する 。 リ ス ト 2-4 7 μ IT RON4. 0 で のセ マフ ォ の 削 除 ER ercd; : ercd = del_sem(sem_id); : リ ス ト 2-4 8 μT-Ke rne l で のセ マフ ォ の 削 除 ER ercd; : ercd = tk_del_sem(sem_id); : 【解 説 】 セ マ フ ォ の削 除 は システ ム コー ル名 を 置 き換 え るだ け で移 行 で きます 。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 50 TEF022-W001-01.00.00/ja 2 . 4 . 1 . 3 . セ マ フ ォ 資 源 の 返 却 ( s i g _s e m / i s i g _s e m) 【 移 行 の手 順 】 ( 1 ) シ ス テ ム コ ール を t k _ s i g _ s e m に 統 一 する 。 ( 2 ) 資 源 返 却 数 ( = 1) を パ ラメータ に 追 加 する 。 リ ス ト 2-4 9 μ IT RON4. 0 で のセ マフ ォ 資 源 の返 却 ER ercd; : ercd = sig_sem(sem_id); : リ ス ト 2-5 0 μT-Ke rne l で のセ マフ ォ 資 源 の返 却 ER ercd; : ercd = tk_sig_sem(sem_id, 1); : 【解 説 】 s i g _ se m およ び i s i g_ s em は t k _ s i g_ s e m とほ ぼ同 等 の 機 能 で あり 、 返 却 す るセ マ フ ォ 資 源 数 で ある第 2 引 数 に 1 を 指 定 す る こ と で 移 行 で き ま す 。 μ I T R O N 4 .0 で は s i g _ s e m で 一 度 に 返 却 で きる最 大 セ マ フ ォ 資 源 数 は 1 で あ り 、 バ イ ナリ ・ セ マ フォ に 近 い 振 る舞 い で し た。 μ T- Ke r ne l で は一 度 に 複 数 の セマ フ ォ 資 源 を 返 却 す るこ とが できる汎 用 セ マ フ ォ の 振 る舞 い にな って い ま す。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 51 TEF022-W001-01.00.00/ja 2 . 4 . 1 . 4 . セ マ フ ォ 資 源 の 獲 得 ( w a i _s e m / p o l _ s e m / t w a i _s e m ) 【 移 行 の ポイン ト】 ( 1 ) シ ス テ ム コ ール を t k _ w a i _ s e m に 統 一 する 。 ( 2 ) 資 源 獲 得 数 を パ ラ メ ータに 追 加 する 。 ( 3 ) ポ ーリ ン グ の動 作 の 違 いに 注 意 する ( 返 値 の 違 い) 。 T- K e rn e l で は 待 ち状 態 に 入 る 可 能 性 が あ るシ ス テ ム コ ー ル に は 、 ポ ー リ ン グ お よ び タ イ ム ア ウト 指 定 の機 能 を 持 たせ て い ます 。μ T- Ke r n el で は T- Ker n e l との互 換 性 を 優 先 し 、 セ マ フ ォ 資 源 の 獲 得 に t k_ w ai _ se m を 用 い ま す 。w a i _ s e m およ び p o l _ sem は t k _ w ai _ s e m の タ イ ムア ウト 指 定 に 永 久 待 ち( T M O _ F E V R)ま たはポーリング( T M O _ P O L) を 指 定 す るこ とで 移 行 で きま す 。 ま た t w a i_ s e m は t k _ wa i_se m と同 等 の 機 能 で あり 、 シ ステ ムコー ル 名 を置 き換 えることで移 行 できます。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 52 TEF022-W001-01.00.00/ja ( A ) w a i _ s e m から t k _ wa i_ s e m へ 【 移 行 の手 順 】 ( 1 ) シ ス テ ム コ ール を t k _ w a i _ s e m に 変 更 する 。 ( 2 ) 資 源 獲 得 数 ( = 1) を パ ラメータ に 追 加 する 。 ( 3 ) タ イ ム ア ウ ト値 に T M O _ FE V R を 設 定 する 。 リ ス ト 2-5 1 μ IT RON4. 0 で のセ マフ ォ 資 源 の獲 得 ER ercd; : ercd = wai_sem(sem_id); : リ ス ト 2-5 2 μT-Ke rne l で のセ マフ ォ 資 源 の獲 得 ER ercd; : ercd = tk_wai_sem(sem_id, 1, TMO_FEVR); : 【解 説 】 T- K e rn e l で は 待 ち状 態 に 入 る可 能 性 が あるシ ス テ ム コール には 、 タイム ア ウト 指 定 の 機 能 を 持 たせ て い るため、 タ イ ム アウ ト指 定 に 永 久 待 ち ( TM O_FE VR ) を 指 定 す る こ と で 移 行 で きます 。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 53 TEF022-W001-01.00.00/ja ( B ) p o l _ s e m から t k _ wa i_ s e m へ 【 移 行 の手 順 】 ( 1 ) シ ス テ ム コ ール を t k _ w a i _ s e m に 変 更 する 。 ( 2 ) 資 源 獲 得 数 ( = 1) を パ ラメータ に 追 加 する 。 ( 3 ) タ イ ム ア ウ ト値 に T M O _ PO L を 設 定 する 。 リ ス ト 2-5 3 μ IT RON4. 0 で のセ マフ ォ 資 源 の獲 得 ( ポ ーリン グ) ER ercd; : ercd = pol_sem(sem_id); : リ ス ト 2-5 4 μT-Ke rne l で のセ マフ ォ 資 源 の獲 得 ( ポ ーリン グ) ER ercd; : ercd = tk_wai_sem(sem_id, 1, TMO_POL); : 【解 説 】 p o l _ s e m と t k _ w ai _ sem は ほ ぼ 同 等 の 機 能 であり 、 タ イ ムア ウト 指 定 にポ ー リ ン グ ( TMO_ POL ) を 指 定 するこ とで 移 行 で きま す 。 【 実 装 に 依 存 する 点 】 タ ス ク 独 立 部 ま たは ディス パ ッ チ 禁 止 状 態 で po l_ s e m, t w a i _ se m( TMO _ PO L)を発 行 し た場 合 、実 装 に よって 動 作 が 異 な る可 能 性 が あるの で注 意 が 必 要 で す 。 タスク独 立 部 または デ ィ ス パッ チ禁 止 状 態 での 発 行 資 源 あり p o l _ s e m( ) 資 源 なし E _O K t w a i_ s e m(TM O _ PO L) t k _ w ai _ sem( TM O_ PO L) E _T MOU T E _O K | E _CT X E _T MOU T | E _C TX E _C TX E _C TX 例 え ば 、 ハ ンド ラ 内 で p o l _ s e m を 呼 び 出 し ている場 合 、 t k _w a i_ s e m に置 き換 えると E _C T X が返 り ま す。 この よ うに タ スク 独 立 部 で p o l _ s e m を使 用 し て いる場 合 に は、 リ スト 2 - 5 5 , 5 6 に示 す よ う に、新 たに タ スクを 作 成 し 、タス ク 内 で t k_w a i_ s e m を呼 び 出 すなど の 変 更 が 必 要 とな り ま す。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 54 TEF022-W001-01.00.00/ja リ ス ト 2- 55 タ ス ク 独 立 部 で pol_sem を 使 っ て い る 場 合 の 対 応 例 ( μ ITRON4. 0) ■μITRON4.0 のソースコード例 ID semid; ... void handler(VP_INT exinf) { ER ercd; ... ercd = pol_sem(semid); if(ercd == E_OK){ ... } } リ ス ト 2-5 6 タ ス ク 独 立 部 で pol_sem を 使 って い る場 合 の 対 応 例 (μ T-Ke rnel ) ■μT-Kernel への移 行 例 ID semid; ID tskid; ... void handler(VP exinf) { tk_wup_tsk(tskid); } void task(INT stacd, VP exinf) { ER ercd; ... tk_slp_tsk(TMO_FEVR); ercd = tk_wai_sem(semid, 1, TMO_POL); if(ercd == E_OK) { ... } ... } Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 55 TEF022-W001-01.00.00/ja ( C ) t w a i_ s e m か ら t k _w a i_ s e m へ 【 移 行 の手 順 】 ( 1 ) シ ス テ ム コ ール を t k _ w a i _ s e m に 変 更 する 。 ( 2 ) 資 源 獲 得 数 ( = 1) を パ ラメータ に 追 加 する 。 リ ス ト 2-5 7 μ IT RON4. 0 で のセ マフ ォ 資 源 の獲 得 ( タ イ ムア ウ ト あり ) ER ercd; : ercd = twai_sem(sem_id, 100); : リ ス ト 2-5 8 μT-Ke rne l で のセ マフ ォ 資 源 の獲 得 ( タ イ ムア ウ ト あり ) ER ercd; : ercd = tk_wai_sem(sem_id, 1, 100); : 【解 説 】 t w a i_ s e m と t k _ w ai _ se m は 同 等 の 機 能 で あり 、 獲 得 す るセ マ フ ォ 資 源 数 で ある第 2 引 数 に 1 を 指 定 す るこ とで 移 行 で きます 。 μ I T R O N 4 .0 で は t w ai_ s e m で 一 度 に 獲 得 できる最 大 セ マ フ ォ 資 源 数 は 1 で あ り 、 バ イ ナリ ・ セ マ フォ に 近 い 振 る舞 い で し た。 μ T- Ke r ne l で は一 度 に 複 数 の セマ フ ォ 資 源 を 獲 得 す るこ とが できる汎 用 セ マ フ ォ の 振 る舞 い にな って い ま す。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 56 TEF022-W001-01.00.00/ja 2 . 4 . 1 . 5 . セ マ フ ォ の 状 態 参 照 ( r e f _ s em) 【 移 行 の ポイン ト】 ( 1 ) シ ス テ ム コ ール 名 称 を 変 更 す る 。 ( 2 ) se mc nt の型 を U INT→INT に 変 更 する。 ( 3 ) 「 待 ち タス クな し」 を 示 すマ ク ロ T S K _N O N E (= 0 ) が削 除 さ れてい る の で定 義 す る。 ( 4 ) T _ RSE M 構 造 体 の メ ンバ 変 数 を 変 更 する 。 w t s k i d → w t s k ( 待 ち タ ス クの 有 無 また は タ ス ク I D ) リ ス ト 2-5 9 μ IT RON4. 0 で のセ マフ ォ の 状 態 参 照 T_RSEM pk_rsem; ER ercd; : ercd = ref_sem(sem_id, &pk_rsem); if(pk_rsem.wtskid == TSK_NONE){ : } リ ス ト 2-6 0 μT-Ke rne l で のセ マフ ォ の 状 態 参 照 #define TSK_NONE 0 T_RSEM pk_rsem; ER ercd; : ercd = tk_ref_sem(sem_id, &pk_rsem); if(pk_rsem.wtsk == TSK_NONE) { : } Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 57 TEF022-W001-01.00.00/ja 2.4.1.6. 追 加 機 能 μ T- Ke r n el で は 次 の機 能 が 追 加 さ れま し た。こ こ で は 、 セマ フ ォ 資 源 の 獲 得 /返 却 個 対 応 に つ いて 、次 項 で 詳 しく 説 明 しま す。 【追 加 機 能 】 ( 1 ) セ マ フォ 資 源 の 獲 得 /返 却 の 複 数 個 対 応 ( 2 ) 拡 張 情 報 ex i n f ( 3 ) デバッ ガ サポ ート機 能 d s n a m e 2 . 4 . 1 . 7 . セ マ フ ォ 資 源 の 獲 得 /返 却 の 複 数 個 対 応 に つ い て 【概 要 】 セ マ フ ォ 資 源 を 複 数 個 獲 得 /返 却 で きる機 能 を 追 加 し たことに 伴 い 、 資 源 獲 得 待 ち タ スク の解 除 方 法 が次 の 2 つにな り まし た。 • 先 頭 の タ スクか ら 順 に 解 除 ( 従 来 ) • 資 源 を 獲 得 で きるタ ス クか ら 順 に 解 除 セ マ フ ォ に つ い て は μ I TR O N 4 . 0 仕 様 か ら 大 き く 拡 張 さ れ て い ま す 。 μ I T R O N 4 .0 仕 様 で は、 複 数 の セマ フ ォ 資 源 数 を 管 理 するこ とは で きま すが 、 獲 得 す る 場 合 は 1 つず つ 獲 得 するよ う に なって い ま す。 それに 対 して 、μ T- Ke r n el 仕 様 で は 、複 数 の セ マ フ ォ資 源 数 を 管 理 す るこ とがで き、 か つ 複 数 の セ マ フォ 資 源 を 一 度 に 獲 得 できるよ う に なっ て います 。 μ T-K e rn e l では 、 下 図 の よ うに 一 度 に 複 数 の待 ち を 解 除 す るとい う こ とも できます。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 58 TEF022-W001-01.00.00/ja SEMCB TA_TFIFO Waitqueue semcnt sig_sem(); wai_sem(); TaskD TaskA TaskB TaskC 待ち解除 図 2 - 8 μ ITR ON4. 0 の セ マフォ 管 理 機 能 SEMCB TA_TFIFO | TA_FIRST Waitqueue semcnt tk_sig_sem(); TaskD tk_wai_sem(); TaskA TaskB 待ち解除 待ち解除 TaskC 図 2 - 9 μT- Ke rne l のセ マフ ォ 管 理 機 能 複 数 の セ マフ ォ 資 源 の獲 得 が で きるよ う に なったため 、 セ マ フ ォ 属 性 にも 変 更 が あり、 TA _ FIR S T、 TA _C N T とい う 資 源 獲 得 の 優 先 順 に 関 す る新 し い 属 性 が 追 加 さ れて い ま す。 • TA _ FIR S T… 要 求 す るセ マ フ ォ 資 源 数 に 関 係 な く 待 ち 行 列 の 先 頭 タス ク から 順 に 解 除 さ れま す 。 • TA _C N T…要 求 し たセマ フ ォ 資 源 数 を 獲 得 できるタ ス ク から 順 に解 除 さ れま す 。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 59 TEF022-W001-01.00.00/ja 具 体 的 な 例 を 示 しま す 。 [例 ] 条件: • 現 在 の セ マフ ォ 資 源 数 … 0 ( 1 ) セ マ フ ォ 属 性 ( TA_ T F I F O | TA _ FI R S T )の 場 合 1 . 獲 得 : Ta sk A が c nt = 4 で t k _w a i_ s e m()を 発 行 す る。 → 待 ち 状 態 に 移 行 2 . 獲 得 : Ta sk B が c nt = 2 で t k _w a i_ s e m()を 発 行 す る。 → 待 ち 状 態 に 移 行 3 . 獲 得 : Ta sk C が c nt = 1 で t k _w a i_ s e m()を 発 行 す る。 → 待 ち 状 態 に 移 行 4 . 返 却 : Ta sk D が c nt = 2 で t k _ si g _ se m() を発 行 す る。 TA _ FIR S T で 生 成 さ れたセ マ フ ォ で は Ta sk A 、Ta sk B 、 Task C の い ずれも 待 ち状 態 は 解 除 さ れませ ん 。 4 .の時 点 で セ マ フ ォ 資 源 数 が 2 に なり ま す が 、 Ta skA の 要 求 数 よ り も 小 さ いため待 ち解 除 されません。 SEMCB TA_TFIFO | TA_FIRST Waitqueue semcnt tk_sig_sem(); tk_wai_sem(); TaskD TaskA TaskB TaskC 待ち解除されない 図 2 - 10 待 ち 行 列 先 頭 の タ スクを 優 先 ( TA_ FIR ST 属 性 ) Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 60 TEF022-W001-01.00.00/ja ( 2 ) セ マ フ ォ 属 性 ( TA_ T F I F O | TA _ CN T) の 場 合 1 . 獲 得 : Ta sk A が c nt = 4 で t k _w a i_ s e m()を 発 行 す る。 → 待 ち 状 態 に 移 行 2 . 獲 得 : Ta sk B が c nt = 2 で t k _w a i_ s e m()を 発 行 す る。 → 待 ち 状 態 に 移 行 3 . 獲 得 : Ta sk C が c nt = 1 で t k _w a i_ s e m()を 発 行 す る。 → 待 ち 状 態 に 移 行 4 . 返 却 : Ta sk D が c nt = 2 で t k _ si g _ se m() を発 行 す る。 → Ta sk B が 待 ち 解 除 TA _C N T で生 成 さ れたセ マ フ ォ では Ta sk B が待 ち 解 除 され、 そ の 他 の タ スク は 待 ち 解 除 さ れ ま せ ん。4 .の 時 点 でセ マ フ ォ 資 源 数 が 2 にな り 、 資 源 が返 却 さ れた時 点 で 待 ち行 列 の 先 頭 か ら 検 索 し て 、最 初 に 現 れた、 現 在 の資 源 数 で サ ービ ス す るこ とが で きるタ スク ( = Ta s k B)の 待 ち 状 態 を 解 除 します 。 SEMCB TA_TFIFO | TA_CNT Waitqueue semcnt tk_sig_sem(); tk_wai_sem(); TaskD TaskA TaskB TaskC 待ち解除 図 2 - 11 要 求 数 の 少 ない タ スク を優 先 ( TA_CN T 属 性 ) Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 61 TEF022-W001-01.00.00/ja 2.4.2. 同 期 ・ 通 信 機 能 ( メ ー ル ボ ッ ク ス ) (A) 機 能 一 覧 メ ール ボ ッ クス の 機 能 は次 の 通 りです。 μ I T RON 4 . 0 仕 様 から機 能 の 追 加 ・ 変 更 はあ り ま せ ん。 ( 1 ) メ ール ボ ッ クス の 生 成 ( 2 ) メ ール ボ ッ クス の 削 除 ( 3 ) メ ー ル ボ ッ クス へ の 送 信 ( 4 ) メ ー ル ボ ッ クス か ら の 受 信 ( 5 ) メ ール ボ ッ クス の 状 態 参 照 ( B ) μ I T R O N 4 .0 とμ T- Ke r n e l の シ ス テ ム コ ー ル の 対 応 μ I T R O N 4 .0 の シ ス テ ムコー ル と μ T-K e r ne lの シ ス テ ム コ ー ル の 対 応 は 表 2 - 7 の 通 り です。 表 2 - 7 μ ITR ON4. 0 と T- Ke rnel の シ ス テ ムコ ー ル の 対 応 機能 μ I T R O N 4 .0 メ ー ル ボッ ク ス の 生 成 ( 静 的 A P I ) C RE _MB X メ ー ル ボッ ク ス の 生 成 c re _mb x メ ー ル ボッ ク ス の 生 成 ( ID 番 号 自 動 割 付 ) μ T- Ke r n el t k_ cre _m bx a cr e_m bx メ ー ル ボッ ク ス の 削 除 d el _mb x t k_ del _m bx メ ー ル ボッ ク ス へ の 送 信 s nd _mb x t k_ snd _m bx メ ー ル ボッ ク ス か らの 受 信 r cv _mb x メ ー ル ボッ ク ス か らの 受 信 ( ポ ーリ ング) p rc v_m bx メ ー ル ボックス か らの 受 信 ( タ イ ムアウ ト あり) t rc v_m bx メ ー ル ボックス の 状 態 参 照 r ef _mb x Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. t k_ rcv _m bx t k_ ref _m bx 62 TEF022-W001-01.00.00/ja ( C ) μ T- Ke r n el で の 変 更 点 と追 加 機 能 μ T- Ke r n el で の 変 更 点 と追 加 機 能 を 示 します 。 表 2-8 変 更 点 項目 関 連 する 備考 シ ス テ ム コ ール シ ス テ ム コ ール 名 称 が 変 更 さ れ た 。 全 シ ステ ム コー ル メ ー ル ボッ ク ス I D が 自 動 割 り 当 てとな っ C RE _MB X た。 c re _mb x 静 的 A P I が 廃 止 さ れた。 C RE _MB X T S Z _ M P R I H D の マク ロが 廃 止 さ れた。 §2.4.2.1 参 照 §2.4.2.1 参 照 マクロ メ ッ セ ージ優 先 度 の 最 大 値 C RE _MB X §2.4.2.1 参 照 ( T MA X _ M PRI ) の 値 が変 更 さ れ た。 c re _mb x §2.4.2.3 参 照 a cr e_m bx s nd _mb x 割 込 み ハ ンド ラ に お け るメ ー ル ボ ッ クス の 受 信 ( ポ ーリ ン グ ) が 変 更 さ れ た 。 §2.4.2.4 参 照 p rc v_m bx メ ール ボ ッ クス 生 成 情 報 パ ケ ッ トの 構 成 が C RE _MB X 変 更 さ れ た。 c re _mb x §2.4.2.1 参 照 a cr e_m bx メ ール ボ ッ クス 状 態 パ ケッ トの 構 成 が 変 更 された。 §2.4.2.5 参 照 r ef _mb x 表 2-9 追 加 機 能 項目 備考 拡 張 情 報 e x i n f が 追 加 さ れた。 §2.1.1.5 参 照 デ バ ッ グ サ ポー ト 機 能 d sn a m e が追 加 さ れた。 §2.1.1.6 参 照 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 63 TEF022-W001-01.00.00/ja 2 . 4 . 2 . 1 . メ ー ル ボ ッ ク ス の 生 成 ( C R E _M B X / c r e _ m bx / a c r e _ m b x → t k _ c r e _ m b x) 【 移 行 の ポイン ト】 ( 1 ) シ ス テ ム コ ール 名 称 が 変 更 さ れ た 。 ( 2 ) メ ール ボ ッ クス I D が 自 動 割 り 当 てと な った 。 ( 3 ) 静 的 A P I が廃 止 さ れ た。 ( 4 ) メ ール ボ ッ クス 生 成 情 報 パ ケ ッ トが 変 更 さ れ た 。 m a xm p r i と m p r i h d が 廃 止 さ れ た 。 e x i n f と ds n a m e が 追 加 さ れ た 。 ( 5 ) メ ッ セ ージ優 先 度 の 最 大 値 ( TM A X_ MP RI ) の 値 が変 更 さ れ た。 μ T- Ke r n el は プ ロ グラム の 動 的 なロ ー ド を 前 提 に 設 計 されて お り 、 メー ル ボッ ク スは 動 的 に 生 成 し て I D も 自 動 的 に 割 り付 け るこ とになっ て いま す 。μ T- Ke r n el で は T- Ker n e l との 互 換 性 を 優 先 し 、 メ ールボ ッ クス の生 成 に は t k_ cr e _ mb x を用 いま す 。tk _ c r e _ m b x は μ I T R O N 4 .0 の a c r e _ m b x とほ ぼ等 価 のシ ステ ム コー ル です の で 、 あまり 変 更 せ ずに μ T- Ke r n el に 移 行 で きま す 。 他 のシス テ ム コー ル ( CR E_ MBX / c r e _ mbx ) は移 行 に際 し て 調 整 が 必 要 にな り ます。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 64 TEF022-W001-01.00.00/ja ( A ) a c r e _ mbx か ら t k _ c re_ mb x へ 【 移 行 の手 順 】 ( 1 ) シ ス テ ム コ ール 名 を t k _ c re _ m b x に 変 更 す る 。 ( 2 ) m a xm p r i と m p r i h d を 利 用 し ない 。 リ ス ト 2-6 1 μ IT RON4. 0 で の メ ール ボ ッ クス の生 成 ( acre_mbx) T_CMBX pk_cmbx; ID mbx_id; VP msgque; : pk_cmbx.mbxatr = TA_TFIFO | TA_MFIFO; pk_cmbx.maxmpri = 1; pk_cmbx.mprihd = (VP)msgque; : mbx_id = acre_mbx(&pk_cmbx); : リ ス ト 2-6 2 μT-Ke rne l で の メール ボ ッ ク ス の生 成 T_CMBX pk_cmbx; ID mbx_id; : pk_cmbx.mbxatr = TA_TFIFO | TA_MFIFO; : mbx_id = tk_cre_mbx(&pk_cmbx); : 【解 説 】 a c r e _ mbx と t k _ c r e _ m b x は 、 ほぼ 同 等 の 機 能 で す 。 構 造 体 T_ CM BX の メ ンバ ー を 削 除 す る こ と で 移 行 で き ま す 。 μ T- Ke r n el で は 、 構 造 体 T_ CM BX の メン バ ーで ある送 信 さ れるメ ッ セー ジの 優 先 度 の 最 大 ( m a x m p r i ) 、優 先 度 別 のメッ セ ー ジキ ュー ヘ ッ ダ領 域 の 先 頭 番 地 ( mpri hd) が削 除 さ れ て い ま す。 μ I T R O N4 . 0 で は 、 メッ セ ー ジ優 先 度 ご とにメッ セ ー ジキ ュー を 持 つ 実 装 が 許 さ れて いまし たが 、管 理 領 域 が 増 えて メ モ リ使 用 量 が 増 大 するため 、 μ T-K e r ne l では 1 つ の メッ セ ージ キ ュー で管 理 す るよ うに 改 め ら れま し た。 μ I T R O N 4 .0 で は 、 タ スク 以 外 の オブ ジ ェクトに拡 張 情 報 の機 能 は あり ませ ん で し たが、 μ T- Ke r n el で は タ スク以 外 の オブジ ェクト に関 し ても 拡 張 情 報 機 能 があり ま す 。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 65 TEF022-W001-01.00.00/ja ( B ) c r e _ mb x から t k _ c re _ m b x へ 【 移 行 の手 順 】 ( 1 ) シ ス テ ム コ ール 名 を t k _ c re _ m b x に 変 更 す る 。 ( 2 ) m a xm p r i と m p r i h d を 利 用 し ない 。 ( 3 ) メ ール ボ ッ クス I D を 自 動 割 当 て に 変 更 する 。 リ ス ト 2-6 3 μ IT RON4. 0 で の メ ール ボ ッ クス の生 成 ( cre_mbx) T_CMBX pk_cmbx; ER ercd; ID mbx_id; VP msgque; : mbx_id = 10; : pk_cmbx.mbxatr = TA_TFIFO | TA_MFIFO; pk_cmbx.maxmpri = 1; pk_cmbx.mprihd = (VP)msgque; : ercd = cre_mbx(mbx_id, &pk_cmbx); : リ ス ト 2-6 4 μT-Ke rne l で の メール ボ ッ ク ス の生 成 T_CMBX pk_cmbx; ID mbx_id; : pk_cmbx.exinf = (VP)1; pk_cmbx.mbxatr = TA_TFIFO | TA_MFIFO; : mbx_id = tk_cre_mbx(&pk_cmbx); : 【解 説 】 T- K e rn el で は メ ー ル ボ ッ ク ス I D を自 動 で 割 り付 け るの で、t k _ c r e _ m b x が 返 す 値 を メ ー ル ボ ック ス ID 変 数 に保 存 し 、 後 で利 用 で きるよ う に す る処 理 を 追 加 しま す 。 μ I T R O N で は c r e _ mb x を 使 用 する場 合 、 メ ール ボ ック ス ID を ア プリ ケー シ ョ ン 側 で指 定 し ま す。 即 値 を 指 定 できるの で 、 シス テ ムの 起 動 時 か ら メー ル ボッ ク スを 個 別 に 識 別 で きる とい っ たメ リッ トが あり ます が 、シ ステム 開 発 す る段 階 で 、 メ ール ボ ック ス ID が 一 意 にな るよ う に 開 発 者 が調 整 し て おかな け ればな りま せ ん。 一 方 の μ T- Ker n e l では メー ル ボッ クス I D は 自 動 的 に 割 当 て ら れます ので 、 開 発 者 が 割 り 振 る必 要 は あり ませ ん 。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 66 TEF022-W001-01.00.00/ja 【 メ ール ボック ス I D を マク ロ 定 義 し てい る場 合 】 リ ス ト 2-6 5 マ ク ロ に よるメ ー ル ボッ クス I D の 指 定 ( μIT RON4.0) #define MBXID_CLIENT (10) : T_CMBX pk_cmbx; ER ercd; : pk_cmbx.mbxatr = TA_TFIFO | TA_MFIFO; pk_cmbx.maxmpri = 1; pk_cmbx.mprihd = (VP)msgque; ercd = cre_mbx(MBXID_CLIENT, &pk_cmbx); : リ ス ト 2-6 6 外 部 変 数 によ る メ ー ル ボッ クス ID の指 定 static #define ID mbxid_client = 0; MBXID_CLIENT mbxid_client : T_CMBX pk_cmbx; : pk_cmbx.exinf = (VP)1; pk_cmbx.mbxatr = TA_TFIFO | TA_MFIFO; mbxid_client : = tk_cre_mbx(&pk_cmbx); 上 記 のリ ス トで は 、 μ I TR O N 4 . 0 も T-K e r ne l も M BX I D_ CLI E N T と い う マ ク ロ を 定 義 し て あ り ま す。こ の よ うに する こ と で 例 え ば 、 メ ール ボッ ク ス I D を指 定 す る必 要 の あるシ ステ ム コー ル の移 行 に お いてパ ラ メ ー タを変 更 す る必 要 がな くな りま す 。 な お 、 メー ルボ ッ クス I D を 格 納 す る変 数 mbxid_ cl ie nt を直 接 MB X ID_ C LIE NT とす れば マ ク ロ を定 義 す る必 要 は なく なりま す 。 ただ 一 般 に は、 マ クロ は 大 文 字 、 変 数 名 は小 文 字 を 利 用 するこ とが 多 いよ う で す の で、 上 記 リ ストの よ うに しまし た。 実 際 の移 行 に 際 して は 、 各 社 の コーデ ィ ン グルール に 適 合 するよ う に 調 整 し て くだ さい。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 67 TEF022-W001-01.00.00/ja ( C ) C RE _MB X か ら t k _ c re_ mb x へ 【 移 行 の手 順 】 ( 1 ) シ ス テ ム コ ール 名 を t k _ c re _ m b x に 変 更 す る 。 ( 2 ) m a xm p r i と m p r i h d を 利 用 し ない 。 ( 3 ) メ ール ボ ッ クス I D を 自 動 割 当 て に 変 更 する 。 ( 4 ) 初 期 タ ス ク内 に ソース コード を 追 加 する 。 前 述 し たとお り 、 μ T- Ke r n el は プロ グラ ム の 動 的 な ロ ー ドを前 提 とし てい るため 、 静 的 A P I を サ ポー ト して いま せ ん 。 静 的 A P I を使 用 し て いる場 合 は 、動 的 生 成 tk _ c r e _ m b x に 置 き換 え ま す 。 リ ス ト 2-6 7 μ IT RON4. 0 で の メ ール ボ ッ クス の生 成 ( C RE_M BX ) CRE_MBX(mbx_id, { (TA_TFIFO | TA_MFIFO), 1, (VP)msgque } ); リ ス ト 2-6 8 μT-Ke rne l で の メール ボ ッ ク ス の生 成 T_CMBX pk_cmbx; ID mbx_id; : pk_cmbx.exinf = (VP)1; pk_cmbx.mbxatr = TA_TFIFO | TA_MFIFO; : mbx_id = tk_cre_mbx(&pk_cmbx); : 【解 説 】 μ I T R O N 4 .0 の 静 的 A PI である C RE _M BX の場 合 、 開 発 者 は シ ステム コン フ ィ ギュレ ー シ ョ ン フ ァイル に 静 的 に 生 成 し た い メー ル ボッ ク スの 数 だ け静 的 A P I を 記 述 し 、 その ファ イ ル を コ ン フ ィ ギ ュ レ ー タ に 通 す こ と で メ ール ボ ッ ク スが静 的 に 生 成 さ れ ま す 。μ T- K e rn e l で は t k _ c r e _ m b x を 呼 び 出 し て メー ル ボッ ク スを 生 成 し ま す。 静 的 A P I を 使 用 し た 場 合 、 シ ステ ム が 起 動 した段 階 で 既 に メ ール ボック スが 生 成 されて い ま す。μ T- Ke r n el の 場 合 、初 期 タ ス ク 内 で t k_c r e _ mb x を呼 び 出 す ことで 同 様 の振 る舞 い にな り ます 。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 68 TEF022-W001-01.00.00/ja 2 . 4 . 2 . 2 . メ ー ル ボ ッ ク ス の 削 除 ( de l_ mb x → t k _ d e l_ m b x) 【 移 行 の手 順 】 ( 1 ) シ ス テムコ ール 名 を tk _ d e l _m b x に 変 更 する 。 リ ス ト 2-6 9 μ IT RON4. 0 で の メ ール ボ ッ ク ス の削 除 ER ercd; : ercd = del_mbx( mbx_id ); : リ ス ト 2-7 0 μT-Ke rne l で の メール ボ ッ ク ス の削 除 ER ercd; : ercd = tk_del_mbx( mbx_id ); : 【解 説 】 メ ー ル ボックス の 削 除 はシ ス テ ム コール 名 を 置 き換 え るだけで 移 行 で きま す 。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 69 TEF022-W001-01.00.00/ja 2 . 4 . 2 . 3 . メ ー ル ボ ッ ク ス へ の 送 信 ( s nd _ mb x → t k _ s n d _ m b x) 【 移 行 の手 順 】 ( 1 ) シ ス テムコ ール 名 を tk _ s n d _m b x に 変 更 する 。 リ ス ト 2-7 1 μ IT RON4. 0 で の メ ール ボ ッ ク ス への 送 信 T_MSG pk_msg; ER ercd; : ercd = snd_mbx(mbx_id, &pk_msg); : リ ス ト 2-7 2 μT-Ke rne l で の メール ボ ッ ク ス への 送 信 T_MSG pk_msg; ER ercd; : ercd = tk_snd_mbx(mbx_id, &pk_msg); : 【解 説 】 メ ー ル ボッ ク ス へ の 送 信 は シ ステ ム コー ル 名 を置 き 換 え る だ け で 移 行 で き ま す 。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 70 TEF022-W001-01.00.00/ja 2 . 4 . 2 . 4 . メ ー ル ボ ッ ク ス か ら の 受 信 ( r c v _ m b x / p r c v_ m b x / t r c v _ m b x → t k _ r c v _ m b x) 【 移 行 の ポイン ト】 ( 1 ) シ ス テ ム コ ール 名 を t k _ rcv _ m b x に変 更 す る 。 ( 2 ) ポ ーリ ン グ の動 作 の 違 いに 注 意 する (返 値 の 違 い) μ T- Ke r n el で は 待 ち状 態 に 入 る可 能 性 が あるシ ス テ ム コー ルに は 、ポー リ ン グお よび タ イ ム ア ウト 指 定 の 機 能 を 持 たせ て い ます 。 基 本 的 には t k _ r c v _ m b x に シ ス テ ム コー ル 名 を置 き換 え るだ けで 移 行 で きま す 。 待 ち時 間 指 定 以 外 の永 久 待 ち やポ ー リ ン グ指 定 を す る場 合 は 以 下 のよ う に 指 定 して くだ さ い 。 ・rcv_mbx → タ イ ムアウ ト 指 定 に永 久 待 ち( TM O_ FE VR) を 指 定 す る ・ p r c v _ m b x → タ イ ムアウ ト 指 定 に ポー リ ン グ ( TM O_ PO L )を 指 定 す る ・ t r c v _ m b x → タ イ ムアウ ト 指 定 は変 更 不 要 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 71 TEF022-W001-01.00.00/ja ( A ) r c v _ m b x から t k _ r c v _ m b x へ 【 移 行 の手 順 】 ( 1 ) シ ス テ ム コ ール 名 を t k _ rcv _ m b x に変 更 す る 。 ( 2 ) タ イ ム ア ウ ト値 に T M O _ FE V R を 設 定 する 。 リ ス ト 2-7 3 μ IT RON4. 0 で の メ ール ボ ッ ク ス から の 受 信 T_MSG *ppk_msg; ER ercd; : ercd = rcv_mbx(mbx_id, &ppk_msg); : リ ス ト 2-7 4 μT-Ke rne l で の メール ボ ッ ク ス から の 受 信 T_MSG *ppk_msg; ER ercd; : ercd = tk_rcv_mbx(mbx_id, &ppk_msg, TMO_FEVR); : 【解 説 】 μ T- Ke r n el で は 待 ち状 態 に 入 る可 能 性 が あるシ ス テ ム コー ルに は 、 タイ ム ア ウト 指 定 の 機 能 を 持 たせ て い るため、 タ イ ム アウ ト指 定 に 永 久 待 ち ( TM O_FE VR ) を 指 定 す る こ と で 移 行 で きま す 。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 72 TEF022-W001-01.00.00/ja ( B ) p r c v _ m b x か ら t k _ r cv_ mb x へ 【 移 行 の手 順 】 ( 1 ) シ ス テ ム コ ール 名 を t k _ rcv _ m b x に変 更 す る 。 ( 2 ) タ イ ム ア ウ ト値 に T M O _ PO L を 設 定 する 。 リ ス ト 2-7 5 μ IT RON4. 0 で の メ ール ボ ッ ク ス から の 受 信 ( ポ ー リ ン グ) T_MSG *ppk_msg; ER ercd; : ercd = prcv_mbx(mbx_id, &ppk_msg); : リ ス ト 2-7 6 μT-Ke rne l で の メール ボ ッ ク ス から の 受 信 ( ポ ー リ ン グ) T_MSG *ppk_msg; ER ercd; : ercd = tk_rcv_mbx(mbx_id, &ppk_msg, TMO_POL); : 【解 説 】 p r c v _ m b x と t k _ r c v _ m b x は ほぼ同 等 の 機 能 で あり 、 タ イム ア ウト 指 定 に ポ ーリ ン グ ( TMO_ POL ) を 指 定 するこ とで 移 行 で きま す 。 【 実 装 に 依 存 す る点 】 タ ス ク 独 立 部 ま たは ディス パ ッ チ 禁 止 状 態 で μ I T R O N 4 . 0 の t r c v_ mbx ( TMO _ POL) を 発 行 し た場 合 、 実 装 によ っ て 動 作 が 異 な る可 能 性 が あるの で 注 意 が必 要 で す 。 表 2 - 10 実 装 に よ る 返 値 の 違 い タスク独 立 部 または デ ィ ス パッ チ禁 止 状 態 での 発 行 資 源 あり prcv_mbx() E _O K t r c v _ mb x(TM O _ PO L) t k _ r c v_ mbx ( TMO _ POL) E _O K | E _CT X 資 源 なし E _T MOU T| E_C TX E _T MOU T | E _C TX E _C TX E _C TX 例 え ば 、 ハ ンド ラ 内 で p r cv _ m b x を 呼 び 出 し ている場 合 、 t k _ r c v _ m b x に置 き換 えると E _C T X が返 り ま す。 この よ うに タ スク 独 立 部 で p r c v _ m b x や t r c v _ m b x の T M O _ P O L 指 定 を 使 用 して い る場 合 に は 、新 たに タ スク を 作 成 し 、 タ スク内 で t k _ r c v _ m b x を 呼 び 出 す な ど の 変 更 が必 要 とな り ます 。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 73 TEF022-W001-01.00.00/ja リ ス ト 2- 77 タ ス ク 独 立 部 で prcv_mbx を 使 っ て い る 場 合 の 対 応 例 ( μ ITRON4. 0) ■μITRON4.0 のソースコード例 T_MSG *ppk_msg; ID mbxid; ... void handler(VP_INT exinf) { ER ercd; ... ercd = prcv_mbx(mbxid, &ppk_msg); if(ercd == E_OK){ ... } } リ ス ト 2- 78 タ ス ク 独 立 部 で prcv_mbx を 使 っ て い る 場 合 の 対 応 例 ( μT- Ke rne l) ■μT-Kernel への移 行 例 T_MSG *ppk_msg; ID mbxid; ID tskid; ... void handler(VP exinf) { tk_wup_tsk(tskid); } void task(INT stacd, VP exinf) { ER ercd; ... tk_slp_tsk(TMO_FEVR); ercd = tk_rcv_mbx(mbxid, &ppk_msg, TMO_POL); if(ercd == E_OK) { ... } ... } Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 74 TEF022-W001-01.00.00/ja ( C ) t r c v _ m b x か ら t k _ r cv_ mb x へ 【 移 行 の手 順 】 ( 1 ) シ ス テ ム コ ール 名 を t k _ rcv _ m b x に変 更 す る 。 リ ス ト 2-7 9 μ IT RON4. 0 で の メ ール ボ ッ ク ス から の 受 信 ( タ イ ム ア ウ ト あり ) T_MSG *ppk_msg; ER ercd; : ercd = trcv_mbx(mbx_id, &ppk_msg, 100); : リ ス ト 2-8 0 μ T-Ke rnel で の メ ールボ ッ クス からの 受 信 ( タ イム ア ウ ト あり) T_MSG *ppk_msg; ER ercd; : ercd = tk_rcv_mbx(mbx_id, &ppk_msg, 100); : 【解 説 】 t r c v _ m b x と t k _ r c v _ m b x は 同 等 の 機 能 で あり 、 シ ステ ムコー ル 名 を置 き換 え るだ け で移 行 で きま す 。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 75 TEF022-W001-01.00.00/ja 2 . 4 . 2 . 5 . メ ー ル ボ ッ ク ス の 状 態 参 照 ( r e f _m b x ) 【 移 行 の ポイン ト】 ( 1 ) シ ス テ ム コ ール 名 称 を 変 更 す る 。 ( 2 ) 「 待 ち タス クな し」 を 示 すマ クロ T S_ NO N E (= 0 )が削 除 さ れてい る の で定 義 す る。 ( 3 ) T _ RM BX 構 造 体 の メ ンバ 変 数 を 変 更 する 。 リ ス ト 2-8 1 μ IT RON4. 0 で の メ ール ボ ッ クス の状 態 参 照 T_RMBX pk_rmbx; ER ercd; : ercd = ref_mbx(mbx_id, &pk_rmbx); if(pk_rmbx.wtskid == TSK_NONE){ : } リ ス ト 2-8 2 μ T-Ke rnel で の メ ールボ ッ クス の状 態 参 照 #define TSK_NONE 0 T_RMBX pk_rmbx; ER ercd; : ercd = tk_ref_mbx(mbx_id, &pk_rmbx); if(pk_rmbx.wtsk == TSK_NONE) { : } Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 76 TEF022-W001-01.00.00/ja 2.5. 相 違 点 2.5.1. 共 通 項 目 本 章 で は 、デ ー タ 型 やエ ラ ー コー ドな どの 共 通 項 目 に おける移 行 方 法 や 仕 様 間 での 相 違 点 に おける注 意 点 につ い て 説 明 し ま す。 2.5.1.1. デ ー タ 型 汎 用 的 な デー タ 型 におけ る相 違 点 は 以 下 の とお り で す 。 ( A ) そ のま ま 利 用 で き る デ ー タ 型 整 数 は 6 4 ビ ッ ト 整 数 を除 き、 そ のまま 利 用 で きま す 。 表 2 - 11 その ま ま 利 用 で き る デ ー タ 型 データ型 μ I T R O N 4 .0 、 μ T-K e rn e l での 定 義 B 符 号 付 き 8 ビット整 数 H 符 号 付 き 16 ビット整 数 W 符 号 付 き 32 ビット整 数 UB 符 号 無 し 8 ビット整 数 UH 符 号 無 し 16 ビ ッ ト 整 数 UW 符 号 無 し 32 ビ ッ ト 整 数 VB 型 が 一 定 しな い 8 ビ ッ ト の デ ー タ VH 型 が 一 定 しな い 1 6 ビ ッ ト の デ ー タ VW 型 が 一 定 しな い 3 2 ビ ッ ト の デ ー タ VP 型 が 一 定 し な い デ ー タへ の ポイ ン タ INT プ ロ セ ッ サのビ ッ ト 幅 の 符 号 付 き整 数 UINT プ ロ セ ッ サのビ ッ ト 幅 の 符 号 無 し 整 数 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 77 TEF022-W001-01.00.00/ja ( B ) μ T- Ke r n el で は 定 義 されて い な いデ ー タ 型 μ T- Ke r n el で 定 義 さ れて い な いデー タ 型 を 利 用 し て い る場 合 には 、移 行 時 に定 義 を 追 加 す る必 要 が あります。 主 に 定 義 する必 要 が ある型 は 6 4 ビッ ト 整 数 型 で す 。 表 2 - 12 μT-Ke rne l で は 定 義 され て い ないデ ー タ 型 μ I T R O N 4 .0 仕 様 の 定 義 データ型 D 符 号 付 き 64 ビット整 数 UD 符 号 無 し 64 ビ ッ ト 整 数 VD データタイプが定 まらない 64 ビットの値 S TAT 符 号 無 し整 数 ※1 オブジェクトの状 態 M O DE サービスコールの動 作 モード SIZE 符 号 無 し整 数 ※2 符 号 無 し整 数 ※3 メモリ領 域 のサイズ デ ー タ タ イ プ が 定 ま ら な いも の へ の ポ イ ン タ ま た は プ ロ セ ッ サ に自 然 な サ イズの 符 号 付 き整 数 VP_INT ER_BOOL 符 号 付 き整 数 エラーコードまたは真 偽 値 E R_ I D 符 号 付 き整 数 エラーコードまたは ID 番 号 E R_ U I N T エラーコードまたは符 号 無 し整 数 TEXPTN タスク例 外 要 因 のビットパターン FLGPTN イベントフラグのビットパターン RDVPTN ランデブ条 件 のビットパターン 符 号 付 き整 数 ※ 4 符 号 無 し整 数 符 号 無 し整 数 符 号 無 し整 数 R D VN O ランデブ番 号 O V R T IM 符 号 無 し整 数 プロセッサ時 間 INHNO 割 込 みハンドラ番 号 INTNO 割 込 み番 号 E XC N O CPU 例 外 ハンドラ番 号 ※1 ※2 ※3 ※4 スタンダードプロファイルでは 16 ビット以 上 の制 約 あり。 スタンダードプロファイルでは 8 ビット以 上 の制 約 あり。 スタンダードプロファイルではポインタと同 じビット数 との制 約 あり 符 号 無 し整 数 を表 現 する場 合 の有 効 ビット数 は UINT より 1 ビット短 い。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 78 TEF022-W001-01.00.00/ja こ れら を 利 用 し て い る場 合 は 、 移 植 元 の μ I T R O N の 仕 様 ( 実 装 ) を確 認 し て適 宜 定 義 し 、 全 体 で イ ンク ル ード す るヘ ッ ダ フ ァイル な どに 追 加 し ま す。 な お 、 D、 UD 、 V D 型 はμ I T R O N の ス タ ン ダード プ ロ フ ァ イル に 含 ま れま せ んの で 、移 植 元 の μ I TR O N に よ っては 対 応 してい な い 場 合 も あり ま す。使 用 し て いな い 型 に つい て は 、 特 に 定 義 する必 要 は ありま せ ん。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 79 TEF022-W001-01.00.00/ja ( C ) μ I T R O N 4 .0 仕 様 で は実 装 毎 に異 な る定 義 にな る可 能 性 の あるデ ー タ型 μ I T R O N 4 .0 仕 様 で は実 装 毎 に異 な る定 義 にな る可 能 性 の あるデ ー タ型 が ありま す。 多 く がプ ロ セッ サ の ビット幅 に 依 存 するも の で あるため 、 プ ロ セッ サ の ビット幅 が 異 な るプ ロ セ ッ サ へ 移 植 す る場 合 は 注 意 が 必 要 で す 。 表 2 - 13 シス テ ム 毎 に異 な る 定 義 と な る 可 能 性 の あ る デー タ 型 データ型 FN 機 能 コード ER エラーコード ID オブジェクトの ID 番 号 ATR オブジェクトの属 性 PRI 優先度 TMO タイムアウト指 定 R E LT IM 相対時間 SYSTIM システム時 刻 μ I T R O N 4 .0 仕 様 の 定 義 μ T- Ke r n el の 定 義 符 号 付 き整 数 ※ 1 プ ロ セ ッ サのビ ッ ト 幅 の 符 号 付 き整 数 符 号 付 き整 数 ※ 2 プ ロ セ ッ サのビ ッ ト 幅 の 符 号 付 き整 数 符 号 付 き整 数 ※ 1 プ ロ セ ッ サのビ ッ ト 幅 の 符 号 付 き整 数 符 号 無 し整 数 ※2 符 号 無 し 32ビ ッ ト 整 数 符 号 付 き整 数 プ ロ セ ッ サのビ ッ ト 幅 の 符 号 付 き整 数 符 号 付 き整 数 ※ 1 時 間 単 位 は実 装 定 義 ※ 3 符 号 無 し整 数 ※1 時 間 単 位 は実 装 定 義 ※ 3 符 号 無 し整 数 ※1 時 間 単 位 は実 装 定 義 ※ 3 符 号 付 き 32 ビット整 数 時 間 単 位 は 1 ミリ秒 符 号 無 し 32 ビ ッ ト 整 数 時 間 単 位 は 1 ミリ秒 6 4 ビ ット 符 号 付 き整 数 時 間 単 位 は 1 ミリ秒 ※1 ※2 ※3 スタンダードプロファイルでは 16 ビット以 上 の制 約 あり。 スタンダードプロファイルでは 8 ビット以 上 の制 約 あり。 スタンダードプロファイルでは時 間 単 位 は 1 ミリ秒 。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 80 TEF022-W001-01.00.00/ja ( D ) μ I T R O N 4 .0 仕 様 で は定 義 さ れてい な い デ ータ 型 μ I T R O N 4 .0 仕 様 で は定 義 さ れてい な い デ ータ 型 は 、 移 行 時 には 特 に 注 意 す る必 要 は あ り ま せ ん が 、 μ I T R O N で 以 下 の 型 を 利 用 す る際 に μ T- Ker n e l での 定 義 に 合 わせて お く こ と で 、 ソ ース コ ー ド の 移 行 が し や す く な り ま す 。 表 2 - 14 μIT RON4.0 仕 様 では 定 義 さ れ てい な いデ ータ 型 T- K e rn e l で の 定 義 データ型 _B _H _W _UB v o la t il e 宣 言 付 の 基 本 デ ー タ 型 _UH _UW RNO ランデブ番 号 M S EC 時 間 一 般 (ミリ秒 ) FUNCP 関 数 アドレス一 般 TC TRON 文 字 コード プ ロ セ ッ サのビ ッ ト 幅 の 符 号 付 き整 数 プ ロ セ ッ サのビ ッ ト 幅 の 符 号 付 き整 数 ポインタ 符 号 無 し 16 ビ ッ ト 整 数 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 81 TEF022-W001-01.00.00/ja 2.5.1.2. エ ラ ー コ ー ド [FEI] μ I T R O N で い う サ ー ビス コ ー ル 、 T-K e r ne l でい う シ ステ ムコー ル の返 値 は 符 号 付 の 整 数 で 、 エ ラ ーが 発 生 し た場 合 には 負 の 値 の エ ラー コー ド 、 処 理 を 正 常 に終 了 し た場 合 は E _ OK ( = 0)ま たは 正 の値 と定 義 されて い ま す。 μ I T R O N と T- K e r nel の エ ラー コ ー ド は メイ ンエ ラ ー コ ー ドとサ ブ エ ラ ーコー ド か ら 構 成 さ れるも の とし、 カ ー ネル とソ フ トウ ェア部 品 で メ イ ンエ ラ ー コー ドを 共 通 に 利 用 し 、 エ ラーが 発 生 し た原 因 を よ り 細 かく報 告 で きるよ う に し たも のが サ ブ エラー コー ド で す。 た だ し 、 μ T-K e r ne l では メ イ ン エラー コー ド の みを 扱 い ます 。 【移 行 の際 の注 意 点 】 μ I T R O N 4 .0 仕 様 と T-K e r ne l 、μT- K e rn e l で は メ イ ン エラ ー コ ー ドが格 納 さ れ て い る ビ ッ トフ ィ ール ド が下 図 の よ うに 異 なるの で 注 意 が 必 要 です。 サブエラーコード μITRON4.0 仕様におけるメインエラーコード メインエラーコード (下位 8bit) とサブエラーコード T-Kernel におけるメインエラーコードとサブ メインエラーコード サブエラーコード (上位 16bit) (下位 16bit) エラーコード メインエラーコード μT-Kernel におけるメインエラーコード (32bit) (32bit プロセッサの場合) メインエラーコード μT-Kernel におけるメインエラーコード (16bit) (16bit マイコンの場合) 図 2 - 12 エラ ー コ ード の構 成 μ I T R O N 4 .0 で は サ ブエ ラ ー コー ドは 構 造 として は 定 義 されて い ま すが 、 仕 様 上 は 実 装 定 義 とな って お り 、 必 ずし も 実 装 さ れて い るとは 限 り ま せ ん。 一 方 、 T- Ke r ne l で は 、 構 造 とし て 上 図 の よ うに 定 義 さ れて い ま すが、 T- K e rn el /OS で は サ ブ エ ラ ー コ ー ドは 使 用 せ ず 常 に 0 と な っ て い ま す 。 ま た 、 μ T- K e rn e l で は 、 サ ブ エラ ー コ ー ド 自 体 が 省 略 されて い ま す。 エ ラ ー コ ー ドは E _XX X と い う マ ク ロで 定 義 さ れて い ま す。 この た め 、 特 に サ ブ エ ラ ー コー ド を 使 用 してい な い シス テム 間 で プ ロ グラ ム を 移 行 す る場 合 は、 エ ラ ー コード に 関 して は特 に 既 存 のプ ログラ ム を 変 える必 要 は ありま せ ん。 (リ スト 2 - 83 、 リスト 2 - 84 ) Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 82 TEF022-W001-01.00.00/ja リ ス ト 2-8 3 μ IT RON4. 0 で の エラー の 判 定 例 ER ercd; : ercd = ter_tsk( MOTOR_TSKID ); if( ercd < 0 ){ if( ercd == E_ID ){ /* 不 正 ID 番 号 の 場 合 の 処 理 */ } else if ( ercd == E_NOEXS ) { /* タ ス ク が 存 在 し な い 場 合 の 処 理 } /* そ の 他 の エ ラ ー 処 理 */ } : リ ス ト 2-8 4 */ μT-Ke rne l で のエ ラー の 判 定 例 ER ercd; : ercd = tk_ter_tsk( MOTOR_TSKID ); if( ercd < 0 ){ if( ercd == E_ID ){ /* 不 正 ID 番 号 の 場 合 の 処 理 */ } else if ( ercd == E_NOEXS ) { /* タ ス ク が 存 在 し な い 場 合 の 処 理 } /* そ の 他 の エ ラ ー 処 理 */ } : */ も し 、 サブ エラ ー コー ドが実 装 さ れてい る場 合 は、 μ I T R O N4 . 0 で は エ ラ ー コ ー ド 用 の マ ク ロ M ER CD () を 利 用 す る こ と に な り ま す 。 μ T-K e rn e l で は ME RC D() マクロ は 定 義 されて い ま せ んの で 、必 要 に 応 じて M ERC D() を ダ ミー で定 義 す るか、 ま たは 、 ME RC D() を削 除 し て く ださ い 。 リ ス ト 2-8 5 μ IT RON4. 0 で の エラー の 判 定 例 ( サ ブ エラ ーコ ー ド あ り ) ER ercd; : ercd = ter_tsk( MOTOR_TSKID ); ercd = MERCD(ercd); if( ercd < 0 ){ if( ercd == E_ID ){ /* 不 正 ID 番 号 の 場 合 の 処 理 */ } else if ( ercd == E_NOEXS ) { /* タ ス ク が 存 在 し な い 場 合 の 処 理 } /* そ の 他 の エ ラ ー 処 理 */ } : */ Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 83 TEF022-W001-01.00.00/ja リ ス ト 2-8 6 #define μT-Ke rne l で のエ ラー の 判 定 例 MERCD(ercd) : ER (ercd) ercd; : ercd = tk_ter_tsk( MOTOR_TSKID ); ercd = MERCD(ercd); if( ercd < 0 ){ if( ercd == E_ID ){ /* 不 正 ID 番 号 の 場 合 の 処 理 */ } else if ( ercd == E_NOEXS ) { /* タ ス ク が 存 在 し な い 場 合 の 処 理 } /* そ の 他 の エ ラ ー 処 理 */ } : */ 以 下 、 メ イ ンエ ラ ー コー ドの 定 義 値 に着 目 し て相 違 点 を 示 しま す 。 ( A ) そ のま ま 利 用 で き る 定 義 以 下 の マクロ 定 義 は その まま 利 用 で きま す 。 表 2 - 15 その ま ま 利 用 で き る エ ラ ー コ ー ド 定数 値 説明 E_OK※ 0 E _ SY S -5 システムエラー E _ N O SP T -9 未 サ ポ ート 機 能 E _ RSF N - 10 予 約 機 能 コード 番 号 E _ RSA T R - 11 予約属性 E_PAR - 17 パ ラ メ ータ ーエラ ー E_ID - 18 不 正 ID 番 号 E _ CT X - 25 コ ン テ キス トエラ ー E _ M AC V - 26 メ モ リ ア クセス 権 違 反 、メ モ リ ア クセス 不 能 E _ O AC V - 27 オ ブジ ェ ク ト ア ク セ ス 違 反 E_ILUSE -28 シ ス テ ム コ ール 不 正 使 用 E _ N O ME M - 33 メモリ不 足 E _ O BJ - 41 オ ブジ ェ クト状 態 が 不 正 E _ N OE XS - 42 オ ブジ ェ クト が 存 在 してい な い E_QOVR - 43 キュ ーイ ン グ、 ま た は ネスト の オ ーバ フロ ー E _ RL W A I - 49 待 ち 状 態 の強 制 解 除 E _ TMOUT - 50 ポーリ ン グ失 敗 ま たはタイ ムアウト E_DLT - 51 待 ち オ ブジ ェクト の 削 除 正常終了 ※E_OK はエラーコードではありませんが、便 宜 上 含 めてあります。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 84 TEF022-W001-01.00.00/ja ( B ) μ T- Ke r n el で は 定 義 されて い な いエ ラ ー コ ー ド定 義 以 下 に あげる定 義 は μT- K e rn e l で は 定 義 されて い な いため 、 使 用 す る場 合 には 同 じ 名 前 の マク ロ を定 義 す る必 要 が ありま す。 表 2 - 16 μT-Ke rne l で は 定 義 され て い ないエ ラ ーコ ー ド 定数 値 説明 E_NOID - 34 ID 番 号 不 足 E_WBLK -57 ノンブロッキング受 付 け E_BOVR -58 バ ッ ファ オ ー バ フ ロ ー 【移 行 の例 】 例 え ば 、 専 用 の ヘッ ダフ ァ イ ルを 作 成 し 、 その 中 で 不 足 し てい るエ ラ ー コー ド を マ ク ロ定 義 す る こ と で コ ン パ イ ル エラー を 回 避 しま す 。 リ ス ト 2-8 7 μ T-Ke rnel に な いエ ラー コ ード の定 義 例 /* uT-Kernel で は 定 義 さ れ て い な い 定 義 */ #define E_NOID (-34) #define E_WBLK (-57) #define E_BOVR (-58) 定 義 す る値 は 任 意 の 負 の 値 を利 用 で きま す が、μ T- Ke r n el の 他 の エ ラー コー ド と同 じ 値 に なら な い よう に 定 義 し てく ださ い 。 ( C ) μ I T R O N 4 .0 仕 様 で は定 義 さ れてい な い エ ラ ーコー ド 定 義 以 下 に あげる定 義 は 、 T- K e r ne l で新 たに 追 加 さ れたエ ラ ーコー ド 定 義 とな り ます 。 表 2 - 17 μIT RON4.0 仕 様 では 定 義 さ れ てい な いエ ラー コ ード 定数 値 説明 E_NOCOP -6 コ プロ セ ッ サ使 用 不 可 E _ L I M IT - 34 シ ス テ ム の制 限 を 超 過 E_DISWAI -52 待 ち 禁 止 によ る 待 ち 解 除 E_IO - 57 入 出 力 エラー E _ N O M DA - 58 メ ディ ア が ない E _ BU SY - 65 ビ ジ ー状 態 E _ A B OR T - 66 中 止 した E _ RO N L Y - 67 書 込 み禁 止 【移 行 の例 】 μ I T R O N 4 .0 仕 様 で は定 義 さ れてい な い ため 、特 に 対 策 は不 要 で す 。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 85 TEF022-W001-01.00.00/ja 2.5.1.3. 定 数 μ I T R O N 4 .0 仕 様 と、 μT- K e rn el 仕 様 の 一 方 で し か 定 義 さ れて い な い定 数 は 以 下 の と おりです。 表 2 - 18 μIT RON4.0 仕 様 で しか定 義 さ れて い ない 定 数 定義 説明 TA_ACT タスクを 起 動 された 状 態 で生 成 TA_RSTR 制 約 タスク TA_CLR 待 ち解 除 時 にイベントフラグを クリア TMO_NBL K ノンブロッキング TTW_SDTQ データキュ ーへの送 信 待 ち状 態 TTW_RDTQ データキュ ーからの受 信 待 ち状 態 TTEX_ENA タスク例 外 処 理 許 可 状 態 TTEX_DIS タスク例 外 処 理 禁 止 状 態 TOVR_STP 上 限 プロセッサ時 間 が設 定 されていない TOVR_STA 上 限 プロセッサ時 間 が設 定 されている TSK_NONE 該 当 するタスクがない TPRI_SELF 自 タスクのベース優 先 度 の指 定 TMIN_TPRI タスク優 先 度 の最 小 値 (=1) TMAX_TPRI タスク優 先 度 の最 大 値 TMIN_MPRI メッセージ優 先 度 の最 小 値 (=1) TMAX_MPRI メッセージ優 先 度 の最 大 値 TKERNEL_MAKER カーネルのメーカコード TKERNEL_PRID カーネルの識 別 番 号 TKERNEL_SPVER ITRON 仕 様 のバージョン番 号 TKERNEL_PRVER カーネルのバージョン番 号 TMAX_ACTCNT タスクの起 動 要 求 キューイング数 の最 大 値 TMAX_WUPCNT タスクの起 床 要 求 キューイング数 の最 大 値 TMAX_SUSCNT タスクの強 制 待 ち要 求 ネスト数 の最 大 値 TBIT_TEXPTN タスク例 外 要 因 のビット数 TBIT_FLGPTN イベントフラグのビット 数 TBIT_RDVPTN ランデブ条 件 のビット 数 TIC_NUME タイムティックの周 期 の分 子 TIC_DEMO タイムティックの周 期 の分 母 TMAX_MAXSEM セマフォの最 大 資 源 数 の最 大 値 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 86 TEF022-W001-01.00.00/ja 表 2 - 19 μT-Ke rne l 仕 様 で し か定 義 さ れ てい な い 定 数 定義 説明 TA_FIRST 待 ち行 列 先 頭 のタスクを優 先 TA_CNT 要 求 数 の少 ないタスクを優 先 TA_USE RBUF スタック領 域 としてユーザが指 定 した領 域 を使 用 する TA_DSNAME DS オブ ジェクト名 称 を 指 定 する TA_RNGn 対 象 タスクは保 護 レベル n で実 行 する TWF_CLR 全 クリ ア指 定 TWF_BITCLR 条 件 ビットのみクリ ア指 定 TPRI_RUN 実 行 状 態 (RUNNING)にあるタスクの優 先 度 のタスクの 優 先 順 位 を回 転 する Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 87 TEF022-W001-01.00.00/ja 第 3章 ラ ッ パ ー を 使 っ た 移 行 方 法 こ の 章 では 、μ I T R O N 4 .0 の A P I を使 っ て 書 かれ た プ ロ グ ラ ム に 「 ラ ッ パー 」 をか ぶ せる こ と に よ っ て 、T- K e rn e l 上 に 移 行 させ る方 法 につ い て 説 明 し ま す。 この方 法 の メリ ット は 、元 の ソ ー ス プ ロ グラ ム を ほ とんど 変 更 す る必 要 がな く、移 行 に 必 要 な 作 業 を大 幅 に 軽 減 できるこ とです。 (用 語 解 説 ) プ ロ グ ラ ム か ら I T R O N や T- K e r n e l の 機 能 を 呼 び 出 す 方 法 は 、 細 か く 分 け る と 「サービスコール」、「システムコール」、「拡 張 SVC」、「ライブラリ関 数 」、「マクロ」な どさまざまな区 別 がありますが、この章 ではこれらを特 に区 別 せずに「API (Application Program Interface)」と総 称 することにします。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 88 TEF022-W001-01.00.00/ja 3.1. ラ ッ パ ー と は μ I T R O N 4 .0 の A P I を使 っ て 書 かれ た プ ロ グ ラ ム を T- Ke r ne l に 移 行 するに は 、 主 に次 の 二 つの アプ ロ ー チが考 え ら れます 。 μ I T R ON 4 . 0 の A PI は 多 数 ありま すが 、 こ こで は A P I を 代 表 して w u p _ t s k( タス ク 起 床 ) の 例 で 示 し ま す 。 他 の A PI に つ いて も同 様 で す 。 3.1.1. ソ ー ス プ ロ グ ラ ム を 直 接 書 き 変 え る 方 法 I T R O N と T- K e r ne l の仕 様 の 差 を埋 め るため に 、 ソー ス プロ グラ ム を 書 き換 え て 対 応 す る 方 法 で す 。元 の ソー スプ ロ グラ ム 上 の I T R O N の w u p_ t sk は T- Ke rn e l の t k _ wu p _ t s k に 書 き換 える形 に な ります 。 ただし タス ク I D は I T R ON で は 基 本 的 に は固 定 I D ( プ ロ グ ラ ム の コ ン パ イ ル 時 に コン フ ィ ギ ュ レ ー タ 等 を 使 って 固 定 の I D 値 を 割 り 当 て る方 法 ) 、 T- Ke r n el では動 的 I D ( プログラ ム の 実 行 時 に T- K e rn el が動 的 に ID の 値 を割 り当 て る方 法 )で す の で 、その 間 の 変 換 を 考 慮 し て ソー ス プロ グ ラ ム を 修 正 す る 必 要 が あ り ま す 。 ま た 、 T-K e rn e l の t k_ wu p _ t s k は自 タ ス ク を直 接 起 床 で きな い ため 、 元 の ソ ース プ ログラ ム が 自 タ スクの 起 床 を 行 っ て い るかどう か 注 意 深 く確 認 し て、個 別 に 対 応 方 法 を 選 択 す る 必 要 が あります 。 3.1.2. ラ ッ パ ー を 使 う 方 法 I T R O N と T- K e r ne l の仕 様 の 差 をラ イ ブ ラリ で吸 収 す る方 法 で す 。 こ うし たラ イ ブラリ を ラ ッ パ ー( w ra p p e r) と 呼 び ま す 。固 定 I D と動 的 I D の 変 換 や 、 自 タ スク か ど うかの判 断 と対 応 な どは すべ て この ライブ ラ リ 内 で自 動 的 に 行 いま す 。 元 の ソー ス プ ロ グラム 上 の w up_ t s k は 変 更 せ ずに 、 ライ ブ ラリ 関 数 として呼 び 出 す 形 に な りま す。 こ の 方 法 のメ リ ット は、 元 の ソ ース プ ログラ ム を ほ とん ど 変 更 する必 要 がな く、 大 部 分 を自 動 的 に 移 行 で きるこ とで す 。 (用 語 解 説 ) 「 ラ ッ パ ー ( w r a p p e r ) 」 と は 「 包 む も の 」 と い う 意 味 で す が 、 こ の 場 合 は 、 T- K e r n e l に 対 して、それを「包 む」ことにより、変 換 や機 能 追 加 を行 う付 加 的 なプログラム(ライブ ラリ)を表 わします。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 89 TEF022-W001-01.00.00/ja 3.2. ラ ッ パ ー 内 部 の 処 理 I T R O N と T- K e r ne l の仕 様 の 差 を吸 収 す るため に 、 ラッ パー の 内 部 では 主 に次 のよ う な 処 理 を 行 う必 要 が あります 。 3.2.1. API 名 の 変 換 I T R O N の A P I 名 を ラッ パ ー 内 部 で T- K e r nel の A P I 名 に 変 換 し て呼 び 出 します 。 ( 例 ) w u p _ t s k → t k _ w u p_ t s k 基 本 的 には I T R O N の A P I 名 の 先 頭 に「 t k _」をつけ たものが T- Ke r nel の A P I に な り ま すが 、 引 数 な どに 細 か い 違 い もあり ま す 。 3 . 2 . 2 . 固 定 ID と 動 的 ID の 変 換 I T R O N の オ ブ ジ ェ ク ト の 固 定 ID は 、 ラッ パ ー内 部 で 変 換 テ ー ブル 等 を 使 って T-K e r ne l の 動 的 I D に 変 換 す る必 要 が あります 。 ( 例 ) T- K e rn e l の タ ス ク I D の 動 的 な 値 を ラ ッ パー 内 部 で 管 理 する配 列 t i d [ ]に 保 持 して w u p _ t s k( 3) → t k _ w up _ t s k ( ti d[3 - 1 ] ) † 配 列 の添 字 の範 囲 チェック等 も必 要 です。 3.2.3. エ ラ ー コ ー ド の 変 換 I T R O N のエラーコードと T- K e r nel の エ ラー コー ド は 値 が異 な りま すので 、 ラ ッ パー内 部 で 変 換 す る必 要 が あります 。 ( 例 ) ITR O N の E _ PAR = - 1 7 → T- K e r ne l で は E _ PA R = ( - 1 7 < < 1 6 ) → μ T- Ke rn e l で は E_PA R = - 1 7 基 本 的 にはシ フト 演 算 で対 応 で きます が 、 A P I に よ って は ITR O N と T- K e r ne l で エラ ー コー ド が 一 部 異 な る場 合 も あり ますの で 、 個 別 に 対 応 す る必 要 が あります 。 3 . 2 . 4 . T- K e r ne l に な い 機 能 、 細 か い 仕 様 の 違 い T- K e rn e l に な い I TR O N の 機 能 や 、 細 か い仕 様 の 違 いに つ いて は 、で きる限 り I T R O N 仕 様 に 合 わせ るよ う に ラッ パ ー 側 で対 応 し ます 。 ( 例 ) I T R O N では a c t _ t s k で タ ス ク 起 動 要 求 を キ ュー イ ン グ し て お く こ とが 可 能 で す 。 こ の 場 合 、 その タ スク は 終 了 す ると同 時 に 再 起 動 し ま す。 この機 能 は T- K e rn e l に はな い ため 、 ラ ッ パー内 部 の 処 理 で 対 応 す る必 要 が あります 。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 90 TEF022-W001-01.00.00/ja 3.3. ラ ッ パ ー 内 部 の 処 理 の 具 体 例 次 に ラッ パー 内 部 の処 理 の 具 体 例 を い く つか 紹 介 し ま す。 (例 1) メ ッ セ ー ジバッ フ ァ 生 成 T- K e rn e l の メッ セ ー ジバ ッ フ ァ I D の 動 的 な 値 を ラ ッ パー 内 部 で 管 理 する配 列 m b f id [ ] に 保 持 す るよ う に しま す。 リ ス ト 3-1 ITR ON 用 ソー ス プ ロ グ ラム ( 静 的 API ) CRE_MBF(MBF_C, {TA_TFIFO, 10, 1000, NULL}); リ ス ト 3-2 ラッ パ ー内 部 の 処 理 例 #define MBF_C 3 /* 固 定 ID */ T_CMBF cmbf = {NULL, TA_TFIFO, 1000, 10}; mbfid[MBF_C - 1] = tk_cre_mbf(&cmbf); †実 際 にはパラメータチェックやエラー処 理 等 も必 要 です。 (例 2) メ ッ セ ー ジバッ フ ァ への メッ セ ー ジ 送 信 T- K e rn e l の メッ セ ー ジバ ッ フ ァ I D の 動 的 な 値 を ラ ッ パー 内 部 で 管 理 する配 列 m b f id [ ] に 保 持 す るよ う に しま す。 リ ス ト 3-3 ITR ON 用 ソー ス プ ロ グ ラム er = snd_mbf(MBF_C, msg, sizeof(msg)); リ ス ト 3-4 ラッ パ ー内 部 の 処 理 例 er = tk_snd_mbf(mbfid[MBF_C - 1], msg, sizeof(msg), TMO_FEVR); er >>= 16; /* T-Kernel のエラーコードを ITRON のエラーコードに */ (例 3) 自 タ ス クを含 む タス クの 起 床 μ I T R O N 4 .0 で は 自 タ スク への タ スク起 床 要 求 のキ ュー イ ン グも 可 能 で すが 、 T- K e rne l の t k _ w u p _ t s k は 自 タ スク に は 対 応 し て おら ず 、オ ブ ジ ェ ク ト 状 態 エ ラ ー(E _ OB J) を返 し ま す 。 そ こ でラッ パ ー 内 部 で い っ た ん別 の コ ン テ キス ト (他 タ ス クま たは タ スク独 立 部 )に 切 り 替 え て か ら t k_ wu p _ t s k を使 うように しま す 。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 91 TEF022-W001-01.00.00/ja リ ス ト 3-5 ITR ON 用 ソー ス プ ロ グ ラム er = wup_tsk(n); リ ス ト 3-6 ラ ッ パー 内 部 の 処 理 例 er = tk_wup_tsk(tid[n - 1]); if (er == E_OBJ && tid[n - 1] == 自 タスク) { 別 のコンテキストに切 り替 える; er = tk_wup_tsk(tid[n - 1]); 元 のタスクのコンテキストに切 り替 える; } if (er < 0) er >>= 16; /* エラーコード変 換 */ † 実 際 には n == 0 (TSK_SELF) の場 合 のチェック等 も必 要 です。 こ の よ うに 、ラ ッ パ ー全 体 を 開 発 するに は 、 相 当 な 開 発 工 数 が 必 要 にな り ます 。 し か し 、関 連 製 品 の 章 で紹 介 紹 介 するよ う な 製 品 も 利 用 可 能 で す 。 この よう な 製 品 な どを 利 用 す ればラ ッ パ ーを 開 発 す る必 要 は あり ま せん。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 92 TEF022-W001-01.00.00/ja 3.4. 移 行 の 具 体 例 こ こ で は 移 行 の 具 体 例 とし て 、 簡 単 な I T R O N の ソ ース プ ログラ ム を T- Ke r n el に移 行 す る例 を 扱 いま す 。 移 行 に 必 要 な 作 業 量 を 比 較 す るため 、 ラッ パ ー として I - r i g ht / T K を 使 っ て 移 行 す る場 合 と、 I - r i g h t / T K な どの ラッ パ ー を使 わ ず に ソー ス プ ロ グ ラム を 直 接 書 き 換 え て T- Ke r nel に 移 行 する場 合 の 両 方 に つ いて説 明 し ます 。 3 . 4 . 1 . 元 の ITRON 用 ソ ー ス プ ロ グ ラ ム I T R O N の A P I を 使 って 書 か れた「哲 学 者 の食 事 問 題 」を解 く プ ロ グラム を 例 とし て取 り 上 げ ます 。 丸 テ ー ブルを 囲 む 5 人 の 哲 学 者 ( タス ク )が 思 索 と食 事 を 繰 り返 し ま す。 食 事 す るには自 分 の 左 右 のフ ォ ー ク ( ミ ュー テ ック ス) を両 方 とも 獲 得 ( ロック )する必 要 が ありま す 。 全 員 同 時 に フ ォー ク を取 ろ う と待 ち続 け てデ ッ ドロ ッ クに 陥 ったり 、 特 定 の哲 学 者 だけ食 事 で きない よ う な こ と が 発 生 し な い た めには 、 フ ォー ク を 取 る ル ール を 工 夫 する 必 要 が あ りま す 。 ここ では 「 1 番 め の 哲 学 者 だけ は 左 の フ ォー ク を先 に 、 残 りの 4 人 の 哲 学 者 は 右 のフ ォ ー クを 先 に 取 る」 と い う ル ー ル に して い ま す 。 ( A ) コ ン フ ィ ギ ュレ ー シ ョン ファ イ ル ( I TRO N 用 ) 静 的 A PI を使 っ て タスクとミ ュー テ ック スを 5 個 ず つ 定 義 して い ま す。 ミュ ー テ ック ス I D は 固 定 値 ( 1 , 2 ,3 , 4 , 5 ) とし てい る点 に ご注 意 くだ さ い。 リ ス ト 3-7 コ ン フィ ギ ュレ ー ショ ンファ イ ル の 例 (IT RON 用 ) CRE_TSK(TID_A, {TA_HLNG | TA_ACT, CRE_TSK(TID_B, {TA_HLNG | TA_ACT, CRE_TSK(TID_C, {TA_HLNG | TA_ACT, CRE_TSK(TID_D, {TA_HLNG | TA_ACT, CRE_TSK(TID_E, {TA_HLNG | TA_ACT, CRE_MTX(1, {TA_TFIFO, 0}); CRE_MTX(2, {TA_TFIFO, 0}); CRE_MTX(3, {TA_TFIFO, 0}); CRE_MTX(4, {TA_TFIFO, 0}); CRE_MTX(5, {TA_TFIFO, 0}); 1, 2, 3, 4, 5, task, task, task, task, task, Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 1, 1, 1, 1, 1, 8192, 8192, 8192, 8192, 8192, NULL}); NULL}); NULL}); NULL}); NULL}); 93 TEF022-W001-01.00.00/ja ( B ) 哲 学 者 タ スク のソ ー スプロ グラ ム ( I TR O N 用 ) こ の ソー ス プロ グ ラ ム で も 自 分 の 左 右 の ミ ュ ーテ ッ ク ス I D ( mLe f t , mR ig ht ) を 求 め る上 で 、 ミ ュ ー テッ ク ス I D は 固 定 値 ( 1 , 2 , 3 ,4 , 5 ) であることを前 提 としています。 リ ス ト 3- 8 哲 学 者 タ スク の ソ ース プロ グラ ム 例 ( IT RON 用 ) #include <itron.h> #include <stdio.h> /* ITRON ヘッダファイル */ /* printf() */ /* 哲 学 者 タスク */ void task(VP_INT n) { /* 自 分 の右 のミューテックス ID */ ID mRight = n; /* 自 分 の左 のミューテックス ID */ ID mLeft = n > 1 ? n - 1 : 5; W i; for(i = 1; i <= 10; i++) { /* 思 索 する */ dly_tsk(200); /* 左 右 のミューテックスが取 れるまで待 つ */ loc_mtx(n == 1 ? mLeft : mRight); dly_tsk(10); loc_mtx(n == 1 ? mRight : mLeft); /* 食 事 する */ printf("哲 学 者 %d : %d 回 目 の食 事 開 始 ¥n", n, i); dly_tsk(100); printf("哲 学 者 %d : %d 回 目 の食 事 終 了 ¥n", n, i); /* 左 右 のミューテックスを手 放 す */ unl_mtx(mLeft); unl_mtx(mRight); } } Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 94 TEF022-W001-01.00.00/ja 3 . 4 . 2 . I - r i g h t / T K を 使 っ て T- K e r n e l に 移 行 す る 場 合 ( A ) 初 期 化 ル ーチ ン ( T- Ker n e l + I - r ig h t / T K 用 ) I - r i g ht / T K で は 、 ITRON の 静 的 API は S TA _ C F G と E ND _ C FG で囲 む だけ で記 述 で き ま す 。 こ れ を プ ロ グ ラ ム の 初 期 化 ル ー チ ンに 含 め ま す 。 リ ス ト 3-9 初 期 化 ルーチ ン ( T-Ke rne l +I-right/TK 用 ) #include <itron.h> /* I-right/TK ヘッダファイル */ /* 初 期 化 ルーチン */ ER main(INT ac, UB *av[]) { STA_CFG; /* コンフィギュレーション開 始 */ CRE_TSK(TID_A, {TA_HLNG | TA_ACT, CRE_TSK(TID_B, {TA_HLNG | TA_ACT, CRE_TSK(TID_C, {TA_HLNG | TA_ACT, CRE_TSK(TID_D, {TA_HLNG | TA_ACT, CRE_TSK(TID_E, {TA_HLNG | TA_ACT, CRE_MTX(1, {TA_TFIFO, 0}); CRE_MTX(2, {TA_TFIFO, 0}); CRE_MTX(3, {TA_TFIFO, 0}); CRE_MTX(4, {TA_TFIFO, 0}); CRE_MTX(5, {TA_TFIFO, 0}); END_CFG; return ERR_CFG; 1, 2, 3, 4, 5, task, task, task, task, task, 1, 1, 1, 1, 1, 8192, 8192, 8192, 8192, 8192, NULL}); NULL}); NULL}); NULL}); NULL}); /* コンフィギュレーション終 了 */ /* 初 期 化 ルーチン終 了 */ } † 初 期 化 ルーチンは、ここでは代 表 的 に main という名 前 にしていますが、シ ステムによっては異 なる場 合 があります。 ( B ) 哲 学 者 タ スク ( T- Ke r ne l + I - r ig ht / T K 用 ) こ の ソー ス プロ グラ ム は 、ま っ たく書 き換 え る必 要 は あり ま せん。 こ の後 で 説 明 す るラ ッ パー を 使 わ な い場 合 に 必 要 とな る A P I の 変 換 、I D の 変 換 、 オブ ジ ェクト 生 成 タ イ ミ ン グな ど はす べ て I - ri g ht / T K 側 で 自 動 的 に対 応 し ま すので 、 こ のま まで 動 作 し ます 。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 95 TEF022-W001-01.00.00/ja リ ス ト 3-1 0 哲 学 者 タ スク ( T-Kernel+I-right/T K 用 ) #include <itron.h> #include <stdio.h> /* I-right/TK ヘッダファイル */ /* printf() */ /* 哲 学 者 タスク */ void task(VP_INT n) { /* 自 分 の右 のミューテックス ID */ ID mRight = n; /* 自 分 の左 のミューテックス ID */ ID mLeft = n > 1 ? n - 1 : 5; W i; for(i = 1; i <= 10; i++) { /* 思 索 する */ dly_tsk(200); /* 左 右 のミューテックスが取 れるまで待 つ */ loc_mtx(n == 1 ? mLeft : mRight); dly_tsk(10); loc_mtx(n == 1 ? mRight : mLeft); /* 食 事 する */ printf("哲 学 者 %d : %d 回 目 の食 事 開 始 ¥n", n, i); dly_tsk(100); printf("哲 学 者 %d : %d 回 目 の食 事 終 了 ¥n", n, i); /* 左 右 のミューテックスを手 放 す */ unl_mtx(mLeft); unl_mtx(mRight); } } 以 上 のプ ログラ ム を メ イク し て I- r igh t /TK と リ ン ク す れ ば 、 T-K e r ne l 上 で 正 し く 動 作 し ま す。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 96 TEF022-W001-01.00.00/ja 3 . 4 . 3 . ソ ー ス プ ロ グ ラ ム を 書 き 換 え て T- K e r n e l に 移 行 す る 場 合 移 行 に 必 要 な 作 業 量 を比 較 す るため 、 I - r i g h t /T K な どの ラッ パ ー を使 わ ず に ソー スプ ロ グラ ム を 直 接 書 き換 えて T- Ke r nel に 移 行 する場 合 に つい て 考 えてみ ま しょ う 。 (A) API の変 換 A P I を I T R O N か ら T-K e r ne l に変 更 し ます 。 ITRON → T- K e rn el C RE _ T S K ( TA_ AC T ) → tk_cre_tsk と tk_sta_tsk C RE _M T X → t k _ c r e _ m tx dly_tsk → t k _ dl y_ t s k l o c_ mt x → t k _ lo c _ mtx ( TM O _ FEV R) u n l _ m tx → t k _ u nl _ mtx (タスクからのリターン) → t k _ ex t_ t s k ( B ) 固 定 I D と動 的 I D の変 換 元 の ソー スプ ロ グラ ム はミ ュー テッ クス I D は固 定 値 ( 1 , 2 , 3 ,4 , 5 ) であることを前 提 としてい る た め 、 T- Ke rn e l の 動 的 I D で は そのま ま では 動 作 し ま せんの で 、 ソー スプ ロ グ ラ ム の修 正 が 必 要 とな り ます 。 こ こ で は 固 定 I D を 動 的 I D に 変 換 す るた め に 、 変 換 テー ブ ル( 配 列 ) を 確 保 す る こ と に し ます。 ( C ) オ ブ ジ ェクトの 生 成 タイ ミン グの 考 慮 元 の コ ン フィギ ュ レ ー シ ョン フ ァ イ ル では タ ス ク を 生 成 ・ 起 動 し て か ら ミ ュ ーテ ッ ク スを 生 成 す る順 番 で 書 か れて い ます が 、こ う した順 番 に 関 係 な く、 コン フ ィ ギ ュレ ーシ ョ ン 全 体 が完 了 し て か ら、 す べて の タス クが一 斉 に 実 行 可 能 にな るこ とが 保 証 されて い ま し た。 一 方 、 T-K er n e l 上 で 初 期 化 ル ー チン の 中 で タ スク を 生 成 ・ 起 動 後 にミ ュー テ ック スを生 成 す ると、 初 期 化 ル ー チン よ り 優 先 度 の 高 い タス ク は起 動 した段 階 で すぐ実 行 開 始 さ れ、 そ の 時 点 では他 の ミ ューテッ ク スや タ スク は 未 生 成 ・未 起 動 の ため 、 プ ロ グラム は 正 しく 実 行 さ れません。 こ の 問 題 を回 避 す るため 、 今 回 は初 期 化 ル ーチ ン の 中 でタ ス ク とミ ュー テ ック スをす べ て 生 成 し てから 、 一 斉 に タス ク を 起 動 す るよ う に 、順 序 を 入 れ替 え るこ とにし ま す。 厳 密 に 言 えば 、 t k _ s ta _ t s k を 使 って タ ス ク を 一 つ ず つ 起 動 し た だ け で は 「 一 斉 に 起 動 」 し たこ とにはな ら ず 、や はり タ イ ミ ン グに ず れが 生 じ ま す。 し かし 今 回 の 場 合 は タ スク 起 動 後 に そ の タ スク が t k _ dl y_ t s k で 待 ち 状 態 にな り 、 すぐに 初 期 化 ル ー チ ンに実 行 権 が戻 っ て きて 次 の タ スク を起 動 で きます の で 、「 ほぼ 同 時 に 起 動 」 で きます。 (参 考 ) タスクが実 行 開 始 後 すぐ待 ちに入 らない場 合 は、タスクを一 斉 に起 動 するために工 夫 する必 要 があります。例 えば初 期 化 ルーチンのタスク優 先 度 を一 時 的 に引 き上 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 97 TEF022-W001-01.00.00/ja げて、生 成 するタスクの優 先 度 よりも高 くしておき、すべてのタスクの生 成 ・起 動 後 に、 初 期 化 ルーチンのタスク優 先 度 を元 に引 き下 げます。ただしこの方 法 では、割 込 み ハンドラや周 期 ハンドラなどのタスク独 立 部 の起 動 は遅 延 できません。静 的 API で これらのハンドラを生 成 ・起 動 している場 合 は、個 別 の対 応 が必 要 です。 以 上 の よ うな検 討 を 行 った上 で 、 元 の ソ ース プ ログラ ム を 次 のよ う に 書 き換 え ま す 。 リ ス ト 3- 11 初 期 化 ルーチ ン (T-Kernel 用 ) #include <tk/tkernel.h> ID mtxID[5]; /* T-Kernel ヘッダーファイル */ /* ミューテックス ID テーブル */ /* 初 期 化 ルーチン */ ER main(INT ac, UB *av[]) { T_CTSK ctsk = {NULL, TA_HLNG | TA_RNG0, task, 120, 8192}; T_CMTX cmtx = {NULL, TA_TFIFO, 0}; ID tskID[5]; /* タスク ID テーブル */ W n; /* タスクを生 成 する */ for(n = 1; n <= 5; n++) { tskID[n - 1] = tk_cre_tsk(&ctsk); } /* ミューテックスを生 成 する */ for(n = 1; n <= 5; n++) { mtxID[n - 1] = tk_cre_mtx(&cmtx); } /* タスクを起 動 する */ for(n = 1; n <= 5; n++) { tk_sta_tsk(tskID[n - 1], n); } return E_OK; /* 初 期 化 ルーチン終 了 */ } Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 98 TEF022-W001-01.00.00/ja リ ス ト 3-1 2 哲 学 者 タ スク (T-Kernel 用 ) #include <tk/tkernel.h> #include <stdio.h> /* T-Kernel ヘッダファイル */ /* printf() */ extern /* ミューテックス ID テーブル */ ID mtxID[]; /* 哲 学 者 タスク */ void task(INT n, VP exinf) { /* 自 分 の右 のミューテックス ID */ ID mRight = mtxID[n - 1]; /* 自 分 の左 のミューテックス ID */ ID mLeft = mtxID[(n > 1 ? n - 1 : 5) - 1]; W i; for(i = 1; i <= 10; i++) { /* 思 索 する */ tk_dly_tsk(200); /* 左 右 のミューテックスが取 れるまで待 つ */ tk_loc_mtx(n == 1 ? mLeft : mRight, TMO_FEVR); tk_dly_tsk(10); tk_loc_mtx(n == 1 ? mRight : mLeft, TMO_FEVR); /* 食 事 する */ printf("哲 学 者 %d : %d 回 目 の食 事 開 始 ¥n", n, i); tk_dly_tsk(100); printf("哲 学 者 %d : %d 回 目 の食 事 終 了 ¥n", n, i); /* 左 右 のミューテックスを手 放 す */ tk_unl_mtx(mLeft); tk_unl_mtx(mRight); } tk_ext_tsk(); /* タスク終 了 */ } 以 上 のプ ログラ ム を メ イク す れば 、 T-K e r ne l 上 で 正 し く 動 作 し ま す。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 99 TEF022-W001-01.00.00/ja 3.5. こ の 章 の ま と め こ の 章 では 、ラ ッ パ ーを 使 う こ と に よ り 、元 の ITRON 用 の ソ ース プ ロ グ ラ ムを ほ と ん ど 書 き 換 え る必 要 な く 、最 小 限 の 手 間 で T-K e r ne l に移 行 で きるこ とを 説 明 しまし た。 既 に 製 品 化 さ れた T- K er n e l 用 の ITR O N ラ ッ パ ー と し て は、 パ ー ソ ナ ルメ デ ィ ア 株 式 会 社 の「 I - r i g ht / T K 」 が ありま す 。 I- r i ght /TK は 、 パー ソ ナ ル メディ アか ら 発 売 さ れ て い る T- K e rn e l 応 用 製 品 はも ち ろん 、 ユー ザ自 身 あるい は 第 三 者 が 移 植 した T- K e r nel 上 にも 若 干 のカ スタ マ イ ズに より 搭 載 可 能 で す 。 詳 細 に つ いて はパ ー ソ ナル メデ ィ ア株 式 会 社 ま で お 問 合 せくだ さ い 。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 100 TEF022-W001-01.00.00/ja 第 4章 開発環境/関連製品 第 4 章 で は、 μ T- Ke r ne l の 開 発 環 境 の 構 成 と構 築 方 法 につ い て 説 明 し ま す。 4 . 1 . μ T- K e r n e l の 開 発 環 境 4 . 1 . 1 . リ フ ァ レ ン ス コ ー ド の 開 発 環 境 (GC C) T- E ng i ne フ ォ ー ラ ムの We b ペー ジ で 公 開 さ れ て い る μ T- K e rn e l の リ フ ァレ ンス コ ー ド は A RM 7 T DMI と H 8 S / 2 21 2 に 対 応 して い ま す。 μT- K e rn el の 開 発 には G C C などの G N U ツ ー ルを 使 い ま す 。そ のため 、 Wi ndo w s 上 で 開 発 を 行 う 場 合 に は 図 4 - 1 に 示 す よ うに U N I X エ ミ ュレ ー タ の C yg w i n を利 用 し ま す。 G N U ツ ール ( G CC など ) C y gw i n M S - Wi nd o w s 図 4-1 開 発 環 境 の構 成 開 発 環 境 は図 4 - 2 に 示 す 手 順 で 構 築 し ま す。 μ T- Ke r n el の ソー スの入 手 C y gw i n の入 手 とイ ン スト ー ル G N U ツ ール の 入 手 とイ ン ス トー ル ビルド 図 4-2 開 発 環 境 構 築 手 順 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 101 TEF022-W001-01.00.00/ja ( 1 ) μ T- Ke r n el の ソー スの入 手 μ T- Ke r n el ソ ー ス コ ード は T- En gin e フ ォ ーラム の We b ペー ジ から 入 手 で きま す 。 U R L : h t t p : / / w w w. t - e n g i n e .o r g /T- K e r n e l / t k e r n e l . h t m l # u t k _ s r c は じ めに 、 μT- K e rn e l の 利 用 申 込 み を 行 います ( ① )。 フ ォー ム に 氏 名 、 メ ー ル ア ドレ ス な ど を 入 力 して 送 信 す ると T- E n gi ne フ ォ ー ラムか ら ダ ウ ン ロー ド ペ ー ジ の I D とパスワードが 発 行 さ れま す。 ①利 用 申 込 み ② ソ ー ス コ ード の ダウンロード ③ G N U ツールの ダウンロード 図 4 - 3 ダウン ロ ー ド ペー ジ 次 に ②を クリッ クし て μ T-K e r ne l ソ ース コ ー ド ダ ウ ン ロ ー ド ペ ージ を 開 きま す。 こ の 時 ID と パ ス ワー ド 入 力 画 面 が表 示 さ れるので T- E ng i ne フ ォ ーラ ムか ら 発 行 された I D と パ ス ワ ー ド を 入 力 して く だ さ い 。ソ ース コ ー ド u t ke r n e l . 1 . 0 1 . 0 0 . t a r.g z を 選 択 して保 存 し ます 。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 102 TEF022-W001-01.00.00/ja ソースコード 図 4 - 4 μT- Ke rne l ソー ス コ ー ド ダウ ン ロ ー ド ペー ジ Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 103 TEF022-W001-01.00.00/ja ( 2 ) C y gw i n の入 手 とイ ン スト ー ル C y gw i n は次 の U R L か ら ダ ウン ロー ド で き ま す。 U R L : h t t p : / / w w w. c y g w i n . c o m / 確 認 に 使 用 し た各 ソ フトウ ェアの バ ージ ョ ン は次 の通 り で す 。 表 4 - 1 Cygwin ツ ー ル の バ ー ジ ョ ン ソフトウェア バージョン c y g wi n 1 . d l l 1.5.21 make 3.81 perl 5.8.7 bash 3.1.17 We b ペ ー ジ 上 の Cy gwin の ア イ コ ン を ク リ ッ ク す る と イ ン ス ト ー ラ が 起 動 さ れ ま す 。 指 示 に 従 っ てイ ン スト ー ルし てくだ さ い 。こ の時 、 パ ッ ケージ 選 択 画 面 で 図 4 - 5 の よ う に d e v e l と p e r l の パ ッ ケー ジを 選 択 します 。 D e v e l と P e r l の パッ ケー ジ を“ I n s t a l l ”に 設 定 す る。 図 4 - 5 パッケー ジ の 選 択 イ ン ス ト ー ル 後 、 C yg win を 起 動 し、/ u s r / l o c a l /b i n に / u s r / b i n / p e rl への シ ンボ リック リ ン ク を 作 成 し ます 。 $ ln -s /usr/local/bin /usr/bin/perl Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 104 TEF022-W001-01.00.00/ja ( 3 ) G N U ツ ール の 入 手 とイ ン ス トー ル G N U ツ ール の ダ ウ ン ロー ド ペ ー ジ は 図 4 - 3 の③ を クリ ックす ると表 示 されま す 。 A RM 7 T DMI ま た は H 8S / 2 2 1 2 の G N U ツ ール を 選 択 して 保 存 します 。 図 4-6 GNU ツ ー ル ダウ ン ロ ー ド ペ ー ジ 保 存 し た GNU ツールを /usr/lo c al に コピ ー して 展 開 す ると G N U ツ ール がイ ン ストー ル さ れます。 A RM 7 T DMI の 場 合 $ cd /usr/local $ t a r x z f d e v e n v _ a r m7 t d m i . t g z H8S/2212 の場 合 $ cd /usr/local $ t a r x z f d e v e n v _ h 8 30 0 - e l f - 4 . 1 .t g z Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 105 TEF022-W001-01.00.00/ja ( 4 ) 環 境 変 数 の設 定 G N U ツ ール を 実 行 するに は 次 の環 境 変 数 を環 境 に 合 わせ て 設 定 する必 要 が ありま す 。 . b a s h rc な ど に以 下 の 内 容 を書 き込 み ビル ド 前 に 環 境 変 数 が設 定 さ れるよ う に して くだ さい。 【ARM7TDMI の設 定 例 】 $ export BD=/usr/local/te/utkernel_source $ export GNUs=/usr $ export GNU_BD=/usr/local/arm7tdmi $ export GNUarm=$GNU_BD/arm-elf $ export GCC_EXEC_PREFIX=$GNU_BD/lib/gcc-lib μ T- K e r n e l の ソ ー ス コ ー ド を 展 開 し た デ ィ レ ク ト リ make があるディレクトリ GNU ツールのベースディレクトリ GNU 関 連 ツールのディレクトリ gcc 関 連 ディレクトリ 【H8S/2212 の設 定 例 】 $ export BD=/usr/local/te/utkernel_source $ export GNUs=/usr $ export GNU_BD=/usr/local/h8300-elf-4.1 $ export GNUh8300=$GNU_BD/h8300-elf $ export GCC_EXEC_PREFIX=$GNU_BD/lib/gcc Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 106 TEF022-W001-01.00.00/ja (5) ビルド ( 1 ) で 入 手 した μ T- Ke r ne l の ソ ー スコー ド を / u s r / l o c a l / t e 配 下 に 展 開 しま す 。 $ $ $ $ cd /usr/local mkdir te cd te t a r x z f u t k e r ne l . 1 .0 1 . 0 0 . t a r.g z 次 に μ T- Ker n el を ビルド し ま す。 ビル ド が正 常 に 終 了 す ると m a k e を行 っ たデ ィレク トリ に 実 行 フ ァ イル ( ke r nel - ro m.mo t)が作 成 さ れます 。 $ cd kernel/sysmain/build/app_at91 または $ c d k e r n e l / s y s m a i n / b u i l d / a p p_ h 8 s 2 2 1 2 $ make ...ビ ル ド 処 理 が 表 示 される。 ( 6 ) タ ー ゲ ッ ト ボー ド へ の 書 き込 み と デ バ ッ グ 作 成 し た実 行 フ ァ イ ルは、 J TA G デバ ッ ガ を 使 って タ ー ゲッ ト ボ ー ド に 書 き 込 む こ と に より 、 デ バ ッ グ を行 う こ と が できま す 。 開 発 用 PC J TA G ターゲット デバッガ ボード ( AR M 7 o r H 8 S ) 図 4-7 GNU ツ ー ル ダウ ン ロ ー ド ペ ー ジ Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 107 TEF022-W001-01.00.00/ja 4 . 1 . 2 . S O F T U N E μ T-R E A L O S / F R [FML] S O F T U N E μ T- RE A LO S / F R は 、富 士 通 マ イク ロ エ レク トロ ニ ク ス 製 FR マ イ コ ン に 対 応 し て い るμ T- Ke r n el 仕 様 の R TO S で す 。 μT- RE A L O S/ F R を 利 用 し た ア プリ ケ ー シ ョ ン を 開 発 す るに は 、統 合 開 発 環 境 S O F T U N E を 使 用 します 。 統 合 開 発 環 境 S OF T UN E は 、 言 語 ツ ー ル 、 デバ ッガ ツ ー ル 、解 析 ツ ール を統 合 し 、 コ ーデ ィ ン グ 、 コン パ イ ル 、デバ ッ グ を 繰 り 返 すア プ リ ケーショ ン 開 発 を効 率 的 に行 え ま す 。 コーディング ビルド デバッグ 図 4-8 開 発 の流 れ 図 4 - 9 統 合 開 発 環 境 SOFTUN E の構 成 図 4 - 10 統 合 開 発 環 境 SOFTUNE Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 108 TEF022-W001-01.00.00/ja ( 1 ) S O F T U N E μ T- RE A LO S / F R 体 験 版 の 入 手 とイ ン ス ト ール S O F T U N E μ T- RE A LO S / F R を 使 用 す るには 、製 品 を 購 入 す る方 法 と体 験 版 を ダウ ン ロ ー ド す る方 法 の 2 通 り あり ま す 。 体 験 版 は 製 品 版 とは 異 な り 、 製 品 開 発 に は使 用 で きな い こ とや サ ポ ート が受 け ら れない な どの 制 限 が あり ます が、 手 軽 に試 用 す るこ とがで きま す 。 使 用 許 諾 条 件 お よ び 制 限 事 項 の 詳 細 に つい て は 、ウ ェブ ペ ージ で確 認 し てくだ さ い 。 体 験 版 は 、以 下 の サイ トか ら ダ ウン ロー ド で きま す。 U R L : h t t p : / / j p .f u j i t s u . c o m / m i c r o e l e c t r o n i c s / をクリックすると、ダウンロードサイトに移 動 できます。) ( 右 下 の バナー S O F T U N E μ T- RE A LO S / F R を イン ス ト ール する前 に 、 統 合 開 発 環 境 S O F T U N E を イ ン ス トー ルす る必 要 があり ま す 。 同 じ ダ ウ ン ロード サ イ トか ら 、評 価 版 を 入 手 で きま す 。 S O F T U N E μ T- RE A LO S / F R の イン ス ト ール 方 法 に つ いては 、 ダ ウン ロー ド サ イ トを参 照 す るか 、 イ ンス ト ール 説 明 書 を 参 照 し て くだ さい。 ( 2 ) S O F T U N E μ T- RE A LO S / F R の開 発 支 援 ツー ル S O F T U N E μ T- RE A LO S / F R で は、 ア プリ ケーシ ョ ン を開 発 す る時 に 有 効 な 開 発 支 援 ツ ー ルを 用 意 し て います 。 コン フ ィ ギ ュレ ー タ は 、アプ リ ケー ション で 使 用 するカ ー ネ ルのオ ブ ジ ェクト数 を 最 適 に設 定 で きるツ ー ルで す 。 ア プリケー シ ョ ン 毎 に 使 用 す るタ ス ク 数 や機 能 は 変 わっ て きます 。コン フ ィ ギ ュレ ー タ で使 用 す るオブ ジ ェクト 数 お よ び 機 能 を 指 定 す るこ とで 、 メ モ リ消 費 量 の少 な い カ ー ネル が再 構 築 で きま す 。 図 4 - 11 μT- RE ALOS コ ン フィ ギュ レ ー タ ( コ ンフ ィギュ レ ーシ ョン定 義 ) そ の 他 にも 、割 込 み 番 号 とエ ン ト リ 名 を 設 定 す るだ けの 割 込 み 登 録 機 能 、 ユ ー ザカ スタ マ イ ズ 可 能 な省 電 力 モ ード の 設 定 機 能 な どが ありま す 。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 109 TEF022-W001-01.00.00/ja 図 4 - 12 μT- RE ALOS コ ン フィ ギュ レ ー タ ( 割 込 みハン ド ラ の 編 集 ) ア ナラ イ ザは、 カ ー ネルの状 態 を リアル タ イ ムに 解 析 し 、 タ スク遷 移 図 を 表 示 す るツ ール で す 。 デ バッ グ 支 援 ツ ールと し て 、ま た は チ ュ ー ニ ング 支 援 ツ ール と し て 使 うこ と が で き ま す 。 例 え ば 、 タ スクや オ ブ ジ ェクト の状 態 が分 か るオ ブジ ェクト 状 態 表 示 機 能 やタ ス クの ス タッ ク 使 用 量 解 析 機 能 な ど を 用 意 し て いま す 。 図 4 - 13 μT- RE ALOS ア ナ ラ イザ Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 110 TEF022-W001-01.00.00/ja 図 4 - 14 μT- RE ALOS ア ナ ラ イザ ( ス タッ ク 情 報 表 示 機 能 ) ( 3 ) サ ン プ ル プ ログラ ム の ビル ド S O F T U N E μ T- RE A LO S / F R 体 験 版 の 中 には 、 ビ ル ドして 動 か すこ とが 可 能 な サン プ ル プ ロ グ ラ ムが あ り ます 。な お 、 サ ンプル プ ロ グ ラ ムは 、 FR マイコン の M B 91 4 0 3 で 動 か す こ と を 前 提 に 作 ら れて い ます。 サ ン プ ル プログラ ム を ビ ルド す る 方 法 は 以 下 の と お り で す 。 1. 統 合 開 発 環 境 SOFTUNE の起 動 ス タ ー ト メ ニ ュ ー に あ る [ S o f t u n e V 6] の[ F R F a m i l y S o f t u n e Wo r k b e n c h ] をク リッ ク す るこ とで 起 動 し ま す。 図 4 - 15 統 合 開 発 環 境 SOFTUN E の起 動 画 面 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 111 TEF022-W001-01.00.00/ja 2. ワ ー ク ス ペ ース を 開 く メ ニ ュ ー の [ フ ァ イ ル ( F) ] -[ ワ ー クス ヘ ゚ー スを 開 く ( R) ]で、 C : ¥ So f tu n e 6¥ u t ker n e l ¥ 9 11 ¥ s m p s y s ¥ s m p s y s . w s p を 指 定 し ま す。 3. ビルド サ ン プ ル プ ログラ ム は す ぐに ビ ル ド で きるよ う に な っ て い ま す の で 、 [ フ ゚ ロ シ ゙ ェクト ( P) ] - [ ビ ル ト ゙ (B )] で ビル ド す るこ とが で きま す。 「 ビ ル ト ゙( B)」 を ク リッ ク 図 4 - 16 SOFTUNE の プ ロ ジ ェ ク ト メ ニ ュ ー ( 4 ) サ ン プ ル プ ログラ ム の シ ミ ュ レ ー タ 環 境 で の デ バッ グ シ ミ ュレ ー タを 使 用 してデ バ ッ グす る方 法 を 説 明 し ま す。 1. デ バ ッ グの 開 始 メ ニ ュ ー の [ テ ゙ ハ ゙ ッ ク ゙ (D )] - [ デ ハ ゙ ッ グの 開 始 ( D )]で デ バ ッ グを開 始 し ます 。セ ッ トア ップ ウ ィ ザー ドが立 ち 上 が った場 合 は 、[ S i m u l a t o r D e b u g g e r]を 選 択 し 、シミ ュレ ー タ 種 別 は [ No ma l]を 選 択 して くさ い 。 図 4 - 17 デバ ッ ガの セッ ト アッ プ ウィ ザ ー ド( その 1 ) Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 112 TEF022-W001-01.00.00/ja 図 4 - 18 デバ ッ ガの セッ ト アッ プ ウィ ザ ー ド( その 2 ) 2. タ ー ゲ ッ ト フ ァ イ ル の ロ ード タ ー ゲ ッ ト に ロ ー ド す る た め 、 メ ニ ュ ーの [ テ ゙ ハ ゙ ッ ク ゙ (D ) ]- [ ター ゲッ ト フ ァイルの ロー ト ゙ (O )] で ロードしてください。 図 4 - 19 デバ ッ グ開 始 直 後 の 画 面 3. デバッグ操 作 一 般 的 な デバ ッ グ環 境 と同 じ よ うに 、ブ レ ーク を 張 るな ど して 、デ バ ッ グを するこ とが で き ま す 。 ア ナ ラ イ ザ を 起 動 す る 場 合 は、 メ ニ ュ ー の [ R ア ナ ラ イ サ ゙ (R )] -[ R アナ ラ イ サ ゙( R) ]で起 動 で きま す 。 ( 5 ) サ ン プ ル プログラ ム の 実 機 で の デ バッ グ (4) の説 明 はシミュレータ環 境 を使 用 する方 法 でしたが、実 機 で動 作 確 認 したい場 合 は、 FR マ イ コ ン の ス タ ー ターキ ッ ト 「 bi t s p o t( ビ ッツ ・ポッ ト)」 で動 作 さ せることが で きま す。詳 し く は 、 販 売 元 (都 築 電 産 株 式 会 社 )にお 問 い 合 わせ くだ さ い 。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 113 TEF022-W001-01.00.00/ja 都 築 電 産 株 式 会 社 : h t t p : / / w w w. t s u z u k i - d e ns a n . c o . j p / b i t s p o t / μ I T R O N 3 .0 / 4 . 0 仕 様 の リア ル タイム O S を 使 用 し て い るアプ リ ケー ション の 移 行 方 法 に つ い て 、 富 士 通 マ イ クロエ レ クト ロ ニク ス ㈱ で 資 料 を 用 意 して い ま すので 、 ご 相 談 くだ さ い 。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 114 TEF022-W001-01.00.00/ja 4.2. 関 連 製 品 こ こ で は μ ITR O N 仕 様 O S で作 成 さ れたプ ログラ ム を T- Ke r n el で使 え るよ う に するため の ラッ パ ーなど に つ いて紹 介 し ます 。 4.2.1. I-right/TK I - r i g ht / T K ( ア イ・ ライ ト・テ ィ ー・ ケー)は 、 パ ーソ ナル メ ディ ア 株 式 会 社 の開 発 し た I T R O N ラッパー であり 、μ I T R O N 4 .0 の A P I を T- K e rn e l 上 に 実 現 しま す 。 詳 細 は 次 の ウ ェ ブ サ イトを ご 覧 く だ さい 。 h t t p : / / w w w. t - e n g i n e 4u . c o m / p r o du c t s / i r i g h t _ t k . h t m l I - r i g ht / T K の 主 な 特 長 は 次 の通 りで す 。 ( A ) I T R O N の資 産 を T- Ke r n el で 活 用 こ れま で 組 込 み 向 けに開 発 さ れてきた I T R O N の 豊 富 なプ ロ グラ ム 資 産 を 、 最 小 限 の 修 正 に より T-En g i ne プ ロジ ェ ク ト の 成 果 で あ る T-K e r nel 上 で 実 行 で きま す 。ま た ITR O N に 慣 れたエ ン ジ ニ アが 、 T-K e r ne l 上 で 新 規 のプロ グラ ム を 開 発 す る場 合 に も便 利 です 。 ( B ) 軽 量 な ラッパ ー I - r i g ht / T K は μ I T R O N4 . 0 と T- Ker n el の仕 様 の 差 の 吸 収 し たり 、 I T R O N の オ ブジ ェ クト I D (固 定 I D ) と T-K e r ne l の オブ ジ ェクト ID ( 動 的 I D )の 変 換 を 行 う ラ ッ パ ー です が 、ラ ッ パ ー 内 部 の オ ー バ ー ヘッ ド ( 実 行 速 度 の 低 下 およ び コー ド サイ ズの 増 加 )が 最 小 限 にな るよ う に 工 夫 し て あ り ま す 。 こ の た め 、 I T R O N と T- K er n e l の 持 つリ ア ルタ イ ム性 を ど ちら も損 な う こ と な く 、 I TR O N と T- Ke r n el の連 携 動 作 が可 能 にな り ます。 ( C ) μ I T R O N 4 .0 フ ル セ ッ ト に 準 拠 I T R O N の A P I を T- Ke r n el ベ ース の プ ロ グラム 上 か ら 呼 び 出 せ ま す。 I T R O NAP I の 仕 様 は μ I T R O N 4 . 0 仕 様 の フル セッ トに ほぼ 準 拠 し て います 。 ( D ) 固 定 的 な オブ ジ ェクト ID 番 号 の指 定 や 静 的 API に も 対 応 T- K e rn el で は タ ス ク ID な ど の オブ ジ ェ ク ト ID 番 号 は 動 的 に 決 ま るため 、 固 定 値 で は 指 定 で きま せん が 、 I- r ig ht /TK で は I T R O N と同 様 に 、 固 定 的 な オ ブジェク ト I D 番 号 で 指 定 可 能 で す 。ま た、 μ I T R O N 4 . 0 仕 様 の 静 的 API に も 対 応 し て いま す 。 ( E ) T- K e rn e l の ミ ドル ウ ェア や アプ リ ケー シ ョ ン との連 携 I T R O N 側 か ら T- Ke r ne l 上 の 豊 富 な デ バ イ ス ドラ イ バ やミ ドル ウ ェ ア を 利 用 し た り 、 T- K e rn e l 上 の プ ロ グラム と連 携 動 作 を 行 う こ とが 可 能 です。 例 え ば T-K e r ne l 上 で 動 い て い る T C P / I P や フ ァ イ ル シ ス テ ム、 グ ラ フ ィ ッ ク 機 能 と 、 既 存 の I T R O N の プ ロ グ ラ ムを 組 合 せ た シ ス テ ムを容 易 に 構 築 で き ま す 。 ( F ) 多 く の C P U、 多 くの 実 行 環 境 を サポ ー ト T- K e rn el は 現 在 市 販 さ れて い る多 くの C P U に対 応 済 み であり 、 そ の成 果 が I TR ON の プ ロ グ ラ ム から も 利 用 で きま す 。 ま たベ ン ダ ー各 社 や ユ ーザ自 身 に より 移 植 さ れた T- Ke r n el や μ T- Ke rn el に 対 応 し たカ Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 115 TEF022-W001-01.00.00/ja ス タ マ イ ズ 版 の I - r i g h t /T K の 提 供 も 可 能 で す。 ( G ) E c l ip s e による開 発 統 合 開 発 環 境 「 E cl ip s e」 に よ るプ ログラ ム 開 発 が 可 能 です。 ( H ) 仮 想 環 境 での シミ ュレ ーシ ョ ン x 8 6 系 C PU で 動 作 する T- K e r nel 製 品 「 T- Ke r n el /x 8 6」と組 み 合 わせ るこ とに より 、 実 機 だけ で なくパ ソ コン 上 の仮 想 環 境 での シミ ュレ ーシ ョ ン 実 行 が可 能 で す 。 Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 116 TEF022-W001-01.00.00/ja 第 5章 参考資料 [ 1 ] μ T- Ke r n el 仕 様 書 ( Ve r. 1 . 0 1 . 0 0) T- E ng i ne フ ォ ー ラ ム [ 2 ] μ I T R O N 4 .0 仕 様 Ve r. 4 . 0 3 . 0 3 T- E ng i ne フ ォ ー ラ ム [ 3 ] μ I T R O N 3 .0 仕 様 Ve r. 3 . 0 2 . 0 2 T- E ng i ne フ ォ ー ラ ム [ 4 ] T- K e rn e l 標 準 ハ ン ドブ ック 改 訂 新 版 パーソナルメディア株 式 会 社 [ 5 ] 組 込 み シ ステ ム 実 践 プロ グラ ミ ン グガ イ ド ~ I T R O N 仕 様 O S / T- K e r n e l 対 応 ~ Copyright © 2009-2010 T-Engine Forum. All Rights Reserved. 技術評論社 117
© Copyright 2025 Paperzz