μITRON から μT-Kernel/T-Kernel への 移行ガイド

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