CM81-00210-2a

FM3 ファミリ
T-REALOS/M3 API リファレンス
T-Kernel 仕様準拠
Support Soft Manual
Publication Number CM81-00210
FM3ÉtÉ@É~Éä Cover Sheet
Revision 2.1
Issue Date January 31, 2014
FM3 ファミリ
T-REALOS/M3 API リファレンス
T-Kernel 仕様準拠
Support Soft Manual
FM3ÉtÉ@É~Éä Cover Sheet
Support
Soft
Ma nual
はじめに
■ 本書の目的と対象読者
本書は , T-REALOS/M3( 以降 , T-REALOS とよびます ) のアプリケーションプログラ
ムを作成する方を対象としており , T-REALOS API について記述しています。TREALOS API について確認したい時に , 適宜本書を参照してください。また , 本書をご
覧になる前に , 「T-REALOS/M3 ユーザーズガイド」を一読されることをお勧めしま
す。
T-Kernel 仕様は , T-Engine フォーラムが策定したオープンなリアルタイム OS の仕様で
す。T-Kernel の仕様書は , T-Engine フォーラムのホームページ (http://www.t-engine.org/)
から入手できます。T-Kernel の原著作権は , 坂村健氏に属しています。T-Kernel 仕様
の著作権は , T-Engine フォーラムに属しています。
■ 商標
TRON は , "The Real-time Operating system Nucleus" の略称です。
ITRON は , "Industrial TRON" の略称です。
µITRON は , "Micro Industrial TRON" の略称です。
T-Kernel および µT-Kernel は , コンピュータの仕様に対する名称であり , 特定の商品な
いしは商品群を指すものではありません。
FR は , Spansion LLCの製品です。 FM3 は , Spansion LLCの製品です。
REALOS, SOFTUNE はSpansion LLCの商標です。
その他 , 本書で登場するシステム名 , 製品名は , それぞれの会社もしくは組織の商標で
す。なお , 本文中ではTM マークや ® マークを必ずしも明記していません。
■ 本書の全体構成
本書は , 以下に示す 4 つの章と付録から構成されています。
第 1 章 概要
T-REALOS の API を使用するうえでの基本的な事項を説明します。
第 2 章 データ型
T-REALOS で規定される C 言語のデータ型について説明します。
第 3 章 システムコールインタフェース
T-REALOS でサポートしている T-Kernel 仕様のシステムコールのインタフェー
スを説明します。
第 4 章 デバイスドライバ インタフェース
デバイスドライバインタフェースを説明します。
付録
エラーコード , 定数マクロ , ITRON 仕様 OS からの移行時の注意事項について説明
します。また , アルファベット順のシステムコール索引を掲載します。
January 31, 2014, CM81-00210-2a
i
Su pp or t
So ft
Manu al
■ 参考マニュアル
本システムを使用する際には , 必要に応じて次に示すマニュアルを参照してください。
「T-REALOS/M3 ユーザーズガイド」( 以降 , 「ユーザーズガイド」とよびます )
ii
CM81-00210-2a, January 31, 2014
Support
Soft
Ma nual
■ T-REALOS のマニュアル体系
T-REALOS のマニュアルは , 以下の 2 分冊になっています。
T-REALOS を初めてお使いになる方は , 最初に「ユーザーズガイド」をお読みくださ
い。
T-Kernel仕様準拠
T-REALOSの機能全般,ユーザプログラムの作成方法,
システム構築手順について説明しています。
T-REALOS/M3
ユーザーズガイド
T-Kernel仕様準拠
T-REALOS/M3
APIリファレンス
January 31, 2014, CM81-00210-2a
T-REALOS APIの詳細について
説明しています(本書)。
iii
Su pp or t
So ft
Manu al
■ 本書の読み方
● 記号の意味
本書では , システムコールのパラメータの記述形式を以下の表記に従って表現してい
ます。
表記号の意味
記号
[]
[ ] 内の要素は , 記述が省略可能であることを示します。
| |
前後の要素の中からどれか一つの記述を選択することを示します。
|
:=
iv
説明
前後の要素を同時に選択できます。
前の要素は後の要素の値をとります。
CM81-00210-2a, January 31, 2014
Support
January 31, 2014, CM81-00210-2a
Soft
Ma nual
v
Su pp or t
vi
So ft
Manu al
CM81-00210-2a, January 31, 2014
Support
Soft
Ma nual
目次
第1章
1.1
1.2
1.3
1.4
第2章
2.1
2.2
第3章
概要 ............................................................................................................ 1
用語の説明.............................................................................................................................. 2
T-REALOS API の概要 ......................................................................................................... 4
実装定義および実装依存仕様 ................................................................................................. 5
拡張仕様 ................................................................................................................................. 8
データ型..................................................................................................... 9
汎用的なデータ型と定数マクロ ........................................................................................... 10
T-Kernel 固有の意味を持つデータ型と定数マクロ ............................................................ 12
システムコールインタフェース............................................................... 15
3.1 システムコール一覧 ............................................................................................................. 16
3.2 システムコール説明内容 ...................................................................................................... 23
3.3 タスク管理機能のシステムコール........................................................................................ 25
3.3.1
tk_cre_tsk(Create Task) ............................................................................................. 26
3.3.2
tk_del_tsk(Delete Task).............................................................................................. 29
3.3.3
tk_sta_tsk (Start Task)................................................................................................ 30
3.3.4
tk_ext_tsk(Exit Task) .................................................................................................. 31
3.3.5
tk_exd_tsk(Exit and Delete Task)............................................................................... 32
3.3.6
tk_ter_tsk(Terminate Task)......................................................................................... 33
3.3.7
tk_chg_pri(Change Task Priority) ............................................................................... 35
3.3.8
tk_get_reg(Get Task Registers) ................................................................................. 38
3.3.9
tk_set_reg(Set Task Registers) .................................................................................. 40
3.3.10
tk_ref_tsk(Refer Task Status)..................................................................................... 42
3.4 タスク付属同期機能のシステムコール................................................................................. 46
3.4.1
tk_slp_tsk(Sleep Task) ............................................................................................... 47
3.4.2
tk_wup_tsk(Wakeup Task) ......................................................................................... 49
3.4.3
tk_can_wup(Cancel Wakeup Task)............................................................................ 51
3.4.4
tk_rel_wai(Release Wait)............................................................................................ 53
3.4.5
tk_sus_tsk(Suspend Task) ......................................................................................... 55
3.4.6
tk_rsm_tsk(Resume Task).......................................................................................... 57
3.4.7
tk_frsm_tsk(Force Resume Task) .............................................................................. 59
3.4.8
tk_dly_tsk(Delay Task) ............................................................................................... 61
3.5 同期・通信機能のシステムコール........................................................................................ 62
3.5.1
セマフォ機能のシステムコール ................................................................................. 63
3.5.1.1
tk_cre_sem(Create Semaphore) ........................................................................... 64
3.5.1.2
tk_del_sem(Delete Semaphore)............................................................................ 66
3.5.1.3
tk_sig_sem(Signal Semaphore) ............................................................................ 67
3.5.1.4
tk_wai_sem(Wait on Semaphore) ......................................................................... 69
3.5.1.5
tk_ref_sem(Refer Semaphore Status)................................................................... 71
3.5.2
3.5.2.1
3.5.2.2
3.5.2.3
3.5.2.4
イベントフラグ機能のシステムコール ...................................................................... 73
tk_cre_flg(Create Event Flag) ............................................................................... 74
tk_del_flg(Delete Event Flag) ................................................................................ 76
tk_set_flg(Set Event Flag) ..................................................................................... 77
tk_clr_flg(Clear Event Flag)................................................................................... 78
January 31, 2014, CM81-00210-2a
vii
Su pp or t
So ft
Manu al
3.5.2.5
3.5.2.6
tk_wai_flg(Wait Event Flag)................................................................................... 79
tk_ref_flg(Refer Event Flag Status) ....................................................................... 83
3.5.3
3.5.3.1
3.5.3.2
3.5.3.3
3.5.3.4
3.5.3.5
メールボックス機能のシステムコール ...................................................................... 85
tk_cre_mbx(Create Mailbox) ................................................................................. 86
tk_del_mbx(Delete Mailbox).................................................................................. 88
tk_snd_mbx(Send Message to Mailbox) ............................................................... 89
tk_rcv_mbx(Receive Message from Mailbox) ....................................................... 91
tk_ref_mbx(Refer Mailbox Status)......................................................................... 93
3.6 拡張同期・通信機能のシステムコール................................................................................. 95
3.6.1
ミューテックス機能のシステムコール ...................................................................... 96
3.6.1.1
tk_cre_mtx(Create Mutex)..................................................................................... 97
3.6.1.2
tk_del_mtx(Delete Mutex) ..................................................................................... 99
3.6.1.3
tk_loc_mtx(Lock Mutex) ...................................................................................... 100
3.6.1.4
tk_unl_mtx(Unlock Mutex)................................................................................... 103
3.6.1.5
tk_ref_mtx(Refer Mutex Status) .......................................................................... 105
3.6.2
3.6.2.1
3.6.2.2
3.6.2.3
3.6.2.4
3.6.2.5
メッセージバッファ機能のシステムコール ............................................................. 107
tk_cre_mbf(Create Message Buffer) ................................................................... 108
tk_del_mbf(Delete Message Buffer).................................................................... 111
tk_snd_mbf(Send Message to Message Buffer) ................................................. 112
tk_rcv_mbf(Receive Message from Message Buffer) ......................................... 114
tk_ref_mbf(Refer Message Buffer Status)........................................................... 116
3.6.3
3.6.3.1
3.6.3.2
3.6.3.3
3.6.3.4
3.6.3.5
3.6.3.6
3.6.3.7
ランデブポート機能のシステムコール .................................................................... 118
tk_cre_por(Create Port for Rendezvous) ............................................................ 119
tk_del_por(Delete Port for Rendezvous) ............................................................. 121
tk_cal_por(Call Port for Rendezvous) ................................................................. 122
tk_acp_por(Accept Port for Rendezvous) ........................................................... 125
tk_fwd_por(Forward Rendezvous to Another Port) ............................................. 128
tk_rpl_rdv(Reply Rendezvous) ............................................................................ 132
tk_ref_por(Refer Port Status) .............................................................................. 134
3.7 メモリプール管理機能のシステムコール ........................................................................... 136
3.7.1
固定長メモリプール機能のシステムコール ............................................................. 137
3.7.1.1
tk_cre_mpf(Create Fixed-size Memory Pool) ...................................................... 138
3.7.1.2
tk_del_mpf(Delete Fixed-size Memory Pool) ...................................................... 141
3.7.1.3
tk_get_mpf(Get Fixed-size Memory Block) ......................................................... 142
3.7.1.4
tk_rel_mpf(Release Fixed-size Memory Block)................................................... 144
3.7.1.5
tk_ref_mpf(Refer Fixed-size Memory Pool Status) ............................................. 146
3.7.2
3.7.2.1
3.7.2.2
3.7.2.3
3.7.2.4
3.7.2.5
可変長メモリプール機能のシステムコール ............................................................. 148
tk_cre_mpl(Create Variable-size Memory Pool).................................................. 149
tk_del_mpl(Delete Variable-size Memory Pool) .................................................. 152
tk_get_mpl(Get Variable-size Memory Block) ..................................................... 153
tk_rel_mpl(Release Variable-size Memory Block)............................................... 155
tk_ref_mpl(Refer Variable-size Memory Pool Status) ......................................... 157
3.8 時間管理機能のシステムコール ......................................................................................... 159
3.8.1
システム時刻管理機能のシステムコール................................................................. 160
3.8.1.1
tk_set_tim(Set Time) ........................................................................................... 161
3.8.1.2
tk_get_tim(Get Time)........................................................................................... 163
3.8.1.3
tk_get_otm(Get Operating Time)......................................................................... 164
3.8.1.4
isig_tim(Signal Time)........................................................................................... 165
3.8.2
viii
周期ハンドラ機能のシステムコール ........................................................................ 166
CM81-00210-2a, January 31, 2014
Support
Soft
Ma nual
3.8.2.1
3.8.2.2
3.8.2.3
3.8.2.4
3.8.2.5
tk_cre_cyc(Create Cyclic Handler)...................................................................... 167
tk_del_cyc(Delete Cyclic Handler) ...................................................................... 170
tk_sta_cyc(Start Cyclic Handler) ......................................................................... 171
tk_stp_cyc(Stop Cyclic Handler) ......................................................................... 172
tk_ref_cyc(Refer Cyclic Handler Status) ............................................................. 173
3.8.3
3.8.3.1
3.8.3.2
3.8.3.3
3.8.3.4
3.8.3.5
アラームハンドラ機能のシステムコール................................................................. 175
tk_cre_alm(Create Alarm Handler)...................................................................... 176
tk_del_alm(Delete Alarm Handler) ...................................................................... 178
tk_sta_alm(Start Alarm Handler) ......................................................................... 179
tk_stp_alm(Stop Alarm Handler) ......................................................................... 180
tk_ref_alm(Refer Alarm Handler Status) ............................................................. 181
3.9 割込み管理機能のシステムコール...................................................................................... 183
3.9.1
tk_def_int(Define Interrupt Handler) ......................................................................... 184
3.9.2
tk_ret_int(Return from Interrupt Handler) ................................................................. 186
3.9.3
DI .............................................................................................................................. 187
3.9.4
EI .............................................................................................................................. 188
3.9.5
isDI ........................................................................................................................... 189
3.10 システム状態管理機能のシステムコール ........................................................................... 190
3.10.1
tk_rot_rdq(Rotate Ready Queue) ............................................................................. 191
3.10.2
tk_get_tid(Get Task Identifier) .................................................................................. 193
3.10.3
tk_dis_dsp(Disable Dispatch) ................................................................................... 194
3.10.4
tk_ena_dsp(Enable Dispatch) .................................................................................. 196
3.10.5
tk_ref_sys(Refer System Status).............................................................................. 197
3.10.6
tk_ref_ver(Refer Version Information) ...................................................................... 199
3.11 サブシステム機能のシステムコール .................................................................................. 201
3.11.1
tk_def_ssy(Define Subsystem)................................................................................. 202
3.11.2
tk_ref_ssy(Refer Subsystem Status) ........................................................................ 205
3.12 デバイス管理機能のシステムコール .................................................................................. 206
3.12.1
tk_def_dev(Define Device) ....................................................................................... 207
3.12.2
tk_ref_idv(Refer Initial Device Information) .............................................................. 210
3.12.3
tk_opn_dev(Open Device)........................................................................................ 211
3.12.4
tk_cls_dev(Close Device) ......................................................................................... 213
3.12.5
tk_rea_dev(Read Device)......................................................................................... 214
3.12.6
tk_srea_dev(Synchronous Read Device) ................................................................. 216
3.12.7
tk_wri_dev(Write Device).......................................................................................... 218
3.12.8
tk_swri_dev(Synchronous Write Device).................................................................. 220
3.12.9
tk_wai_dev(Wait Device) .......................................................................................... 222
3.12.10
tk_sus_dev(Suspend Device)................................................................................... 224
3.12.11
tk_get_dev(Get Device)............................................................................................ 226
3.12.12
tk_ref_dev(Refer Device).......................................................................................... 227
3.12.13
tk_oref_dev(Refer Device)........................................................................................ 229
3.12.14
tk_lst_dev(List Device) ............................................................................................. 231
3.12.15
tk_evt_dev(Event Device)......................................................................................... 233
January 31, 2014, CM81-00210-2a
ix
Su pp or t
第4章
4.1
4.2
4.3
4.4
4.5
4.6
4.7
4.8
4.9
4.10
4.11
デバイスドライバインタフェース ......................................................... 235
付録 A
付録 B
付録 C
付録 D
x
Manu al
デバイスドライバインタフェース...................................................................................... 236
デバイス名.......................................................................................................................... 237
デバイス ID......................................................................................................................... 238
デバイスディスクリプタ .................................................................................................... 240
リクエスト ID ..................................................................................................................... 241
データ番号.......................................................................................................................... 242
属性データ.......................................................................................................................... 243
事象通知 ............................................................................................................................. 245
デバイスのサスペンド / リジューム ................................................................................... 247
入出力要求のデータ形式 .................................................................................................... 248
デバイス処理関数 ............................................................................................................... 250
付録
索引
So ft
............................................................................................................... 257
エラーコード一覧.......................................................................................................... 258
定数マクロ一覧 ............................................................................................................. 259
ITRON 仕様 OS からの移行時の注意点 ...................................................................... 263
システムコール索引 ...................................................................................................... 264
............................................................................................................... 269
CM81-00210-2a, January 31, 2014
Support
Soft
Ma nual
第1章
概要
T-REALOS の API を使用するうえでの基本的な事
項を説明します。
1.1 用語の説明
1.2 T-REALOS API の概要
1.3 実装定義および実装依存仕様
1.4 拡張仕様
January 31, 2014, CM81-00210-2a
1
第 1 章 概要
1.1 用語の説明
Su pp or t
So ft
Manu al
用語の説明
1.1
T-REALOS で使用する基本的な用語を説明します。
■ T-REALOS の基本的な用語
表 1.1-1 に , T-REALOS で使用する基本的な用語を示します。
表 1.1-1 T-REALOS の基本的な用語一覧 (1 / 2)
用語
2
概要
カーネル
OS 機能を提供するプログラムをカーネルとよびます。
ユーザプログラム
T-REALOS の機能を使用したアプリケーションプログラムを指します。
ユーザ作成である点を明示するため , 本書は以降 , ユーザプログラムと表記
します。
タスク
タスクは , ユーザプログラムを構成する最も基本的な単位です。複数のタ
スクの協調動作により , ユーザプログラムの処理を実現します。
準タスク
タスクコンテキストを持つハンドラを準タスクとよびます。T-Kernel 仕様
の拡張 SVC ハンドラがこの準タスクに相当します。
準タスクでは , 待ち状態に入ることができ , ディスパッチできます。また , シ
ステムコールの発行制約はタスクに準じます。
非タスク
非タスクは , タスク以外の OS で管理する実行単位です。準タスク , 割込み
ハンドラ , タイムイベントハンドラが該当します。
タスク独立部
タスクコンテキストを持たないハンドラをタスク独立部とよびます。割込
みハンドラ , タイムイベントハンドラ , 初期化ルーチンが該当します。タス
ク独立部で , タスクが待ち状態になるシステムコール (tk_slp_tsk など ) は使
用できません。
ディスパッチ
実行するタスクの切換えをディスパッチとよびます。また , ディスパッチ
を実現するカーネル内の機構をディスパッチャとよびます。
プリエンプト
タスクが保持する CPU の実行権を奪い取られる処理を指します。
API
T-REALOS の機能を使ったユーザプログラムを作成するためのインター
フェースです。
システムコール
OS 機能を実現し , ユーザプログラムから直接呼び出される関数群をシステ
ムコールとよびます。
オブジェクト
カーネルが操作対象とする資源をオブジェクトとよびます。具体的には ,
タスクや同期・通信機能を実現するセマフォ , メールボックスなどが該当
します。
コンテキスト
プログラムを実行する環境 ( 実体はプログラムの実行が中断された時点の
CPU レジスタの値をメモリに保存したもの ) をコンテキストとよびます。
現在優先度
タスクの現時点での優先度です。ディスパッチャはこの優先度に従いタス
クを切り換えます。
通常 , 単に「優先度」とよぶ場合は , この現在優先度を指します。
起動時優先度
タスク起動時に最初に設定する優先度です。起動時優先度は , タスク生成
時に指定できますが , タスク生成後には変更できません。
CM81-00210-2a, January 31, 2014
第 1 章 概要
1.1 用語の説明
Support
Soft
Ma nual
表 1.1-1 T-REALOS の基本的な用語一覧 (2 / 2)
用語
概要
ベース優先度
タスクの基本となる優先度です。tk_chg_pri により , ユーザプログラムから
変更できます。
ミューテックス機能を使用した場合に , OS 側が一時的に現在優先度を変更
する場合があります。ミューテックス機能を使用しない場合は , ベース優
先度と現在優先度は常に同じ値になります。
優先順位
実行可能状態のタスクが複数存在する場合 , それらのタスクに実行権を与
える順番を指します。優先順位が高いタスクほど , 先に実行権が与えられ
ます。
優先度が高いタスクほど優先順位は高くなり , 同一優先度のタスクの優先
順位は , 先に実行可能状態になったタスクほど高くなります。
システムダウン
カーネル内部でユーザシステムの処理続行が不可能と判断した場合 , カー
ネルでシステムダウンが発生します。システムダウンが発生した場合 ,
カーネル内部の特定番地にジャンプして , そこで無限ループすることによ
り , ユーザシステムの処理を停止します。
コンフィギュレータ
T-REALOS 独自の機能で , カーネルコンフィギュレーション ( 最大のタスク
優先度 , オブジェクトの最大数 , システムのスタックサイズなどをユーザ指
定できる機能 ) を実行するためのツールです。
詳細は , ユーザーズガイドの以下の節を参照してください。
・「3.13 カーネルコンフィギュレーション」
・「5.3 カーネルコンフィギュレーション」
January 31, 2014, CM81-00210-2a
3
第 1 章 概要
1.2 T-REALOS API の概要
Su pp or t
1.2
So ft
Manu al
T-REALOS API の概要
T-REALOS API を構成する要素について説明します。
■ データ型
char, intなどの汎用的な型を別名で再定義することにより, T-Kernel仕様は独自の型を
定義しています。これは , データの使用方法をより厳密にし , プログラムミスを防ぐこ
とを目的としています。データ型の詳細は , 「第 2 章 データ型」を参照してください。
■ システムコール
T-REALOS の提供するシステムコールを呼び出すことで , ユーザプログラムは排他制
御やシステムの状態を参照できます。ほとんどのシステムコールがこの関数の復帰値
としてエラーコードを返します。
● システムコールの形式
エラーコード = システムコール関数名 ( パラメータ ,,);
例 ) ercd = tk_del_tsk(task_id);
各システムコールの詳細は , 「第 3 章 システムコールインタフェース」を参照してく
ださい。
■ エラーコード
システムコールの復帰値は , エラーが発生した場合は負の値のエラーコード , 処理を正
常に終了した場合は E_OK(=0)または正の値となります。
システムコールが返すエラーコードは , 「第 3 章 システムコールインタフェース」を
参照してください。また , T-REALOS で規定されたエラーコードの一覧とその意味は ,
「付録 A エラーコード一覧」を参照してください。
4
CM81-00210-2a, January 31, 2014
第 1 章 概要
1.3 実装定義および実装依存仕様
Support
1.3
Soft
Ma nual
実装定義および実装依存仕様
実装定義および実装依存仕様を説明します。
■ 実装定義
実装定義は , T-Kernel で規定していない仕様です。T-Kernel 仕様に準拠した OS 間で
あっても , 実装定義の仕様は互換性が保証されないため注意してください。
T-REALOS の実装定義を表 1.3-1 に示します。
表 1.3-1 T-REALOS 実装定義一覧 (1 / 3)
分類
動作
実装定義項目
内容
アセンブラで記述したプログラムからシ
ステムコールを呼び出す場合のインタ
フェース
アセンブラから C 関数を呼び出すときの手順に
従います。
システムコールの実装方法
関数呼出しで実装しています。
ソフトウェアトラップ呼出しは未サポートで
す。
特定のシステムコール * をタスク部以外
から呼び出した場合の動作
表 3.1-1 および「第 3 章 システムコールインタ
フェース」を参照してください。
呼び出した処理に復帰しないシステム
コール (tk_ext_tsk, tk_exd_tsk, tk_ret_int)
でエラーが発生した場合の動作
システムコールのエラールーチンが登録済みの
場合 , そのエラールーチンを呼び出します。
以下の場合の動作は保証しません。
・tk_ret_int でエラーが発生した場合
・エラールーチンが登録されていない場合
システムコールの機能コード
機能コードは未使用です。
メールボックスのメッセージヘッダ構造
「3.5.3.3 tk_snd_mbx(Send Message to Mailbox)」
の「■解説」を参照してください。
ランデブ番号の付与方法
下位 16 ビットがタスク ID, 上位 16 ビットがラ
ンデブ受付け順に採番する一意の番号となりま
す。
TA_ASM 属性のタイムイベントハンド
ラ
未サポートです。
January 31, 2014, CM81-00210-2a
5
第 1 章 概要
1.3 実装定義および実装依存仕様
Su pp or t
So ft
Manu al
表 1.3-1 T-REALOS 実装定義一覧 (2 / 3)
分類
動作
実装定義項目
内容
複数の割込みハンドラやタイムイベント
ハンドラの同時起動
・タイムイベントハンドラが複数同時に起動し
た場合
1 つのタイムイベントハンドラの実行が終了し
てから , 別のタイムイベントハンドラが実行さ
れます。
・割込みハンドラ実行中に , より優先度の高い
割込みが発生した場合
実行中の割込みハンドラの処理を中断し , 優先
度の高い割込みハンドラを実行します。
その後 , 中断した割込みハンドラの処理に戻り
ます。
・タイムイベントハンドラ実行中に , タイマ割
込みより優先度の高い割込みが発生した場合
実行中の割込みハンドラの処理を中断し , 優先
度の高い割込みハンドラを実行します。
その後 , 中断したタイムイベントハンドラの処
理に戻ります。
・割込みハンドラ実行中に , より優先度の高い
タイマ割込みのタイムイベントハンドラが起動
された場合
実行中の割込みハンドラの処理を中断し , タイム
イベントハンドラを実行します。その後 , 中断し
た割込みハンドラの処理に戻ります。
TA_ASM 属性の割込みハンドラが起動
した時点の状態 ( システムコール呼出し
の可否など )
タスク独立部として扱います。
割込みハンドラ定義解除後に割込みが発
生した場合の動作
システムダウンが発生します。
TA_ASM 属性の割込みハンドラに入っ
た時点におけるスタックやレジスタの
状態
システムコールの呼出しの可否
「ユーザーズガイド 『4.8 割込みハンドラ』」を
参照してください。
システムコールを呼び出す方法
割込みハンドラから OS を介さず に復帰
する方法
6
T_REGS, T_EIT, T_CREGS の内容
以下を参照してください。
・
「3.3.8 tk_get_reg(Get Task Registers)」
・
「3.3.9 tk_set_reg(Set Task Registers)」
CPU 割込み制御機能 (DI, EI, isDI) の
パラメータ (iststs) 内容
以下を参照してください。
・
「3.9.3 DI」
・
「3.9.4 EI」
・
「3.9.5 isDI」
割込みハンドラの第 2 引数
未サポートです。
デバイスの事象通知用メッセージバッ
ファの使用
使用します。
CM81-00210-2a, January 31, 2014
第 1 章 概要
1.3 実装定義および実装依存仕様
Support
Soft
Ma nual
表 1.3-1 T-REALOS 実装定義一覧 (3 / 3)
分類
実装定義項目
内容
タイムイベントハンドラから tk_ret_int
を呼び出した場合の E_CTX のエラー
チェック
エラーチェックは行いません。
E_OACV のエラー対象となるシステム
オブジェクトの定義 , およびエラー発生
条件
E_OACV のエラー対象となるオブジェクトとし
てデバイスを定義しています。また , 本エラー
の発生条件は , 「3.12 デバイス管理機能のシス
テムコール」を参照してください。
tk_wup_tsk の起床要求キューイング数最
大値
32767(0x7fff)
tk_sus_tsk の強制待ち要求のネスト数最
大値
32767(0x7fff)
セマフォカウントの最大値
2147483647(0x7fffffff)
動作
数値
使用可能なサブシステム ID の最大値
「ユーザーズガイド 『3.13 カーネルコンフィ
ギュレーション』」を参照してください。
指定可能なサブシステムの優先度
(ssypri) の最大値
16
tk_ref_ssy での ssypri, resblksz の値
不定値
tk_def_int の引数 , dintno の値
割込みベクタ番号
デバイスのサスペンド禁止要求カウント
の最大値
2147483647(0x7fffffff)
* : タスク部以外からの呼出しが可能と明記されていないもの
■ 実装依存
実装依存は , ハードウェアの相違により OS の挙動が変わる仕様です。T-Kernel 仕様
準拠の OS 間でも互換性が保証されないため注意してください。
T-REALOS の実装依存項目を表 1.3-2 に示します。
表 1.3-2 T-REALOS 実装依存一覧
分類
実装依存項目
定義
TA_ASM 属性が指定された場合のタスクの
形式
未サポートです。
E_MACV のエラー検出
本エラーは未サポートです。
動作
実装依存で発生する E_CTX エラー
January 31, 2014, CM81-00210-2a
内容
「第 3 章 システムコールインタフェース」
の各システムコールの説明において , 発生す
る E_CTX のエラーはすべて記載していま
す。
7
第 1 章 概要
1.4 拡張仕様
Su pp or t
1.4
So ft
Manu al
拡張仕様
T-REALOS は , T-Kernel 仕様を拡張している部分があります。これらの拡張仕様を
説明します。
■ 拡張仕様
T-Kernel 仕様を拡張している項目を表 1.4-1 に示します。
表 1.4-1 T-REALOS 拡張定義一覧
拡張定義項目
初期化
ルーチン
定義内容
タスクの起動前に実行するプログラムを登録します。機能の詳細は , 「ユーザー
ズガイド 『2.2.1 タスク』」を参照してください。
登録可能な初期化ルーチンの最大数
エラー
ルーチン
カーネルが何らかのエラーを検出したときに起動するプログラムを登録します。
機能の詳細は , 「ユーザーズガイド 『2.3.1 タスク独立部』」を参照してください。
登録可能なエラールーチンの最大数
8
1
1
isig_tim
ユーザプログラムからシステム時刻の更新を行うための機能です。
詳細は「3.8.1.4 isig_tim(Signal Time)」を参照してください。
割込み
ハンドラ
静的登録機能
割込みハンドラを静的に登録する機能です。
機能の詳細は , 以下を参照してください。
・「ユーザーズガイド 『3.12 カーネルコンフィギュレーション』
」
・
「ユーザーズガイド 『5.2 カーネルコンフィギュレーション』
」
CM81-00210-2a, January 31, 2014
Support
Soft
Ma nual
第2章
データ型
T-REALOS で規定される C 言語のデータ型につい
て説明します。
2.1 汎用的なデータ型と定数マクロ
2.2 mT-Kernel 固有の意味を持つデータ型と定数マクロ
January 31, 2014, CM81-00210-2a
9
第 2 章 データ型
2.1 汎用的なデータ型と定数マクロ
Su pp or t
2.1
So ft
Manu al
汎用的なデータ型と定数マクロ
T-Kernel 仕様で規定されている汎用的なデータ型および定数マクロについて説明し
ます。
■ 汎用的なデータ型
汎用的なデータ型と定数マクロは , 「2.2 mT-Kernel 固有の意味を持つデータ型と定数
マクロ」で説明するデータ型を定義するための基本的なデータ型と定数マクロです。表
2.1-1 および表 2.1-2 に , データ型と定数マクロの一覧を示します。
表 2.1-1 データ型一覧
C 言語での型
型名
10
意味
B
signed char
符号付き 8 ビット整数
H
signed short
符号付き 16 ビット整数
W
signed long
符号付き 32 ビット整数
UB
unsigned char
符号なし 8 ビット整数
UH
unsigned short
符号なし 16 ビット整数
UW
unsigned long
符号なし 32 ビット整数
VB
signed char
型が一定しない 8 ビットのデータ
VH
signed short
型が一定しない 16 ビットのデータ
VW
signed long
型が一定しない 32 ビットのデータ
VP
void*
型が一定しないデータへのポインタ
_B
volatile signed char
_H
volatile signed short
_W
volatile signed long
_UB
volatile unsigned char
_UH
volatile unsigned short
_UW
volatile unsigned long
INT
signed int
CPU のビット幅の符号付き整数
UINT
unsigned int
CPU のビット幅の符号なし整数
ID
signed int
ID 一般
MSEC
signed long
時間一般 (ms)
(*FP)()
void
関数アドレス一般
(*FUNCP)()
signed int
関数アドレス一般
BOOL
unsigned int
ブール値
TC
unsigned short
TRON 文字コード
volatile 宣言付き
CM81-00210-2a, January 31, 2014
第 2 章 データ型
2.1 汎用的なデータ型と定数マクロ
Support
Soft
Ma nual
表 2.1-2 定数マクロ一覧
マクロ名
値
意味
ローカルシンボル定義
LOCAL
static
EXPORT
( なし )
グローバルシンボル定義
IMPORT
extern
グローバルシンボル参照
TRUE
1
ブール値の真
FALSE
0
ブール値の偽
TNULL
((TC)0)
TRON コード文字列の終端
( 補足事項 )
VB, VH, VW と B, H, W との相違点は , 前者はビット数だけが分かっており , データ型
の中身が分からないものを表すのに対して , 後者は整数を表すことがはっきりしてい
る点です。
タスクのスタックサイズなど , 明らかに負の数にならないパラメータも原則として符
号付き整数 (INT, W) のデータ型となっています。これは , 整数はできる限り符号付き
の数として扱う T-Kernel 仕様のルールに基いたものです。また , タイムアウト (TMO
tmout) のパラメータでは , これが符号付きの整数であることを利用して TMO_FEVR(=-1)
を特殊な意味に使っています。ビットパターンとして扱われるパラメータには符号な
しのデータ型があります。
January 31, 2014, CM81-00210-2a
11
第 2 章 データ型
2.2 T-Kernel 固有の意味を持つデータ型と定数マクロ
Su pp or t
2.2
So ft
Manu al
T-Kernel 固有の意味を持つデータ型と定数マクロ
T-Kernel 固有の意味を持つデータ型と定数マクロについて説明します。
■ T-Kernel 固有の意味を持つデータ型の一覧
T-Kernel 固有の意味を持つデータ型と定数マクロは , パラメータの意味を明確にする
ために定義されたデータ型と定数マクロです。
表 2.2-1 から表 2.2-3 に出現頻度の高いデータ型と定数マクロの一覧を示します。
なお , すべての定数マクロの一覧は「付録 B 定数マクロ一覧」を参照してください。
表 2.2-1 固有の意味を持つデータ型一覧 ( 構造体以外 )
型名
データ型
意味
FN
INT
機能コード
RNO
INT
ランデブ番号
ATR
UW
オブジェクト / ハンドラ属性
ER
INT
エラーコード
PRI
INT
優先度
TMO
W
タイムアウト指定
RELTIM
UW
相対時間
表 2.2-2 固有の意味を持つデータ型一覧 ( 構造体 )
型名
SYSTIM
メンバ
データ型
意味
hi
W
システム時刻 上位 32 ビット
lo
UW
システム時刻 下位 32 ビット
表 2.2-3 固有の意味を持つ定数マクロ一覧
マクロ名
12
値
意味
NULL
0
無効ポインタ
TA_NULL
0
特別な属性を指定しない
TMO_POL
0
ポーリング
TMO_FEVR
-1
永久待ち
TSK_SELF
0
自タスク
TPRI_INI
0
起動時優先度
TPRI_RUN
0
実行状態のタスクの優先度
CM81-00210-2a, January 31, 2014
第 2 章 データ型
2.2 T-Kernel 固有の意味を持つデータ型と定数マクロ
Support
Soft
Ma nual
( 補足事項 )
複数のデータ型を複合的に使用するパラメータには , 代表的なデータ型を使用します。
例えば , tk_cre_tsk の復帰値はタスク ID かエラーコードです。主な復帰値はタスク ID
なので , データ型は ID となります。
January 31, 2014, CM81-00210-2a
13
第 2 章 データ型
2.2 T-Kernel 固有の意味を持つデータ型と定数マクロ
Su pp or t
14
So ft
Manu al
CM81-00210-2a, January 31, 2014
Support
Soft
Ma nual
第3章
システムコール
インタフェース
T-REALOS でサポートしている T-Kernel 仕様の
システムコールのインタフェースを説明します。
3.1 システムコール一覧
3.2 システムコール説明内容
3.3 タスク管理機能のシステムコール
3.4 タスク付属同期機能のシステムコール
3.5 同期・通信機能のシステムコール
3.6 拡張同期・通信機能のシステムコール
3.7 メモリプール管理機能のシステムコール
3.8 時間管理機能のシステムコール
3.9 割込み管理機能のシステムコール
3.10 システム状態管理機能のシステムコール
3.11 サブシステム機能のシステムコール
3.12 デバイス管理機能のシステムコール
January 31, 2014, CM81-00210-2a
15
第 3 章 システムコールインタフェース
3.1 システムコール一覧
Su pp or t
3.1
So ft
Manu al
システムコール一覧
T-REALOS でサポートしているシステムコールを説明します。
■ システムコール一覧
表 3.1-1 に T-REALOS が提供しているシステムコールの一覧を示します。
T-REALOS は , T-Kernel 仕様の「デバッガサポート機能」以外のすべてのシステムコー
ルをサポートしています。
各システムコールの詳細は , 「3.2 システムコール説明内容」以降を参照してください。
表 3.1-1 システムコール一覧 (1 / 7)
呼出し可否
分類
タスク
管理機能
タスク
付属
同期機能
16
名称
説明
タスク
部 *1
タスク
独立部
ディスパッチ
禁止状態
tk_cre_tsk
タスクを生成します。
○
○
○
tk_del_tsk
タスクを削除します。
○
○
○
tk_sta_tsk
タスクを起動します。
○
○
○
tk_ext_tsk
自タスクを終了します。
○
×
×
tk_exd_tsk
自タスクを終了して削除しま
す。
○
×
×
tk_ter_tsk
他タスクを強制終了します。
○
○
○
tk_chg_pri
タスクの優先度を変更します。
○
○
○
tk_get_reg
タスクレジスタを獲得します。
○
×
○
tk_set_reg
タスクレジスタを設定します。
○
×
○
tk_ref_tsk
タスクの状態を参照します。
○
○
○
tk_slp_tsk
自タスクを起床待ち状態へ移
行します。
○
×
×
tk_wup_tsk
他タスクを起床します。
○
○
○
tk_can_wup
タスクの起床要求をキャンセ
ルします。
○
○
○
tk_rel_wai
他タスクの待ち状態を強制解
除します。
○
○
○
tk_sus_tsk
他タスクを強制待ち状態に移
行します。
○
○
○ *2
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.1 システムコール一覧
Support
Soft
Ma nual
表 3.1-1 システムコール一覧 (2 / 7)
呼出し可否
分類
タスク
付属
同期機能
同期・
通信機能
名称
説明
タスク
部 *1
タスク
独立部
ディスパッチ
禁止状態
tk_rsm_tsk
強制待ち状態のタスクを再開
します。
○
○
○
tk_frsm_tsk
強制待ち状態のタスクを強制
再開します。
○
○
○
tk_dly_tsk
自タスクを時間経過待ち状態
へ移行します。
○
×
×
tk_cre_sem
セマフォを生成します。
○
○
○
tk_del_sem
セマフォを削除します。
○
○
○
tk_sig_sem
セマフォ資源を返却します。
○
○
○
tk_wai_sem
セマフォ資源を獲得します。
○
×
×
tk_ref_sem
セマフォの状態を参照します。
○
○
○
tk_cre_flg
イベントフラグを生成します。
○
○
○
tk_del_flg
イベントフラグを削除します。
○
○
○
tk_set_flg
イベントフラグをセットしま
す。
○
○
○
tk_clr_flg
イベントフラグをクリアしま
す。
○
○
○
tk_wai_flg
イベントフラグを待ちます。
○
×
×
tk_ref_flg
イベントフラグの状態を参照
します。
○
○
○
tk_cre_mbx
メールボックスを作成します。
○
○
○
tk_del_mbx
メールボックスを削除します。
○
○
○
tk_snd_mbx
メールボックスへ送信します。
○
○
○
tk_rcv_mbx
メールボックスから受信しま
す。
○
×
×
tk_ref_mbx
メールボックスの状態を参照
します。
○
○
○
January 31, 2014, CM81-00210-2a
17
第 3 章 システムコールインタフェース
3.1 システムコール一覧
Su pp or t
So ft
Manu al
表 3.1-1 システムコール一覧 (3 / 7)
呼出し可否
分類
拡張同期
通信機能
18
名称
説明
タスク
部 *1
タスク
独立部
ディスパッチ
禁止状態
tk_cre_mtx
ミューテックスを生成します。
○
○
○
tk_del_mtx
ミューテックスを削除します。
○
○
○
tk_loc_mtx
ミューテックスをロックしま
す。
○
×
×
tk_unl_mtx
ミューテックスをロック解除
します。
○
×
○
tk_ref_mtx
ミューテックスの状態を参照
します。
○
○
○
tk_cre_mbf
メッセージバッファを生成し
ます。
○
○
○
tk_del_mbf
メッセージバッファを削除し
ます。
○
○
○
tk_snd_mbf
メッセージバッファへ送信し
ます。
○
○
○
tk_rcv_mbf
メッセージバッファから受信
します。
○
×
×
tk_ref_mbf
メッセージバッファの状態を
参照します。
○
○
○
tk_cre_por
ランデブポートを生成します。
○
×
○
tk_del_por
ランデブポートを削除します。
○
×
○
tk_cal_por
ランデブポートに対するラン
デブを呼び出します。
○
×
×
tk_acp_por
ランデブポートに対するラン
デブを受け付けます。
○
×
×
tk_fwd_por
ランデブポートに対するラン
デブを回送します。
○
×
○
tk_rpl_rdv
ランデブポートに対するラン
デブを返答します。
○
×
○
tk_ref_por
ランデブポートの状態を参照
します。
○
○
○
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.1 システムコール一覧
Support
Soft
Ma nual
表 3.1-1 システムコール一覧 (4 / 7)
呼出し可否
分類
メモリ
プール
管理機能
名称
説明
タスク
部 *1
タスク
独立部
ディスパッチ
禁止状態
tk_cre_mpf
固定長メモリプールを生成し
ます。
○
×
×
tk_del_mpf
固定長メモリプールを削除し
ます。
○
×
×
tk_get_mpf
固定長メモリブロックを獲得
します。
○
×
×
tk_rel_mpf
固定長メモリブロックを返却
します。
○
×
×
tk_ref_mpf
固定長メモリプールの状態を
参照します。
○
×
×
tk_cre_mpl
可変長メモリプールを生成し
ます。
○
×
×
tk_del_mpl
可変長メモリプールを削除し
ます。
○
×
×
tk_get_mpl
可変長メモリブロックを獲得
します。
○
×
×
tk_rel_mpl
可変長メモリブロックを返却
します。
○
×
×
tk_ref_mpl
可変長メモリプールの状態を
参照します。
○
×
×
January 31, 2014, CM81-00210-2a
19
第 3 章 システムコールインタフェース
3.1 システムコール一覧
Su pp or t
So ft
Manu al
表 3.1-1 システムコール一覧 (5 / 7)
呼出し可否
分類
名称
割込み
管理機能
20
タスク
部 *1
タスク
独立部
ディスパッチ
禁止状態
tk_set_tim
システム時刻を設定します。
○
○
○
tk_get_tim
システムの現在時刻を参照し
ます。
○
○
○
tk_get_otm
システム稼働時間を参照しま
す。
○
○
○
*3
×
○
○
tk_cre_cyc
周期ハンドラを生成します。
○
○
○
tk_del_cyc
周期ハンドラを削除します。
○
○
○
tk_sta_cyc
周期ハンドラの動作を開始し
ます。
○
○
○
tk_stp_cyc
周期ハンドラの動作を停止し
ます。
○
○
○
tk_ref_cyc
周期ハンドラの状態を参照し
ます。
○
○
○
tk_cre_alm
アラームハンドラを生成しま
す。
○
○
○
tk_del_alm
アラームハンドラを削除しま
す。
○
○
○
tk_sta_alm
アラームハンドラの動作を開
始します。
○
○
○
tk_stp_alm
アラームハンドラの動作を停
止します。
○
○
○
tk_ref_alm
アラームハンドラの状態を参
照します。
○
○
○
tk_def_int
割込みハンドラを定義または
解除します。
○
○
○
tk_ret_int
割込みハンドラから復帰しま
す。
×
○
○
DI
すべての外部割込みを禁止し
ます。
○
○
○
EI
すべての外部割込みを許可し
ます。
○
○
○
isDI
外部割込み禁止状態を調べま
す。
○
○
○
isig_tim
時間管理
機能
説明
タイムティックを供給します。
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.1 システムコール一覧
Support
Soft
Ma nual
表 3.1-1 システムコール一覧 (6 / 7)
呼出し可否
分類
システム
状態
管理機能
サブ
システム
管理機能
デバイス
管理機能
名称
説明
タスク
部 *1
タスク
独立部
ディスパッチ
禁止状態
tk_rot_rdq
タスクの優先順位を回転しま
す。
○
○
○
tk_get_tid
実行状態タスクのタスク ID を
参照します。
○
○
○
tk_dis_dsp
ディスパッチを禁止します。
○
×
○
tk_ena_dsp
ディスパッチを許可します。
○
×
○
tk_ref_sys
システム状態を参照します。
○
○
○
tk_ref_ver
カーネルのバージョンを参照
します。
○
○
○
tk_def_ssy
サブシステムを定義または定
義を削除します。
○
○
○
tk_ref_ssy
サブシステム定義情報を参照
します。
○
○
○
tk_def_dev
デバイスを登録または登録を
削除します。
○
○
○
tk_ref_idv
デバイス初期情報を獲得しま
す。
○
○
○
tk_opn_dev
デバイスをオープンします。
○
○
○
tk_cls_dev
デバイスをクローズします。
○
○
○
tk_rea_dev
デバイスの読出しを開始しま
す。
○
○
○
tk_srea_dev
デバイスの同期読出しを行い
ます。
○
○
○
tk_wri_dev
デバイスの書込みを開始しま
す。
○
○
○
tk_swri_dev
デバイスの同期書込みを行い
ます。
○
○
○
tk_wai_dev
デバイスの要求完了を待ちま
す。
○
○
○
tk_sus_dev
デバイスをサスペンドします。
○
○
○
tk_get_dev
デバイス名を獲得します。
○
○
○
January 31, 2014, CM81-00210-2a
21
第 3 章 システムコールインタフェース
3.1 システムコール一覧
Su pp or t
So ft
Manu al
表 3.1-1 システムコール一覧 (7 / 7)
呼出し可否
分類
名称
説明
タスク
部 *1
タスク
独立部
ディスパッチ
禁止状態
tk_ref_dev
デバイス名からデバイス情報
を獲得します。
○
○
○
tk_oref_dev
デバイスディスクリプタから
デバイス情報を獲得します。
○
○
○
tk_lst_dev
登録済みデバイスの一覧を獲
得します。
○
○
○
tk_evt_dev
デバイスにドライバ要求イベ
ントを送信します。
○
○
○
デバイス
管理機能
○ : 呼出し可能 × : 呼出し不可 ( システムコールがエラー復帰または動作を保証しない )
*1: 「呼出し可否」の「タスク部」は「準タスク部」を含みます。
*2: ディスパッチ禁止状態で実行状態のタスクを指定して tk_sus_tsk を呼び出した場合 , E_CTX エラー
になります。
*3: T-REALOS 固有の機能 (T-Kernel 仕様で規定されていません。T-REALOS で追加した機能です。)
22
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.2 システムコール説明内容
Support
3.2
Soft
Ma nual
システムコール説明内容
「3.3 タスク管理機能のシステムコール」から「3.12 デバイス管理機能のシステム
コール」までのシステムコール説明内容の読み方を説明します。
■ システムコール説明内容
<システムコール名> (<機能 英文>)
〈機能 和文〉
タスク部
○
タスク独立部 ○ ディスパッチ禁止状態 ○
タスク部から呼出
可能かどうかを表す
○:呼出し可能
×:呼出し禁止
ディスパッチ禁止状態から
呼出可能かどうかを表す
○:呼出し可能
×:呼出し禁止
タスク独立部から呼出
可能かどうかを表す
○:呼出し可能
×:呼出し禁止
〈C言語インタフェース〉
関数値としてのエラーコード
システムコール名
■ C言語インタフェース
ID tskid = tk_cre_tsk( T_CTSK *pk_ctsk );
typedef struct t_ctsk{
VP exinf;
ATR tskatr;
FP task;
PRI itskpri;
INT stksz;
UB dsname[8];
VP bufptr;
}T_CTSK;
パラメータ パラメータ宣言
パラメータ名
パケットの構造
■ パラメータ
●入力
タスク生成情報(Packet to Create Task)
タスク生成情報のパケットの先頭アドレス
● パケットに設定するデータ
pk_ctsk
exinf
拡張情報(Extended Information)
tskatr
タスク属性(Task Attribute)
task
タスク起動アドレス(Task Start Address)
itskpri
タスク起動時優先度(Initial Task Priority)
stksz
スタックサイズ(バイト数) (Stack Size)
パラメータの説明
dsname[8] DS オブジェクト名称 (DS Object Name)
●出力
bufptr
ユーザーバッファポインタ (Buffer Pointer)
tskid
タスクID または エラーコード
(TaskID or ErrorCode)
January 31, 2014, CM81-00210-2a
23
第 3 章 システムコールインタフェース
3.2 システムコール説明内容
Su pp or t
So ft
Manu al
〈エラーコード〉
■ エラーコード
E_NOMEM
‑33
メモリ不足
(管理ブロックやスタック用の領域を確
保できない)
E_LIMIT
‑34
タスクの数がシステムの制限を超えた
E_RSATR
‑11
予約属性(tskatr が不正あるいは使用
E_PAR
‑17
パラメータエラー(pk_ctsk が不正,
できない)
このシステムコール発
行時に発生する可能性
のあるエラー
task, bufptr が不正,itskpri が不正)
〈ディスパッチ要因〉
■ディスパッチ要因
このシステムコールではディスパッチしません。
このシステムコールでディ
スパッチが発生する要因
または発生の有無
〈解 説〉
■ 解 説
タスクを生成してタスクID を割り当てます。具体的には,生成するタスクに
対してTCB(Task Control Block)を割り付け,itskpri, task, stksz などの情
報をもとにその初期設定を行います。
対象タスクは生成後,休止状態(DORMANT)となります。
itskpri によって,タスクが起動するときの優先度の初期値を指定します。タ
スク優先度としては,1~140 の値を指定することができ,数の小さい方が高
い優先度となります。
exinf は,対象タスクに関する情報を入れておくためにユーザが自由に利用で
きます。ここで設定した情報は,タスクに起動パラメータとして渡される他,
tk_ref_tsk で取り出すことができます。
なお,ユーザの情報を入れるためにもっと大きな領域がほしい場合や,途中で
内容を変更したい場合には,自分でそのためのメモリを確保し,そのメモリ
パケットのアドレスをexinf に入れます。OS ではexinf の内容について関知
しません。
tskatr は,下位側がシステム属性を表わし,上位側が実装独自属性を表わしま
す。tskatr のシステム属性の部分では,次のように指定を行います。
24
このシステムコールの処理
に対する解説,注意事項
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.3 タスク管理機能のシステムコール
Support
3.3
Soft
Ma nual
タスク管理機能のシステムコール
タスク管理機能のシステムコールを説明します。
■ タスク管理機能のシステムコール
タスク管理機能は , 以下の 10 種類のシステムコールで構成されます。
• tk_cre_tsk(Create Task)
• tk_del_tsk(Delete Task)
• tk_sta_tsk (Start Task)
• tk_ext_tsk(Exit Task)
• tk_exd_tsk(Exit and Delete Task)
• tk_ter_tsk(Terminate Task)
• tk_chg_pri(Change Task Priority)
• tk_get_reg(Get Task Registers)
• tk_set_reg(Set Task Registers)
• tk_ref_tsk(Refer Task Status)
January 31, 2014, CM81-00210-2a
25
第 3 章 システムコールインタフェース
3.3 タスク管理機能のシステムコール
Su pp or t
3.3.1
So ft
Manu al
tk_cre_tsk(Create Task)
タスクを生成します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ID tskid = tk_cre_tsk ( T_CTSK *pk_ctsk ) ;
typedef struct t_ctsk {
VP exinf;
ATR tskatr;
FP task;
PRI itskpri;
W stksz;
VP bufptr;
} T_CTSK;
■ パラメータ
● 入力
タスク生成情報 (Packet of Create Task)
pk_ctsk
タスク生成情報のパケットの先頭アドレス
● pk_ctsk に設定するデータ
exinf
拡張情報 (Extended Information)
tskatr
タスク属性 (Task Attribute)
tskatr : = TA_HLNG | [TA_USERBUF]
表 3.3-1 tk_cre_tsk の tskatr で指定できる定数マクロ
属性
値
意味
TA_HLNG
0x00000001
対象タスクが C 言語で記述
TA_USERBUF
0x00000020
スタック領域としてユーザが
指定した領域を使用する
task
タスク起動アドレス (Task Start Address)
itskpri
タスク起動時優先度 (Initial Task Priority)
stksz
スタックサイズ ( バイト数 ) (Stack Size)
bufptr
ユーザバッファのアドレス (Buffer Pointer)
● 出力
tskid
26
タスク ID(TaskID) またはエラーコード (ErrorCode)
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.3 タスク管理機能のシステムコール
Support
Soft
Ma nual
■ エラーコード
E_NOMEM
-33
メモリ不足
· タスクスタック用の領域を確保できない (TA_USERBUF
が指定されていない場合 )
E_LIMIT
-34
タスクの数がシステムの制限より大きい
E_RSATR
-11
予約属性
·tskatr に未定義の値が設定された
E_PAR
-17
パラメータエラー
·itskpri が 0 以下 , または最大優先度より大きい
·stksz が最小スタックサイズより小さい
·stksz が 8 の倍数でない (TA_USERBUF が指定されている
場合 )
■ ディスパッチ要因
本システムコールでディスパッチは起きません。
■ 解説
タスクを生成してタスク ID を割り当てます。具体的には , itskpri, tsk, stksz の情報を元
に生成するタスクを初期設定します。タスクは生成後 , 休止状態となります。
itskpri によって , タスクが起動するときの優先度の初期値を指定します。タスク優先度
は , 1 から最大優先度 ( コンフィギュレータで設定した最大優先度 ) の値を指定でき ,
数の小さい方が高い優先度となります。
exinf は , 対象タスクに関する情報を入れておくためにユーザが自由に使用できます。
ここで指定した情報は, タスクの起動パラメータおよびtk_ref_tskで参照できます。ユー
ザの情報を入れるためにもっと大きな領域が必要な場合や , 途中で内容を変更したい
場合があれば, ユーザプログラムでそのためのメモリを確保して, そのアドレスをexinf
に入れます。なお , OS は exinf の内容を関知しません。
tskatr には , 表 3.3-1 のタスクの属性を指定してください。以下の表 3.3-2 の値を指定し
た場合は無視されます。
表 3.3-2 無視するタスク属性一覧
属性
値
意味
TA_ASM
0x00000000
対象タスクがアセンブラで記述
TA_RNG0
0x00000000
保護レベル 0 で実行
TA_RNG1
0x00000100
保護レベル 1 で実行
TA_RNG2
0x00000200
保護レベル 2 で実行
TA_RNG3
0x00000300
保護レベル 3 で実行
tskatr には , TA_HLNG を必ず指定してください。T-REALOS は , タスクの記述言語は
C 言語のみサポートしています。そのため , tskatr に TA_ASM を指定した場合も , タス
クが C 言語で記述されているものとして処理されますが , T-Kernel 仕様との互換性は
保証されません。
January 31, 2014, CM81-00210-2a
27
第 3 章 システムコールインタフェース
3.3 タスク管理機能のシステムコール
Su pp or t
So ft
Manu al
各タスクにスタックは 1 つあります。TA_USERBUF が指定された場合に bufptr が有効
になり , bufptr を先頭とする stksz バイトのメモリ領域をスタック領域として使用しま
す。この場合 , OS はスタック領域を確保しません。TA_USERBUF が指定されなかっ
た場合 , bufptr は無視され , OS はスタック領域を確保します。OS が確保する場合 , 8 バ
イトの倍数に切り上げて stksz は獲得されます。
pk_ctk, tsk, bufptr が不正な場合でも , エラーチェックを行わず動作は保証されません。
■ 補足事項
T-REALOS のタスクスタックはレジスタ退避用に最低 80 バイトの領域が必要です。ま
た , タスクスタックサイズの求め方およびタスクの記述方法については , 「ユーザーズ
ガイド 『 4.9 タスク』
」を参照してください。
関数からの単純なリターン (return) でタスクを終了するとその後のシステムの動作は保
証されません。必ず , tk_ext_tsk または tk_exd_tsk を呼び出して , タスクを終了させて
ください。
28
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.3 タスク管理機能のシステムコール
Support
3.3.2
Soft
Ma nual
tk_del_tsk(Delete Task)
タスクを削除します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_del_tsk ( ID tskid ) ;
■ パラメータ
● 入力
tskid
タスク ID (Task ID)
ercd
エラーコード (ErrorCode)
● 出力
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·tskid が 0 以下または最大タスク数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·tskid のタスクが存在しない
E_OBJ
-41
オブジェクトの状態が不正
· 対象タスクが休止状態でない
■ ディスパッチ要因
本システムコールでディスパッチは起きません。
■ 解説
tskid で指定されたタスクを削除します。具体的には , tskid で指定されたタスクを休止
状態から未登録状態に移行させて , スタック領域およびタスク ID 番号を未使用状態に
します。
自タスクを削除するには tk_exd_tsk を呼び出してください。
January 31, 2014, CM81-00210-2a
29
第 3 章 システムコールインタフェース
3.3 タスク管理機能のシステムコール
Su pp or t
3.3.3
So ft
Manu al
tk_sta_tsk (Start Task)
タスクを起動します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_sta_tsk ( ID tskid, INT stacd ) ;
■ パラメータ
● 入力
tskid
タスク ID (Task ID)
stacd
タスク起動コード (Start Code)
ercd
エラーコード (ErrorCode)
● 出力
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·tskid が 0 以下または最大タスク数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·tskid のタスクが存在しない
E_OBJ
-41
オブジェクトの状態が不正
· 対象タスクが休止状態でない
■ ディスパッチ要因
本システムコールを呼び出したタスクより優先度の高いタスクを起動した場合 , 起動
したタスクにディスパッチします。
■ 解説
tskid で指定されたタスクを起動します。具体的には , 休止状態から実行可能状態へと
移します。
stacd は , タスクの起動時にタスクに渡すパラメータを設定できます。このパラメータ
は , 対象タスクから参照することで , 簡単なメッセージ通信ができます。
タスク起動時のベース優先度および現在優先度は , 対象タスクが生成されたときに指
定されたタスク起動時優先度と同じです。
本システムコールは起動要求のキューイングを行いません。
30
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.3 タスク管理機能のシステムコール
Support
3.3.4
Soft
Ma nual
tk_ext_tsk(Exit Task)
自タスクを終了します。
タスク部
○
タスク独立部
×
ディスパッチ禁止状態
×
■ C 言語インタフェース
void tk_ext_tsk ( void ) ;
■ パラメータ
● 入力
なし
● 出力
なし
( 注意事項 ) システムコールを呼び出したコンテキストには復帰しない。
■ エラーコード
( 注意事項 ) 以下のエラーを検出する可能性がありますが , エラーを検出した場合でもシ
ステムコールを呼び出したコンテキストには復帰しません。したがって , シ
ステムコールの復帰値として直接エラーコードを返しません。
E_CTX
-25
コンテキストエラー
· タスク独立部またはディスパッチ禁止状態で実行
■ ディスパッチ要因
本システムコールを呼び出したタスクが終了した場合 , 次の優先順位のタスクにディ
スパッチします。
■ 解説
自タスクを正常終了させたのち , 休止状態へ移行させます。
本システムコールにより , タスクが休止状態になった場合 , タスク優先度は起動時優先
度に戻ります。
■ 補足事項
本システムコールによるタスクの終了時に , 終了するタスクがそれ以前に獲得した資
源 ( メモリブロック , セマフォなど ) は自動的に解放されません。このため , タスク終
了により未使用となる資源をタスク終了前に解放してください。
本システムコールは呼出し元のコンテキストに復帰しないシステムコールです。タス
ク独立部 , またはディスパッチ禁止状態で本システムコールが呼び出された場合 , OS
内部でエラーを検出します。しかし , その場合でも呼出し元には復帰せず , その後の動
作は保証されません。
January 31, 2014, CM81-00210-2a
31
第 3 章 システムコールインタフェース
3.3 タスク管理機能のシステムコール
Su pp or t
3.3.5
So ft
Manu al
tk_exd_tsk(Exit and Delete Task)
自タスクを終了して削除します。
タスク部
○
タスク独立部
×
ディスパッチ禁止状態
×
■ C 言語インタフェース
void tk_exd_tsk ( void ) ;
■ パラメータ
● 入力
なし
● 出力
なし
( 注意事項 ) システムコールを呼び出したコンテキストには復帰しない。
■ エラーコード
( 注意事項 ) 以下のエラーを検出する可能性がありますが , エラーを検出した場合でもシ
ステムコールを呼び出したコンテキストには復帰しません。したがって , シ
ステムコールの復帰値として直接エラーコードを返しません。
E_CTX
-25
コンテキストエラー
· タスク独立部またはディスパッチ禁止状態で実行
■ ディスパッチ要因
本システムコールを呼び出したタスクが終了した場合 , 次の優先順位のタスクにディ
スパッチします。
■ 解説
自タスクを正常終了させたのち , 削除します。具体的には , 自タスクを未登録状態に移
行させます。
■ 補足事項
本システムコールによるタスクの終了時には , 終了するタスクがそれ以前に獲得した
資源 ( メモリブロック , セマフォなど ) は自動的に解放されません。このため , タスク
終了により未使用となる資源をタスク終了前に解放してください。
本システムコールは呼出し元のコンテキストに復帰しないシステムコールです。タス
ク独立部 , またはディスパッチ禁止状態で本システムコールが呼び出された場合 , OS
内部でエラーを検出します。しかし , その場合でも呼出し元には復帰せず , その後の動
作は保証されません。
32
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.3 タスク管理機能のシステムコール
Support
3.3.6
Soft
Ma nual
tk_ter_tsk(Terminate Task)
他タスクを強制終了します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_ter_tsk ( ID tskid ) ;
■ パラメータ
● 入力
tskid
タスク ID (Task ID)
ercd
エラーコード (Error Code)
● 出力
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·tskid が 0 以下または最大タスク数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·tskid のタスクが存在しない
E_OBJ
-41
オブジェクトの状態が不正
· 対象タスクが休止状態または自タスク
■ ディスパッチ要因
以下の待ち行列につながれたタスクを対象として優先度を変更し , 対象タスクの待ち
状態が解除された場合 , 対象タスクの優先度が自タスクより高ければ , 対象タスクに
ディスパッチします。
- セマフォ獲得待ち行列
- メッセージバッファの送信待ち行列
- 可変長メモリプールのメモリブロック獲得待ち行列
■ 解説
tskid で指定されたタスクを強制的に終了させます。具体的には , 対象タスクを休止状
態に移行させます。この時 , 優先度は起動時優先度に戻ります。
対象タスクが待ち状態 ( 強制待ち状態を含む ) の場合でも , 対象タスクは待ち解除と
なって終了します。また , 対象タスクが何らかの待ち行列 ( セマフォ待ちなど ) につな
がれていた場合 , 本システムコールの実行によってその待ち行列から削除します。
January 31, 2014, CM81-00210-2a
33
第 3 章 システムコールインタフェース
3.3 タスク管理機能のシステムコール
Su pp or t
So ft
Manu al
本システムコールの対象タスクの状態と実行結果との関係を表 3.3-3 に示します。
表 3.3-3 tk_ter_tsk の対象タスクの状態と実行結果
対象タスク状態
tk_ter_tsk の
ercd
処理
実行できる状態 (RUNNING, READY) ( 自タスク以外 )
E_OK
強制終了処理
実行状態 (RUNNING)( 自タスク )
E_OBJ
何もしない
待ち状態 (WAITING, SUSPENDED, WAITING-SUSPENDED)
E_OK
強制終了処理
休止状態 (DORMANT)
E_OBJ
何もしない
未登録状態 (NON-EXISTENT)
E_NOEXS
何もしない
■ 補足事項
tk_ter_tsk によるタスクの終了時に , 終了するタスクがそれ以前に獲得した資源 ( メモ
リブロック , セマフォなど ) は自動的には解放されません。このため , tk_ter_tsk でタス
クを終了させる場合 , ユーザプログラムによりそのタスクが獲得している資源を解放
させてください。
tk_ter_tsk によるタスクの強制終了は対象タスクの実行状態とは関係なく行うため , シ
ステム全体に悪影響を及ぼす場合があります。このため , タスクを強制終了させる場合
は注意してください。
34
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.3 タスク管理機能のシステムコール
Support
3.3.7
Soft
Ma nual
tk_chg_pri(Change Task Priority)
タスクの優先度を変更します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_chg_pri ( ID tskid, PRI tskpri ) ;
■ パラメータ
● 入力
タスク ID (Task ID)
tskid
1 から最大タスク数の数値 , および以下のマクロが指定可能
表 3.3-4 tk_chg_pri の tskid に指定できる定数マクロ
名前
値
TSK_SELF
0
意味
自タスク
優先度 (Task Priority)
tskpri
1 から最大優先度の数値 , および以下のマクロが指定可能
表 3.3-5 tk_chg_pri の tskpri に指定できる定数マクロ
名前
値
TPRI_INI
0
意味
起動時優先度
● 出力
ercd
エラーコード (Error Code)
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·tskid が負または最大タスク数より大きい
· タスク独立部からの呼出しで tskid に TSK_SELF(=0) が
指定された
E_NOEXS
-42
オブジェクトが存在していない
·tskid のタスクが存在しない
E_PAR
-17
パラメータエラー
·tskpri が負または最大優先度より大きい
January 31, 2014, CM81-00210-2a
35
第 3 章 システムコールインタフェース
3.3 タスク管理機能のシステムコール
Su pp or t
E_ILUSE
-28
So ft
Manu al
不正使用
·TA_CEILING 属性のミューテックスをロックしている場合
で , tskpri が上限優先度よりも高い
■ ディスパッチ要因
• 対象タスクの優先度を自タスクの優先度より高くした場合, 対象タスクにディスパッ
チします。
• 自タスクの優先度をほかの実行可能状態のタスクの優先度より低くした場合 , ほか
の行可能状態のタスクのうち , 一番優先順位の高いタスクにディスパッチします。
• 以下の待ち行列につながれたタスクを対象として優先度を変更し , 対象タスクの待
ち状態が解除された場合 , 対象タスクの優先度が自タスクより高ければ , 対象タス
クにディスパッチします。
- セマフォ待ち行列
- メッセージバッファの送信待ち行列
- 可変長メモリプールのメモリブロック獲得待ち行列
■ 解説
tskid で指定されたタスクのベース優先度を tskpri で指定された値に変更します。ベー
ス優先度と現在優先度が一致している場合 ( ミューテックス機能を使用しない場合 ),
タスクの現在優先度も tskpri で指定された値に変更してベース優先度と一致させます。
tskpri はタスク優先度として 1 から最大優先度 ( コンフィギュレータで設定した最大優
先度 ) までの値を指定でき , 値の小さい方が高い優先度となります。
tskid に TSK_SELF(=0) が指定されると自タスクを対象タスクとします。
tskpri に TPRI_INI(=0) が指定されると , 対象タスクのベース優先度をタスクの起動時優
先度に変更します。
本システムコールで変更した優先度はタスクが終了するまで有効です。タスクが休止状
態に戻るとき , 終了前のタスクの優先度は捨てられます。
そして , タスクの起動時に , タ
スク生成時に指定された優先度となります。ただし , 休止状態のタスクに対して変更し
た優先度は有効となり , 次にタスクを起動したときは , その変更された優先度で起動し
ます。
本システムコールを実行した結果 , 対象タスクの現在優先度がベース優先度と一致し
ている場合 , 以下の処理を行います。
• 対象タスクが実行可能状態である場合 , タスクの優先順位は変更した優先度に従っ
て変更します。変更後の優先度と同じ優先度を持つタスクの間で , 対象タスクの優
先順位は最低になります。
• 対象タスクが何らかのタスク優先度順の待ち行列につながれている場合 , その待ち
行列の中での順序を変更後の優先度に従って変更します。変更後の優先度と同じ優
先度を持つタスクの間で , 対象タスクは待ち行列の最後につなぎます。
36
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.3 タスク管理機能のシステムコール
Support
Soft
Ma nual
■ 補足事項
本システムコールを呼び出した結果 , 対象タスクのタスク優先度順の待ち行列の中で
の順序が変化した場合 , 対象タスクまたはその待ち行列で待っているほかのタスクの
待ち状態を解除する場合があります。
対象タスクが TA_INHERIT 属性のミューテックスのロック待ち状態である場合 , 本シ
ステムコールでベース優先度を変更したことにより , 推移的な優先度継承の処理が必
要になる場合があります。
ミューテックス機能を使用しない場合に , 対象タスクに自タスク , 変更後の優先度に自
タスクのベース優先度を指定して本システムコールが呼び出されると , 自タスクの実
行順位は同じ優先度のタスクの中で最低となります。そのため , 本システムコールを使
用して実行権を放棄できます。
ミューテックスの概要および仕様は , 以下のマニュアルを参照してください。
• 「 ユーザーズガイド 『3.5.1 ミューテックス機能』」
• 「3.6.1.1 tk_cre_mtx(Create Mutex)」
• 「3.6.1.5 tk_ref_mtx(Refer Mutex Status)」
January 31, 2014, CM81-00210-2a
37
第 3 章 システムコールインタフェース
3.3 タスク管理機能のシステムコール
Su pp or t
3.3.8
So ft
Manu al
tk_get_reg(Get Task Registers)
タスクレジスタを獲得します。
タスク部
○
タスク独立部
×
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_get_reg ( ID tskid, T_REGS *pk_regs,
T_EIT *pk_eit , T_CREGS *pk_cregs ) ;
typedef struct t_regs {
VW
r[13];
} T_REGS;
typedef struct t_eit {
VP
pc;
} T_EIT;
typedef struct t_cregs {
VP
ssp;
VP
usp;
} T_CREGS;
■ パラメータ
● 入力
tskid
タスク ID (Task ID)
pk_regs
汎用レジスタに設定されている値を格納したパケットアドレス
(Packet of Registers)
pk_eit
CPU 例外時に保存するレジスタの値を格納したパケットアドレス
(Packet of EIT)
pk_cregs
制御レジスタに設定されている値を格納したパケットアドレス
(Packet of Control Registers)
● 出力
ercd
エラーコード (Error Code)
● pk_regs に返されるデータ
r[13]
汎用レジスタ:R0-R12
● pk_eit に返されるデータ
pc
38
PC レジスタ
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.3 タスク管理機能のシステムコール
Support
Soft
Ma nual
● pk_cregs に返されるデータ
ssp
スーパーバイザスタックポインタ
usp
ユーザスタックポインタ
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·tskid が負または最大タスク数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·tskid のタスクが存在しない
E_OBJ
-41
オブジェクトの状態が不正
· 対象タスクが自タスク
E_CTX
-25
コンテキストエラー
· タスク独立部からの呼出し
■ ディスパッチ要因
本システムコールでディスパッチは起きません。
■ 解説
tskid のタスクの現在のレジスタの内容を参照します。参照したレジスタの値は対象タ
スクの現在のレジスタの値であり , 必ずしもタスク部実行中の値であるとは限りませ
ん。
pk_regs, pk_eit, pk_cregs にそれぞれ NULL が指定されると , 対応するレジスタの参照は
行いません。
pk_regs, pk_eit, pk_cregs が不正な場合でも , エラーチェックを行わず , 動作は保証され
ません。
January 31, 2014, CM81-00210-2a
39
第 3 章 システムコールインタフェース
3.3 タスク管理機能のシステムコール
Su pp or t
3.3.9
So ft
Manu al
tk_set_reg(Set Task Registers)
タスクレジスタを設定します。
タスク部
○
タスク独立部
×
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_set_reg ( ID tskid, T_REGS *pk_regs,
T_EIT *pk_eit , T_CREGS *pk_cregs ) ;
typedef struct t_regs {
VW
r[13];
} T_REGS;
typedef struct t_eit {
VP
pc;
} T_EIT;
typedef struct t_cregs {
VP
ssp;
VP
usp;
} T_CREGS;
■ パラメータ
● 入力
tskid
タスク ID (Task ID)
pk_regs
汎用レジスタに設定する値を格納したパケットアドレス (Packet of
Registers)
● pk_regs に設定するデータ
r[13]
pk_eit
汎用レジスタ:R0-R12
CPU 例外時に保存するレジスタに設定する値を格納したパケット
アドレス (Packet of EIT)
● pk_eit に設定するデータ
pc
PC レジスタ
pk_cregs
制御レジスタに設定する値を格納したパケットアドレス
(Packet of Control Registers)
● pk_cregs に設定するデータ
40
ssp
スーパーバイザスタックポインタ
usp
ユーザスタックポインタ
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.3 タスク管理機能のシステムコール
Support
Soft
Ma nual
● 出力
ercd
エラーコード (Error Code)
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·tskid が 0 以下または最大タスク数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·tskid のタスクが存在しない
E_OBJ
-41
オブジェクトの状態が不正
· 対象タスクが自タスク
E_CTX
-25
コンテキストエラー
· タスク独立部からの呼出し
■ ディスパッチ要因
本システムコールでディスパッチは起きません。
■ 解説
tskid のタスクのレジスタを指定の内容に設定します。
pk_regs, pk_eit, pk_cregs にそれぞれ NULL が指定されると , 対応するレジスタの設定は
行われません。
設定するレジスタの値の正当性はチェックしません。このため , 不当なレジスタの値を
設定した場合 , システムが誤動作 , ハングアップする可能性があります。
pk_regs, pk_eit, pk_cregs が不正な場合でも , エラーチェックを行わず , 動作は保証され
ません。
January 31, 2014, CM81-00210-2a
41
第 3 章 システムコールインタフェース
3.3 タスク管理機能のシステムコール
Su pp or t
3.3.10
So ft
Manu al
tk_ref_tsk(Refer Task Status)
タスク状態を参照します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_ref_tsk ( ID tskid, T_RTSK *pk_rtsk ) ;
typedef struct t_rtsk {
VP
exinf;
PRI
tskpri;
PRI
tskbpri;
UINT
tskstat;
UW
tskwait;
ID
wid;
INT
wupcnt;
INT
suscnt;
} T_RTSK;
■ パラメータ
● 入力
tskid
タスク ID (Task ID)
1 から最大タスク数の数値 , および以下のマクロが指定可能
表 3.3-6 tk_ref_tsk の tskid に指定できる定数マクロ
名前
値
意味
TSK_SELF
0
自タスク
*pk_rtsk
タスクの状態を返すパケットアドレス
(Packet of Refer Task)
42
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.3 タスク管理機能のシステムコール
Support
Soft
Ma nual
● 出力
エラーコード (Error Code)
ercd
● pk_rtsk に返されるデータ
exinf
拡張情報 (Extended Information)
tskpri
現在の優先度 (Task Priority)
tskbpri
ベース優先度 (Task Base Priority)
tskstat
タスクの状態 (Task State)
表 3.3-7 tk_ref_tsk の tskstat に返される値
状態
値
意味
TTS_RUN
0x00000001
実行状態 (RUNNING)
TTS_RDY
0x00000002
実行可能状態 (READY)
TTS_WAI
0x00000004
待ち状態 (WAITING)
TTS_SUS
0x00000008
強制待ち状態 (SUSPENDED)
TTS_WAS
0x0000000c
二重待ち状態
(WAITING-SUSPENDED)
TTS_DMT
0x00000010
休止状態 (DORMANT)
tskwait
待ち要因 (Task Wait Factor)
表 3.3-8 tk_ref_tsk の tskwait に返される値
待ち要因
値
意味
TTW_SLP
0x00000001
tk_slp_tsk による待ち
TTW_DLY
0x00000002
tk_dly_tsk による待ち
TTW_SEM
0x00000004
tk_wai_sem による待ち
TTW_FLG
0x00000008
tk_wai_flg による待ち
TTW_MBX
0x00000040
tk_rcv_mbx による待ち
TTW_MTX
0x00000080
tk_loc_mtx による待ち
TTW_SMBF
0x00000100
tk_snd_mbf による待ち
TTW_RMBF
0x00000200
tk_rcv_mbf による待ち
TTW_CAL
0x00000400
ランデブ呼出し待ち
TTW_ACP
0x00000800
ランデブ受付け待ち
TTW_RDV
0x00001000
ランデブ終了待ち
(TTW_CAL|TT
W_RDV)
0x00001400
ランデブ呼出しまたは終了待
ち
TTW_MPF
0x00002000
tk_get_mpf による待ち
TTW_MPL
0x00004000
tk_get_mpl による待ち
January 31, 2014, CM81-00210-2a
43
第 3 章 システムコールインタフェース
3.3 タスク管理機能のシステムコール
Su pp or t
So ft
Manu al
wid
待ちオブジェクト ID (Waiting Object ID)
wupcnt
起床要求キューイング数 (Wakeup Count)
suscnt
強制待ち要求ネスト数 (Suspend Count)
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·tskid が負または最大タスク数より大きい
· タスク独立部からの呼出しで tskid に TSK_SELF(=0) が
指定された
E_NOEXS
-42
オブジェクトが存在していない
·tskid のタスクが存在しない
■ ディスパッチ要因
本システムコールでディスパッチは起きません。
■ 解説
tskid で指定された対象タスクの状態を参照します。
tskid に TSK_SELF(=0) を設定することによって自タスクを指定できます。
tskstat にはタスクの状態を設定します。割込みハンドラから割り込まれたタスクを対象
として本システムコールを呼び出した場合 , tskstat に実行状態 (TTS_RUN) を返します。
tskstat が TTS_WAI(TTS_WAS を含む ) の場合 , tskwait, wid は表 3.3-9 の値をとります。
表 3.3-9 tskwait と wid の値
tskwait
wid
TTW_SLP
0
TTW_DLY
0
TTW_SEM
待ち対象の semid
TTW_FLG
待ち対象の flgid
TTW_MBX
待ち対象の mbxid
TTW_MTX
待ち対象の mtxid
TTW_SMBF
待ち対象の mbfid
TTW_RMBF
待ち対象の mbfid
TTW_CAL
待ち対象の porid
TTW_ACP
待ち対象の porid
TTW_RDV
0
(TTW_CAL|TTW_RDV)
0
TTW_MPF
待ち対象の mpfid
TTW_MPL
待ち対象の mplid
tskstat が TTS_WAI(TTS_WAS を含む ) 以外の状態の場合 , tskwait, wid は共に 0 です。
また , 休止状態のタスクの場合 , wupcnt, suscnt はすべて 0 です。
pk_rtsk が不正な場合でも , エラーチェックを行わず , 動作は保証されません。
44
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.3 タスク管理機能のシステムコール
Support
Soft
Ma nual
■ 補足事項
• 本システムコールで自タスクの ID を確認できません。自タスクの ID を知りたい場
合 , tk_get_tid を使用します。
• 以下の手順で操作をした場合 , tskstat は実行状態のままです。
1. タスク独立部から , 直前に実行中だったタスクに対してタスクの状態が変化する
システムコール (*1) を呼び出す。
(*1)tk_sus_tsk, tk_ter_tsk など
2. タスク独立部から , 直前に実行中だったタスクに対して本システムコールを呼び
出す。
January 31, 2014, CM81-00210-2a
45
第 3 章 システムコールインタフェース
3.4 タスク付属同期機能のシステムコール
Su pp or t
3.4
So ft
Manu al
タスク付属同期機能のシステムコール
タスク付属同期機能のシステムコールを説明します。
■ タスク付属同期機能のシステムコール
タスク付属同期機能は , 以下の 8 種類のシステムコールで構成されます。
• tk_slp_tsk(Sleep Task)
• tk_wup_tsk(Wakeup Task)
• tk_can_wup(Cancel Wakeup Task)
• tk_rel_wai(Release Wait)
• tk_sus_tsk(Suspend Task)
• tk_rsm_tsk(Resume Task)
• tk_frsm_tsk(Force Resume Task)
• tk_dly_tsk(Delay Task)
46
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.4 タスク付属同期機能のシステムコール
Support
3.4.1
Soft
Ma nual
tk_slp_tsk(Sleep Task)
自タスクを起床待ち状態へ移行します。
タスク部
○
タスク独立部
×
ディスパッチ禁止状態
×
■ C 言語インタフェース
ER ercd = tk_slp_tsk ( TMO tmout ) ;
■ パラメータ
● 入力
tmout
タイムアウト指定 (Timeout)
0 から 0x7fffffff の数値 , および以下のマクロが指定可能
表 3.4-1 tk_slp_tsk の tmout に指定できる定数マクロ
名前
値
意味
TMO_FEVR
-1
永久待ち
TMO_POL
0
ポーリング
● 出力
ercd
エラーコード (Error Code)
■ エラーコード
E_OK
0
正常終了
E_PAR
-17
パラメータエラー
·tmout が -2 以下
E_RLWAI
-49
待ち状態強制解除
· 待ちの間に tk_rel_wai を受け付ける
E_TMOUT
-50
タイムアウト
·tmout の時間経過により待ち状態が解除された
·tmout が TMO_POL で , 起床要求キューイング数が 0
E_CTX
-25
コンテキストエラー
· タスク独立部またはディスパッチ禁止状態で実行
■ ディスパッチ要因
本システムコールを呼び出したタスクが起床待ち状態になった場合 , 次の優先順位の
タスクにディスパッチします。
■ 解説
起床要求キューイング数が 0 の場合 , 本システムコールでは , 自タスクを実行状態から
起床待ち状態 (tk_wup_tsk を待つ状態 ) に移します。
January 31, 2014, CM81-00210-2a
47
第 3 章 システムコールインタフェース
3.4 タスク付属同期機能のシステムコール
Su pp or t
So ft
Manu al
tmout の基準時間 ( 時間の単位 ) はシステム時刻の基準時間 (=1ms) と同じです。tmout
で指定された時間が経過する前にこのタスクを対象として tk_wup_tsk が呼び出された
場合 , 本システムコールは正常終了します。
TMO_FEVR は , タイムアウトまでの時間が無限大であることを示します。この場合は ,
tk_wup_tsk または tk_rel_wai が呼び出されるまで待ち状態になります。TMO_POL は待
ち状態には移行せずに E_TMOUT のエラーで復帰します。
起床要求キューイング数が 0 より大きい場合 , 待ち状態には移行せず , 本システムコー
ルは起床要求キューイング数を 1 減らして , タスクの処理を継続します。
■ 補足事項
本システムコールによって待ち状態になっているタスクに , ほかのタスクから
tk_sus_tsk が呼び出された場合 , このタスクは二重待ち状態になります。
48
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.4 タスク付属同期機能のシステムコール
Support
3.4.2
Soft
Ma nual
tk_wup_tsk(Wakeup Task)
他タスクを起床します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_wup_tsk ( ID tskid ) ;
■ パラメータ
● 入力
tskid
タスク ID (Task ID)
ercd
エラーコード (Error Code)
● 出力
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·tskid が 0 以下または最大タスク数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·tskid のタスクが存在しない
E_OBJ
-41
オブジェクトの状態が不正
· 対象タスクが自タスクまたは休止状態
E_QOVR
-43
キューイングまたはネストのオーバフロー
· 起床要求キューイング数が 32767 より大きい
■ ディスパッチ要因
本システムコールを呼び出したタスクより優先度の高いタスクを起床させた場合 , 起
床されたタスクにディスパッチします。
January 31, 2014, CM81-00210-2a
49
第 3 章 システムコールインタフェース
3.4 タスク付属同期機能のシステムコール
Su pp or t
So ft
Manu al
■ 解説
tskid で指定されたタスクが tk_slp_tsk の呼出しにより起床待ち状態であった場合 , 本シ
ステムコールにより , その待ち状態を解除します。
対象タスクが起床待ち状態でない場合 , 本システムコールによる起床要求はキューイ
ングします。起床要求キューイング数は , タスク単位に管理され , 初期値 (tk_sta_tsk 実
行時の値 ) は 0 です。起床待ち状態でないタスクに本システムコールを呼び出すこと
により , 対象タスクの起床要求キューイング数を 1 増やします。一方 , tk_slp_tsk を呼
び出すことにより , 対象タスクの起床要求キューイング数を 1 減らします。起床要求
キューイング数が 0 のタスクは , tk_slp_tsk を呼び出したときにそのタスクは待ち状態
になります。
起床要求キューイング数の最大値は 32767 です。
50
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.4 タスク付属同期機能のシステムコール
Support
3.4.3
Soft
Ma nual
tk_can_wup(Cancel Wakeup Task)
タスクの起床要求を無効化します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
INT wupcnt = tk_can_wup ( ID tskid ) ;
■ パラメータ
● 入力
tskid
タスク ID (Task ID)
1 から最大タスク数の数値 , および以下のマクロが指定可能
表 3.4-2 tk_can_wup の tskid に指定できる定数マクロ
名前
値
TSK_SELF
0
意味
自タスク
● 出力
wupcnt
キューイングされていた起床要求回数 (Wakeup Count)
またはエラーコード (Error Code)
■ エラーコード
E_ID
-18
不正 ID 番号
·tskid が負または最大タスク数より大きい
· タスク独立部からの呼出しで tskid に TSK_SELF(=0) が
指定された
E_NOEXS
-42
オブジェクトが存在していない
·tskid のタスクが存在しない
E_OBJ
-41
オブジェクトの状態が不正
· 対象タスクが休止状態
■ ディスパッチ要因
本システムコールでディスパッチは起きません。
■ 解説
tskid で指定されたタスクの起床要求キューイング数を復帰値 (wupcnt) として返し , 同
時にその起床要求をすべてキャンセルします。すなわち , 対象タスクの起床要求キュー
イング数を 0 にします。
January 31, 2014, CM81-00210-2a
51
第 3 章 システムコールインタフェース
3.4 タスク付属同期機能のシステムコール
Su pp or t
So ft
Manu al
■ 補足事項
周期的にタスクを起床して動作させる場合に , 本システムコールは時間内に処理が終
わっているかどうかを判定するために使用できます。すなわち , 前の起床要求に対する
処理が終了して tk_slp_tsk を呼び出す前に , それを監視するタスクが tk_can_wup を呼び出
し , その復帰値である wupcnt が 1 以上の値の場合 , 前の起床要求に対する処理が時間内
に終了しなかったことを確認できます。したがって , 処理の遅れに何らかの処置がとれ
ます。
52
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.4 タスク付属同期機能のシステムコール
Support
3.4.4
Soft
Ma nual
tk_rel_wai(Release Wait)
他タスクの待ち状態を強制解除します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_rel_wai ( ID tskid ) ;
■ パラメータ
● 入力
tskid
タスク ID (Task ID)
ercd
エラーコード (Error Code)
● 出力
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·tskid が 0 以下または最大タスク数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·tskid のタスクが存在しない
E_OBJ
-41
オブジェクトの状態が不正
· 対象タスクが実行状態 , 実行可能状態 , 強制待ち状態 ,
または休止状態
■ ディスパッチ要因
本システムコールを呼び出したタスクより優先度の高いタスクの待ち状態を解除した
場合 , 待ち状態が解除されたタスクにディスパッチします。
メッセージバッファの送信待ちタスクまたは可変長メモリプールのメモリブロック獲
得待ちタスクなどの待ち状態を解除して , そのタスクの優先度が本システムコールを
呼び出したタスクより高い場合 , 待ち状態を解除したタスクにディスパッチします。
■ 解説
tskid で指定されたタスクが待ち状態にある場合 , それを強制的に解除します。
本システムコールは待ち状態解除要求のキューイングは行いません。
本システムコールは , 強制待ち状態の解除は行いません。二重待ち状態のタスクを対象
として本システムコールを呼び出すと , 対象タスクは待ち状態が解除され , 強制待ち状
態となります。強制待ち状態も解除する必要がある場合 , 別に tk_rsm_tsk または
tk_frsm_tsk を呼び出します。本システムコールの対象タスクの状態と実行結果との関
係を表 3.4-3 に示します。
January 31, 2014, CM81-00210-2a
53
第 3 章 システムコールインタフェース
3.4 タスク付属同期機能のシステムコール
Su pp or t
So ft
Manu al
表 3.4-3 tk_rel_wai の対象タスクの状態と実行結果
対象タスクの状態
処理
ercd
実行できる状態 (RUNNING, READY) ( 自タスク以外 )
E_OBJ
何もしない
実行状態 (RUNNING)( 自タスク )
E_OBJ
何もしない
待ち状態 (WAITING)
E_OK
待ち解除 *1
強制待ち状態 (SUSPENDED)
E_OBJ
何もしない
二重待ち状態 (WAITING-SUSPENDED)
E_OK
強制待ち状態に移行 *2
休止状態 (DORMANT)
E_OBJ
何もしない
未登録状態 (NON-EXISTENT)
E_NOEXS
何もしない
*1: 対象タスクには E_RLWAI のエラーが返ります。対象タスクは , 待ち解除の条件が
満たされないまま , 待ち状態が強制的に解除されます。
*2: 強制待ち状態の解除後 , E_RLWAI のエラーで復帰します。
■ 補足事項
あるタスクが待ち状態になって , 一定時間後 , アラームハンドラなどから本システム
コールを呼び出すとタイムアウトに類似した機能を実現できます。
本システムコールと tk_wup_tsk とは , 以下の相違点があります。
表 3.4-4 tk_rel_wai と tk_wup_tsk の相違点
tk_wup_tsk
54
tk_rel_wai
解除できる待ち状態
tk_slp_tsk による起床待ち
状態のみ
すべての待ち状態
待ち解除されたシステム
コールの復帰値
E_OK
E_RLWAI
待ち解除要求のキューイ
ング
キューイングする
キューイングしない
( 対象タスクが待ち状態
以外は , E_OBJ のエラー )
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.4 タスク付属同期機能のシステムコール
Support
3.4.5
Soft
Ma nual
tk_sus_tsk(Suspend Task)
他タスクを強制待ち状態へ移行します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○*
*: ディスパッチ禁止状態で実行状態のタスクを指定して tk_sus_tsk を呼び出した場合
には E_CTX エラーになります。
■ C 言語インタフェース
ER ercd = tk_sus_tsk ( ID tskid ) ;
■ パラメータ
● 入力
tskid
タスク ID (Task ID)
ercd
エラーコード (Error Code)
● 出力
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·tskid が 0 以下または最大タスク数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·tskid のタスクが存在しない
E_OBJ
-41
オブジェクトの状態が不正
· 対象タスクが自タスクまたは休止状態
E_CTX
-25
ディスパッチ禁止状態で実行状態のタスクが指定された
E_QOVR
-43
キューイングまたはネストのオーバフロー
· 強制待ち要求のネスト数が 32767 より大きい
■ ディスパッチ要因
ディスパッチ許可状態で,実行状態のタスクに対してタスク独立部から本システムコー
ルを呼び出した場合 , 次の優先順位のタスクにディスパッチします。
■ 解説
tskid で指定されたタスクを強制待ち状態に移行して , タスクの実行を中断させます。
強制待ち状態は , tk_rsm_tsk, tk_frsm_tsk の呼出しによって解除します。本システムコー
ルの対象タスクが既に待ち状態であった場合 , 本システムコールの実行により , 対象タ
スクは待ち状態と強制待ち状態が複合した二重待ち状態となります。その後 , このタス
クの待ち解除の条件が満たされると対象タスクは強制待ち状態に移行します。一方 , こ
の二重待ち状態のタスクに tk_rsm_tsk または tk_frsm_tsk が呼び出されると対象タスク
は前と同じ待ち状態に戻ります。
January 31, 2014, CM81-00210-2a
55
第 3 章 システムコールインタフェース
3.4 タスク付属同期機能のシステムコール
Su pp or t
So ft
Manu al
あるタスクに複数回の本システムコールが呼び出された場合 , そのタスクは多重の強
制待ち状態になります。これを強制待ち要求のネストとよびます。この場合 , 本システ
ムコールが呼び出された回数 (suscnt) と同じ回数の tk_rsm_tsk システムコールを呼び出
すか , tk_frsm_tsk を 1 回呼び出すことにより , 対象タスクが元の状態に戻ります。した
がって , 本システムコール~ tk_rsm_tsk システムコールの対をネストできます。強制待
ち要求のネスト回数の最大値は 32767 です。
■ 補足事項
あるタスクが資源獲得のための待ち状態 ( セマフォ待ちなど ) で , かつ強制待ち状態の
場合でも , 強制待ち状態でないときと同じ条件によって資源の割当て ( セマフォの割当
てなど ) を行います。強制待ち状態であっても , 資源割当ての遅延などを行うわけでは
なく , 資源割当てや待ち状態の解除に関する条件や優先度は全く変わりません。
対象タスクの実行状態とは関係なく , 処理を中断してタスクの強制待ち状態への移行
を行うため , 本システムコールはシステム全体に悪影響を及ぼす場合があります。この
ため , タスクを強制待ち状態に移行させる場合は注意してください。
56
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.4 タスク付属同期機能のシステムコール
Support
3.4.6
Soft
Ma nual
tk_rsm_tsk(Resume Task)
強制待ち状態のタスクを再開します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_rsm_tsk ( ID tskid ) ;
■ パラメータ
● 入力
tskid
タスク ID (Task ID)
ercd
エラーコード (Error Code)
● 出力
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·tskid が 0 以下または最大タスク数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·tskid のタスクが存在しない
E_OBJ
-41
オブジェクトの状態が不正
· 対象タスクが , 実行状態 , 実行可能状態 , 待ち状態または
休止状態
■ ディスパッチ要因
本システムコールを呼び出したタスクより優先度の高いタスクの強制待ち状態を解除
した場合 , 強制待ち状態が解除されたタスクにディスパッチします。
■ 解説
tskid で指定されたタスクの強制待ち状態を解除します。すなわち , 対象タスクが以前に
呼び出された tk_sus_tsk によって , 強制待ち状態に入りその実行が中断している場合 ,
その状態を解除し実行を再開させます。
対象タスクが待ち状態と強制待ち状態の複合した二重待ち状態の場合 , 本システム
コールの実行により強制待ち状態だけが解除されて対象タスクは待ち状態となりま
す。
本システムコールは , 強制待ち要求のネスト回数を 1 減らします。したがって , 対象タ
スクに 2 回以上の tk_sus_tsk が呼び出されている場合 , 本システムコールの終了後も対象タ
スクはまだ強制待ち状態のままです。
January 31, 2014, CM81-00210-2a
57
第 3 章 システムコールインタフェース
3.4 タスク付属同期機能のシステムコール
Su pp or t
So ft
Manu al
■ 補足事項
本システムコールや tk_frsm_tsk によって , 強制待ち状態のタスクが実行を再開した場
合 , そのタスクは同じ優先度のタスクの中で最低の優先順位となります。例えば , 同じ
優先度の task_A と task_B に以下のシステムコールを実行した場合 , 以下の動作をしま
す。
tk_sta_tsk (tskid = task_A, stacd_A);
tk_sta_tsk (tskid = task_B, stacd_B);
/* この場合 , 優先順位はタスクを起動した順番 , task_A → task_B */
tk_sus_tsk (tskid = task_A);
tk_rsm_tsk (tskid = task_A);
/* この場合 , 優先順位は task_B → task_A となる */
58
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.4 タスク付属同期機能のシステムコール
Support
3.4.7
Soft
Ma nual
tk_frsm_tsk(Force Resume Task)
強制待ち状態のタスクを強制再開します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_frsm_tsk ( ID tskid ) ;
■ パラメータ
● 入力
tskid
タスク ID (Task ID)
ercd
エラーコード (Error Code)
● 出力
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·tskid が 0 以下 , または最大タスク数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·tskid のタスクが存在しない
E_OBJ
-41
オブジェクトの状態が不正
· 対象タスクが , 実行状態 , 実行可能状態 , 待ち状態または
休止状態
■ ディスパッチ要因
システムコールを呼び出したタスクより優先度の高いタスクの強制待ち状態を解除し
た場合 , 強制待ち状態が解除されたタスクにディスパッチします。
■ 解説
tskid で指定されたタスクの強制待ち状態を解除します。
対象タスクが待ち状態と強制待ち状態の複合した二重待ち状態の場合 , 本システム
コールの実行により強制待ち状態だけが解除されて対象タスクは待ち状態となりま
す。
対象タスクに 2 回以上の tk_sus_tsk が呼び出されている場合でも , それらの要求をすべ
て解除します。すなわち , 強制待ち状態は必ず解除されて対象タスクが二重待ち状態で
ない限り実行を再開できます。
January 31, 2014, CM81-00210-2a
59
第 3 章 システムコールインタフェース
3.4 タスク付属同期機能のシステムコール
Su pp or t
So ft
Manu al
■ 補足事項
本システムコールや tk_rsm_tsk によって , 強制待ち状態のタスクが実行を再開した場
合 , そのタスクは同じ優先度のタスクの中で最低の優先順位となります。例えば , 同じ
優先度の task_A と task_B に以下のシステムコールを実行した場合は以下の動作をし
ます。
tk_sta_tsk (tskid = task_A, stacd_A);
tk_sta_tsk (tskid = task_B, stacd_B);
/* この場合 , 優先順位はタスクを起動した順番 , task_A → task_B */
tk_sus_tsk (tskid = task_A);
tk_frsm_tsk (tskid = task_A);
/* この場合に優先順位は task_B → task_A となる */
60
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.4 タスク付属同期機能のシステムコール
Support
3.4.8
Soft
Ma nual
tk_dly_tsk(Delay Task)
自タスクを時間経過待ち状態へ移行します。
タスク部
○
タスク独立部
×
ディスパッチ禁止状態
×
■ C 言語インタフェース
ER ercd = tk_dly_tsk ( RELTIM dlytim ) ;
■ パラメータ
● 入力
dlytim
遅延時間 (Delay Time)
ercd
エラーコード (Error Code)
● 出力
■ エラーコード
E_OK
0
正常終了
E_CTX
-25
コンテキストエラー
· タスク独立部またはディスパッチ禁止状態で実行
E_RLWAI
-49
待ち状態強制解除
· 待ちの間に tk_rel_wai を受け付ける
■ ディスパッチ要因
本システムコールを呼び出したタスクが時間経過待ち状態になった場合 , 次の優先順
位のタスクにディスパッチします。
■ 解説
自タスクの実行を一時的に停止し , 時間経過待ちの状態に入ります。
タスクの実行を停止する時間を dlytim により指定します。dlytim の基準時間 ( 時間の
単位 ) はシステム時刻の基準時間 ( = 1 ms) と同じです。dlytim が 0 の場合 , 何もせず
に E_OK で復帰します。本システムコールを呼び出したタスクが二重待ち状態になっ
ている間も時間経過のカウントを行います。
January 31, 2014, CM81-00210-2a
61
第 3 章 システムコールインタフェース
3.5 同期・通信機能のシステムコール
Su pp or t
3.5
So ft
Manu al
同期・通信機能のシステムコール
同期・通信機能のシステムコールを説明します。
■ 同期・通信機能のシステムコール
同期・通信機能は , 以下の 3 種類の機能のシステムコールで構成されます。
• セマフォ機能のシステムコール
• イベントフラグ機能のシステムコール
• メールボックス機能のシステムコール
62
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.5 同期・通信機能のシステムコール
Support
3.5.1
Soft
Ma nual
セマフォ機能のシステムコール
セマフォ機能のシステムコールを説明します。
■ セマフォ機能のシステムコール
セマフォ機能は , 以下の 5 種類のシステムコールで構成されます。
• tk_cre_sem(Create Semaphore)
• tk_del_sem(Delete Semaphore)
• tk_sig_sem(Signal Semaphore)
• tk_wai_sem(Wait on Semaphore)
• tk_ref_sem(Refer Semaphore Status)
January 31, 2014, CM81-00210-2a
63
第 3 章 システムコールインタフェース
3.5 同期・通信機能のシステムコール
Su pp or t
3.5.1.1
So ft
Manu al
tk_cre_sem(Create Semaphore)
セマフォを生成します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ID semid = tk_cre_sem ( T_CSEM *pk_csem ) ;
typedef struct t_csem {
VP
exinf;
ATR sematr;
INT isemcnt;
INT maxsem;
} T_CSEM;
■ パラメータ
● 入力
セマフォ生成情報を渡すパケットの先頭アドレス
pk_csem
(Packet of Create Semaphore)
● pk_csem に設定するデータ
exinf
拡張情報 (Extended Information)
sematr
セマフォ属性 (Semaphore Attribute)
sematr:= (TA_TFIFO ∥ TA_TPRI) | (TA_FIRST ∥ TA_CNT)
表 3.5-1 tk_cre_sem の sematr で指定できる定数マクロ
属性
値
意味
TA_TFIFO
0x00000000
待ちタスクを FIFO で管理
TA_TPRI
0x00000001
待ちタスクを優先度順で管理
TA_FIRST
0x00000000
待ち行列先頭のタスクを優先
TA_CNT
0x00000002
資源を獲得できるタスクを優先
isemcnt
セマフォカウントの初期値
(Initial Semaphore Count)
maxsem
セマフォカウントの最大値
(Maximum Semaphore Count)
● 出力
semid
セマフォ ID (Semaphore ID)
またはエラーコード (Error Code)
64
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.5 同期・通信機能のシステムコール
Support
Soft
Ma nual
■ エラーコード
E_LIMIT
-34
セマフォの数がシステムの上限より大きい
E_RSATR
-11
予約属性
·sematr に未定義の値が指定された
E_PAR
-17
パラメータエラー
·isemcnt が負または maxsem より大きい
·maxsem が 0 以下
■ ディスパッチ要因
本システムコールでディスパッチは起きません。
■ 解説
セマフォを生成してセマフォ ID 番号を割り当てます。具体的には , セマフォカウント
の初期値が isemcnt, 最大値 ( 上限値 ) が maxsem のセマフォを生成します。
exinf は対象セマフォに関する情報を入れておくためにユーザが自由に使用できます。
ここで指定した情報は , tk_ref_sem で参照できます。ユーザの情報を入れるためにもっ
と大きな領域が必要な場合や , 途中で内容を変更したい場合があれば , ユーザプログラ
ムでそのためのメモリを確保して , そのアドレスを exinf に入れます。なお , OS は exinf
の内容を関知しません。
sematr はセマフォの属性を指定します。TA_TFIFO, TA_TPRI では , タスクがセマフォ
の待ち行列に並ぶ場合の並び方を指定できます。属性が TA_TFIFO の場合はタスクの
待ち行列はFIFO となり, TA_TPRI の場合はタスクの待ち行列はタスクの優先度順とな
ります。
TA_FIRST, TA_CNT では , 資源獲得の優先順を指定します。TA_FIRST および TA_CNT
の指定によって待ち行列の並び順は変わりません。待ち行列の並び順は TA_TFIFO,
TA_TPRI だけで決定します。
TA_FIRST が指定された場合 , 要求カウントに関係なく待ち行列の先頭のタスクから
順に資源を割り当てます。具体的には , 待ち行列の先頭のタスクが要求分の資源を獲得
できない限り , 待ち行列の後ろのタスクは資源を獲得できません。
TA_CNT が指定された場合 , 要求カウント分の資源を獲得できるタスクから順に割り
当てます。具体的には , 待ち行列の先頭のタスクから順に要求カウント数を検査し , 要
求カウント数分の資源を割り当てられるタスクに割り当てます。要求カウント数の少
ない順に割り当てる訳ではありません。
pk_csem が不正な場合でも , エラーチェックを行わず , 動作は保証されません。
January 31, 2014, CM81-00210-2a
65
第 3 章 システムコールインタフェース
3.5 同期・通信機能のシステムコール
Su pp or t
3.5.1.2
So ft
Manu al
tk_del_sem(Delete Semaphore)
セマフォを削除します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_del_sem ( ID semid ) ;
■ パラメータ
● 入力
semid
セマフォ ID (Semaphore ID)
ercd
エラーコード (Error Code)
● 出力
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·semid が 0 以下または最大セマフォ数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·semid のセマフォが存在しない
■ ディスパッチ要因
semid で指定したセマフォを削除したことにより , 本システムコールを呼び出したタス
クより優先度の高いタスクの待ち状態が解除された場合 , 待ち状態が解除されたタス
クにディスパッチします。
■ 解説
semid で指定されたセマフォを削除します。具体的には , 対象セマフォを未生成状態に
して ID 番号を解放します。
セマフォ待ち状態のタスクが存在していた場合 , 本システムコールはセマフォを削除
し , 正常終了します。待ち状態のタスクは tk_wai_sem が E_DLT のエラーで復帰し , 待
ち状態が解除されます。
66
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.5 同期・通信機能のシステムコール
Support
3.5.1.3
Soft
Ma nual
tk_sig_sem(Signal Semaphore)
セマフォ資源を返却します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_sig_sem ( ID semid, INT cnt ) ;
■ パラメータ
● 入力
semid
セマフォ ID (Semaphore ID)
cnt
資源返却数 (Signal Count)
ercd
エラーコード (Error Code)
● 出力
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·semid が 0 以下または最大セマフォ数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·semid のセマフォが存在しない
E_QOVR
-43
キューイングまたはネストのオーバフロー
· セマフォ資源数がセマフォ資源の最大値を超えた
E_PAR
-17
パラメータエラー
·cnt が 0 以下
■ ディスパッチ要因
本システムコールを呼び出したタスクより優先度の高いタスクのセマフォ待ち状態を
解除した場合 , 待ち状態が解除されたタスクにディスパッチします。
■ 解説
semid で指定されたセマフォに cnt 個のセマフォ資源を返却する操作を行います。
対象セマフォにセマフォ待ちタスクがある場合 , 資源返却後の資源数が資源要求数よ
りも多ければ , 資源を割り当てます。資源が割り当てられたタスクを実行可能状態に移
します。複数のタスクが要求する資源数の総和以上に資源が返却された場合 , 複数のタ
スクに資源が割り当てられて実行可能状態になります。
January 31, 2014, CM81-00210-2a
67
第 3 章 システムコールインタフェース
3.5 同期・通信機能のシステムコール
Su pp or t
So ft
Manu al
■ 補足事項
セマフォ資源数 (semcnt) がセマフォ資源の初期値 (isemcnt) より大きい場合 , 正常終了
します。排他制御ではなく , 同期の目的 (tk_wup_tsk ~ tk_slp_tsk と同様 ) でセマフォを
使用する場合 , セマフォ資源数 (semcnt) を初期値 (isemcnt) より大きくする場合があり
ます。一方 , 排他制御の目的でセマフォを使用する場合 , セマフォ資源の初期値
(isemcnt) とセマフォ資源の最大値 (maxsem) を等しい値にしておくことにより , セマ
フォ資源数の増加によるエラーをチェックできます。
68
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.5 同期・通信機能のシステムコール
Support
3.5.1.4
Soft
Ma nual
tk_wai_sem(Wait on Semaphore)
セマフォ資源を獲得します。
タスク部
○
タスク独立部
×
ディスパッチ禁止状態
×
■ C 言語インタフェース
ER ercd = tk_wai_sem ( ID semid, INT cnt, TMO tmout ) ;
■ パラメータ
● 入力
semid
セマフォ ID (Semaphore ID)
cnt
資源要求数 (Require Count)
tmout
タイムアウト指定 (Timeout)
0 から 0x7fffffff の数値 , および以下のマクロが指定可能
表 3.5-2 tk_wai_sem の tmout で指定できる定数マクロ
名前
値
意味
TMO_FEVR
-1
永久待ち
TMO_POL
0
ポーリング
● 出力
ercd
エラーコード (Error Code)
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·semid が 0 以下または最大セマフォ数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·semid のセマフォが存在しない
E_PAR
-17
パラメータエラー
·tmout が -2 以下
·cnt が 0 以下
E_DLT
-51
待ちオブジェクトが削除された
· 待ちの間に対象セマフォを削除
E_RLWAI
-49
待ち状態強制解除
· 待ちの間に tk_rel_wai を受け付ける
January 31, 2014, CM81-00210-2a
69
第 3 章 システムコールインタフェース
3.5 同期・通信機能のシステムコール
Su pp or t
E_TMOUT
-50
So ft
Manu al
ポーリング失敗またはタイムアウト
·tmout の時間経過により待ち状態が解除された
·tmout が TMO_POL で , 資源が獲得できない
E_CTX
-25
コンテキストエラー
· タスク独立部またはディスパッチ禁止状態で実行
■ ディスパッチ要因
本システムコールを呼び出したタスクがセマフォ待ち状態になった場合 , 次の優先順
位のタスクにディスパッチします。
■ 解説
semid で指定されたセマフォから cnt 個の資源を獲得します。
tmout により待ち時間の最大値 ( タイムアウト値 ) を指定できます。tmout の基準時間
( 時間の単位 ) はシステム時刻の基準時間 ( = 1 ms) と同じです。
TMO_FEVR は , タイムアウトまでの時間が無限大であることを示します。TMO_FEVR
を指定される場合 , 資源の獲得または tk_rel_wai が呼び出されるまで待ち状態になりま
す。TMO_POL を指定される場合 , 資源を獲得できなければ待ち状態には移行せずに
E_TMOUT のエラーで復帰します。
資源を獲得した場合 , 本システムコールの呼出しタスクは待ち状態に入らずに実行を
継続します。この場合 , そのセマフォ資源数を cnt 分減算します。
資源が獲得できない場合 , 本システムコールを呼び出したタスクは待ち状態に入りま
す。すなわち , そのセマフォに対する待ち行列につながれます。この場合 , そのセマ
フォ資源数は増減しません。
70
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.5 同期・通信機能のシステムコール
Support
3.5.1.5
Soft
Ma nual
tk_ref_sem(Refer Semaphore Status)
セマフォの状態を参照します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_ref_sem ( ID semid, T_RSEM *pk_rsem ) ;
typedef struct t_rsem {
VP
exinf;
ID
wtsk;
INT semcnt;
} T_RSEM;
■ パラメータ
● 入力
semid
セマフォ ID (Semaphore ID)
pk_rsem
セマフォの状態を返すパケットアドレス
(Packet of Refer Semaphore)
● 出力
ercd
エラーコード (Error Code)
● pk_rsem に返されるデータ
exinf
拡張情報 (Extended Information)
wtsk
待ちタスクの有無 (Wait Task)
semcnt
現在のセマフォカウント値 (Semaphore Count)
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·semid が 0 以下または最大セマフォ数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·semid のセマフォが存在しない
■ ディスパッチ要因
本システムコールでディスパッチは起きません。
January 31, 2014, CM81-00210-2a
71
第 3 章 システムコールインタフェース
3.5 同期・通信機能のシステムコール
Su pp or t
So ft
Manu al
■ 解説
semid で指定された対象セマフォの各種状態を参照して , 復帰値として現在のセマフォ
資源数 (semcnt), 待ちタスクの有無 (wtsk), 拡張情報 (exinf) を返します。
wtsk は , このセマフォで待っているタスクの ID を示します。複数のタスクが待ってい
る場合 , 待ち行列の先頭タスクの ID を返します。待ちタスクがない場合 , 0 を返します。
pk_rsem が不正な場合でも , エラーチェックを行わず , 動作は保証されません。
72
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.5 同期・通信機能のシステムコール
Support
3.5.2
Soft
Ma nual
イベントフラグ機能のシステムコール
イベントフラグ機能のシステムコールを説明します。
■ イベントフラグ機能のシステムコール
イベントフラグ機能は , 以下の 6 種類のシステムコールで構成されます。
• tk_cre_flg(Create Event Flag)
• tk_del_flg(Delete Event Flag)
• tk_set_flg(Set Event Flag)
• tk_clr_flg(Clear Event Flag)
• tk_wai_flg(Wait Event Flag)
• tk_ref_flg(Refer Event Flag Status)
January 31, 2014, CM81-00210-2a
73
第 3 章 システムコールインタフェース
3.5 同期・通信機能のシステムコール
Su pp or t
3.5.2.1
So ft
Manu al
tk_cre_flg(Create Event Flag)
イベントフラグを生成します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ID flgid = tk_cre_flg ( T_CFLG *pk_cflg ) ;
typedef struct t_cflg {
VP
exinf;
ATR
flgatr;
UINT
iflgptn;
} T_CFLG;
■ パラメータ
● 入力
イベントフラグの状態を返すパケットアドレス
pk_cflg
(Packet of Refer Event Flag)
● pk_cflg に設定するデータ
exinf
拡張情報 (Extended Information)
flgatr
イベントフラグ属性 (Event Flag Attribute)
flgatr := (TA_TFIFO ∥ TA_TPRI) | (TA_WMUL ∥ TA_WSGL)
表 3.5-3 tk_cre_flg の flgatr で指定できる定数マクロ
属性
値
意味
TA_TFIFO
0x00000000
待ちタスクを FIFO で管理
TA_TPRI
0x00000001
待ちタスクを優先度順で管理
TA_WSGL
0x00000000
複数タスクの待ちを禁止
TA_WMUL
0x00000008
複数タスクの待ちを許可
iflgptn
イベントフラグの初期値
(Initial Event Flag Pattern)
● 出力
flgid
イベントフラグ ID (Event Flag ID)
またはエラーコード (Error Code)
74
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.5 同期・通信機能のシステムコール
Support
Soft
Ma nual
■ エラーコード
E_LIMIT
-34
イベントフラグの数がシステムの上限より大きい
E_RSATR
-11
予約属性
·flgatr に未定義の値が指定された
■ ディスパッチ要因
本システムコールでディスパッチは起きません。
■ 解説
イベントフラグを生成して , イベントフラグ ID 番号を割り当てます。具体的には , 初
期値が iflgptn のイベントフラグを生成します。
exinf は , 対象イベントフラグに関する情報を入れておくためにユーザが自由に利用で
きます。ここで指定した情報を tk_ref_flg で参照できます。ユーザの情報を入れるため
にもっと大きな領域が必要な場合や , 途中で内容を変更したい場合があれば , ユーザプ
ログラムでそのためのメモリを確保し , そのアドレスを exinf に入れます。なお , OS で
は exinf の内容については関知しません。
flgatr はイベントフラグの属性を指定します。
flgatr に TA_WSGL が指定された場合 , 複数のタスクが同時に待ち状態になることを禁
止します。TA_WMUL が指定された場合 , 同時に複数のタスクが待ち状態となります。
TA_TFIFO, TA_TPRI では , タスクがイベントフラグの待ち行列に並ぶ場合の並び方を
指定できます。TA_TFIFO の場合 , タスクの待ち行列は FIFO となり , TA_TPRI の場合 ,
タスクの待ち行列はタスクの優先度順となります。ただし , TA_WSGL が指定された場
合は待ち行列を作らないため , TA_TFIFO, TA_TPRI のどちらを指定しても動作に違い
はありません。
複数のタスクが待っている場合 , 待ち行列の先頭から順に待ち条件が成立しているか
を検査して , 待ち条件が成立しているタスクの待ちを解除します。したがって , 待ち行
列先頭のタスクを必ずしも最初に待ち解除する訳ではありません。また , 待ち条件が成
立したタスクが複数ある場合 , 複数のタスクの待ちを解除します。
pk_cflg が不正な場合でも , エラーチェックを行わず , 動作は保証されません。
January 31, 2014, CM81-00210-2a
75
第 3 章 システムコールインタフェース
3.5 同期・通信機能のシステムコール
Su pp or t
3.5.2.2
So ft
Manu al
tk_del_flg(Delete Event Flag)
イベントフラグを削除します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_del_flg ( ID flgid ) ;
■ パラメータ
● 入力
flgid
イベントフラグ ID (Event Flag ID)
ercd
エラーコード (Error Code)
● 出力
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·flgid が 0 以下または最大フラグ数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·flgid のイベントフラグが存在しない
■ ディスパッチ要因
flgid で指定したイベントフラグを削除したことにより , 本システムコールを呼び出し
たタスクより優先度の高いタスクの待ち状態が解除された場合 , 待ち状態が解除され
たタスクにディスパッチします。
■ 解説
flgid で指定されたイベントフラグを削除します。具体的には , 対象イベントフラグを
未生成状態にして ID 番号を解放します。
対象イベントフラグで条件成立を待っているタスクがある場合 , 本システムコールは
正常終了しますが , 待ち状態のタスクは tk_wai_flg が E_DLT のエラーで復帰します。
76
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.5 同期・通信機能のシステムコール
Support
3.5.2.3
Soft
Ma nual
tk_set_flg(Set Event Flag)
イベントフラグをセットします。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_set_flg ( ID flgid, UINT setptn ) ;
■ パラメータ
● 入力
flgid
イベントフラグ ID (Event Flag ID)
setptn
セットするビットパターン (Set Bit Pattern)
ercd
エラーコード (Error Code)
● 出力
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·flgid が 0 以下または最大フラグ数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·flgid のイベントフラグが存在しない
■ ディスパッチ要因
本システムコールを呼び出したタスクより優先度の高いタスクのイベントフラグ待ち
状態を解除した場合 , 待ち状態が解除されたタスクにディスパッチします。
■ 解説
本システムコールは , flgid で指定されたイベントフラグへ setptn で示されているビッ
トをセットします。すなわち , flgid で指定されたイベントフラグの値に setptn の値で
論理和をとります。
本システムコールによりイベントフラグの値を変更し , tk_wai_flg で待っていたタスク
の待ち解除の条件を満たしていれば , そのタスクの待ち状態を解除します。その結果 ,
待っていたタスクは実行状態または実行可能状態に移行します。ただし , 待っていたタ
スクが二重待ち状態の場合 , 強制待ち状態へと移行します。
本システムコールで setptn の全ビットを 0 とした場合 , 対象イベントフラグに何の操作
も行わずに正常終了します。
TA_WMUL の属性のイベントフラグは , 同一のイベントフラグに複数のタスクを同時
に待てます。したがって , イベントフラグでもタスクが待ち行列を作ります。この場
合 , 1 回の本システムコールで複数のタスクが待ち解除になる場合があります。
January 31, 2014, CM81-00210-2a
77
第 3 章 システムコールインタフェース
3.5 同期・通信機能のシステムコール
Su pp or t
3.5.2.4
So ft
Manu al
tk_clr_flg(Clear Event Flag)
イベントフラグをクリアします。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_clr_flg ( ID flgid, UINT clrptn ) ;
■ パラメータ
● 入力
flgid
イベントフラグ ID (Event Flag ID)
clrptn
クリアするビットパターン (Clear Bit Pattern)
ercd
エラーコード (Error Code)
● 出力
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·flgid が 0 以下または最大フラグ数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·flgid のイベントフラグが存在しない
■ ディスパッチ要因
本システムコールでディスパッチは起きません。
■ 解説
本システムコールは , flgid で指定されたイベントフラグの値に clrptn が 0 になっている
ビットをクリアします。すなわち , flgid で指定されたイベントフラグの値に clrptn の値
で論理積をとります。
本システムコールでは , 対象イベントフラグを待っているタスクの待ち状態を解除し
ません。
本システムコールで clrptn の全ビットを 1 とした場合 , 対象イベントフラグに何の操作
も行いません。ただし , この場合でも正常終了します。
78
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.5 同期・通信機能のシステムコール
Support
3.5.2.5
Soft
Ma nual
tk_wai_flg(Wait Event Flag)
イベントフラグを待ちます。
タスク部
○
タスク独立部
×
ディスパッチ禁止状態
×
■ C 言語インタフェース
ER ercd = tk_wai_flg ( ID flgid, UINT waiptn, UINT wfmode, UINT
*p_flgptn, TMO tmout ) ;
■ パラメータ
● 入力
flgid
イベントフラグ ID (Event Flag ID)
waiptn
待ちビットパターン (Wait Bit Pattern)
wfmode
待ちモード (Wait Event Flag Mode)
wfmode := (TWF_ANDW ∥ TWF_ORW) | [TWF_CLR ∥ TWF_BITCLR]
表 3.5-4 tk_wai_flg の wfmode で指定できる定数マクロ
モード
値
意味
TWF_ANDW
0x00
AND 待ち
TWF_ORW
0x01
OR 待ち
TWF_CLR
0x10
全ビットクリア指定
TWF_BITCLR
0x20
条件ビットだけをクリア指定
tmout
タイムアウト指定 (Timeout)
0 から 0x7fffffff の数値 , および以下のマクロが指定可能
表 3.5-5 tk_wai_flg の tmout で指定できる定数マクロ
名前
値
意味
TMO_FEVR
-1
永久待ち
TMO_POL
0
ポーリング
● 出力
ercd
エラーコード (Error Code)
p_flgptn
待ち解除時のビットパターン (Event Flag Bit Pattern)
January 31, 2014, CM81-00210-2a
79
第 3 章 システムコールインタフェース
3.5 同期・通信機能のシステムコール
Su pp or t
So ft
Manu al
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·flgid が 0 以下または最大フラグ数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·flgid のイベントフラグが存在しない
E_PAR
-17
パラメータエラー
·waiptn が 0
·wfmode に TWF_ANDW, TWF_ORW, TWF_CLR,
TWF_BITCLR 以外の値が設定されている
·tmout が -2 以下
E_OBJ
-41
オブジェクトの状態が不正
·TA_WSGL 属 性 の イ ベ ン ト フ ラ グ に 対 す る 複 数 タ ス ク の 待
ち
E_DLT
-51
待ちオブジェクトが削除された
· 待ちの間に対象イベントフラグを削除
E_RLWAI
-49
待ち状態強制解除
· 待ちの間に tk_rel_wai を受け付ける
E_TMOUT
-50
ポーリング失敗またはタイムアウト
·tmout の時間経過により待ち状態が解除された
·tmout が TMO_POL で , 待ち解除の条件を満たしていない
E_CTX
-25
コンテキストエラー
· タスク独立部またはディスパッチ禁止状態で実行
■ ディスパッチ要因
本システムコールを呼び出したタスクがイベントフラグ待ち状態になった場合 , 次の
優先順位のタスクにディスパッチします。
■ 解説
本システムコールでは , wfmode で指定された待ち解除の条件に従って , flgid で指定さ
れたイベントフラグがセットされるのを待ちます。
flgid で指定されたイベントフラグが既に wfmode で指定された待ち解除条件を満たし
ている場合 , 呼び出したタスクは待ち状態にならずに実行を続けます。wfmode には ,
以下の 4 種類の待ちモードを指定できます。
• TWF_ORW:
flgid で指定されたイベントフラグに , waiptn で指定されたビットの
いずれかがセットされるのを待ちます (OR 待ち )。
• TWF_ANDW: flgid で指定されたイベントフラグに , waiptn で指定されたビットの
すべてがセットされるのを待ちます (AND 待ち )。
• TWF_CLR :
条件が満足されてこのタスクが待ち解除となった場合 , イベントフ
ラグの値 ( 全部のビット ) を 0 にクリアします (TWF_CLR の指定あ
り )。条件が満足されてこのタスクが待ち解除となった場合 , イベ
ントフラグの値はそのままです (TWF_CLR の指定なし )。
80
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.5 同期・通信機能のシステムコール
Support
Soft
Ma nual
• TWF_BITCLR: 条件が満足されてこのタスクが待ち解除となった場合 , イベントフ
ラグの待ち解除条件に一致したビットだけを 0 に クリアします
( イベントフラグ値 &= ~ 待ち解除条件 ) 。
p_flgptn には , 待ち状態を解除するときのイベントフラグの値 (flgptn) を設定する領域
のアドレスを指定します。TWF_CLR または TWF_BITCLR 指定の場合 , flgptn の値は
イベントフラグがクリアされる前の値です。つまり , flgptn に返る値は待ち解除の条件
を満たしています。
なお , タイムアウト , tk_rel_wai または tk_del_flg により待ちが解除されると flgptn は不
定となります。
tmout により , 待ち時間の最大値 ( タイムアウト値 ) を指定できます。TMO_FEVR は ,
タイムアウトまでの時間が無限大であることを示します。TMO_FEVR を指定される場
合 , 条件成立または tk_rel_wai が呼び出されるまで待ち状態になります。TMO_POL を
指定される場合 , 条件成立できなければ待ち状態には移行せずに E_TMOUT のエラー
で復帰します。
タイムアウトした場合は , TWF_CLR または TWF_BITCLR の指定があってもイベント
フラグをクリアしません。
tmout の基準時間 ( 時間の単位 ) はシステム時刻の基準時間 ( = 1 ms) と同じです。
TA_WSGL 属性のイベントフラグで既に待ちタスクの存在する場合 , 別のタスクで本
システムコールを実行できません。この場合は , 後から本システムコールを実行したタ
スクが待ち状態に入るかどうか ( 待ち解除条件が満たされているかどうか ) にかかわら
ず , 後から本システムコールを実行したタスクは E_OBJ のエラーで復帰します。
一方, TA_WMUL 属性のイベントフラグは, 同一のイベントフラグに複数のタスクを同
時に待ち状態に移行できます。したがって , イベントフラグでもタスクが待ち行列を作
ります。複数タスクが待ち状態の場合 , 1 回の tk_set_flg で条件成立することで複数の
タスクが待ち解除される場合があります。
TA_WMUL 属性のイベントフラグに複数のタスクが待ち行列を作った場合 , 以下の動
作をします。
• 待ち行列の順番は FIFO またはタスク優先度順です ( ただし , waiptn や wfmode との
関係により , 必ずしも行列先頭のタスクから待ち解除になるとは限りません )。
• 待ち行列中にクリア指定のタスクがある場合 , そのタスクが待ち解除になるときに
フラグをクリアします。
• クリア指定を行っていたタスクよりも後ろの待ち行列にあったタスクは , クリアさ
れた後のイベントフラグを確認します。
tk_set_flg によって同じ優先度の複数のタスクが同時に待ち解除となる場合 , 待ち解除
後のタスクの優先順位は元のイベントフラグの待ち行列の順序を保持します。
p_flgptn が不正な場合でも , エラーチェックを行わず , 動作は保証されません。
January 31, 2014, CM81-00210-2a
81
第 3 章 システムコールインタフェース
3.5 同期・通信機能のシステムコール
Su pp or t
So ft
Manu al
■ 補足事項
本システムコールの待ち解除条件として全ビットの論理和を指定すると (waiptn =
0xffffffff, wfmode = TWF_ORW), tk_set_flg との組合せにより , CPU のビット幅分のビッ
トパターンによるメッセージ転送ができます。ただし , この場合 , 全部のビットが 0 の
メッセージは送れません。また , 前のメッセージが本システムコールで読み出される前
にtk_set_flgにより次のメッセージが送られると, 前のメッセージは消えてしまいます。
すなわち , メッセージのキューイングはできません。waiptn = 0 の指定は E_PAR のエ
ラーになるので , イベントフラグで待つタスクの waiptn が 0 でないことを保証してい
ます。したがって , tk_set_flg で全ビットをセットすると , どの条件でイベントフラグを
待つタスクであっても , 待ち行列の先頭にあるタスクは必ず待ち解除となります。
82
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.5 同期・通信機能のシステムコール
Support
3.5.2.6
Soft
Ma nual
tk_ref_flg(Refer Event Flag Status)
イベントフラグの状態を参照します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_ref_flg ( ID flgid, T_RFLG *pk_rflg ) ;
typedef struct t_rflg {
VP
exinf;
ID
wtsk;
UINT
flgptn;
} T_RFLG;
■ パラメータ
● 入力
flgid
イベントフラグ ID (Event Flag ID)
pk_rflg
イベントフラグの状態を返すパケットの先頭アドレス
(Packet of Refer Event Flag)
● 出力
ercd
エラーコード (Error Code)
● pk_rflg に返されるデータ
exinf
拡張情報 (Extended Information)
wtsk
待ちタスクの有無 (Wait Task)
flgptn
イベントフラグのビットパターン
(Event Flag Bit Pattern)
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·flgid が 0 以下または最大フラグ数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·flgid のイベントフラグが存在しない
■ ディスパッチ要因
本システムコールでディスパッチは起きません。
January 31, 2014, CM81-00210-2a
83
第 3 章 システムコールインタフェース
3.5 同期・通信機能のシステムコール
Su pp or t
So ft
Manu al
■ 解説
flgid で指定された対象イベントフラグの各種の状態を参照し , 復帰値として現在のフ
ラグ値 (flgptn), 待ちタスクの有無 (wtsk), 拡張情報 (exinf) を返します。
wtsk は , このイベントフラグで待っているタスクの ID を設定します。このイベントフ
ラグで複数のタスクが待っている場合 (TA_WMUL 属性の場合 ) 待ち行列の先頭タスク
の ID を返します。待ちタスクがない場合 , 0 を返します。
pk_rflg が不正な場合でも , エラーチェックを行わず , 動作は保証されません。
84
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.5 同期・通信機能のシステムコール
Support
3.5.3
Soft
Ma nual
メールボックス機能のシステムコール
メールボックス機能のシステムコールを説明します。
■ メールボックス機能のシステムコール
メールボックス機能は , 以下の 5 種類のシステムコールで構成されます。
• tk_cre_mbx(Create Mailbox)
• tk_del_mbx(Delete Mailbox)
• tk_snd_mbx(Send Message to Mailbox)
• tk_rcv_mbx(Receive Message from Mailbox)
• tk_ref_mbx(Refer Mailbox Status)
January 31, 2014, CM81-00210-2a
85
第 3 章 システムコールインタフェース
3.5 同期・通信機能のシステムコール
Su pp or t
3.5.3.1
So ft
Manu al
tk_cre_mbx(Create Mailbox)
メールボックスを作成します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ID mbxid = tk_cre_mbx ( T_CMBX* pk_cmbx ) ;
typedef struct t_cmbx {
VP
exinf;
ATR mbxatr;
} T_CMBX;
■ パラメータ
● 入力
メールボックス生成情報 (Packet of Create Mailbox)
pk_cmbx
● pk_cmbx に設定するデータ
exinf
拡張情報 (Extended Information)
mbxatr
メールボックス属性 (Mailbox Attribute)
mbxatr:= (TA_TFIFO ∥ TA_TPRI) | (TA_MFIFO ∥ TA_MPRI)
表 3.5-6 tk_cre_mbx の mbxatr で指定できる定数マクロ
属性
値
意味
TA_TFIFO
0x00000000
待ちタスクを FIFO で管理
TA_TPRI
0x00000001
待ちタスクを優先度順で管理
TA_MFIFO
0x00000000
メッセージを FIFO で管理
TA_MPRI
0x00000002
メッセージを優先度順で管理
● 出力
mbxid
メールボックス ID (Mailbox ID)
またはエラーコード (Error Code)
■ エラーコード
E_LIMIT
-34
メールボックスの数がシステムの上限より大きい
E_RSATR
-11
予約属性
·mbxatr に未定義の値が指定された
■ ディスパッチ要因
本システムコールでディスパッチは起きません。
86
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.5 同期・通信機能のシステムコール
Support
Soft
Ma nual
■ 解説
メールボックスを生成しメールボックス ID 番号を割り当てます。
exinf は , 対象メールボックスに関する情報を入れておくためにユーザが自由に使用で
きます。ここで指定した情報を tk_ref_mbx で参照できます。ユーザの情報を入れるた
めにもっと大きな領域が必要な場合や , 途中で内容を変更したい場合があれば , ユーザ
プログラムでそのためのメモリを確保して , そのアドレスを exinf に入れます。なお ,
OS は exinf の内容を関知しません。
mbxatr はメールボックスの属性を指定します。
TA_TFIFO, TA_TPRI で , メッセージを受信するタスクがメールボックスの待ち行列に
並ぶ際の並び方を指定できます。属性が TA_TFIFO の場合 , タスクの待ち行列は FIFO
となり , TA_TPRI の場合 , タスクの待ち行列はタスクの優先度順となります。
一方 , TA_MFIFO, TA_MPRI で , メッセージがメッセージキュー ( 受信するのを待つ
メッセージの待ち行列 ) に入る際の並び方を指定できます。TA_MFIFO の場合 , メッ
セージキューは FIFO となり , TA_MPRI の場合 , メッセージキューはメッセージの優
先度順となります。メッセージの優先度は , メッセージパケット内の msgpri で指定し
ます (「3.5.3.3 tk_snd_mbx(Send Message to Mailbox)」を参照 )。メッセージ優先度は正
の値で , 1 が最も優先度が高く , 数値が大きくなるほど優先度は低くなります。PRI 型
で表せる最大の正の値が最も低い優先度となります。同一優先度の場合は FIFO とな
ります。
pk_cmbx が不正な場合でも , エラーチェックを行わず , 動作は保証されません。
January 31, 2014, CM81-00210-2a
87
第 3 章 システムコールインタフェース
3.5 同期・通信機能のシステムコール
Su pp or t
3.5.3.2
So ft
Manu al
tk_del_mbx(Delete Mailbox)
メールボックスを削除します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_del_mbx ( ID mbxid ) ;
■ パラメータ
● 入力
mbxid
メールボックス ID (Mailbox ID)
ercd
エラーコード (Error Code)
● 出力
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·mbxid が 0 以下または最大メールボックス数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·mbxid のメールボックスが存在しない
■ ディスパッチ要因
mbxid で指定したメールボックスを削除したことにより , 本システムコールを呼び出し
たタスクより優先度の高いタスクの待ち状態が解除された場合 , 待ち状態が解除され
たタスクにディスパッチします。
■ 解説
mbxid で指定されたメールボックスを削除します。具体的には , 対象メールボックスを
未生成状態にして ID 番号を解放します。
対象メールボックスでメッセージを待っているタスクがあった場合 , 本システムコー
ルは正常終了しますが , tk_rcv_mbx で待ち状態にあるタスクは E_DLT のエラーで復帰
します。
88
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.5 同期・通信機能のシステムコール
Support
3.5.3.3
Soft
Ma nual
tk_snd_mbx(Send Message to Mailbox)
メールボックスへ送信します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_snd_mbx ( ID mbxid, T_MSG *pk_msg ) ;
typedef struct t_msg {
VP
msgque[1];
} T_MSG;
typedef struct t_msg_pri {
T_MSG
msgque;
PRI
msgpri;
} T_MSG_PRI;
■ パラメータ
● 入力
mbxid
メールボックス ID (Mailbox ID)
pk_msg
メッセージパケットの先頭アドレス
(Packet of Message)
● pk_msg に設定するデータ
msgque
メッセージキュー用 OS 予約領域
msgpri
メッセージ優先度 (Message priority)
● 出力
ercd
エラーコード (Error Code)
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·mbxid が 0 以下または最大メールボックス数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·mbxid のメールボックスが存在しない
E_PAR
-17
パラメータエラー
· 対象メールボックスがメッセージ優先順で msgpri が 0 以下
January 31, 2014, CM81-00210-2a
89
第 3 章 システムコールインタフェース
3.5 同期・通信機能のシステムコール
Su pp or t
So ft
Manu al
■ ディスパッチ要因
本システムコールを呼び出したタスクより優先度の高いタスクのメッセージ待ち状態
を解除した場合 , 待ち状態が解除されたタスクにディスパッチします。
■ 解説
mbxid で指定された対象メールボックスに , pk_msg を先頭アドレスとするメッセージ
パケットを送信します。
メッセージパケットの内容をコピーせず , 受信時には先頭アドレス (pk_msg の値 ) だけ
を渡します。対象メールボックスで既にメッセージを待っているタスクがある場合 , 待
ち行列の先頭タスクの待ち状態が解除されて , 本システムコールで指定された pk_msg
がそのタスクに送信されて tk_rcv_mbx の復帰値となります。一方 , 対象メールボック
スでメッセージを待っているタスクがない場合 , 送信されたメッセージはメールボッ
クスの中のメッセージキュー ( メッセージの待ち行列 ) に入れられます。どちらの場合
も , 本システムコールを呼び出したタスクは待ち状態とはなりません。pk_msg はメッ
セージヘッダをも含めたメッセージパケットの先頭アドレスです。
TA_MFIFO の場合は T_MSG 型 , TA_MPRI の場合は T_MSG_PRI 型のメッセージヘッ
ダを使用してください。TA_MPRI 属性のメールボックスに対して T_MSG のメッセー
ジヘッダを使用した場合は msgpri のフィールドがないため , 動作は保証されません。
また , メッセージヘッダのサイズは固定長で , sizeof(T_MSG) または sizeof(T_MSG_PRI)
で獲得します。実際にメッセージを格納できるのは , メッセージヘッダより後ろの領域
となります。メッセージ本体部分のサイズには制限はありません。
pk_msg が不正な場合でも , エラーチェックを行わず , 動作は保証されません。
■ 補足事項
本システムコールによるメッセージ送信は , 受信側のタスクの状態とは無関係です。す
なわち , 非同期のメッセージ送信を行います。待ち行列につながれるのは , そのタスク
が呼び出したメッセージであって , タスクそのものではありません。すなわち , メッ
セージの待ち行列 ( メッセージキュー ) や受信タスクの待ち行列は存在しますが , 送信
タスクの待ち行列は存在しません。
90
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.5 同期・通信機能のシステムコール
Support
3.5.3.4
Soft
Ma nual
tk_rcv_mbx(Receive Message from Mailbox)
メールボックスから受信します。
タスク部
○
タスク独立部
×
ディスパッチ禁止状態
×
■ C 言語インタフェース
ER ercd = tk_rcv_mbx ( ID mbxid, T_MSG **ppk_msg, TMO tmout ) ;
typedef struct t_msg {
VP
msgque[1];
} T_MSG;
typedef struct t_msg_pri {
T_MSG
msgque;
PRI
msgpri;
} T_MSG_PRI;
■ パラメータ
● 入力
mbxid
メールボックス ID (Mailbox ID)
ppk_msg
メッセージパケットの先頭アドレスを返す変数の
アドレス (Packet of Message)
tmout
タイムアウト指定 (Timeout)
0 から 0x7fffffff の数値 , および以下のマクロが指定可能
表 3.5-7 tk_rcv_mbx の tmout で指定できる定数マクロ
名前
値
意味
TMO_FEVR
-1
永久待ち
TMO_POL
0
ポーリング
● 出力
ercd
エラーコード (Error Code)
● ppk_msg に返されるデータ
msgque
メッセージキュー用 OS 予約領域
msgpri
メッセージ優先度 (Message priority)
January 31, 2014, CM81-00210-2a
91
第 3 章 システムコールインタフェース
3.5 同期・通信機能のシステムコール
Su pp or t
So ft
Manu al
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·mbxid が 0 以下または最大メールボックス数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·mbxid のメールボックスが存在しない
E_PAR
-17
パラメータエラー
·tmout が -2 以下
E_DLT
-51
待ちオブジェクトが削除された
· 待ちの間に対象メールボックスを削除
E_RLWAI
-49
待ち状態強制解除
· 待ちの間に tk_rel_wai を受け付ける
E_TMOUT
-50
ポーリング失敗またはタイムアウト
·tmout の時間経過により待ち状態が解除された
·tmout が TMO_POL で , メールボックスにメッセージが
存在しない
E_CTX
-25
コンテキストエラー
· タスク独立部またはディスパッチ禁止状態で実行
■ ディスパッチ要因
本システムコールを呼び出したタスクがメッセージ待ち状態になった場合 , 次の優先
順位のタスクにディスパッチします。
■ 解説
本システムコールでは , mbxid で指定されたメールボックスからメッセージを受信し
ます。
tmout により , 待ち時間の最大値 ( タイムアウト値 ) を指定できます。TMO_FEVR は ,
タイムアウトまでの時間が無限大であることを示します。この場合は , メッセージの到
着または tk_rel_wai が呼び出されるまで待ち状態になります。TMO_POL を指定される
場合 , メッセージが到着していなければ , E_TMOUT のエラーで復帰します。
tmout の基準時間 ( 時間の単位 ) はシステム時刻の基準時間 ( = 1 ms) と同じです。
対象メールボックスにまだメッセージが送信されていない場合 ( メッセージキューが
空の場合 ), 本システムコールを呼び出したタスクは待ち状態となり , メッセージの到
着を待つ待ち行列につながれます。一方 , 対象メールボックスに既にメッセージが入っ
ている場合 , メッセージキューの先頭にあるメッセージを 1 つ取り出して , それを復帰
値 ppk_msg とします。
ppk_msg が不正な場合でも , エラーチェックを行わず , 動作は保証されません。
■ 補足事項
ppk_msg はメッセージヘッダを含めたメッセージパケットの先頭アドレスです。
TA_MFIFO の場合は T_MSG 型 , TA_MPRI の場合は T_MSG_PRI 型のメッセージヘッ
ダを使用します。
92
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.5 同期・通信機能のシステムコール
Support
3.5.3.5
Soft
Ma nual
tk_ref_mbx(Refer Mailbox Status)
メールボックスの状態を参照します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_ref_mbx ( ID mbxid, T_RMBX *pk_rmbx ) ;
typedef struct t_rmbx {
VP
exinf;
ID
wtsk;
T_MSG
*pk_msg;
} T_RMBX;
■ パラメータ
● 入力
mbxid
メールボックス ID (Mailbox ID)
pk_rmbx
メールボックスの状態を返すパケットアドレス
(Packet of Refer Mailbox)
● 出力
ercd
エラーコード (Error Code)
● pk_rmbx に返されるデータ
extinf
拡張情報 (Extended Information)
wtsk
待ちタスクの有無 (Wait Task)
pk_msg
次に受信するメッセージパケットの先頭アドレス
(Packet of Message)
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·mbxid が 0 以下または最大メールボックス数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·mbxid のメールボックスが存在しない
■ ディスパッチ要因
本システムコールでディスパッチは起きません。
January 31, 2014, CM81-00210-2a
93
第 3 章 システムコールインタフェース
3.5 同期・通信機能のシステムコール
Su pp or t
So ft
Manu al
■ 解説
mbxid で指定された対象メールボックスの各種状態を参照して復帰値として次に受信
するメッセージ ( メッセージキューの先頭のメッセージ ), 待ちタスクの有無 (wtsk), 拡
張情報 (exinf) を返します。
wtsk は , このメールボックスで待っているタスクの ID を設定します。このメールボッ
クスで複数のタスクが待っている場合 , 待ち行列の先頭のタスクの ID を返します。待
ちタスクがない場合 , 0 を返します。
pk_msg は , 次に tk_rcv_mbx を実行した場合に受信するメッセージです。メッセージ
キューにメッセージがないときには pk_msg は NULL となります。また , どんな場合で
も , 「pk_msg が NULL」または「wtsk が 0 」の少なくとも一方の状態は成り立ちます。
pk_rmbx が不正な場合でも , エラーチェックを行わず , 動作は保証されません。
94
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.6 拡張同期・通信機能のシステムコール
Support
3.6
Soft
Ma nual
拡張同期・通信機能のシステムコール
拡張同期・通信機能のシステムコールを説明します。
■ 拡張同期・通信機能のシステムコール
拡張同期・通信機能は , 以下の 3 種類の機能のシステムコールで構成されます。
• ミューテックス機能のシステムコール
• メッセージバッファ機能のシステムコール
• ランデブポート機能のシステムコール
January 31, 2014, CM81-00210-2a
95
第 3 章 システムコールインタフェース
3.6 拡張同期・通信機能のシステムコール
Su pp or t
3.6.1
So ft
Manu al
ミューテックス機能のシステムコール
ミューテックス機能のシステムコールを説明します。
■ ミューテックス機能のシステムコール
ミューテックス機能は , 以下の 5 種類のシステムコールで構成されます。
• tk_cre_mtx(Create Mutex)
• tk_del_mtx(Delete Mutex)
• tk_loc_mtx(Lock Mutex)
• tk_unl_mtx(Unlock Mutex)
• tk_ref_mtx(Refer Mutex Status)
96
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.6 拡張同期・通信機能のシステムコール
Support
3.6.1.1
Soft
Ma nual
tk_cre_mtx(Create Mutex)
ミューテックスを生成します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ID mtxid = tk_cre_mtx ( T_CMTX *pk_cmtx )
typedef struct t_cmtx {
VP
exinf;
ATR
mtxatr;
PRI
ceilpri;
} T_CMTX;
■ パラメータ
● 入力
ミューテックス生成情報を設定する
pk_cmtx
パケットアドレス (Packet of Create Mutex)
● pk_cmtx に設定するデータ
exinf
拡張情報 (Extended Information)
mtxatr
ミューテックス属性 (Mutex Attribute)
mtxatr:= (TA_TFIFO ∥ TA_TPRI ∥ TA_INHERIT ∥ TA_CEILING)
表 3.6-1 tk_cre_mtx の mtxatr で指定できる定数マクロ
属性
値
意味
TA_TFIFO
0x00000000
待ちタスクを FIFO で管理
TA_TPRI
0x00000001
待ちタスクを優先度順で管理
TA_INHERIT
0x00000002
優先度継承プロトコル
TA_CEILING
0x00000003
優先度上限プロトコル
ceilpri
ミューテックスの上限優先度 (Ceiling Priority)
● 出力
mtxid
ミューテックス ID (Mutex ID)
またはエラーコード (Error Code)
January 31, 2014, CM81-00210-2a
97
第 3 章 システムコールインタフェース
3.6 拡張同期・通信機能のシステムコール
Su pp or t
So ft
Manu al
■ エラーコード
E_LIMIT
-34
ミューテックスの数がシステムの上限より大きい
E_RSATR
-11
予約属性
·mtxatr に未定義の値が指定された
E_PAR
-17
パラメータエラー
·ceilpri が 0 以下または最大優先度より大きい (mtxatr に
TA_CEILING を指定している場合 )
■ ディスパッチ要因
本システムコールでディスパッチは起きません。
■ 解説
ミューテックスを生成し , ミューテックス ID 番号を割り当てます。
exinf は , 対象ミューテックスに関する情報を入れておくためにユーザが自由に使用で
きます。ここで指定した情報を tk_ref_mtx で参照できます。ユーザの情報を入れるた
めにもっと大きな領域が必要な場合や , 途中で内容を変更したい場合があれば , ユーザ
プログラムでそのためのメモリを確保して , そのアドレスを exinf に入れます。OS で
は exinf の内容を関知しません。
mtxatr はミューテックスの属性を指定します。
mtxatr に TA_TFIFO が指定された場合 , ミューテックスのタスクの待ち行列は FIFO と
なります。TA_TPRI, TA_INHERIT, TA_CEILING が指定された場合 , タスクの待ち行列
は優先度順となります。TA_INHERIT で優先度継承プロトコル , TA_CEILING で優先
度上限プロトコルを適用します。
ceilpri は , mtxatr に TA_CEILING が指定された場合だけに有効となり , ミューテックス
の上限優先度を設定します。
また , pk_cmtx が不正な場合でも , エラーチェックを行わず , 動作は保証されません。
98
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.6 拡張同期・通信機能のシステムコール
Support
3.6.1.2
Soft
Ma nual
tk_del_mtx(Delete Mutex)
ミューテックスを削除します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_del_mtx ( ID mtxid ) ;
■ パラメータ
● 入力
mtxid
ミューテックス ID (Mutex ID)
ercd
エラーコード (Error Code)
● 出力
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·mtxid が 0 以下または最大ミューテックス数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·mtxid のミューテックスが存在しない
■ ディスパッチ要因
mtxid で指定したメールボックスを削除したことにより , 本システムコールを呼び出し
たタスクより優先度の高いタスクの待ち状態が解除された場合 , 待ち状態が解除され
たタスクにディスパッチします。
■ 解説
mtxid で指定されたミューテックスを削除します。具体的には , 対象ミューテックスを
未生成状態にして ID 番号を解放します。
対象ミューテックスでロック待ちしているタスクがある場合 , 本システムコールは正
常終了しますが , 待ち状態にあったタスクは E_DLT のエラーで復帰します。ミュー
テックスを削除すると , そのミューテックスをロックしているタスクにとっては , ロッ
クしているミューテックスが減ります。したがって , 削除されるミューテックスが
TA_INHERIT または TA_CEILING 属性の場合 , ロックしていたタスクの現在優先度を
変更する場合があります。
January 31, 2014, CM81-00210-2a
99
第 3 章 システムコールインタフェース
3.6 拡張同期・通信機能のシステムコール
Su pp or t
3.6.1.3
So ft
Manu al
tk_loc_mtx(Lock Mutex)
ミューテックスをロックします。
タスク部
○
タスク独立部
×
ディスパッチ禁止状態
×
■ C 言語インタフェース
ER ercd = tk_loc_mtx ( ID mtxid, TMO tmout ) ;
■ パラメータ
● 入力
mtxid
ミューテックス ID (Mutex ID)
tmout
タイムアウト指定 (Timeout)
0 から 0x7fffffff の数値 , および以下のマクロ指定可能
表 3.6-2 tk_loc_mtx の tmout で指定できる定数マクロ
名前
値
意味
TMO_FEVR
-1
永久待ち
TMO_POL
0
ポーリング
● 出力
ercd
100
エラーコード (Error Code)
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.6 拡張同期・通信機能のシステムコール
Support
Soft
Ma nual
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·mtxid が 0 以下または最大ミューテックス数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·mtxid のミューテックスが存在しない
E_PAR
-17
パラメータエラー
·tmout が -2 以下
E_DLT
-51
待ちオブジェクトが削除された
· 待ちの間に対象ミューテックスを削除
E_RLWAI
-49
待ち状態強制解除
· 待ちの間に tk_rel_wai を受け付ける
E_TMOUT
-50
ポーリング失敗またはタイムアウト
·tmout の時間経過により待ち状態が解除された
·tmout が TMO_POL で , ロックが獲得できない
E_CTX
-25
コンテキストエラー
· タスク独立部またはディスパッチ禁止状態で実行
E_ILUSE
-28
不正使用
· 対象ミューテックスが自タスクでロック中
· 自タスクのベース優先度が対象ミューテックスの
上限優先度より高い (TA_CEILING が指定されている場合 )
■ ディスパッチ要因
本システムコールを呼び出したタスクがロック待ち状態になった場合 , 次の優先順位
のタスクにディスパッチします。
■ 解説
mtxid のミューテックスをロックします。
tmout により , 待ち時間の最大値 ( タイムアウト値 ) を指定できます。TMO_FEVR は ,
タイムアウトまでの時間が無限大であることを示します。この場合は , ロックの獲得
または tk_rel_wai が呼び出されるまで待ち状態になります。TMO_POL を指定される
場合 , ロックの獲得できなければ , E_TMOUT のエラーで復帰します。
tmout の基準時間 ( 時間の単位 ) はシステム時刻の基準時間 ( = 1 ms) と同じです。
ミューテックスがロックできると待ち状態に入らないで , 本システムコールの呼出し
タスクは正常復帰します。この場合 , そのミューテックスはロック状態になります。
ロックできない場合 , 本システムコールを呼び出したタスクは待ち状態に入ります。す
なわち , そのミューテックスに対する待ち行列につながれます。
January 31, 2014, CM81-00210-2a
101
第 3 章 システムコールインタフェース
3.6 拡張同期・通信機能のシステムコール
Su pp or t
So ft
Manu al
■ 補足事項
• TA_INHERIT 属性のミューテックスの場合
ミューテックスを既にロックしているタスクの現在優先度が自タスクより低い場
合 , ロックしているタスクの現在優先度を自タスクと同じ現在優先度まで引き上げ
ます。ミューテックスのロック獲得待ち状態のタスクがタイムアウトなどで待ちを
終了した場合 , そのミューテックスをロックしているタスクの現在優先度は , 以下
のうちの最も高い現在優先度になります。
(A) そのミューテックスでロック待ちしているほかのタスクの現在優先度のうち
の最も高い優先度。
(B) ロック中のタスクのベース優先度。
• TA_CEILING 属性のミューテックスの場合
自タスクがロックを獲得し , 自タスクの現在優先度がミューテックスの上限優先度
より低い場合 , 自タスクの現在優先度をミューテックスの上限優先度まで引き上げ
ます。
102
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.6 拡張同期・通信機能のシステムコール
Support
3.6.1.4
Soft
Ma nual
tk_unl_mtx(Unlock Mutex)
ミューテックスをロック解除します。
タスク部
○
タスク独立部
×
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_unl_mtx ( ID mtxid ) ;
■ パラメータ
● 入力
mtxid
ミューテックス ID (Mutex ID)
ercd
エラーコード (Error Code)
● 出力
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·mtxid が 0 以下または最大ミューテックス数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·mtxid のミューテックスが存在しない
E_ILUSE
-28
不正使用
· 自タスクがロックしたミューテックスではない
E_CTX
-25
コンテキストエラー
· タスク独立部で実行
■ ディスパッチ要因
本システムコールを呼び出したタスクより優先度の高いタスクのロック待ち状態を解
除した場合 , 待ち状態が解除されたタスクにディスパッチします。
対象ミューテックスをロック解除した結果 , 自タスクの優先度が引き下げられる場合 ,
それより高い優先度のタスクにディスパッチする場合があります。
■ 解説
mtxid のミューテックスのロックを解除します。ロック待ちしているタスクがある場
合 , 待ち行列の先頭タスクの待ちを解除し , そのタスクをロック獲得状態にします。
January 31, 2014, CM81-00210-2a
103
第 3 章 システムコールインタフェース
3.6 拡張同期・通信機能のシステムコール
Su pp or t
So ft
Manu al
■ 補足事項
ロック解除したミューテックスが TA_INHERIT または TA_CEILING 属性の場合 , タス
クの現在優先度を引き下げます。ロック解除により自タスクがロックしているミュー
テックスがすべてなくなった場合 , 自タスクの現在優先度をベース優先度まで引き下
げます。一方 , 自タスクがロック中のミューテックスが残っている場合 , 自タスクの現
在優先度は , 以下のうちの最も高い優先度になります。
(A) そのミューテックスでロック待ちしているほかのタスクの現在優先度のうちの
最も高い優先度
(B) 自タスクのベース優先度
ミューテックスをロックした状態でタスクを終了した ( 休止状態または未登録状態に
なった ) 場合 , ロックしているすべてのミューテックスを自動的にロック解除します。
104
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.6 拡張同期・通信機能のシステムコール
Support
3.6.1.5
Soft
Ma nual
tk_ref_mtx(Refer Mutex Status)
ミューテックスの状態を参照します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_ref_mtx ( ID mtxid, T_RMTX *pk_rmtx ) ;
typedef struct t_rmtx {
VP
exinf;
ID
htsk;
ID
wtsk;
} T_RMTX;
■ パラメータ
● 入力
mtxid
ミューテックス ID (Mutex ID)
pk_rmtx
ミューテックスの状態を返すパケットアドレス
(Packet of Refer Mutex Status)
● 出力
ercd
エラーコード (Error Code)
● pk_cmtx に返されるデータ
exinf
拡張情報 (Extended Information)
htsk
ロックしているタスクの ID (Hold Task ID)
wtsk
ロック待ちタスクの ID (Wait Task ID)
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·mtxid が 0 以下または最大ミューテックス数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·mtxid のミューテックスが存在しない
■ ディスパッチ要因
本システムコールでディスパッチは起きません。
January 31, 2014, CM81-00210-2a
105
第 3 章 システムコールインタフェース
3.6 拡張同期・通信機能のシステムコール
Su pp or t
So ft
Manu al
■ 解説
mtxid で指定された対象ミューテックスの各種の状態を参照して , 復帰値としてロック
中のタスク (htsk), ロック待ちタスク (wtsk), 拡張情報 (exinf) を返します。
htsk は , このミューテックスをロックしているタスクの ID を設定します。このミュー
テックスをロックしているタスクがない場合 , 0 を返します。
wtsk はこのミューテックスで待っているタスクの ID を設定します。複数のタスクが
待っている場合 , 待ち行列の先頭タスクの ID を返します。待ちタスクがない場合 , 0 を
返します。
pk_rmtx が不正な場合でも , エラーチェックを行わず , 動作は保証されません。
106
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.6 拡張同期・通信機能のシステムコール
Support
3.6.2
Soft
Ma nual
メッセージバッファ機能のシステムコール
メッセージバッファ機能のシステムコールを説明します。
■ メッセージバッファ機能のシステムコール
メッセージバッファ機能は , 以下の 5 種類のシステムコールで構成されます。
• tk_cre_mbf(Create Message Buffer)
• tk_del_mbf(Delete Message Buffer)
• tk_snd_mbf(Send Message to Message Buffer)
• tk_rcv_mbf(Receive Message from Message Buffer)
• tk_ref_mbf(Refer Message Buffer Status)
January 31, 2014, CM81-00210-2a
107
第 3 章 システムコールインタフェース
3.6 拡張同期・通信機能のシステムコール
Su pp or t
3.6.2.1
So ft
Manu al
tk_cre_mbf(Create Message Buffer)
メッセージバッファを生成します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ID mbfid = tk_cre_mbf ( T_CMBF *pk_cmbf ) ;
typedef struct t_cmbf {
VP
exinf;
ATR mbfatr;
W bufsz;
INT maxmsz;
VP
bufptr;
} T_CMBF;
■ パラメータ
● 入力
メッセージバッファ生成情報のパケット先頭アドレス
pk_cmbf
(Packet of Create Message Buffer)
● pk_cmbf に設定するデータ
exinf
拡張情報 (Extended Information)
mbfatr
メッセージバッファ属性 (Message Buffer Attribute)
mbfatr := (TA_TFIFO ∥ TA_TPRI) | [TA_USERBUF]
表 3.6-3 tk_cre_mbf の mbfatr で指定できる定数マクロ
属性
値
意味
TA_TFIFO
0x00000000
メッセージ送信待ちタスクを FIFO で管理
TA_TPRI
0x00000001
メッセージ送信待ちタスクを優先度順で管理
TA_USERBUF
0x00000020
メッセージバッファ領域としてユーザが指定し
た領域を使用する
bufsz
メッセージバッファのサイズ ( バイト数 )(Buffer Size)
maxmsz
メッセージの最大長 ( バイト数 )
(Maximum Message Size)
bufptr
108
ユーザバッファのアドレス (Buffer Pointer)
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.6 拡張同期・通信機能のシステムコール
Support
Soft
Ma nual
● 出力
mbfid
メッセージバッファ ID (MessageBuffer ID)
またはエラーコード (Error Code)
■ エラーコード
E_NOMEM
-33
メモリ不足
· メッセージバッファ領域を確保できない
(TA_USERBUF が指定されていない場合 )
E_LIMIT
-34
メッセージバッファの数がシステムの上限より大きい
E_RSATR
-11
予約属性
·mtxatr に未定義の値が指定された
E_PAR
-17
パラメータエラー
·bufsz が負 , maxmsz が 0 以下 , bufsz が 4 の倍数でない
(TA_USERBUF が指定されている場合 )
■ ディスパッチ要因
本システムコールでディスパッチは起きません。
■ 解説
メッセージバッファを生成し , メッセージバッファ ID 番号を割り当てます。
exinf は , 対象メッセージバッファに関する情報を入れておくためにユーザが自由に使
用できます。ここで指定した情報を tk_ref_mbf で参照できます。ユーザの情報を入れ
るためにもっと大きな領域が必要な場合や , 途中で内容を変更したい場合があれば ,
ユーザプログラムでそのためのメモリを確保し , そのアドレスを exinf に入れます。な
お , OS は exinf の内容を関知しません。
mbfatr はメッセージバッファの属性を指定します。
TA_TFIFO, TA_TPRI では , バッファが一杯の場合にメッセージを送信するタスクが
メッセージバッファの待ち行列に並ぶ際の並び方を指定できます。TA_TFIFO の場合 ,
タスクの待ち行列は FIFO となり , TA_TPRI の場合 , タスクの待ち行列はタスクの優先
度順となります。
なお , メッセージキュー , およびメッセージ受信待ちタスクの待ち行列の順序は FIFO
だけです。
TA_USERBUF が指定された場合に bufptr が有効になり , bufptr を先頭とする bufsz バ
イトのメモリ領域をメッセージバッファ領域として使用します。この場合 , OS はメッ
セージバッファ領域を確保しません。TA_USERBUF が指定されなかった場合 , bufptr
は無視され , OS はメッセージバッファ領域を確保します。bufsz に 0 を指定すること
で , メッセージバッファを使用しない同期通信になります。メッセージバッファ領域
の先頭 4 バイトはカーネルが使用します。また , mbfatr に TA_USERBUF が指定されて
いる場合 , 8 バイトの倍数でない bufsz が指定されると , 8 バイトの倍数に切り上げて
bufsz は獲得されます。
January 31, 2014, CM81-00210-2a
109
第 3 章 システムコールインタフェース
3.6 拡張同期・通信機能のシステムコール
Su pp or t
So ft
Manu al
pk_cmbf, bufptr が不正な場合でも , エラーチェックを行わずに動作は保証されません。
メッセージバッファは , 可変長メッセージの送受信の管理を行うオブジェクトです。
メールボックス (mbx) との相違点は , 送信時と受信時に可変長のメッセージ内容をコ
ピーする点です。また , バッファが一杯の場合に , メッセージ送信側も待ち状態に入る
機能があります。
110
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.6 拡張同期・通信機能のシステムコール
Support
3.6.2.2
Soft
Ma nual
tk_del_mbf(Delete Message Buffer)
メッセージバッファを削除します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_del_mbf ( ID mbfid ) ;
■ パラメータ
● 入力
メッセージバッファ ID
mbfid
(Message Buffer ID)
● 出力
エラーコード (Error Code)
ercd
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·mbfid が 0 以下または最大メッセージバッファ数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·mbfid のメッセージバッファが存在しない
■ ディスパッチ要因
mbfid で指定したメッセージバッファを削除したことにより , 本システムコールを呼び
出したタスクより優先度の高いタスクの待ち状態が解除された場合 , 待ち状態が解除
されたタスクにディスパッチします。
■ 解説
mbfid で指定されたメッセージバッファを削除します。具体的には , 対象メッセージ
バッファを未生成状態にして ID 番号およびメッセージを入れるバッファ領域を解放
します。
対象メッセージバッファでメッセージ受信またはメッセージ送信を待っているタスク
があった場合 , 本システムコールは正常終了します。ただし , 待ち状態にあったタスク
には E_DLT のエラーで復帰します。また , 対象メッセージバッファの中にメッセージ
が残っている場合でもエラーとはならず , メッセージバッファの削除が行われて中に
あったメッセージは消滅します。
January 31, 2014, CM81-00210-2a
111
第 3 章 システムコールインタフェース
3.6 拡張同期・通信機能のシステムコール
Su pp or t
3.6.2.3
So ft
Manu al
tk_snd_mbf(Send Message to Message Buffer)
メッセージバッファへ送信します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_snd_mbf ( ID mbfid, VP msg, INT msgsz, TMO tmout ) ;
■ パラメータ
● 入力
mbfid
メッセージバッファ ID
(Message Buffer ID)
msgsz
送信メッセージのサイズ ( バイト数 ) (Message Size)
msg
送信メッセージの先頭アドレス (Message)
tmout
タイムアウト指定 (Timeout)
0 から 0x7fffffff の数値 , および以下のマクロが指定可能
表 3.6-4 tk_snd_mbf の tmout で指定できる定数マクロ
名前
値
意味
TMO_FEVR
-1
永久待ち
TMO_POL
0
ポーリング
● 出力
ercd
エラーコード (Error Code)
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·mbfid が 0 以下または最大メッセージバッファ数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·mbfid のメッセージバッファが存在しない
E_PAR
-17
パラメータエラー
·msgsz が 0 以下または maxmsz より大きい
·tmout が -2 以下
E_DLT
-51
待ちオブジェクトが削除された
· 待ちの間に対象メッセージバッファ削除
E_RLWAI
-49
待ち状態強制解除
· 待ちの間に tk_rel_wai を受け付ける
E_TMOUT
-50
ポーリング失敗またはタイムアウト
·tmout の時間経過により待ち状態が解除された
112
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.6 拡張同期・通信機能のシステムコール
Support
Soft
Ma nual
·tmout が TMO_POL で , メッセージバッファに空きがない
E_CTX
-25
コンテキストエラー
· タスク独立部またはディスパッチ禁止状態で実行
(tmout が TMO_POL 以外 )
■ ディスパッチ要因
本システムコールを呼び出したタスクより優先度の高いタスクのメッセージ受信待ち
状態を解除した場合 , 待ち状態が解除されたタスクにディスパッチします。または , シ
ステムコールを呼び出したタスクがメッセージ送信待ち状態になった場合 , 次の優先
順位のタスクにディスパッチします。
■ 解説
本システムコールは , mbfid で指定されたメッセージバッファに msg のアドレスに入っ
ているメッセージを送信します。
メッセージのサイズは msgsz で指定します。すなわち , msg 以下の msbsz ( バイト ) を
mbfid で指定されたメッセージバッファのメッセージキューにコピーします。メッセー
ジキューは , リングバッファによって実現しています。
tmout により , 待ち時間の最大値 ( タイムアウト値 ) を指定できます。TMO_FEVR は ,
タイムアウトまでの時間が無限大であることを示します。この場合は , メッセージバッ
ファに空きができるまで , または tk_rel_wai が呼び出されるまで待ち状態になります。
TMO_POL を指定される場合 , メッセージバッファに空きがなければ , E_TMOUT のエ
ラーで復帰します。
tmout の基準時間 ( 時間の単位 ) はシステム時刻の基準時間 ( = 1 ms) と同じです。
バッファの空き領域が少なく , msg のメッセージをメッセージキューに入れられない
場合 , 本システムコールを呼び出したタスクはメッセージ送信待ち状態となり , バッ
ファの空きを待つための待ち行列 ( 送信待ち行列 ) につながれます。待ち行列の順序は
tk_cre_mbf 呼出し時の指定により FIFO またはタスク優先度順となります。
msg が不正な場合でも , エラーチェックを行わず , 動作は保証されません。
January 31, 2014, CM81-00210-2a
113
第 3 章 システムコールインタフェース
3.6 拡張同期・通信機能のシステムコール
Su pp or t
3.6.2.4
So ft
Manu al
tk_rcv_mbf(Receive Message from Message
Buffer)
メッセージバッファから受信します。
タスク部
○
タスク独立部
×
ディスパッチ禁止状態
×
■ C 言語インタフェース
INT msgsz = tk_rcv_mbf ( ID mbfid, VP msg, TMO tmout ) ;
■ パラメータ
● 入力
mbfid
メッセージバッファ ID
(Message Buffer ID)
msg
受信メッセージを入れるアドレス (Message)
tmout
タイムアウト指定 (Timeout)
0 から 0x7fffffff の数値 , および以下のマクロが指定可能
表 3.6-5 tk_rcv_mbf の tmout で指定できる定数マクロ
名前
値
意味
TMO_FEVR
-1
永久待ち
TMO_POL
0
ポーリング
● 出力
msgsz
受信したメッセージのサイズ ( バイト数 )
(Message size)
またはエラーコード (Error Code)
■ エラーコード
E_ID
-18
不正 ID 番号
·mbfid が 0 以下または最大メッセージバッファ数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·mbfid のメッセージバッファが存在しない
E_PAR
-17
パラメータエラー
·tmout が -2 以下
E_DLT
-51
待ちオブジェクトが削除された
· 待ちの間に対象メッセージバッファを削除
E_RLWAI
-49
待ち状態強制解除
· 待ちの間に tk_rel_wai を受け付ける
E_TMOUT
-50
ポーリング失敗またはタイムアウト
·tmout の時間経過により待ち状態が解除された
114
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.6 拡張同期・通信機能のシステムコール
Support
Soft
Ma nual
·tmout が TMO_POL で , メッセージバッファに
メッセージがない
E_CTX
-25
コンテキストエラー
· タスク独立部またはディスパッチ禁止状態で実行
■ ディスパッチ要因
本システムコールを呼び出したタスクがメッセージ受信待ち状態になった場合 , 次の
優先順位のタスクにディスパッチします。または , システムコールを呼び出したタスク
より優先度の高いタスクのメッセージ送信待ち状態を解除した場合 , 待ち状態が解除
されたタスクにディスパッチします。
■ 解説
本システムコールは , mbfid で指定されたメッセージバッファからメッセージを受信し
て msg で指定された領域に入れます。すなわち , mbfid で指定されたメッセージバッ
ファのメッセージキューの先頭メッセージの内容を msg 以下の msbsz ( バイト ) にコ
ピーします。
tmout により , 待ち時間の最大値 ( タイムアウト値 ) を指定できます。TMO_FEVR は ,
タイムアウトまでの時間が無限大であることを示します。この場合は , メッセージの到
着または tk_rel_wai が呼び出されるまで待ち状態になります。TMO_POL を指定される
場合 , メッセージが到着していなければ , E_TMOUT のエラーで復帰します。
mbfid で指定されたメッセージバッファにまだメッセージが送信されていない場合
( メッセージキューが空の場合 ) , 本システムコールを呼び出したタスクは待ち状態と
なり , メッセージの到着を待つ待ち行列 ( 受信待ち行列 ) につながれます。受信待ちタ
スクの待ち行列は FIFO だけです。
msg が不正な場合でも , エラーチェックを行わず , 動作は保証されません。
January 31, 2014, CM81-00210-2a
115
第 3 章 システムコールインタフェース
3.6 拡張同期・通信機能のシステムコール
Su pp or t
3.6.2.5
So ft
Manu al
tk_ref_mbf(Refer Message Buffer Status)
メッセージバッファの状態を参照します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_ref_mbf ( ID mbfid, T_RMBF *pk_rmbf ) ;
typedef struct t_rmbf {
VP
exinf;
ID
wtsk;
ID
stsk;
INT msgsz;
W frbufsz;
INT maxmsz;
} T_RMBF;
■ パラメータ
● 入力
mbfid
メッセージバッファ ID
(Message Buffer ID)
pk_rmbf
メッセージバッファの状態を返すパケットアドレス
(Packet of Refer Message Buffer)
● 出力
ercd
エラーコード (Error Code)
● pk_rmbf に返されるデータ
exinf
拡張情報 (Extended Information)
wtsk
受信待ちタスクの有無 (Wait Task)
stsk
送信待ちタスクの有無 (Send Task)
msgsz
メッセージサイズ (Message Size)
frbufsz
空きバッファのサイズ ( バイト数 ) (Free Buffer Size)
maxmsz
メッセージの最大長 ( バイト数 )
(Maximum Message Size)
116
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.6 拡張同期・通信機能のシステムコール
Support
Soft
Ma nual
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·mbfid が 0 以下または最大メッセージバッファ数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·mbfid のメッセージバッファが存在しない
■ ディスパッチ要因
本システムコールでディスパッチは起きません。
■ 解説
mbfid で指定された対象メッセージバッファの各種状態を参照して , 復帰値として拡張
情報 (exinf), 受信待ちタスクの有無 (wtsk), 送信待ちタスクの有無 (stsk), 次に受信する
メッセージのサイズ (msgsz), 空きバッファのサイズ (frbufsz), メッセージの最大長
(maxmsz) を返します。
wtsk は , このメッセージバッファで受信待ちしているタスクの ID を設定します。また ,
stsk は送信待ちしているタスクの ID を設定します。このメッセージバッファで複数の
タスクが待っている場合 , 待ち行列の先頭タスクの ID を返します。待ちタスクがない
場合 , 0 を返します。
msgsz には , メッセージキューの先頭メッセージ ( 次に受信するメッセージ ) のサイズ
が返します。メッセージキューにメッセージがない場合 , 0 を返します。
なお , サイズが 0 のメッセージは送れません。どんな場合でも , msgsz = 0 と wtsk = 0
の少なくとも一方は成り立ちます。
frbufsz はメッセージキューを構成するリングバッファの空き領域のサイズを示すもの
です。この値により , 送信可能なメッセージ量を確認できます。
maxmsz は tk_cre_mbf で指定されたメッセージの最大長を返します。
pk_rmbf が不正な場合でも , エラーチェックを行わず , 動作は保証されません。
January 31, 2014, CM81-00210-2a
117
第 3 章 システムコールインタフェース
3.6 拡張同期・通信機能のシステムコール
Su pp or t
3.6.3
So ft
Manu al
ランデブポート機能のシステムコール
ランデブポート機能のシステムコールを説明します。
■ ランデブポート機能のシステムコール
ランデブポート機能は , 以下の 7 種類のシステムコールで構成されます。
• tk_cre_por(Create Port for Rendezvous)
• tk_del_por(Delete Port for Rendezvous)
• tk_cal_por(Call Port for Rendezvous)
• tk_acp_por(Accept Port for Rendezvous)
• tk_fwd_por(Forward Rendezvous to Another Port)
• tk_rpl_rdv(Reply Rendezvous)
• tk_ref_por(Refer Port Status)
118
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.6 拡張同期・通信機能のシステムコール
Support
3.6.3.1
Soft
Ma nual
tk_cre_por(Create Port for Rendezvous)
ランデブポートを生成します。
タスク部
○
タスク独立部
×
ディスパッチ禁止状態
○
■ C 言語インタフェース
ID porid = tk_cre_por ( T_CPOR *pk_cpor ) ;
typedef struct t_cpor {
VP
exinf;
ATR poratr;
INT maxcmsz;
INT maxrmsz;
} T_CPOR;
■ パラメータ
● 入力
ランデブポートの生成情報のパケット先頭アドレス(Packet of Create Port)
pk_cpor
● pk_cpor に設定するデータ
exinf
拡張情報 (Extended Information)
poratr
ランデブポート属性 (Port Attribute)
poratr := (TA_TFIFO ∥ TA_TPRI)
表 3.6-6 tk_cre_por の poratr で指定できる定数マクロ
属性
値
意味
TA_TFIFO
0x00000000
呼出し待ちタスクを FIFO で管理
TA_TPRI
0x00000001
呼出し待ちタスクを優先度順で管理
maxcmsz
呼出し時のメッセージの最大長 ( バイト数 )
(Maximum Call Message Size)
maxrmsz
返答時のメッセージの最大長 ( バイト数 )
(Maximum Reply Message Size)
● 出力
porid
ランデブポート ID (Port ID)
またはエラーコード (Error Code)
January 31, 2014, CM81-00210-2a
119
第 3 章 システムコールインタフェース
3.6 拡張同期・通信機能のシステムコール
Su pp or t
So ft
Manu al
■ エラーコード
E_LIMIT
-34
ランデブポートの数がシステムの上限より大きい
E_RSATR
-11
予約属性
·poratr に未定義の値が指定された
E_PAR
-17
パラメータエラー
·maxcmsz が負
·maxrmsz が負
E_CTX
-25
コンテキストエラー
· タスク独立部で実行
■ ディスパッチ要因
本システムコールでディスパッチは起きません。
■ 解説
ランデブポートを生成し , ランデブポート ID 番号を割り当てます。ランデブポートは ,
ランデブを実現するための基本となるオブジェクトです。
exinf は , 対象ランデブポートに関する情報を入れておくためにユーザが自由に使用で
きます。ここで指定した情報を tk_ref_por で参照できます。ユーザの情報を入れるため
にもっと大きな領域が必要な場合や , 途中で内容を変更したい場合があれば , ユーザプ
ログラムでそのためのメモリを確保し , そのアドレスを exinf に入れます。なお , OS で
は exinf の内容を関知しません。
poratr はランデブポートの属性を指定します。TA_TFIFO, TA_TPRI では , ランデブ呼出
し待ちのタスクの待ち行列の並び順を指定します。ランデブ受付け待ちのタスクの待
ち行列は FIFO だけです。
maxcmsz は呼出し時のメッセージの最大長をバイト数で指定します。また , maxrmsz
は , 返答時のメッセージの最大長をバイト数で指定します。
pk_cpor が不正な場合でも , エラーチェックを行わず , 動作は保証されません。
120
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.6 拡張同期・通信機能のシステムコール
Support
3.6.3.2
Soft
Ma nual
tk_del_por(Delete Port for Rendezvous)
ランデブポートを削除します。
タスク部
○
タスク独立部
×
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_del_por ( ID porid ) ;
■ パラメータ
● 入力
porid
ランデブポート ID (Port ID)
ercd
エラーコード (Error Code)
● 出力
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·porid が 0 以下または最大ランデブポート数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·porid のランデブポートが存在しない
E_CTX
-25
コンテキストエラー
· タスク独立部で実行
■ ディスパッチ要因
porid で指定したランデブーポートを削除したことにより , 本システムコールを呼び出
したタスクより優先度の高いタスクの待ち状態が解除された場合,待ち状態が解除され
たタスクにディスパッチします。
■ 解説
porid で指定されたランデブポートを削除します。具体的には , 対象ランデブポートを
未生成状態にして ID 番号を解放します。
対象ランデブポートでランデブ受付け (tk_acp_por) や呼出し (tk_cal_por) を待っている
タスクがあった場合 , 本システムコールは正常終了しますが , 待ち状態にあったタスク
には E_DLT のエラーで復帰します。
tk_del_por によりランデブポートが削除されても , 既にランデブ成立済みのタスクに影
響しません。ランデブ受付け側タスク ( 待ち状態ではない ) には何も通知されず , ラン
デブ呼出し側タスク ( ランデブ終了待ち状態 ) の状態も変化しません。
ランデブ受付け側タスクが tk_rpl_rdv を呼び出すときに , ランデブ成立に使ったランデ
ブポートが既に削除されていても tk_rpl_rdv を正常に実行します。
January 31, 2014, CM81-00210-2a
121
第 3 章 システムコールインタフェース
3.6 拡張同期・通信機能のシステムコール
Su pp or t
3.6.3.3
So ft
Manu al
tk_cal_por(Call Port for Rendezvous)
ランデブポートに対するランデブを呼び出します。
タスク部
○
タスク独立部
×
ディスパッチ禁止状態
×
■ C 言語インタフェース
INT rmsgsz = tk_cal_por ( ID porid, UINT calptn, VP msg,
INT cmsgsz, TMO tmout ) ;
■ パラメータ
● 入力
porid
ランデブポート ID (Port ID)
calptn
呼出し側選択条件を表すビットパターン
(Call Bit Pattern)
msg
メッセージを入れるアドレス (Message)
cmsgsz
呼出しメッセージのサイズ ( バイト数 )
(Call Message Size)
tmout
タイムアウト指定 (Timeout)
0 から 0x7fffffff の数値 , および以下のマクロが指定可能
表 3.6-7 tk_cal_por の tmout で指定できる定数マクロ
名前
値
意味
TMO_FEVR
-1
永久待ち
TMO_POL
0
ポーリング
● 出力
rmsgsz
返答メッセージのサイズ ( バイト数 )(Reply Message Size) またはエラー
コード (Error Code)
■ エラーコード
E_ID
-18
不正 ID 番号
·porid が 0 以下または最大ランデブポート数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·porid のランデブポートが存在しない
E_PAR
-17
パラメータエラー
·cmsgsz が負 , または maxcmsz より大きい
·calptn が 0
·tmout が -2 以下
E_DLT
-51
待ちオブジェクトが削除された
· 待ちの間に対象ランデブポートを削除
122
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.6 拡張同期・通信機能のシステムコール
Support
E_RLWAI
-49
Soft
Ma nual
待ち状態強制解除
· 待ちの間に tk_rel_wai を受け付ける
E_TMOUT
-50
ポーリング失敗またはタイムアウト
·tmout の時間経過により待ち状態が解除された
·tmout が TMO_POL で , ランデブが成立しない
E_CTX
-25
コンテキストエラー
· タスク独立部またはディスパッチ禁止状態で実行
■ ディスパッチ要因
本システムコールを呼び出したタスクがランデブ呼出し待ち状態になった場合 , 次の
優先順位のタスクにディスパッチします。または , システムコールを呼び出したタスク
より優先度の高いタスクのランデブ受付け待ち状態を解除した場合 , 待ち状態が解除
されたタスクにディスパッチします。
■ 解説
porid で指定されたランデブポートに対するランデブを呼び出します。
呼出しメッセージのサイズを cmsgsz で指定します。本システムコールで指定した msg
領域 ( 呼出し側タスクの msg 領域 ) の cmsgsz ( バイト ) のデータを , tk_acp_por で指定
された msg 領域 ( 受付け側タスクの msg 領域 ) にコピーします。
tmout により , 待ち時間の最大値 ( タイムアウト値 ) を指定できます。TMO_FEVR は ,
タイムアウトまでの時間が無限大であることを示します。この場合は , ランデブが成立
するまで , または tk_rel_wai が呼び出されるまで待ち状態になります。TMO_POL を指
定される場合, 対象ランデブポートにランデブ受付け待ちタスクがない,または ランデ
ブ成立条件が満たされなければ , E_TMOUT のエラーで復帰します。
tmout の基準時間 ( 時間の単位 ) はシステム時刻の基準時間 ( = 1 ms) と同じです。
本システムコール動作は以下のようになります。
porid で指定されたランデブポートでランデブ受付け待ち状態のタスクがあり , そのタ
スクと本システムコール呼出しタスクとの間でランデブ成立条件が満たされた場合 , ラ
ンデブ成立となります。この場合 , ランデブ受付け待ちだったタスクは実行可能状態と
なり , 本システムコール呼出しタスクはランデブ終了待ちの状態になります。ランデブ
終了待ちの状態になったタスクは , ランデブの相手のタスク ( ランデブ受付けタスク )
が tk_rpl_rdv システムコールを実行することにより待ち状態を解除します。この時点で
本システムコールが終了します。
porid で指定されたランデブポートに受付け待ちタスクがなかった場合や , 受付け待ち
タスクがあってもランデブ成立条件が満たされなかった場合 , 本システムコール呼出
しタスクはこのランデブ呼出し待ち行列に並び , ランデブ呼出し待ちの状態となりま
す。ランデブ呼出し待ち行列の順序は , tk_cre_por の指定により FIFO またはタスク優
先度順となります。
ランデブ成立条件は , 受付け側タスクの acpptn と呼出し側タスクの calptn との論理積
が 0 かどうかによって判定します。論理積が 0 以外の場合 , ランデブ成立となります。
ランデブ成立時には , 呼出し側タスクから受付け側タスクにメッセージ ( 呼出しメッセー
ジ ) を送れます。
逆に , ランデブ終了時には , 受付け側タスクから呼出し側タスクにメッセージ ( 返答
メッセージ ) を送れます。tk_rpl_rdv で指定した応答メッセージ ( 呼出し側タスクの応
January 31, 2014, CM81-00210-2a
123
第 3 章 システムコールインタフェース
3.6 拡張同期・通信機能のシステムコール
Su pp or t
So ft
Manu al
答メッセージ ) の内容を , 本システムコールで指定した msg 領域 ( 呼出し側タスクの
msg 領域 ) にコピーします。また , 返答メッセージのサイズ rmsgsz は , 本システムコー
ルの復帰値となります。結局 , 本システムコールの msg パラメータで指定されたメッ
セージ領域を tk_rpl_rdv 実行のときに送られてくるメッセージによって破壊します。
なお , ランデブが回送された場合は , 本システムコールで指定された msg のアドレスか
ら最大で maxrmsz の領域をバッファとして使用するため , その内容を破壊する可能性
があります。したがって , 本システムコールで要求したランデブが回送される可能性が
ある場合 , 期待する返答メッセージのサイズにかかわらず , msg 以下に少なくとも
maxrmsz のサイズの領域を確保してください ( 詳細は「3.6.3.5 tk_fwd_por(Forward
Rendezvous to Another Port)」を参照 ) 。
msg が不正な場合でも , エラーチェックを行わず , 動作は保証されません。
124
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.6 拡張同期・通信機能のシステムコール
Support
3.6.3.4
Soft
Ma nual
tk_acp_por(Accept Port for Rendezvous)
ランデブポートに対するランデブを受け付けます。
タスク部
○
タスク独立部
×
ディスパッチ禁止状態
×
■ C 言語インタフェース
INT cmsgsz = tk_acp_por ( ID porid, UINT acpptn, RNO *p_rdvno,
VP msg, TMO tmout ) ;
■ パラメータ
● 入力
porid
ランデブポート ID (Port ID)
acpptn
受付け側選択条件を表すビットパターン
(Accept Bit Pattern)
p_rdvno
ランデブ番号を入れるアドレス
(Rendezvous Number)
msg
メッセージを入れるアドレス (Message)
tmout
タイムアウト指定 (Timeout)
0 から 0x7fffffff の数値 , および以下のマクロが指定可能
表 3.6-8 tk_acp_por の tmout で指定できる定数マクロ
名前
値
意味
TMO_FEVR
-1
永久待ち
TMO_POL
0
ポーリング
● 出力
cmsgsz
呼出しメッセージのサイズ ( バイト数 ) またはエラーコード
(Call Message Size or Error Code)
■ エラーコード
E_ID
-18
不正 ID 番号
·porid が 0 以下または最大ランデブポート数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·porid のランデブポートが存在しない
E_PAR
-17
パラメータエラー
·acpptn が 0
·tmout が -2 以下
E_DLT
-51
待ちオブジェクトが削除された
· 待ちの間に対象ランデブポートを削除
January 31, 2014, CM81-00210-2a
125
第 3 章 システムコールインタフェース
3.6 拡張同期・通信機能のシステムコール
Su pp or t
E_RLWAI
-49
So ft
Manu al
待ち状態強制解除
· 待ちの間に tk_rel_wai を受け付ける
E_TMOUT
-50
ポーリング失敗またはタイムアウト
·tmout の時間経過により待ち状態が解除された
·tmout が TMO_POL で , ランデブが成立しない
E_CTX
-25
コンテキストエラー
· タスク独立部またはディスパッチ禁止状態で実行
■ ディスパッチ要因
本システムコールを呼び出したタスクがランデブ受付け待ち状態になった場合 , 次の
優先順位のタスクにディスパッチします。
■ 解説
ランデブポートに対するランデブを受け付けます。
tmout により , 待ち時間の最大値 ( タイムアウト値 ) を指定できます。TMO_FEVR は ,
タイムアウトまでの時間が無限大であることを示します。この場合は , ランデブが成立
するまで , または tk_rel_wai が呼び出されるまで待ち状態になります。TMO_POL を指
定される場合 , 対象ランデブポートにランデブ呼出し待ちタスクがない , ランデブ成立
条件が満たされなければ , E_TMOUT のエラーで復帰します。
tmout の基準時間 ( 時間の単位 ) はシステム時刻の基準時間 ( = 1 ms) と同じです。
本システムコールの動作は以下のようになります。
porid で指定されたランデブ呼出し待ち行列に入っているタスクと , このタスクとの間
でランデブ成立条件が満たされた場合はランデブ成立となります。この場合 , 呼出し側
待ち行列にあったタスクは行列から外れ , ランデブ呼出し待ち ( ランデブ成立待ち ) の
状態からランデブ終了待ちの状態に変わります。本システムコールの呼出しタスクは
実行を継続します。
porid で指定されたランデブ呼出し待ち行列にタスクがなかった場合や , タスクがあっ
てもランデブ成立条件が満たされなかった場合 , 本システムコールの呼出しタスクは
そのランデブポートに対するランデブ受付け待ち状態になります。
この場合 , 既に別のタスクがランデブ受付け待ち状態であったとしても , エラーとはな
らず , 本システムコールを呼び出したタスクはランデブ受付け待ち行列につながれま
す。また , 1 つのランデブポートを使って複数のタスクが同時にランデブを行えます。
そのため , porid で指定されたランデブポートで別のタスクがランデブを行っている間
に ( 前に成立したランデブに関する tk_rpl_rdv が実行される前に ) 次のランデブを行っ
ても正常終了します。
ランデブ成立条件は , 受付け側タスクの acpptn と呼出し側タスクの calptn との論理積
が 0 かどうかによって判定します。論理積が 0 以外の場合 , ランデブ成立となります。
先頭のタスクが条件を満たさなければ , 待ち行列の次のタスクについて順にチェック
します。calptn と acpptn に 0 以外の同じ値を指定すると条件がない ( 無条件 ) のと同じ
になります。ランデブ成立までの処理に関しては , ランデブ呼出し側とランデブ受付け
側で完全に対称です。
126
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.6 拡張同期・通信機能のシステムコール
Support
Soft
Ma nual
ランデブ成立時には , 呼出し側タスクから受付け側タスクに呼出しメッセージを送れ
ます。呼出し側タスクが指定した呼出しメッセージの内容を , 受付け側タスクが本シス
テムコールで指定した msg 以下の領域にコピーします。また , 呼出しメッセージのサ
イズ cmsgsz は , 本システムコールの復帰値となります。
ランデブ受付け側のタスクが同時に複数のランデブを行うこともできます。具体的に
は , 本システムコールによりあるランデブを受け付けたタスクが , tk_rpl_rdv を実行す
る前にもう一度本システムコールを実行しても構いません。また , この場合の本システ
ムコールは , 前と異なるランデブポートを対象としたものであっても , 前と同じランデ
ブポートを対象としたものであっても構いません。特殊な例ですが , ランデブ中のタス
クが同じランデブポートにもう一度本システムコールを実行してランデブが成立した
場合 , 同一のタスクが同一のランデブポートに複数の ( 多重の ) ランデブを行っている
状態になります。もちろん , この場合にランデブの相手 ( 呼出し側タスク ) は異なって
います。
本システムコールの復帰値として返すランデブ番号 , p_rdvno は , 同時に成立している
複数のランデブを区別するための情報であり , ランデブ終了時に tk_rpl_rdv のパラメー
タとして使用します。また , ランデブ回送時には tk_fwd_por のパラメータとして使用
します。ランデブ番号は , 下位 16 ビットがランデブを受け付けたタスクのタスク ID,
上位 16 ビットはランデブ受付順に採番される番号となります。
p_rdvno, msg が不正な場合でも , エラーチェックを行わず , 動作は保証されません。
January 31, 2014, CM81-00210-2a
127
第 3 章 システムコールインタフェース
3.6 拡張同期・通信機能のシステムコール
Su pp or t
3.6.3.5
So ft
Manu al
tk_fwd_por(Forward Rendezvous to Another
Port)
ランデブポートに対するランデブを回送します。
タスク部
○
タスク独立部
×
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_fwd_por ( ID porid, UINT calptn, RNO rdvno, VP msg, INT cmsgsz ) ;
■ パラメータ
● 入力
porid
回送先のランデブポート ID (Port ID)
calptn
呼出し側選択条件を表すビットパターン
(Call Bit Pattern)
rdvno
回送前のランデブ番号 (Rendezvous Number)
msg
呼出しメッセージを入れるアドレス (Message)
cmsgsz
呼出しメッセージのサイズ ( バイト数 )
(Call Message Size)
● 出力
ercd
エラーコード (Error Code)
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·porid が 0 以下または最大ランデブポート数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·porid のランデブポートが存在しない
E_PAR
-17
パラメータエラー
·cmsgsz が負
·cmsgsz が回送後の maxcmsz より大きい
·cmsgsz が回送前の maxrmsz より大きい
·calptn が 0
E_OBJ
-41
オブジェクトの状態が不正
·rdvno に含まれるタスク ID が負または最大タスク数より大き
い
· 呼出し側タスクの状態がランデブ終了待ち (TTW_RDV)
以外
·rdvno が tk_acp_por の復帰値と一致しない
128
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.6 拡張同期・通信機能のシステムコール
Support
Soft
Ma nual
· 回送後の maxrmsz が回送前の maxrmsz より大きい
E_CTX
-25
コンテキストエラー
· タスク独立部で実行
■ ディスパッチ要因
システムコールを呼び出したタスクより優先度の高いタスクのランデブ受付け待ち状
態を解除した場合 , 待ち状態が解除されたタスクにディスパッチします。
■ 解説
ランデブ成立後 , 別のランデブポートに回送します。
本システムコールは , ランデブ成立後 , tk_acp_por を呼び出したタスクから呼び出して
ください。
例えば , 図 3.6-1 のように , 呼出し側タスク ( タスク X とする ) と受付け側タスク ( タ
スク Y とする ) でランデブポート ( ランデブポート A) でランデブ成立した状態で , 本
システムコールを呼び出します。その結果 , タスク X とタスク Y との間のランデブ状
態が解除され , その後 , 別のランデブポート ( ランデブポート B) にタスク X がランデ
ブ呼出しを行ったのと同じ状況になります。そしてタスク Y とは別のタスク Z で
tk_acp_por を呼び出し , 再度ランデブを成立させます。最終的にタスク Z から tk_rpl_rdv
を呼び出し , タスク X の終了待ちを解除します。
図 3.6-1 ランデブの回送
タスク X (呼出し側タスク)
タスク Y (受付け側タスク)
tk cal por
タスク Z
tk acp por
ランデブポートA
(ランデブ成立)
(ランデブ解除) tk fwd por
tk acp por
ランデブポートB
(ランデブ成立)
tk rpl rdv
本システムコールの具体的な動作は以下のようになります。
1. rdvno で指定されたランデブを解除します。
2. タスク X を porid のランデブポートに対してランデブ呼出し待ちの状態にします。
この場合 , ランデブ成立のための呼出し側選択条件を表すビットパターン calptn は ,
タスク X が tk_cal_por で指定したものではなく , タスク Y が本システムコールで指
定したものを使用します。タスク X から見ると , ランデブ終了待ちの状態からラン
デブ呼出し待ちの状態に戻ります。
3. その後 , porid のランデブポートに対するランデブが受け付けられると , それを受け
付けたタスクとタスク X との間でランデブ成立となります。もちろん , porid のラン
デブポートに既にランデブ受付け待ちタスクが存在し , ランデブ成立条件が満たさ
January 31, 2014, CM81-00210-2a
129
第 3 章 システムコールインタフェース
3.6 拡張同期・通信機能のシステムコール
Su pp or t
So ft
Manu al
れていると , 本システムコールの実行により即座にランデブ成立となることもあり
ます。ここで , ランデブ成立時に受付け側に送られるメッセージは , タスク X が
tk_cal_por で指定したものではなく , タスク Y が本システムコールで指定したもの
を使用します (calptn と同様 )。
4. 新しいランデブが終了したときに tk_rpl_rdv で返すメッセージは , タスク Y が本シ
ステムコールで指定したmsg の領域ではなく, タスクX がtk_cal_por で指定したmsg
の領域にコピーします。
基本的には , 「tk_cal_por(porid=portA, calptn=ptnA, msg=mesA) の後で tk_fwd_por
(porid=portB, calptn=ptnB, msg=mesB) が実行された状態」と , 「tk_cal_por(porid=portB,
calptn=ptnB, msg=mesB) が実行された状態」とは全く同じ状態になります。ランデブ回
送の履歴を覚えておく必要はありません。
本システムコールによってランデブ呼出し待ち状態に戻ったタスクに tk_ref_tsk を実行
した場合 , tskwait は TTW_CAL となります。また , wid も回送先のランデブポートの ID
番号になります。
本システムコールの実行は即座に終了します。本システムコールで待ち状態になりま
せん。また , 本システムコールの実行が終わった後の本システムコール呼出しタスク
は , 回送前のランデブが成立したランデブポート , 回送後のランデブポート (porid のラ
ンデブポート ), それらのうえでランデブを行ったタスクのいずれとも無関係になりま
す。
本システムコールで指定された送信メッセージは , 本システムコール実行時にほかの
領域 ( 例えば tk_cal_por で指定したメッセージ領域 ) にコピーします。したがって , 回
送されたランデブが成立する前に本システムコールの msg で指定されたメッセージ領
域の内容が変更されても , 回送されたランデブには影響しません。
本システムコールでランデブを回送する場合, 回送後のランデブポート(porid のランデ
ブポート ) の maxrmsz を回送前のランデブの成立したランデブポートの maxrmsz と等
しいか , それよりも小さくしてください。回送後のランデブポートの maxrmsz が回送
前のランデブポートの maxrmsz よりも大きかった場合 , 回送先のランデブポートが不
適当なのでE_OBJ のエラーで復帰します。ランデブ呼出し側は, 回送前のランデブポー
トの maxrmsz に合わせて返答メッセージ受信領域を用意しているため , ランデブの回
送によって返答メッセージの最大サイズが大きくなると , 呼出し側に予期せぬ大きさ
の返答メッセージを返す可能性があり問題を起こします。maxrmsz の大きなランデブ
ポートにランデブを回送できないのは , この理由によります。また , 本システムコール
で送信するメッセージのサイズ cmsgsz は , 回送前のランデブの成立したランデブポー
トの maxrmsz と等しいか , それよりも小さくしてください。これは , 本システムコール
の実装方法として , tk_cal_por で指定されたメッセージ領域を送信メッセージのバッ
ファとして使うことを想定しているためです。
ディスパッチ禁止中あるいは割込み禁止中のタスクから本システムコール , tk_rpl_rdv
を呼び出した場合も , これらのシステムコールは正常に動作します。この機能は , 本シ
ステムコールや tk_rpl_rdv と不可分に何らかの処理を行う場合に使用できます。
本システムコールにより , ランデブ終了待ち状態であったタスク X がランデブ呼出し
待ちの状態に戻った場合 , 次にランデブが成立するまでのタイムアウトは常に永久待
ち (TMO_FEVR) として扱われます。
回送先のランデブポートは , 前のランデブに使用していたランデブポート (rdvno のラ
ンデブが成立したランデブポート ) と同じランデブポートであっても構いません。こ
130
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.6 拡張同期・通信機能のシステムコール
Support
Soft
Ma nual
の場合は , 本システムコールによって , いったん受け付けたランデブの受付け処理をと
りやめます。ただし , この場合でも , 呼出しメッセージや calptn は , 呼出し側タスクが
tk_cal_por で指定したものではなく , 受付け側タスクが本システムコールで指定したも
のに変更します。また , いったん回送されてきたランデブをさらに回送することもでき
ます。
msg が不正な場合でも , エラーチェックを行わず , 動作は保証されません。
January 31, 2014, CM81-00210-2a
131
第 3 章 システムコールインタフェース
3.6 拡張同期・通信機能のシステムコール
Su pp or t
3.6.3.6
So ft
Manu al
tk_rpl_rdv(Reply Rendezvous)
ランデブポートに対するランデブに返答します。
タスク部
○
タスク独立部
×
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_rpl_rdv ( RNO rdvno, VP msg, INT rmsgsz ) ;
■ パラメータ
● 入力
rdvno
ランデブ番号 (Rendezvous Number)
msg
メッセージを入れるアドレス (Message)
rmsgsz
返答メッセージのサイズ ( バイト数 )
(Reply Message Size)
● 出力
ercd
エラーコード (Error Code)
■ エラーコード
E_OK
0
正常終了
E_PAR
-17
パラメータエラー
·rmsgsz が負 , または maxrmsz より大きい
E_OBJ
-41
オブジェクトの状態が不正
·rdvno に含まれるタスク ID が 0 以下または最大タスク数
より大きい
· 呼出し側タスクが待ち状態でない
· 呼出し側タスクの待ち状態がランデブ終了待ち
(TTW_RDV) でない
·rdvno が tk_acp_por の復帰値と一致しない
E_CTX
-25
コンテキストエラー
· タスク独立部から実行
■ ディスパッチ要因
本システムコールを呼び出したタスクより優先度の高いタスクのランデブ終了待ち状
態を解除した場合 , 待ち状態が解除されたタスクにディスパッチします。
132
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.6 拡張同期・通信機能のシステムコール
Support
Soft
Ma nual
■ 解説
ランデブの相手のタスク ( 呼出し側タスク ) に返答してランデブを終了します。
本システムコールは , ランデブ中の状態 (tk_acp_por を実行した後の状態 ) のタスクか
ら呼び出してください。
本システムコールでランデブを終了させる場合 , 受付け側タスク Y から呼出し側タス
ク X に返答メッセージを送れます。受付け側タスクが指定した返答メッセージの内容
を呼出し側タスクが tk_cal_por で指定した msg 以下の領域にコピーします。また , 返答
メッセージのサイズ rmsgsz は tk_cal_por の復帰値となります。
msg が不正な場合でも , エラーチェックを行わず , 動作は保証されません。
January 31, 2014, CM81-00210-2a
133
第 3 章 システムコールインタフェース
3.6 拡張同期・通信機能のシステムコール
Su pp or t
3.6.3.7
So ft
Manu al
tk_ref_por(Refer Port Status)
ランデブポートの状態を参照します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_ref_por ( ID porid, T_RPOR *pk_rpor ) ;
typedef struct t_rpor {
VP
exinf;
ID
wtsk;
ID
atsk;
INT maxcmsz;
INT maxrmsz;
} T_RPOR;
■ パラメータ
● 入力
porid
ランデブポート ID (Port ID)
pk_rpor
ランデブポート状態を返すパケットの先頭アドレス
(Packet of Refer Port)
● 出力
ercd
エラーコード (Error Code)
● pk_rpor に返されるデータ
exinf
拡張情報 (Extended Information)
wtsk
呼出し待ちタスクの有無 (Wait Task)
atsk
受付け待ちタスクの有無 (Accept Task)
呼出し時のメッセージの最大長 ( バイト数 )
maxcmsz
(Maximum Call Message Size)
返答時のメッセージの最大長 ( バイト数 )
maxrmsz
(Maximum Receive Message Size)
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·porid が 0 以下または最大ランデブポート数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·porid のランデブポートが存在しない
134
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.6 拡張同期・通信機能のシステムコール
Support
Soft
Ma nual
■ ディスパッチ要因
本システムコールでディスパッチは起きません。
■ 解説
porid で指定された対象ランデブポートの各種の状態を参照し , 復帰値として受付け待
ちタスクの有無 (atsk), 呼出し待ちタスクの有無 (wtsk), メッセージの最大長 (maxcmsz,
maxrmsz), 拡張情報 (exinf) を返します。
wtsk は , このランデブポートでランデブ呼出し待ちになっているタスクの ID を設定し
ます。ランデブ呼出し待ちタスクがない場合 , 0 が返ります。一方 , atsk は , このラン
デブポートでランデブ受付け待ちになっているタスクの ID を設定します。ランデブ受
付け待ちタスクがない場合 , 0 が返ります。
このランデブポートで複数のタスクが呼出し待ち状態または受付け待ち状態になって
いる場合 , それぞれ呼出し待ち行列または受付け待ち行列の先頭タスクの ID を返しま
す。
pk_rpor が不正な場合でも , エラーチェックを行わず , 動作は保証されません。
■ 補足事項
本システムコールでは , 現在ランデブ中のタスクに関する情報を確認できません。
January 31, 2014, CM81-00210-2a
135
第 3 章 システムコールインタフェース
3.7 メモリプール管理機能のシステムコール
Su pp or t
3.7
So ft
Manu al
メモリプール管理機能のシステムコール
メモリプール管理機能のシステムコールを説明します。
■ メモリプール管理機能のシステムコール
メモリプール機能は , 以下の 2 種類の機能のシステムコールで構成されます。
• 固定長メモリプール機能のシステムコール
• 可変長メモリプール機能のシステムコール
136
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.7 メモリプール管理機能のシステムコール
Support
3.7.1
Soft
Ma nual
固定長メモリプール機能のシステムコール
固定長メモリプール機能のシステムコールを説明します。
■ 固定長メモリプール機能のシステムコール
固定長メモリプール機能は , 以下の 5 種類のシステムコールで構成されます。
• tk_cre_mpf(Create Fixed-size Memory Pool)
• tk_del_mpf(Delete Fixed-size Memory Pool)
• tk_get_mpf(Get Fixed-size Memory Block)
• tk_rel_mpf(Release Fixed-size Memory Block)
• tk_ref_mpf(Refer Fixed-size Memory Pool Status)
January 31, 2014, CM81-00210-2a
137
第 3 章 システムコールインタフェース
3.7 メモリプール管理機能のシステムコール
Su pp or t
3.7.1.1
So ft
Manu al
tk_cre_mpf(Create Fixed-size Memory Pool)
固定長メモリプールを生成します。
タスク部
○
タスク独立部
×
ディスパッチ禁止状態
×
■ C 言語インタフェース
ID mpfid = tk_cre_mpf ( T_CMPF *pk_cmpf ) ;
typedef struct t_cmpf {
VP
exinf;
ATR mpfatr;
W mpfcnt;
W blfsz;
VP
bufptr;
} T_CMPF;
■ パラメータ
● 入力
固定長メモリプール生成情報
pk_cmpf
(Packet of Create Memory Pool)
● pk_cmpf に設定するデータ
exinf
拡張情報 (Extended Information)
mpfatr
固定長メモリプール属性
(Fixed-size Memory Pool Attribute)
mpfatr:= (TA_TFIFO ∥ TA_TPRI) | [TA_USERBUF]
表 3.7-1 tk_cre_mpf の mpfatr で指定できる定数マクロ
属性
値
意味
TA_TFIFO
0x00000000
待ちタスクを FIFO で管理
TA_TPRI
0x00000001
待ちタスクを優先度順で管理
TA_USERBUF
0x00000020
スタック領域としてユーザが
指定した領域を使用する
mpfcnt
固定長メモリプール全体のブロック数
(Fixed-size Memory Pool Block Count)
blfsz
メモリブロックサイズ ( バイト数 )
(Fixed-size Memory Pool Block Size)
bufptr
138
ユーザバッファのアドレス (Buffer Pointer)
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.7 メモリプール管理機能のシステムコール
Support
Soft
Ma nual
● 出力
固定長メモリプール ID (Fixed-size Memory Pool ID)
mpfid
またはエラーコード (Error Code)
■ エラーコード
E_NOMEM
-33
メモリ不足
· メモリプール用の領域を確保できない
(TA_USERBUF が指定されていない場合 )
E_LIMIT
-34
固定長メモリプールの数がシステムの上限より大きい
E_RSATR
-11
予約属性
·mpfatr に未定義の値が指定された
E_PAR
-17
パラメータエラー
·mpfcnt, blfsz が 0 以下
·bufsz が 4 の倍数でない
(TA_USERBUF が指定されている場合 )
E_CTX
-25
コンテキストエラー
· タスク独立部またはディスパッチ禁止状態で実行
■ ディスパッチ要因
本システムコールでディスパッチは起きません。
■ 解説
固定長メモリプールを生成し , 固定長メモリプール ID を割り当てます。具体的には ,
mpfcnt, blfsz の情報を元にメモリプールとして使用するメモリ領域を確保します。ここ
で生成されたメモリプールに tk_get_mpf を呼び出すことにより , blfsz のサイズ ( バイ
ト数 ) をもつメモリブロックを獲得できます。
exinf は , 対象メモリプールに関する情報を入れておくためにユーザが自由に使用でき
ます。ここで指定した情報を tk_ref_mpf で参照できます。ユーザの情報を入れるため
にもっと大きな領域が必要な場合や , 途中で内容を変更したい場合があれば , ユーザプ
ログラムでそのためのメモリを確保して , そのアドレスを exinf に入れます。OS では
exinf の内容を関知しません。
表 3.7-2 tk_cre_mpf の mpfatr で無視される定数マクロ
属性
値
意味
TA_RNG0
0x00000000
保護レベル 0 で実行
TA_RNG1
0x00000100
保護レベル 1 で実行
TA_RNG2
0x00000200
保護レベル 2 で実行
TA_RNG3
0x00000300
保護レベル 3 で実行
mpfatr は固定長メモリプールの属性を指定します。TA_TFIFO, TA_TPRI では , タスクが
メモリブロック獲得のためにメモリプールの待ち行列に並ぶときの並び方を指定でき
ます。属性が TA_TFIFO の場合 , タスクの待ち行列は FIFO となり , TA_TPRI の場合 ,
タスクの待ち行列はタスクの優先度順となります。
January 31, 2014, CM81-00210-2a
139
第 3 章 システムコールインタフェース
3.7 メモリプール管理機能のシステムコール
Su pp or t
So ft
Manu al
TA_USERBUF が指定された場合 , bufptr が有効になり , bufptr を先頭とする mpfcnt*blfsz
バイトのメモリ領域をメモリプール領域として使用します。
この場合 , OSはメモリプー
ル領域を確保しません。TA_USERBUF を指定しなかった場合 , bufptr は無視され , OS
はメモリプール領域を確保します。この場合 , bufsz は 8 の倍数になるように切り上げ
られて領域が確保されます。
pk_cmpf, bufptr が不正な場合でも , エラーチェックを行わず , 動作は保証されません。
■ 補足事項
固定長メモリプールの場合にブロックサイズを変えるには別のメモリプールを用意し
てください。すなわち , 何種類かのメモリブロックサイズが必要となる場合 , サイズご
とに複数のメモリプールを設けてください。
140
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.7 メモリプール管理機能のシステムコール
Support
3.7.1.2
Soft
Ma nual
tk_del_mpf(Delete Fixed-size Memory Pool)
固定長メモリプールを削除します。
タスク部
○
タスク独立部
×
ディスパッチ禁止状態
×
■ C 言語インタフェース
ER ercd = tk_del_mpf ( ID mpfid ) ;
■ パラメータ
● 入力
mpfid
固定長メモリプール ID
(Fixed-size Memory Pool ID)
● 出力
ercd
エラーコード (Error Code)
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·mpfid が 0 以下または最大固定長メモリプール数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·mpfid の固定長メモリプールが存在しない
E_CTX
-25
コンテキストエラー
· タスク独立部またはディスパッチ禁止状態で実行
■ ディスパッチ要因
mpfid で指定した固定長メモリプールを削除したことにより , 本システムコールを呼び
出したタスクより優先度の高いタスクの待ち状態が解除された場合 , 待ち状態が解除
されたタスクにディスパッチします。
■ 解説
mpfid で指定された固定長メモリプールを削除します。具体的には , 対象メモリプール
を未生成状態にして ID 番号およびメモリプール本体の領域を解放します。
このメモリプールからメモリブロックを獲得しているタスクが存在しても , その
チェックや通知は行いません。すべてのメモリブロックが返却されていなくても , 本シ
ステムコールは正常終了します。
対象メモリプールでメモリブロック獲得を待っているタスクがあった場合 , 本システ
ムコールは正常終了しますが , 待ち状態にあったタスクには E_DLT のエラーで復帰し
ます。
January 31, 2014, CM81-00210-2a
141
第 3 章 システムコールインタフェース
3.7 メモリプール管理機能のシステムコール
Su pp or t
3.7.1.3
So ft
Manu al
tk_get_mpf(Get Fixed-size Memory Block)
固定長メモリブロックを獲得します。
タスク部
○
タスク独立部
×
ディスパッチ禁止状態
×
■ C 言語インタフェース
ER ercd = tk_get_mpf ( ID mpfid, VP *p_blf, TMO tmout ) ;
■ パラメータ
● 入力
mpfid
固定長メモリプール ID
(Fixed-size Memory Pool ID)
tmout
タイムアウト指定 (Timeout)
0 から 0x7fffffff の数値 , および以下のマクロが指定可能
表 3.7-3 tk_get_mpf の tmout で指定できる定数マクロ
名前
値
意味
TMO_FEVR
-1
永久待ち
TMO_POL
0
ポーリング
● 出力
ercd
エラーコード (Error Code)
p_blf
メモリブロックの先頭アドレス
(Fixed-size Block Start Address)
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·mpfid が 0 以下または最大固定長メモリプール数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·mpfid の固定長メモリプールが存在しない
E_PAR
-17
パラメータエラー
·tmout が -2 以下
E_DLT
-51
待ちオブジェクトが削除された
· 待ちの間に対象メモリプールを削除
E_RLWAI
-49
待ち状態強制解除
· 待ちの間に tk_rel_wai を受け付ける
E_TMOUT
142
-50
ポーリング失敗またはタイムアウト
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.7 メモリプール管理機能のシステムコール
Support
Soft
Ma nual
·tmout の時間経過により待ち状態が解除された
·tmout が TMO_POL で , メモリブロックが獲得できない
E_CTX
-25
コンテキストエラー
· タスク独立部またはディスパッチ禁止状態で実行
■ ディスパッチ要因
本システムコールを呼び出したタスクがメモリプール待ち状態になった場合 , 次の優
先順位のタスクにディスパッチします。
■ 解説
mpfid で指定された固定長メモリプールからメモリブロックを獲得します。獲得した
メモリブロックの先頭アドレスを p_blf に返します。獲得するメモリブロックのサイ
ズは , 固定長メモリプール生成時に blfsz で指定された値になります。獲得したメモリ
ブロックのゼロクリアは行わず , 内容は不定となります。
tmout により , 待ち時間の最大値 ( タイムアウト値 ) を指定できます。TMO_FEVR は ,
タイムアウトまでの時間が無限大であることを示します。この場合は , メモリブロック
が獲得できるまで , または tk_rel_wai が呼び出されるまで待ち状態になります。
TMO_POL はメモリブロックが獲得できなければ , E_TMOUT のエラーで復帰します。
tmout の基準時間 ( 時間の単位 ) はシステム時刻の基準時間 ( = 1 ms) と同じです。
指定されたメモリプールからメモリブロックが獲得できない場合 , tk_get_mpf 呼出し
タスクがそのメモリプールのメモリブロック獲得待ち行列につながれ , メモリブロッ
クを獲得できるようになるまで待ちます。
メモリブロック獲得待ちを行う場合の待ち行列の順序は , メモリプールの属性によっ
て , FIFO またはタスク優先度順のいずれかとなります。
p_blf が不正な場合でも , エラーチェックを行わず , 動作は保証されません。
January 31, 2014, CM81-00210-2a
143
第 3 章 システムコールインタフェース
3.7 メモリプール管理機能のシステムコール
Su pp or t
3.7.1.4
So ft
Manu al
tk_rel_mpf(Release Fixed-size Memory Block)
固定長メモリブロックを返却します。
タスク部
○
タスク独立部
×
ディスパッチ禁止状態
×
■ C 言語インタフェース
ER ercd = tk_rel_mpf ( ID mpfid, VP blf ) ;
■ パラメータ
● 入力
mpfid
固定長メモリプール ID
(Fixed-size Memory Pool ID)
blf
メモリブロックの先頭アドレス
(Fixed-size Block Start Address)
● 出力
ercd
エラーコード (Error Code)
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·mpfid が 0 以下または最大固定長メモリプール数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·mpfid の固定長メモリプールが存在しない
E_PAR
-17
パラメータエラー
·blf がメモリプール領域の範囲外 , (blf - メモリプール領域
先頭アドレス ) がメモリブロックサイズの倍数でない
E_CTX
-25
コンテキストエラー
· タスク独立部またはディスパッチ禁止状態で実行
■ ディスパッチ要因
本システムコールを呼び出したタスクより優先度の高いタスクのメモリプール待ち状
態を解除した場合 , 待ち状態が解除されたタスクにディスパッチします。
144
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.7 メモリプール管理機能のシステムコール
Support
Soft
Ma nual
■ 解説
blf で指定されたメモリブロックを mpfid で指定された固定長メモリプールへ返却しま
す。
本システムコールの実行により , mpfid のメモリプールでメモリブロックを待っていた
別のタスクがメモリブロックを獲得し , そのタスクの待ち状態を解除する場合があり
ます。
メモリブロックは獲得を行った固定長メモリプールに必ず返却してください。
January 31, 2014, CM81-00210-2a
145
第 3 章 システムコールインタフェース
3.7 メモリプール管理機能のシステムコール
Su pp or t
3.7.1.5
So ft
Manu al
tk_ref_mpf(Refer Fixed-size Memory Pool
Status)
固定長メモリプールの状態を参照します。
タスク部
○
タスク独立部
×
ディスパッチ禁止状態
×
■ C 言語インタフェース
ER ercd = tk_ref_mpf ( ID mpfid, T_RMPF *pk_rmpf ) ;
typedef struct t_rmpf {
VP
exinf;
ID
wtsk;
W frbcnt;
} T_RMPF;
■ パラメータ
● 入力
mpfid
固定長メモリプール ID
(Fixed-size Memory Pool ID)
pk_rmpf
メモリプールの状態を返すパケットアドレス
(Packet of Refer Fixed-size Memory Pool)
● 出力
ercd
エラーコード (Error Code)
● pk_rmpf に返されるデータ
exinf
拡張情報 (Extended Information)
wtsk
待ちタスクの有無 (Wait Task)
frbcnt
空き領域のブロック数 (Free Block Count)
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·mpfid が 0 以下または最大固定長メモリプール数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·mpfid の固定長メモリプールが存在しない
E_CTX
-25
コンテキストエラー
· タスク独立部またはディスパッチ禁止状態で実行
■ ディスパッチ要因
本システムコールでディスパッチは起きません。
146
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.7 メモリプール管理機能のシステムコール
Support
Soft
Ma nual
■ 解説
mpfid で指定された対象固定長メモリプールの各種状態を参照して復帰値として現在
の空きブロック数 frbcnt, 待ちタスクの有無 (wtsk), 拡張情報 (exinf) を返します。
wtsk は , この固定長メモリプールで待っているタスクの ID を指定します。この固定長メモ
リプールで複数のタスクが待っている場合 , 待ち行列の先頭タスクの ID を返します。待ち
タスクがない場合 , 0 を返します。どんな場合でも frbcnt = 0 と wtsk = 0 の少なくとも一
方の状態は成り立ちます。
pk_rmpf が不正な場合でも , エラーチェックを行わず , 動作は保証されません。
■ 補足事項
tk_ref_mpl の frsz は , メモリプールの空き領域の合計サイズがバイト数で返るのに対し
て , 本システムコールの frbcnt は空きブロックの数が返ります。
January 31, 2014, CM81-00210-2a
147
第 3 章 システムコールインタフェース
3.7 メモリプール管理機能のシステムコール
Su pp or t
3.7.2
So ft
Manu al
可変長メモリプール機能のシステムコール
可変長メモリプール機能のシステムコールを説明します。
■ 可変長メモリプール機能のシステムコール
可変長メモリプール機能は , 以下の 5 種類のシステムコールで構成されます。
• tk_cre_mpl(Create Variable-size Memory Pool)
• tk_del_mpl(Delete Variable-size Memory Pool)
• tk_get_mpl(Get Variable-size Memory Block)
• tk_rel_mpl(Release Variable-size Memory Block)
• tk_ref_mpl(Refer Variable-size Memory Pool Status)
148
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.7 メモリプール管理機能のシステムコール
Support
3.7.2.1
Soft
Ma nual
tk_cre_mpl(Create Variable-size Memory Pool)
可変長メモリプールを生成します。
タスク部
○
タスク独立部
×
ディスパッチ禁止状態
×
■ C 言語インタフェース
ID mplid = tk_cre_mpl ( T_CMPL *pk_cmpl ) ;
typedef struct t_cmpl {
VP
exinf;
ATR mplatr;
W mplsz;
VP
bufptr;
} T_CMPL;
■ パラメータ
● 入力
可変長メモリプール生成情報
pk_cmpl
(Packet of Create Memory Pool)
● pk_cmpl に設定するデータ
exinf
拡張情報 (Extended Information)
mplatr
メモリプール属性 (Memory Pool Attribute)
mplatr:= (TA_TFIFO ∥ TA_TPRI) | [TA_USERBUF]
表 3.7-4 tk_cre_mpl の mplatr で指定できる定数マクロ
属性
値
意味
TA_TFIFO
0x00000000
待ちタスクを FIFO で管理
TA_TPRI
0x00000001
待ちタスクを優先度順で管理
TA_USERBUF
0x00000020
スタック領域としてユーザが
指定した領域を使用する
mplsz
メモリプール全体のサイズ ( バイト数 )
(Memory Pool Size)
bufptr
ユーザバッファのアドレス (Buffer Pointer)
● 出力
mplid
可変長メモリプール ID (Memory Pool ID)
またはエラーコード (Error Code)
January 31, 2014, CM81-00210-2a
149
第 3 章 システムコールインタフェース
3.7 メモリプール管理機能のシステムコール
Su pp or t
So ft
Manu al
■ エラーコード
E_NOMEM
-33
メモリ不足
· メモリプール用の領域を確保できない
(TA_USERBUF が指定されていない場合 )
E_LIMIT
-34
可変長メモリプールの数がシステムの上限より大きい
E_RSATR
-11
予約属性
·mplatr に未定義の値が指定された
E_PAR
-17
パラメータエラー
·mplsz が 0 以下
·mplsz が 8 の倍数でない
(TA_USERBUF が指定されている場合 )
·mplsz が 16 よりも小さい
(TA_USERBUF が指定されている場合 )
E_CTX
-25
コンテキストエラー
· タスク独立部またはディスパッチ禁止状態で実行
■ ディスパッチ要因
本システムコールでディスパッチは起きません。
■ 解説
可変長メモリプールを生成し , 可変長メモリプール ID を割り当てます。具体的には ,
mplsz の情報を元に , メモリプールとして使用するメモリ領域を確保します。
exinf は , 対象メモリプールに関する情報を入れておくためにユーザが自由に使用でき
ます。ここで指定した情報を tk_ref_mpl で参照できます。ユーザの情報を入れるため
にもっと大きな領域が必要な場合や , 途中で内容を変更したい場合があれば , ユーザプ
ログラムでそのためのメモリを確保して , そのアドレスを exinf に入れます。なお , OS
では exinf の内容を関知しません。
表 3.7-5 tk_cre_mpl の mplatr で無視される定数マクロ
属性
値
意味
TA_RNG0
0x00000000
保護レベル 0 で実行
TA_RNG1
0x00000100
保護レベル 1 で実行
TA_RNG2
0x00000200
保護レベル 2 で実行
TA_RNG3
0x00000300
保護レベル 3 で実行
mplatr は可変長メモリプールの属性を指定します。TA_TFIFO, TA_TPRI では , タスク
がメモリブロック獲得のためにメモリプールの待ち行列に並ぶときの並び方を指定で
きます。TA_TFIFO の場合 , タスクの待ち行列は FIFO となり , TA_TPRI の場合 , タス
クの待ち行列はタスクの優先度順となります。
TA_USERBUF が指定された場合 , bufptr が有効になり , bufptr を先頭とする mplsz バイ
トのメモリ領域をメモリプール領域として使用します。この場合 , OS はメモリプール
領域を確保しません。TA_USERBUF を指定しなかった場合 , bufptr は無視されて OS は
150
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.7 メモリプール管理機能のシステムコール
Support
Soft
Ma nual
メモリプール領域を確保します。
pk_cmpl, bufptr が不正な場合でも , エラーチェックを行わず , 動作は保証されません。
タスクがメモリブロック獲得待ちの行列を作った場合 , 待ち行列先頭のタスクに優先
してメモリブロックを割り当てます。待ち行列の 2 番目以降により少ないメモリサイ
ズを要求しているタスクがあった場合 , そのタスクが先にメモリブロックを獲得でき
ません。例えば , ある可変長メモリプールに要求メモリサイズ= 400 のタスク A と要
求メモリサイズ= 100 のタスク B がこの順で待っており , 別のタスクの tk_rel_mpl に
よりメモリサイズ= 200 の連続空きメモリ領域ができたとします。この場合 , 要求サイ
ズの少ないタスク B は先にメモリブロックを獲得できません。
■ 補足事項
以下のように待ち行列の順序が変化した場合 , 新たに待ち行列の先頭になったタスク
にメモリブロック割当てが試みられます。その結果 , メモリブロックを割り当てられて
いるとそのタスクの待ちを解除します。したがって , tk_rel_mpl によるメモリの解放が
なくても , メモリブロックの獲得を行い , 待ちを解除する場合があります。
• メモリブロック獲得待ち行列の先頭タスクの待ちが強制解除された。
• メモリブロック獲得待ち行列の先頭タスクが強制終了した。
• 優先度順のメモリブロック獲得待ち行列で , 先頭タスク以外のタスクの優先度が変
更されて先頭タスクの優先度よりも高くなった。
January 31, 2014, CM81-00210-2a
151
第 3 章 システムコールインタフェース
3.7 メモリプール管理機能のシステムコール
Su pp or t
3.7.2.2
So ft
Manu al
tk_del_mpl(Delete Variable-size Memory Pool)
可変長メモリプールを削除します。
タスク部
○
タスク独立部
×
ディスパッチ禁止状態
×
■ C 言語インタフェース
ER ercd = tk_del_mpl ( ID mplid ) ;
■ パラメータ
● 入力
mplid
可変長メモリプール ID
(Memory Pool ID)
● 出力
ercd
エラーコード (Error Code)
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·mplid が 0 以下
· 最大可変長メモリプール数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·mplid の可変長メモリプールが存在しない
E_CTX
-25
コンテキストエラー
· タスク独立部またはディスパッチ禁止状態で実行
■ ディスパッチ要因
mplid で指定した可変長メモリプールを削除したことにより , 本システムコールを呼び
出したタスクより優先度の高いタスクの待ち状態が解除された場合 , 待ち状態が解除
されたタスクにディスパッチします。
■ 解説
mplid で指定された可変長メモリプールを削除します。具体的には , 対象メモリプール
を未生成状態にして ID 番号およびメモリプール本体の領域を解放します。
このメモリプールからメモリブロックを獲得しているタスクが存在しても , その
チェックや通知は行いません。すべてのメモリブロックが返却されていなくても , 本シ
ステムコールは正常終了します。
対象メモリプールでメモリブロック獲得を待っているタスクがあった場合 , 本システ
ムコールは正常終了しますが , 待ち状態にあったタスクには E_DLT のエラーで復帰し
ます。
152
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.7 メモリプール管理機能のシステムコール
Support
3.7.2.3
Soft
Ma nual
tk_get_mpl(Get Variable-size Memory Block)
可変長メモリブロックを獲得します。
タスク部
○
タスク独立部
×
ディスパッチ禁止状態
×
■ C 言語インタフェース
ER ercd = tk_get_mpl ( ID mplid, W blksz, VP *p_blk, TMO tmout ) ;
■ パラメータ
● 入力
mplid
可変長メモリプール ID
(Memory Pool ID)
blksz
メモリブロックサイズ ( バイト数 ) (Block Size)
tmout
タイムアウト指定 (Timeout)
0 から 0x7fffffff の数値 , および以下のマクロが指定可能
表 3.7-6 tk_get_mpl の tmout で指定できる定数マクロ
名前
値
意味
TMO_FEVR
-1
永久待ち
TMO_POL
0
ポーリング
● 出力
ercd
エラーコード (Error Code)
p_blk
メモリブロックの先頭アドレス
(Block Start Address)
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·mplid が 0 以下または最大可変長メモリプール数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·mplid の固定長メモリプールが存在しない
E_PAR
-17
パラメータエラー
·blksz が 0 以下またはメモリプールの領域サイズより大きい
·tmout が -2 以下
E_DLT
-51
待ちオブジェクトが削除された
· 待ちの間に対象メモリプールを削除
E_RLWAI
-49
待ち状態強制解除
· 待ちの間に tk_rel_wai を受け付ける
January 31, 2014, CM81-00210-2a
153
第 3 章 システムコールインタフェース
3.7 メモリプール管理機能のシステムコール
Su pp or t
E_TMOUT
-50
So ft
Manu al
ポーリング失敗またはタイムアウト
·tmout の時間経過により待ち状態が解除された
·tmout が TMO_POL で , メモリブロックが獲得できない
E_CTX
-25
コンテキストエラー
· タスク独立部またはディスパッチ禁止状態で実行
■ ディスパッチ要因
本システムコールを呼び出したタスクがメモリプール待ち状態になった場合 , 次の優
先順位のタスクにディスパッチします。
■ 解説
mplid で指定された可変長メモリプールから blksz で指定されたサイズ ( バイト数 ) の
メモリブロックを獲得します。
獲得したメモリブロックの先頭アドレスを p_blk に返します。獲得したメモリブロック
のゼロクリアは行わず , 内容は不定となります。メモリブロックが獲得できない場合 ,
本システムコールを呼び出したタスクは待ち状態に入ります。
tmout により , 待ち時間の最大値 ( タイムアウト値 ) を指定できます。TMO_FEVR は ,
タイムアウトまでの時間が無限大であることを示します。この場合は , メモリブロック
が獲得できるまで , または tk_rel_wai が呼び出されるまで待ち状態になります。
TMO_POL はメモリブロックが獲得できなかった場合 , 待ち状態には移行せずに
E_TMOUT のエラーで復帰します。
tmout の基準時間 ( 時間の単位 ) はシステム時刻の基準時間 ( = 1 ms) と同じです。
メモリブロック獲得待ちを行う場合の待ち行列の順序はメモリプールの属性によって,
FIFO またはタスク優先度順のいずれかとなります。
p_blk が不正な場合でも , エラーチェックを行わず , 動作は保証されません。
154
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.7 メモリプール管理機能のシステムコール
Support
3.7.2.4
Soft
Ma nual
tk_rel_mpl(Release Variable-size Memory Block)
可変長メモリブロックを返却します。
タスク部
○
タスク独立部
×
ディスパッチ禁止状態
×
■ C 言語インタフェース
ER ercd = tk_rel_mpl ( ID mplid, VP blk ) ;
■ パラメータ
● 入力
mplid
可変長メモリプール ID
(Memory Pool ID)
blk
メモリブロックの先頭アドレス
(Block Start Address)
● 出力
ercd
エラーコード (Error Code)
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·mplid が 0 以下または最大可変長メモリプール数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·mplid の可変長メモリプールが存在しない
E_PAR
-17
パラメータエラー
·blk がメモリプール領域の範囲外
E_CTX
-25
コンテキストエラー
· タスク独立部またはディスパッチ禁止状態で実行
■ ディスパッチ要因
本システムコールを呼び出したタスクより優先度の高いタスクのメモリプール待ち状
態を解除した場合 , 待ち状態が解除されたタスクにディスパッチします。
■ 解説
blk で指定されたアドレスのメモリブロックを mplid で指定された可変長メモリプール
へ返却します。
tk_rel_mpl の実行により , mplid のメモリプールでメモリブロックを待っていた別のタ
スクがメモリブロックを獲得し , そのタスクの待ち状態を解除する場合があります。
メモリブロックは , メモリブロックの獲得を行った可変長メモリプールに必ず返却し
てください。
January 31, 2014, CM81-00210-2a
155
第 3 章 システムコールインタフェース
3.7 メモリプール管理機能のシステムコール
Su pp or t
So ft
Manu al
■ 補足事項
複数のタスクが待っている可変長メモリプールにメモリブロックを返却する場合 , 複
数のタスクの要求メモリサイズの総和以上のメモリブロックを返却した場合,複数のタ
スクが同時に待ち解除となります。この場合の待ち解除後のタスクの優先順位は , 同じ
優先度のタスクの間では待ち行列に並んでいたときと同じ順序となります。
156
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.7 メモリプール管理機能のシステムコール
Support
3.7.2.5
Soft
Ma nual
tk_ref_mpl(Refer Variable-size Memory Pool
Status)
可変長メモリプールの状態を参照します。
タスク部
○
タスク独立部
×
ディスパッチ禁止状態
×
■ C 言語インタフェース
ER ercd = tk_ref_mpl ( ID mplid, T_RMPL *pk_rmpl ) ;
typedef struct t_rmpl {
VP
exinf;
ID
wtsk;
W frsz;
W maxsz;
} T_RMPL;
■ パラメータ
● 入力
mplid
可変長メモリプール ID
(Memory Pool ID)
pk_rmpl
メモリプールの状態を返すパケットアドレス
(Packet of Refer Memory Pool)
● 出力
ercd
エラーコード (Error Code)
● pk_rmpl に返されるデータ
exinf
拡張情報 (Extended Information)
wtsk
待ちタスクの有無
(Wait Task)
frsz
空き領域の合計サイズ ( バイト数 ) (Free Memory Size)
maxsz
最大の空き領域のサイズ ( バイト数 )
(Max Memory Size)
January 31, 2014, CM81-00210-2a
157
第 3 章 システムコールインタフェース
3.7 メモリプール管理機能のシステムコール
Su pp or t
So ft
Manu al
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·mplid が 0 以下または最大可変長メモリプール数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·mplid の可変長メモリプールが存在しない
E_CTX
-25
コンテキストエラー
· タスク独立部またはディスパッチ禁止状態で実行
■ ディスパッチ要因
本システムコールでディスパッチは起きません。
■ 解説
mplid で指定された対象可変長メモリプールの各種状態を参照して復帰値として現在
の空き領域の合計サイズ frsz, 獲得可能な最大の空き領域のサイズ maxsz, 待ちタスクの
有無 (wtsk), 拡張情報 (exinf) を返します。
wtsk は , この可変長メモリプールで待っているタスクの ID を設定します。この可変長
メモリプールで複数のタスクが待っている場合 , 待ち行列の先頭タスクの ID を返しま
す。待ちタスクがない場合 , 0 を返します。
pk_rmpl が不正な場合でも , エラーチェックを行わず , 動作は保証されません。
158
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.8 時間管理機能のシステムコール
Support
3.8
Soft
Ma nual
時間管理機能のシステムコール
時間管理機能のシステムコールを説明します。
■ 時間管理機能のシステムコール
時間管理機能は , 以下の 3 種類の機能のシステムコールで構成されます。
• システム時刻管理機能のシステムコール
• 周期ハンドラ機能のシステムコール
• アラームハンドラ機能のシステムコール
January 31, 2014, CM81-00210-2a
159
第 3 章 システムコールインタフェース
3.8 時間管理機能のシステムコール
Su pp or t
3.8.1
So ft
Manu al
システム時刻管理機能のシステムコール
システム時刻管理機能のシステムコールを説明します。
■ システム時刻管理機能のシステムコール
システム時刻管理機能は , 以下の 4 種類のシステムコールで構成されます。
• tk_set_tim(Set Time)
• tk_get_tim(Get Time)
• tk_get_otm(Get Operating Time)
• isig_tim(Signal Time)
160
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.8 時間管理機能のシステムコール
Support
3.8.1.1
Soft
Ma nual
tk_set_tim(Set Time)
システム時刻を設定します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_set_tim ( SYSTIM *pk_tim ) ;
typedef struct systim {
W
hi;
UW
lo;
} SYSTIM;
■ パラメータ
● 入力
pk_tim
現在時刻を示すパケットアドレス
(Packet of Current Time)
● pk_tim に設定するデータ
hi
システム設定用の現在時刻 ( 上位 32 ビット )
lo
システム設定用の現在時刻 ( 下位 32 ビット )
● 出力
ercd
エラーコード (Error Code)
■ エラーコード
E_OK
0
正常終了
E_PAR
-17
パラメータエラー
·pk_tim.hi が負
■ ディスパッチ要因
本システムコールでディスパッチは起きません。
■ 解説
システム時刻の値を systim で指定された値に設定します。システム時刻は , 1985 年 1
月 1 日 0 時 (GMT) からの通算の ms とします。
pk_tim が不正な場合でも , エラーチェックを行わず , 動作は保証されません。
January 31, 2014, CM81-00210-2a
161
第 3 章 システムコールインタフェース
3.8 時間管理機能のシステムコール
Su pp or t
So ft
Manu al
■ 補足事項
システムの動作中に本システムコールを使ってシステム時刻を変更した場合, RELTIM
や TMO で指定された相対時間は変化しません。例えば , 60 秒後にタイムアウトするよ
うに指定された場合 , タイムアウト待ちの間に本システムコールで時間を 60 秒進めて
も , そこでタイムアウトすることはなく , 60 秒後にタイムアウトします。ただし , 本シ
ステムコールによってタイムアウトするシステム時刻は変化します。
162
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.8 時間管理機能のシステムコール
Support
3.8.1.2
Soft
Ma nual
tk_get_tim(Get Time)
システムの現在時刻を参照します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_get_tim ( SYSTIM *pk_tim ) ;
typedef struct systim {
W
hi;
UW
lo;
} SYSTIM;
■ パラメータ
● 入力
pk_tim
現在時刻を返すパケットアドレス
(Packet of Current Time)
● 出力
ercd
エラーコード (Error Code)
● pk_tim に返されるデータ
hi
システムの現在時刻 ( 上位 32 ビット )
lo
システムの現在時刻 ( 下位 32 ビット )
■ エラーコード
E_OK
0
正常終了
■ ディスパッチ要因
本システムコールでディスパッチは起きません。
■ 解説
システム時刻の現在の値を読み出して復帰値pk_tim に返します。システム時刻は, 1985
年 1 月 1 日 0 時 0 分 0 秒 (GMT) からの通算の ms とします。
pk_tim が不正な場合でも , エラーチェックを行わず , 動作は保証されません。
January 31, 2014, CM81-00210-2a
163
第 3 章 システムコールインタフェース
3.8 時間管理機能のシステムコール
Su pp or t
3.8.1.3
So ft
Manu al
tk_get_otm(Get Operating Time)
システム稼働時間を参照します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_get_otm ( SYSTIM *pk_tim ) ;
typedef struct systim {
W
hi;
UW
lo;
} SYSTIM;
■ パラメータ
● 入力
pk_tim
稼働時間を返すパケットアドレス
(Packet of Operating Time)
● 出力
ercd
エラーコード (Error Code)
● pk_tim に返されるデータ
hi
システムの稼動時刻 ( 上位 32 ビット )
lo
システムの稼動時刻 ( 下位 32 ビット )
■ エラーコード
E_OK
0
正常終了
■ ディスパッチ要因
本システムコールでディスパッチは起きません。
■ 解説
システム稼働時間を獲得します。システム稼働時間はシステム時刻 ( 時刻 ) と異なり ,
システム起動時からの単純増加する稼働時間を表し , 単位は 1ms です。
システム稼働時間は tk_set_tim による時刻設定に影響しません。
pk_tim が不正な場合でも , エラーチェックを行わず , 動作は保証されません。
164
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.8 時間管理機能のシステムコール
Support
3.8.1.4
Soft
Ma nual
isig_tim(Signal Time)
システム時刻を更新します。
タスク部
×
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = isig_tim ( void ) ;
■ パラメータ
● 入力
なし
● 出力
ercd
エラーコード (Error Code)
■ エラーコード
E_OK
0
正常終了
■ ディスパッチ要因
本システムコールでディスパッチは起きません。
■ 解説
システム時刻を更新します。本システムコールは T-REALOS 独自の機能です。
本システムコールをユーザプログラムから , システム時刻の基準時間 ( = 1 ms) ごとに
呼び出すことによりシステム時刻を更新します。周期が 1ms のタイマ割込みを発生さ
せ , その割込みハンドラから本システムコールを呼び出してください。
本システムコールをタスク部から呼び出すことはできません。タスク部から呼び出し
た場合はその動作は保証されません。
January 31, 2014, CM81-00210-2a
165
第 3 章 システムコールインタフェース
3.8 時間管理機能のシステムコール
Su pp or t
3.8.2
So ft
Manu al
周期ハンドラ機能のシステムコール
周期ハンドラ機能のシステムコールを説明します。
■ 周期ハンドラ機能のシステムコール
周期ハンドラ機能は , 以下の 5 種類のシステムコールで構成されます。
• tk_cre_cyc(Create Cyclic Handler)
• tk_del_cyc(Delete Cyclic Handler)
• tk_sta_cyc(Start Cyclic Handler)
• tk_stp_cyc(Stop Cyclic Handler)
• tk_ref_cyc(Refer Cyclic Handler Status)
166
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.8 時間管理機能のシステムコール
Support
3.8.2.1
Soft
Ma nual
tk_cre_cyc(Create Cyclic Handler)
周期ハンドラを生成します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ID cycid = tk_cre_cyc ( T_CCYC *pk_ccyc ) ;
typedef struct t_ccyc {
VP
exinf;
ATR cycatr;
FP
cychdr;
RELTIM
cyctim;
RELTIM
cycphs;
} T_CCYC;
■ パラメータ
● 入力
pk_ccyc
周期ハンドラ定義情報
(Packet of Create Cyclic Handler)
● pk_ccyc に設定するデータ
exinf
拡張情報 (Extended Information)
cycatr
周期ハンドラ属性 (Cyclic Handler Attribute)
cycatr := (TA_HLNG) | [TA_STA] | [TA_PHS]
表 3.8-1 tk_cre_cyc の cycatr で指定できる定数マクロ
属性
値
意味
TA_HLNG
0x00000001
対象周期ハンドラを C 言語で記述
TA_STA
0x00000002
周期ハンドラ起動
TA_PHS
0x00000004
周期ハンドラ起動位相を保存
cychdr
周期ハンドラアドレス (Cyclic Handler Address)
cyctim
周期起動時間間隔 (Cycle Time)
cycphs
周期起動位相 (Cyclic Handler Phase)
● 出力
cycid
周期ハンドラ ID (Cyclic Handler ID)
またはエラーコード (Error Code)
January 31, 2014, CM81-00210-2a
167
第 3 章 システムコールインタフェース
3.8 時間管理機能のシステムコール
Su pp or t
So ft
Manu al
■ エラーコード
E_LIMIT
-34
周期ハンドラの数がシステムの制限より大きい
E_RSATR
-11
予約属性
·cycatr に未定義の値が指定された
E_PAR
-17
パラメータエラー
·cychdr が NULL
·cyctim が 0
■ ディスパッチ要因
本システムコールでディスパッチは起きません。
■ 解説
周期ハンドラを生成し , 周期ハンドラ ID を割り当てます。周期ハンドラは , 指定され
た時間間隔で動くタスク独立部のハンドラです。
exinf は , 対象となる周期ハンドラに関する情報を入れておくためにユーザが自由に使
用できます。ここで指定した情報は , 周期ハンドラにパラメータとして渡すほか ,
tk_ref_cyc で参照できます。ユーザの情報を入れるためにもっと大きな領域が必要な場
合や , 途中で内容を変更したい場合があれば , ユーザプログラムでそのためのメモリを
確保し , そのアドレスを exinf に入れます。OS では exinf の内容については関知しませ
ん。
表 3.8-2 tk_cre_cyc の cycatr で無視される定数マクロ
属性
TA_ASM
値
0x00000000
意味
対象周期ハンドラをアセンブラで記述
cycatr には , TA_HLNG を必ず指定してください。
T-REALOS は , 周期ハンドラの記述言語は C 言語だけをサポートしています。そのた
め , cycatr に TA_ASM を指定した場合も , 周期ハンドラが C 言語で記述されているも
のとして処理されますが , T-Kernel 仕様との互換性は保証されません。
TA_STA が指定された場合は , 周期ハンドラの生成時から周期ハンドラは動作状態と
なり, cyctimおよびcycphsで指定された時間間隔で周期ハンドラを起動します。
TA_STA
を指定しなかった場合 , 起動周期の計測は行いますが周期ハンドラは起動しません。
TA_PHS が指定された場合 , tk_sta_cyc によって周期ハンドラが活性化されても起動周
期はリセットされず , 周期ハンドラの生成時から計測している周期を維持します。
TA_PHS が指定されていない場合 , tk_sta_cyc によって起動周期がリセットされ ,
tk_sta_cyc 呼出し時から cyctim 間隔で周期ハンドラを起動します。tk_sta_cyc によるリ
セットでは cycphs は適用しません。この場合 , tk_sta_cyc から n 回目の周期ハンドラの
起動は tk_sta_cyc 呼出し時から cyctim × n 以上の時間が経過した後となります。
cychdr は起動する周期ハンドラの先頭アドレスを指定します。cychdr が不正な場合で
も , エラーチェックを行わず , 動作は保証されません。周期ハンドラの記述形式につい
ては , 「 ユーザーズガイド 『4.6 周期ハンドラ』」を参照してください。
168
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.8 時間管理機能のシステムコール
Support
Soft
Ma nual
cycphs は本システムコールによって周期ハンドラを生成してから最初の周期ハンドラ
の起動までの時間を表します。その後は cyctim 間隔で周期起動を繰り返します。この
場合 , 周期ハンドラの n 回目の起動は周期ハンドラを生成してから cycphs + cyctim ×
(n - 1) 以上の時間が経過した後になります。cycphs に 0 が指定された場合 , 周期ハンド
ラの生成直後に周期ハンドラを起動します。
TA_STA, TA_PHS と cyctim, cycphs の関係について , 図 3.8-1 に示します。
図 3.8-1 周期ハンドラの起動タイミング
周期ハンドラ
起動
tk_cre_cyc
(TA_STAあり)
起動位相
(cycphs)
起動周期
(cyctim)
起動周期
(cyctim)
起動周期
(cyctim)
(a) TA_STAが指定された場合
周期ハンドラ
tk_sta_cyc 起動
tk_cre_cyc
(TA_STAなし)
起動位相
(cycphs)
起動周期
(cyctim)
起動周期
(cyctim)
周期ハンドラ
起動
起動周期
(cyctim)
(b) TA_STAが指定なし, TA_PHSが指定された場合
tk_cre_cyc
(TA_STAなし)
起動位相
(cycphs)
tk_sta_cyc
起動周期
(cyctim)
周期ハンドラ
起動
起動周期
(cyctim)
周期ハンドラ
起動
起動周期
(cyctim)
(c) TA_STAが指定なし, TA_PHSが指定なしの場合
pk_ccyc が不正な場合でも , エラーチェックを行わず , 動作は保証されません。
January 31, 2014, CM81-00210-2a
169
第 3 章 システムコールインタフェース
3.8 時間管理機能のシステムコール
Su pp or t
3.8.2.2
So ft
Manu al
tk_del_cyc(Delete Cyclic Handler)
周期ハンドラを削除します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_del_cyc ( ID cycid ) ;
■ パラメータ
● 入力
cycid
周期ハンドラ ID
(Cyclic Handler ID)
● 出力
ercd
エラーコード (Error Code)
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·cycid が 0 以下または最大周期ハンドラ数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·cycid の周期ハンドラが存在しない
■ ディスパッチ要因
本システムコールでディスパッチは起きません。
■ 解説
周期ハンドラを削除します。具体的には , 対象周期ハンドラを未生成状態にして ID 番
号を解放します。
170
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.8 時間管理機能のシステムコール
Support
3.8.2.3
Soft
Ma nual
tk_sta_cyc(Start Cyclic Handler)
周期ハンドラの動作を開始します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_sta_cyc ( ID cycid ) ;
■ パラメータ
● 入力
cycid
周期ハンドラ ID
(Cyclic Handler ID)
● 出力
ercd
エラーコード (Error Code)
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·cycid が 0 以下または最大周期ハンドラ数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·cycid の周期ハンドラが存在しない
■ ディスパッチ要因
本システムコールでディスパッチは起きません。
■ 解説
cycid で指定された周期ハンドラを動作状態にします。
TA_PHS 属性を指定している場合 , 周期ハンドラの起動周期はリセットされずに周期
ハンドラを動作状態にします。既に動作状態の場合 , 動作状態を維持して本システム
コールは正常終了します。
TA_PHS 属性を指定していない場合 , 起動周期をリセットして周期ハンドラを動作状
態にします。既に動作状態の場合 , 起動周期のリセットをしたうえで動作状態を維持し
ます。したがって , 次に周期ハンドラを起動するのは cyctim 後となります。
January 31, 2014, CM81-00210-2a
171
第 3 章 システムコールインタフェース
3.8 時間管理機能のシステムコール
Su pp or t
3.8.2.4
So ft
Manu al
tk_stp_cyc(Stop Cyclic Handler)
周期ハンドラの動作を停止します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_stp_cyc ( ID cycid ) ;
■ パラメータ
● 入力
cycid
周期ハンドラ ID
(Cyclic Handler ID)
● 出力
ercd
エラーコード (Error Code)
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·cycid が 0 以下または最大周期ハンドラ数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·cycid の周期ハンドラが存在しない
■ ディスパッチ要因
本システムコールでディスパッチは起きません。
■ 解説
cycid で指定された周期ハンドラを停止します。既に停止状態の場合 , その状態を維持
したまま正常終了します。
■ 補足事項
tk_cre_cyc では回数の指定がないので , いったん定義された周期ハンドラは , tk_stp_cyc
によって停止するか , 周期起動ハンドラを削除するまで周期起動を繰り返します。
複数のタイムイベントハンドラが同時に動く場合 , それらのハンドラはシリアルに起
動します (1 つのハンドラの実行を終了してから別のハンドラの実行を始める )。また ,
タイムイベントハンドラはタスク独立部なので遅延ディスパッチの原則を適用しま
す。
172
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.8 時間管理機能のシステムコール
Support
3.8.2.5
Soft
Ma nual
tk_ref_cyc(Refer Cyclic Handler Status)
周期ハンドラの状態を参照します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_ref_cyc ( ID cycid, T_RCYC *pk_rcyc ) ;
typedef struct t_rcyc {
VP
exinf;
RELTIM
lfttim;
UINT
cycstat;
} T_RCYC;
■ パラメータ
● 入力
cycid
周期ハンドラ ID (Cyclic Handler ID)
pk_rcyc
周期ハンドラの状態を返すパケットの先頭アドレス
(Packet of Refer Cyclic Handler)
ercd
エラーコード (Error Code)
● 出力
● pk_rcyc に返されるデータ
exinf
拡張情報 (Extended Information)
lfttim
次のハンドラ起動までの残り時間 (Left Time)
cycstat
周期ハンドラの状態 (Cyclic Handler Status)
cycstat:= (TCYC_STP | TCYC_STA)
表 3.8-3 tk_ref_cyc の cycstat に返される値
状態
値
意味
TCYC_STP
0x00
周期ハンドラが動作していない
TCYC_STA
0x01
周期ハンドラが動作している
January 31, 2014, CM81-00210-2a
173
第 3 章 システムコールインタフェース
3.8 時間管理機能のシステムコール
Su pp or t
So ft
Manu al
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·cycid が 0 以下または最大周期ハンドラ数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·cycid の周期ハンドラが存在しない
■ ディスパッチ要因
本システムコールでディスパッチは起きません。
■ 解説
cycid で指定された周期ハンドラの状態を参照して周期ハンドラの状態 cycstat, 次のハ
ンドラ起動までの残り時間 lfttim, 拡張情報 exinf を復帰値として返します。
pk_rcyc が不正な場合でも , エラーチェックを行わず , 動作は保証されません。
174
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.8 時間管理機能のシステムコール
Support
3.8.3
Soft
Ma nual
アラームハンドラ機能のシステムコール
アラームハンドラ機能のシステムコールを説明します。
■ アラームハンドラ機能のシステムコール
アラームハンドラ機能は , 以下の 5 種類のシステムコールで構成されます。
• tk_cre_alm(Create Alarm Handler)
• tk_del_alm(Delete Alarm Handler)
• tk_sta_alm(Start Alarm Handler)
• tk_stp_alm(Stop Alarm Handler)
• tk_ref_alm(Refer Alarm Handler Status)
January 31, 2014, CM81-00210-2a
175
第 3 章 システムコールインタフェース
3.8 時間管理機能のシステムコール
Su pp or t
3.8.3.1
So ft
Manu al
tk_cre_alm(Create Alarm Handler)
アラームハンドラを生成します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ID almid = tk_cre_alm ( T_CALM *pk_calm ) ;
typedef struct t_calm {
VP
exinf;
ATR almatr;
FP
almhdr;
} T_CALM;
■ パラメータ
● 入力
アラームハンドラ定義情報
pk_calm
(Packet of Create Alarm Handler)
● pk_calm に設定するデータ
exinf
拡張情報 (Extended Information)
almatr
アラームハンドラ属性 (Alarm Handler Attribute)
almatr := TA_HLNG
表 3.8-4 tk_cre_alm の almatr で指定できる定数マクロ
属性
値
TA_HLNG
almhdr
0x00000001
意味
対象アラームハンドラを C 言
語で記述
アラームハンドラアドレス (Alarm Handler Address)
● 出力
almid
アラームハンドラ ID (Alarm Handler ID)
またはエラーコード (Error Code)
■ エラーコード
E_LIMIT
-34
アラームハンドラの数がシステムの制限より大きい
E_RSATR
-11
予約属性
·almatr に未定義の値が指定された
E_PAR
-17
パラメータエラー
·almhdr が NULL
176
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.8 時間管理機能のシステムコール
Support
Soft
Ma nual
■ ディスパッチ要因
本システムコールでディスパッチは起きません。
■ 解説
アラームハンドラを生成してアラームハンドラ ID を割り当てます。アラームハンドラ
( 指定時刻起動ハンドラ ) は , 指定された時刻に起動するタスク独立部のハンドラです。
exinf は , 対象となるアラームハンドラに関する情報を入れておくためにユーザが自由
に使用できます。ここで指定した情報は , アラームハンドラにパラメータとして渡すほ
か , tk_ref_alm で参照できます。ユーザの情報を入れるためにもっと大きな領域が必要
な場合や , 途中で内容を変更したい場合があれば , ユーザプログラムでそのためのメモ
リを確保して , そのアドレスを exinf に入れます。なお , OS は exinf の内容を関知しま
せん。
表 3.8-5 tk_cre_alm の almatr で無視される定数マクロ
属性
TA_ASM
値
0x00000000
意味
対象アラームハンドラをアセンブラで記述
almatr には , TA_HLNG を必ず指定してください。
T-REALOS は , アラームハンドラの記述言語は C 言語だけをサポートしています。そ
のため , almatr に TA_ASM を指定した場合も , アラームハンドラが C 言語で記述され
ているものとして処理されますが , T-Kernel 仕様との互換性は保証されません。
almhdr は起動するアラームハンドラの先頭アドレスを指定します。また , almhdr が不
正な場合でも , エラーチェックを行わず , 動作は保証されません。アラームハンドラの
記述形式は , 「 ユーザーズガイド 『4.7 アラームハンドラ』」を参照してください。
pk_calm が不正な場合でも , エラーチェックを行わず , 動作は保証されません。
January 31, 2014, CM81-00210-2a
177
第 3 章 システムコールインタフェース
3.8 時間管理機能のシステムコール
Su pp or t
3.8.3.2
So ft
Manu al
tk_del_alm(Delete Alarm Handler)
アラームハンドラを削除します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_del_alm ( ID almid ) ;
■ パラメータ
● 入力
almid
アラームハンドラ ID
(Alarm Handler ID)
● 出力
ercd
エラーコード (Error Code)
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·almid が 0 以下または最大アラームハンドラ数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·almid のアラームハンドラが存在しない
■ ディスパッチ要因
本システムコールでディスパッチは起きません。
■ 解説
アラームハンドラを削除します。具体的には , 対象アラームハンドラを未生成状態にし
て ID 番号を解放します。
178
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.8 時間管理機能のシステムコール
Support
3.8.3.3
Soft
Ma nual
tk_sta_alm(Start Alarm Handler)
アラームハンドラの動作を開始します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_sta_alm ( ID almid, RELTIM almtim ) ;
■ パラメータ
● 入力
almid
アラームハンドラ ID
(Alarm Handler ID)
almtim
アラームハンドラ起動時刻 (Alarm Handler Time)
ercd
エラーコード (Error Code)
● 出力
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·almid が 0 以下または最大アラームハンドラ数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·almid のアラームハンドラが存在しない
■ ディスパッチ要因
本システムコールでディスパッチは起きません。
■ 解説
almid で指定されたアラームハンドラの起動時刻を設定して動作状態にします。
almtim は相対時刻で , 本システムコールが呼び出された時刻から almtim で指定された
時間が経過した後にアラームハンドラを起動します。既にアラームハンドラの起動時
刻が設定されて動作状態であった場合 , その設定を解除した後に新たに起動時刻を設
定して動作状態とします。almtim=0 の場合 , 起動時刻設定直後にアラームハンドラを
起動します。起動されたアラームハンドラの処理終了後に停止状態となります。
January 31, 2014, CM81-00210-2a
179
第 3 章 システムコールインタフェース
3.8 時間管理機能のシステムコール
Su pp or t
3.8.3.4
So ft
Manu al
tk_stp_alm(Stop Alarm Handler)
アラームハンドラの動作を停止します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_stp_alm ( ID almid ) ;
■ パラメータ
● 入力
almid
アラームハンドラ ID
(Alarm Handler ID)
● 出力
ercd
エラーコード (Error Code)
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·almid が 0 以下または最大アラームハンドラ数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·almid のアラームハンドラが存在しない
■ ディスパッチ要因
本システムコールでディスパッチは起きません。
■ 解説
アラームハンドラを停止状態にします。既に停止状態の場合 , その状態を継続して正常
終了します。
180
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.8 時間管理機能のシステムコール
Support
3.8.3.5
Soft
Ma nual
tk_ref_alm(Refer Alarm Handler Status)
アラームハンドラの状態を参照します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_ref_alm ( ID almid, T_RALM *pk_ralm ) ;
typedef struct t_ralm {
VP
exinf;
RELTIM
lfttim;
UINT
almstat;
} T_RALM;
■ パラメータ
● 入力
almid
アラームハンドラ ID (Alarm Handler ID)
pk_ralm
アラームハンドラの状態を返すパケットの先頭アドレス
(Packet of Refer Alarm Handler)
● 出力
エラーコード (Error Code)
ercd
● pk_ralm に返されるデータ
exinf
拡張情報 (Extended Information)
lfttim
次のハンドラ起動までの残り時間 (Left Time)
almstat
アラームハンドラの状態 (Alarm Handler Status)
almstat := (TALM_STP | TALM_STA)
表 3.8-6 tk_ref_alm の almstat に返される値
状態
値
意味
TALM_STP
0x00
アラームハンドラが動作して
いない
TALM_STA
0x01
アラームハンドラが動作して
いる
January 31, 2014, CM81-00210-2a
181
第 3 章 システムコールインタフェース
3.8 時間管理機能のシステムコール
Su pp or t
So ft
Manu al
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·almid が 0 以下または最大アラームハンドラ数より大きい
E_NOEXS
-42
オブジェクトが存在していない
·almid のアラームハンドラが存在しない
■ ディスパッチ要因
本システムコールでディスパッチは起きません。
■ 解説
almid で指定されたアラームハンドラの状態を参照してハンドラ起動までの残り時間
lfttim, 拡張情報 exinf を復帰値として返します。
アラームハンドラが動作している (TALM_STA) 場合 , lfttim には次にアラームハンドラ
を起動するまでの相対時間を返します。tk_sta_alm で指定された almtim ≧ lfttim ≧ 0 の
範囲の値となります。lfttim はタイマ割込みごとに減算するため , 次のタイマ割込みで
アラームハンドラが起動する場合 , lfttim は 0 となります。
アラームハンドラが動作していない (TALM_STP) 場合 , lfttim は不定です。
pk_ralm が不正な場合でも , エラーチェックを行わず , 動作は保証されません。
182
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.9 割込み管理機能のシステムコール
Support
3.9
Soft
Ma nual
割込み管理機能のシステムコール
割込み管理機能のシステムコールを説明します。
■ 割込み管理機能のシステムコール
割込み管理機能のシステムコールは , 以下の 2 種類のシステムコールで構成されます。
• tk_def_int(Define Interrupt Handler)
• tk_ret_int(Return from Interrupt Handler)
また , 割込み管理機能には , 以下の 3 種類のマクロがあります。
• DI
• EI
• isDI
January 31, 2014, CM81-00210-2a
183
第 3 章 システムコールインタフェース
3.9 割込み管理機能のシステムコール
Su pp or t
3.9.1
So ft
Manu al
tk_def_int(Define Interrupt Handler)
割込みハンドラを定義または解除します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_def_int ( UINT dintno, T_DINT *pk_dint ) ;
typedef struct t_dint {
ATR intatr;
FP
inthdr;
} T_DINT;
■ パラメータ
● 入力
dintno
割込みベクタ番号
pk_dint
割込みハンドラ定義情報の先頭アドレス
(Packet of Define Interrupt Handler)
● pk_dint に設定するデータ
割込みハンドラ属性 (Interrupt Handler Attribute)
intatr
intatr := (TA_ASM ∥ TA_HLNG)
表 3.9-1 tk_def_int の intatr で指定できる定数マクロ
属性
値
意味
TA_ASM
0x00000000
対象ハンドラをアセンブラで
記述
TA_HLNG
0x00000001
対象ハンドラを C 言語で記述
割込みハンドラアドレス
inthdr
(Interrupt Handler Address)
● 出力
ercd
エラーコード (Error Code)
■ エラーコード
E_OK
0
正常終了
E_RSATR
-11
予約属性
·intatr に未定義の属性が指定された
184
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.9 割込み管理機能のシステムコール
Support
E_PAR
-17
Soft
Ma nual
パラメータエラー
·dintno がコンフィギュレータで定義した最大割込み数より
も大きい
■ ディスパッチ要因
本システムコールでディスパッチは起きません。
■ 解説
割込みハンドラを定義して割込みハンドラを使用可能にします。または , 割込みハンド
ラの定義を解除します。割込みは , デバイスからの外部割込み , 例外による割込みおよ
びソフトウェア割込みのすべてを含みます。
dintno は , 割込みハンドラを定義する割込みベクタ番号を指定します。0 から 255 まで
の値を指定可能です。既に定義済みの割込み番号に割込みハンドラを再定義すること
もできます。再定義の場合も , あらかじめその番号のハンドラの定義解除を行っておく
必要はありません。
pk_dint は , 割込みハンドラの定義情報を格納する T_DINT 構造体のアドレスです。
pk_dint の値と pk_def_int の動作の関係を以下に示します。
表 3.9-2 tk_def_int と pk_dint との動作関係
pk_dint の値
tk_def_int の動作
正常アドレス (NULL 以外 )
割込みハンドラの定義
NULL
割込みハンドラの定義解除
不正アドレス
動作は保証しない
intatr は , 割込みハンドラの記述言語を指定します。inthdr は , 割込みハンドラの先頭ア
ドレスを指定します。inthdr のアドレスが不当な場合は , 対応する割込みが発生したと
きに不当アドレスにジャンプするため , その後のシステムの動作は保証されません。
なお , 割込みハンドラとタスクの実行優先順位については , 「ユーザーズガイド 『2.6
タスク / ハンドラの実行優先順位』」を参照してください。また , 割込みハンドラの記
述形式は , 「ユーザーズガイド 『4.8 割込みハンドラ』」を参照してください。
January 31, 2014, CM81-00210-2a
185
第 3 章 システムコールインタフェース
3.9 割込み管理機能のシステムコール
Su pp or t
3.9.2
So ft
Manu al
tk_ret_int(Return from Interrupt Handler)
割込みハンドラから復帰します。
タスク部
×
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
void tk_ret_int ( void ) ;
■ パラメータ
● 入力
なし
● 出力
なし
■ エラーコード
なし
■ ディスパッチ要因
現在実行中のタスクより優先度の高いタスクが実行可能状態になった場合 , 実行可能
状態になったタスクにディスパッチします。
■ 解説
アセンブラ言語で記述された割込みハンドラの終了時に本システムコールを呼び出す
ことにより , 遅延ディスパッチを発生させます。
186
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.9 割込み管理機能のシステムコール
Support
3.9.3
Soft
Ma nual
DI
すべての外部割込みを禁止します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
void DI ( UINT intsts );
■ パラメータ
● 入力
なし
● 出力
intsts
割込みの状態 (FAULTMASK レジスタの値 )
■ エラーコード
なし
■ ディスパッチ要因
本システムコールでディスパッチは起きません。
■ 解説
FAULTMASK レジスタの値を 1( 割込み禁止 ) に設定してすべての外部割込みを禁止し
ます。本システムコールを呼び出す前の FAULTMASK レジスタの値を intsts に保存し
ます。
〈使用例〉
void foo()
{
UINT intsts;
DI(intsts);
if ( isDI(intsts) ) {
/* この関数が呼び出された時点で既に割込み禁止であった */
} else {
/* この関数が呼び出された時点では割込み許可であった */
}
EI(intsts);
}
January 31, 2014, CM81-00210-2a
187
第 3 章 システムコールインタフェース
3.9 割込み管理機能のシステムコール
Su pp or t
3.9.4
So ft
Manu al
EI
すべての外部割込みを許可します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
void EI ( UINT intsts );
■ パラメータ
● 入力
intsts
割込みの状態 (FAULTMASK レジスタの値 )
● 出力
なし
■ エラーコード
なし
■ ディスパッチ要因
本システムコールでディスパッチは起きません。
■ 解説
すべての外部割込みを許可します。正確には , intsts で指定された FAULTMASK レジス
タの値が 0( 割込み許可 ) の場合 , FAULTMASK レジスタの値を 0 に設定して割込み許
可の状態に戻します。
intsts で指定された FAULTMASK レジスタの値が 1 ( 割込み禁止 ) の場合 , EI() を実行
しても割込みを許可しません。ただし , intsts として 0 が指定された場合 , 必ず割込み
を許可します。
intsts は , DI() で保存した値または 0 のいずれかです。それ以外の値を指定した場合 , 動
作は保証されません。
〈使用例〉
void foo()
{
UINT intsts;
DI(intsts);
if ( isDI(intsts) ) {
/* この関数が呼び出された時点で既に割込み禁止であった */
} else {
/* この関数が呼び出された時点では割込み許可であった */
}
EI(intsts);
}
188
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.9 割込み管理機能のシステムコール
Support
3.9.5
Soft
Ma nual
isDI
外部割込み禁止状態を調べます。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
BOOL stat = isDI ( UINT intsts );
■ パラメータ
● 入力
intsts
割込みの状態 (FAULTMASK レジスタの値 )
stat
TRUE(0 以外の値 ): 割込み禁止状態
● 出力
FALSE: 割込み許可状態
■ エラーコード
なし
■ ディスパッチ要因
本システムコールでディスパッチは起きません。
■ 解説
intsts に保存されている FAULTMASK レジスタの値を元に割込み許可 / 禁止状態を調べ
ます。intsts に保存された FAULTMASK レジスタの値が 1 の場合は割込み禁止状態と
判断し , 0 の場合は割込み許可と判断します。ただし , 本システムコールで調べること
ができるのは intsts を保存した DI() 発行前の割込み禁止状態だけです。現在の割込み
禁止状態を確認する場合 , tk_ref_sys を使用してください。
intsts は DI() で保存した値です。それ以外の値を指定した場合 , 動作は保証されません。
〈使用例〉
void foo()
{
UINT intsts;
DI(intsts);
if ( isDI(intsts) ) {
/* この関数が呼び出された時点で既に割込み禁止であった */
} else {
/* この関数が呼び出された時点では割込み許可であった */
}
EI(intsts);
}
January 31, 2014, CM81-00210-2a
189
第 3 章 システムコールインタフェース
3.10 システム状態管理機能のシステムコール
Su pp or t
3.10
So ft
Manu al
システム状態管理機能のシステムコール
システム状態管理機能のシステムコールを説明します。
■ システム状態管理機能のシステムコール
システム状態管理機能は , 以下の 6 種類のシステムコールで構成されます。
• tk_rot_rdq(Rotate Ready Queue)
• tk_get_tid(Get Task Identifier)
• tk_dis_dsp(Disable Dispatch)
• tk_ena_dsp(Enable Dispatch)
• tk_ref_sys(Refer System Status)
• tk_ref_ver(Refer Version Information)
190
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.10 システム状態管理機能のシステムコール
Support
3.10.1
Soft
Ma nual
tk_rot_rdq(Rotate Ready Queue)
タスクの優先順位を回転します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_rot_rdq ( PRI tskpri ) ;
■ パラメータ
● 入力
tskpri
優先度 (Task Priority)
表 3.10-1 tk_rot_rdq の tskpri で指定できる定数マクロ
名前
値
TPRI_RUN
0
意味
現在実行中のタスクの優先度
● 出力
ercd
エラーコード (Error Code)
■ エラーコード
E_OK
0
正常終了
E_PAR
-17
パラメータエラー
·tskpri が負または最大優先度より大きい
■ ディスパッチ要因
本システムコールを呼び出したタスクと同じ優先度が指定された場合 , かつその優先
度のタスクがほかにある場合に , 次の優先順位のタスクにディスパッチします。
■ 解説
tskpri で指定された優先度のタスクの優先順位を回転します。すなわち , 対象優先度を
持った実行できる状態のタスクの中で最も高い優先順位を持つタスクを同じ優先度を
持つタスクの中で最低の優先順位とします。
tskpri に TPRI_RUN(=0) を指定すると , 実行状態にあるタスクの優先度が tskpri に指定
された場合と同じ動作をします。周期ハンドラなどのタスク独立部から tskpri に
TPRI_RUN を指定して本システムコールを呼び出すこともできます。
January 31, 2014, CM81-00210-2a
191
第 3 章 システムコールインタフェース
3.10 システム状態管理機能のシステムコール
Su pp or t
So ft
Manu al
■ 補足事項
対象優先度を持った実行できる状態のタスクがない場合や , 1 つしかない場合 , 何もせ
ずに正常終了します。
ディスパッチ禁止状態では , 同じ優先度を持つタスクの中で最高の優先順位を持った
タスクが実行されているとは限らないため , この方法で自タスクの実行順位が同じ優
先度を持つタスクの中で最低になるとは限りません。
tk_rot_rdq の実行例を図 3.10-1 と図 3.10-2 に示します。図 3.10-1 の状態で tskpri = 2 を
パラメータとして本システムコールが呼び出されると , 新しい優先順位は図 3.10-2 に
なり , 次に実行するのはタスク C になります。
図 3.10-1 tk_rot_rdq 実行前の優先順位
優先度
高
↑
│
↓
低
1
2
[タスクB]→[タスクC]→[タスクD]
3
[タスクE]
図 3.10-2 tk_rot_rdq(tskpri=2) 実行後の優先順位
優先度
高
↑
│
↓
低
1
2
[タスクC]→[タスクD]→[タスクB]
3
[タスクE]
(注意事項) 次に実行されるのはタスクC です。
192
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.10 システム状態管理機能のシステムコール
Support
3.10.2
Soft
Ma nual
tk_get_tid(Get Task Identifier)
実行状態タスクのタスク ID を参照します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ID tskid = tk_get_tid ( void ) ;
■ パラメータ
● 入力
なし
● 出力
tskid
実行状態のタスク ID (Task ID)
■ エラーコード
なし
■ ディスパッチ要因
本システムコールでディスパッチは起きません。
■ 解説
現在実行状態にあるタスクの ID 番号を tskid に設定して復帰します。
タスク部から呼び出した場合 , 自タスクの ID が返ります。現在実行状態のタスクがな
い場合 , 0 が返ります。
■ 補足事項
本システムコールで返すタスク ID は tk_ref_sys で返す runtskid と同一です。
January 31, 2014, CM81-00210-2a
193
第 3 章 システムコールインタフェース
3.10 システム状態管理機能のシステムコール
Su pp or t
3.10.3
So ft
Manu al
tk_dis_dsp(Disable Dispatch)
ディスパッチを禁止します。
タスク部
○
タスク独立部
×
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_dis_dsp ( void ) ;
■ パラメータ
● 入力
なし
● 出力
ercd
エラーコード (Error Code)
■ エラーコード
E_OK
0
正常終了
E_CTX
-25
コンテキストエラー
· タスク独立部からの呼出し
■ ディスパッチ要因
本システムコールでディスパッチは起きません。
■ 解説
タスクのディスパッチを禁止します。これ以後 , tk_ena_dsp を実行するまでの間はディ
スパッチ禁止状態となり , 自タスクが実行状態から実行可能状態に移りません。また ,
待ち状態に移ることもできなくなります。ただし , 外部割込みは禁止しませんので ,
ディスパッチ禁止状態の場合でも割込みハンドラは起動します。
ディスパッチ禁止状態は , 実行中のタスクが割込みハンドラによってプリエンプト
(CPU の実行権の横取り ) される可能性がありますが , ほかのタスクによってプリエン
プトされる可能性はありません。
ディスパッチ禁止状態の間は , 具体的には以下の動作をします。
• 割込みハンドラあるいは tk_dis_dsp
を実行したタスクから呼び出されたシステム
コールによって , tk_dis_dsp を実行したタスクより高い優先度のタスクが実行可能
状態となっても , そのタスクにはディスパッチしません。優先度の高いタスクへの
ディスパッチはディスパッチ禁止状態が終了するまで遅延します。
• tk_dis_dsp を実行したタスクが , 自タスクを待ち状態に移す可能性があるシステム
コール (tk_slp_tsk, tk_wai_sem など ) を呼び出した場合 , E_CTX のエラーで復帰しま
す。
• tk_ref_sys によってシステム状態を参照した場合, sysstat としてTSS_DDSP が返りま
す。
既にディスパッチ禁止状態にあるタスクが tk_dis_dsp を呼び出した場合, ディスパッチ
194
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.10 システム状態管理機能のシステムコール
Support
Soft
Ma nual
禁止状態がそのまま継続するだけで正常終了します。ただし , tk_dis_dsp を何回か呼び
出しても , その後に tk_ena_dsp を 1 回呼び出すだけでディスパッチ禁止状態を解除し
ますので注意してください。
■ 補足事項
ディスパッチ禁止状態では実行状態のタスクを休止状態や未登録状態に移行できませ
ん。割込みおよびディスパッチ禁止状態で実行状態のタスクが tk_ext_tsk または
tk_exd_tsk を呼び出した場合 , E_CTX のエラーを検出します。ただし , tk_ext_tsk や
tk_exd_tsk は元のコンテキストに復帰しないシステムコールなので , これらのシステム
コールの復帰値としてエラーを通知できません。
January 31, 2014, CM81-00210-2a
195
第 3 章 システムコールインタフェース
3.10 システム状態管理機能のシステムコール
Su pp or t
3.10.4
So ft
Manu al
tk_ena_dsp(Enable Dispatch)
ディスパッチを許可します。
タスク部
○
タスク独立部
×
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_ena_dsp ( void ) ;
■ パラメータ
● 入力
なし
● 出力
ercd
エラーコード (Error Code)
■ エラーコード
E_OK
0
正常終了
E_CTX
-25
コンテキストエラー
· タスク独立部からの呼出し
■ ディスパッチ要因
遅延されているディスパッチがある場合にディスパッチします。
■ 解説
タスクのディスパッチを許可します。すなわち , tk_dis_dsp によって設定されていた
ディスパッチ禁止状態を解除します。
ディスパッチ禁止状態ではないタスクが本システムコールを呼び出した場合 , ディス
パッチを許可した状態がそのまま継続するだけで正常終了します。
196
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.10 システム状態管理機能のシステムコール
Support
3.10.5
Soft
Ma nual
tk_ref_sys(Refer System Status)
システム状態を参照します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_ref_sys ( T_RSYS *pk_rsys ) ;
typedef struct t_rsys {
UINT sysstat;
ID
runtskid;
ID
schedtskid;
} T_RSYS;
■ パラメータ
● 入力
システム状態を返すパケットアドレス
pk_rsys
(Packet of Refer System)
● 出力
エラーコード (Error Code)
ercd
● pk_rsys に返されるデータ
sysstat
システム状態 (System State)
sysstat:= ( TSS_TSK | [TSS_DDSP] | [TSS_DINT] )
∥ ( TSS_QTSK | [TSS_DDSP] | [TSS_DINT] )
∥ ( TSS_INDP )
表 3.10-2 tk_ref_sys の sysstat で指定できる定数マクロ
状態
値
意味
TSS_TSK
0
タスク部実行中
TSS_DDSP
1
ディスパッチ禁止中
TSS_DINT
2
割込み禁止中
TSS_INDP
4
タスク独立部実行中
TSS_QTSK
8
準タスク部実行中
runtskid
現在実行状態にあるタスクの ID (Running Task ID)
schedtskid
実行状態にすべきタスクの ID (Scheduled Task ID)
January 31, 2014, CM81-00210-2a
197
第 3 章 システムコールインタフェース
3.10 システム状態管理機能のシステムコール
Su pp or t
So ft
Manu al
■ エラーコード
E_OK
0
正常終了
■ ディスパッチ要因
本システムコールでディスパッチは起きません。
■ 解説
実行状態を参照してディスパッチ禁止中 , タスク独立部実行中などといった情報を復
帰値として返します。
runtskid には現在実行中のタスクの ID, schedtskid には実行状態にすべきタスクの ID を
返します。通常は runtskid = schedtskid となりますが , ディスパッチ禁止中やタスク独
立部実行中に , より優先度の高いタスクが存在する場合は runtskid ≠ schedtskid となり
ます。
なお , 該当タスクがない場合 , 0 を返します。
pk_rsys が不正な場合でも , エラーチェックを行わず , 動作は保証されません。
198
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.10 システム状態管理機能のシステムコール
Support
3.10.6
Soft
Ma nual
tk_ref_ver(Refer Version Information)
カーネルのバージョン情報を参照します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_ref_ver ( T_RVER *pk_rver ) ;
typedef struct t_rver {
UH
maker;
UH
prid;
UH
spver;
UH
prver;
UH
prno[4];
} T_RVER;
■ パラメータ
● 入力
pk_rver
バージョン情報を返すパケットの先頭アドレス
(Packet of Version Information)
● 出力
ercd
エラーコード (Error Code)
● pk_rver に返されるデータ
カーネルのメーカコード (Maker)
maker
=0x0009( メーカコード = 富士通,Spansion )
カーネルの識別番号 (Product ID)
prid
=0x6B00(T-REALOS/M3)
仕様書バージョン番号 (Specification Version)
spver
=0x6101(T-Kernel ver.1.01)
カーネルのバージョン番号 (Product Version)
prver
=0x0100(V01L00)
カーネル製品の管理情報 (Product Number)
prno[4]
prno[0] = 0x0000(R00)
prno[1] ~ [3] = 0x0000( 未使用 )
■ エラーコード
E_OK
0
正常終了
■ ディスパッチ要因
本システムコールでディスパッチは起きません。
January 31, 2014, CM81-00210-2a
199
第 3 章 システムコールインタフェース
3.10 システム状態管理機能のシステムコール
Su pp or t
So ft
Manu al
■ 解説
使用しているカーネルのバージョン情報を参照して pk_rver で指定されるパケットに
返します。
pk_rver が不正な場合でも , エラーチェックを行わず , 動作は保証されません。
200
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.11 サブシステム機能のシステムコール
Support
3.11
Soft
Ma nual
サブシステム機能のシステムコール
サブシステム機能のシステムコールを説明します。
■ サブシステム機能のシステムコール
サブシステム機能は , 以下の 2 種類のシステムコールで構成されます。
• tk_def_ssy(Define Subsystem)
• tk_ref_ssy(Refer Subsystem Status)
January 31, 2014, CM81-00210-2a
201
第 3 章 システムコールインタフェース
3.11 サブシステム機能のシステムコール
Su pp or t
3.11.1
So ft
Manu al
tk_def_ssy(Define Subsystem)
サブシステムを定義または解除します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_def_ssy ( ID ssid, T_DSSY *pk_dssy ) ;
typedef struct t_dssy {
ATR ssyatr;
PRI ssypri;
FP
svchdr;
FP
breakfn;
FP
startupfn;
FP
cleanupfn;
FP
eventfn;
W resblksz;
} T_DSSY;
■ パラメータ
● 入力
ssid
サブシステム ID (Subsystem ID)
pk_dssy
サブシステム定義情報 (Packet of Define Subsystem) のパケット先頭
アドレス
● pk_dssy に設定するデータ
ssyatr
サブシステム属性 (Subsystem Attribute)
ssypri
サブシステム優先度 (Subsystem Priority)
svchdr
拡張 SVC ハンドラアドレス (SVC Handler)
breakfn
ブレーク関数アドレス (Break Function)
startupfn スタートアップ関数アドレス (Start-up Function)
cleanupfn クリーンアップ関数アドレス (Clean-up Function)
eventfn
イベント処理関数アドレス (Event Function)
resblksz
リソース管理ブロックサイズ ( バイト数 )
(Resource Block Size)
● 出力
ercd
202
エラーコード (Error Code)
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.11 サブシステム機能のシステムコール
Support
Soft
Ma nual
■ エラーコード
E_OK
0
正常終了
E_RSATR
-11
予約属性
·ssyatr に未定義の値が指定された
E_PAR
-17
パラメータエラー
·ssypri が 1 より小さい,または最大サブシステム優先度より
大きい
E_ID
-18
不正 ID 番号
·ssid が 10 より小さい , または最大サブシステム数より
大きい
E_OBJ
-41
ssid は既に定義済みである
·pk_dssy ≠ NULL の場合
E_NOEXS
-42
ssid は定義されていない
·pk_dssy = NULL の場合
■ ディスパッチ要因
本システムコールでディスパッチは起きません。
■ 解説
ssid のサブシステムを定義または定義を削除します。
ほかのサブシステムと重複しないように 1 つのサブシステムに 1 つのサブシステム ID
を割り当ててください。OS に自動割当ての機能はありません。
サブシステム ID は 1 ~ 9 が T-Kernel 用に予約されています。10 ~最大サブシステム
数(コンフィギュレータで設定した最大サブシステム数)が使用できる番号となります。
T-Kernelは,サブシステムの機能は , 拡張 SVC ハンドラの呼出し機能だけをサポートし
ます。このため , t_dssy のパケットのデータのうち , svchdr 以外は T-Kernel との互換の
ために用意されており , その値は無視されます。
svchdr は拡張 SVC ハンドラとして呼び出す関数の先頭アドレスを指定します。拡張
SVC ハンドラは , サブシステムの API となる部分で , システムコールと同様の方法で
呼び出せます。
拡張 SVC ハンドラは C 言語だけで記述可能で , 以下の形式となります。
INT shdr( VP pk_para, FN fncd )
{
/*
fncd により分岐して処理
*/
return retcode; /* 拡張 SVC ハンドラの終了 */
}
fncd は機能コードです。機能コードの下位 8 ビットにはサブシステム ID が入ります。
残りの上位ビットは , サブシステム側で任意に使用できます。通常は , サブシステム内
January 31, 2014, CM81-00210-2a
203
第 3 章 システムコールインタフェース
3.11 サブシステム機能のシステムコール
Su pp or t
So ft
Manu al
の機能コードとして使用します。ただし , 機能コードは正の値でなければならないた
め , 最上位ビットは必ず 0 となります。
pk_para は呼出し側から渡されたパラメータをパケット形式にしたものです。パケット
の形式は , サブシステム側で任意に決められます。一般的には , C 言語で関数に引数を
渡すときのスタックの形式と同じになります。これは , 多くの場合 , C 言語の構造体の
形式と同じです。
拡張SVC ハンドラからの復帰値は, そのまま呼出し元へ関数の復帰値として戻します。
原則として , 負の値をエラー値 , 0 または正の値を正常時の復帰値とします。
なお , 何らかの理由で拡張 SVC の呼出しに失敗した場合は , 拡張 SVC ハンドラは呼び
出されずに呼出し元には OS のエラーコード ( 負の値 ) を返すため , それと混同しない
ようにしてください。
拡張 SVC ハンドラはタスク部から呼び出された場合 , 準タスク部として実行します。
タスク独立部からも呼出しが可能ですが , タスク独立部から呼び出された場合 , 拡張
SVC ハンドラもタスク独立部として実行します。
pk_dssy=NULL の場合 , ssid で指定されたサブシステムの定義を解除します。
204
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.11 サブシステム機能のシステムコール
Support
3.11.2
Soft
Ma nual
tk_ref_ssy(Refer Subsystem Status)
サブシステム定義情報を参照します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_ref_ssy ( ID ssid, T_RSSY *pk_rssy ) ;
typedef struct t_rssy {
PRI ssypri;
W resblksz;
} T_RSSY;
■ パラメータ
● 入力
ssid
サブシステム ID (Subsystem ID)
pk_rssy
サブシステム定義情報 (Packet of Refer Subsystem)
ercd
エラーコード (Error Code)
● 出力
● pk_rssy に返されるデータ
ssypri
サブシステム優先度 (Subsystem Priority)
resblksz
リソース管理ブロックサイズ ( バイト数 )
(Resource Block Size)
■ エラーコード
E_OK
0
正常終了
E_ID
-18
不正 ID 番号
·ssid が 10 より小さい , または 255 より大きい
E_NOEXS
-42
ssid は定義されていない。
·ssid のサブシステムが定義されていない
■ ディスパッチ要因
本システムコールでディスパッチは起きません。
■ 解説
ssid で指定された対象サブシステムの各種情報を参照します。
ssypri, resblksz は T-Kernel との互換性のために存在するメンバであり , T-REALOS は
使用しません。このため , これらの値は不定値となります。
pk_rssy が不正な場合でも , エラーチェックを行わず , 動作は保証されません。
January 31, 2014, CM81-00210-2a
205
第 3 章 システムコールインタフェース
3.12 デバイス管理機能のシステムコール
Su pp or t
3.12
So ft
Manu al
デバイス管理機能のシステムコール
デバイス管理機能のシステムコールを説明します。
■ デバイス管理機能のシステムコール
デバイス管理機能は , 以下の 15 種類のシステムコールで構成されます。
• tk_def_dev(Define Device)
• tk_ref_idv(Refer Initial Device Information)
• tk_opn_dev(Open Device)
• tk_cls_dev(Close Device)
• tk_rea_dev(Read Device)
• tk_srea_dev(Synchronous Read Device)
• tk_wri_dev(Write Device)
• tk_swri_dev(Synchronous Write Device)
• tk_wai_dev(Wait Device)
• tk_sus_dev(Suspend Device)
• tk_get_dev(Get Device)
• tk_ref_dev(Refer Device)
• tk_oref_dev(Refer Device)
• tk_lst_dev(List Device)
• tk_evt_dev(Event Device)
なお , 本節の内容をより理解するために ,「第 4 章 デバイスドライバ インタフェース」
もあわせてお読みください。
206
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.12 デバイス管理機能のシステムコール
Support
3.12.1
Soft
Ma nual
tk_def_dev(Define Device)
デバイスを登録または登録を削除します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ID devid = tk_def_dev ( UB *devnm, T_DDEV *ddev, T_IDEV *idev ) ;
typedef struct t_ddev {
VP
exinf;
ATR drvatr;
ATR devatr;
INT nsub;
W blksz;
FP
openfn;
FP
closefn;
FP
execfn;
FP
waitfn;
FP
abortfn;
FP
eventfn;
} T_DDEV;
typedef struct t_idev {
ID
evtmbfid;
} T_IDEV;
January 31, 2014, CM81-00210-2a
207
第 3 章 システムコールインタフェース
3.12 デバイス管理機能のシステムコール
Su pp or t
So ft
Manu al
■ パラメータ
● 入力
devnm
物理デバイス名 (Device Name)
ddev
デバイス登録情報 (Packet of Define Device)
● ddev に設定するデータ
exinf
拡張情報
drvatr
ドライバ属性 (Driver Attribute)
drvatr := [ TDA_OPENREQ ]
表 3.12-1 tk_def_dev の drvatr で指定できる定数マクロ
属性
値
TDA_OPENREQ
0x0001
意味
毎回オープン / クローズ
devatr
デバイス属性 (Device Attribute)
nsub
サブユニット数 ( Sub Unit No.)
blksz
デバイスのブロック数 (Block Size)
openfn
オープン関数エントリアドレス (Open Function)
closefn
クローズ関数エントリアドレス (Close Function)
execfn
処理開始関数エントリアドレス (Execute Function)
waitfn
完了待ち関数エントリアドレス (Wait Function)
abortfn
中止処理関数エントリアドレス (Abort Function)
eventfn
イベント関数エントリアドレス (Event Function)
● 出力
devid
デバイス ID (Device ID)
またはエラーコード (Error Code)
idev
デバイス初期情報 (Initial Device Information)
● idev に返されるデータ
evtmbfid
事象通知用メッセージバッファ ID
■ エラーコード
E_LIMIT
-34
デバイスの登録数がシステムの上限より大きい
E_PAR
-17
パラメータエラー
·devnm の長さが 0 または 8 より大きい
·nsub が負または 256 以上
E_NOEXS
-42
devnm のデバイスは存在しない
·ddev が NULL
■ ディスパッチ要因
他タスクがデバイス管理機能の API を呼び出して待ち状態の場合 , それが完了するま
で待ち状態となり , ディスパッチが発生する場合があります。
208
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.12 デバイス管理機能のシステムコール
Support
Soft
Ma nual
■ 解説
devnm のデバイス名でデバイスを登録します。devnm のデバイスが既に登録されてい
るときには新しい登録情報で更新します。更新の場合はデバイス ID を変更しません。
ddev=NULL の場合 , devnm のデバイス登録を削除します。
T_DDEV には以下の値を指定します。
• exinf
デバイス管理機能の API からデバイス処理関数 (openfn ~ eventfn) を呼び出したと
きに , デバイス処理関数の引数としてデバイスドライバに渡します。デバイスドラ
イバ側で任意に使用できます。
• drvatr
ドライバ属性を指定します。
• devatr
デバイス属性を指定します。デバイス属性の詳細は , 「第 4 章 デバイスドライバ
インタフェース」を参照してください。
• nsub
サブユニット数を指定します。サブユニットがないデバイスには 0 を指定します。
• blksz
デバイスのブロックサイズをバイト数で指定します。通常は , このサイズがデバイ
スの最小アクセスサイズとなります。
• openfn ~ eventfn
デバイス処理関数のエントリアドレスを指定します。デバイス処理関数の詳細は ,
「第 4 章 デバイスドライバ インタフェース」を参照してください。
evtmbfid にシステムデフォルトの事象通知用メッセージバッファ ID を返します。
idev=NULL とした場合 , デバイス初期情報を格納しません。システムデフォルトの事
象通知用メッセージバッファがない場合 , evtmbfid に 0 を設定します。
事象通知用メッセージバッファは , デバイスで発生した様々な事象 ( 例えば , メディア
の挿入 , バッテリ異常など ) を上位プログラムに通知するために使用するメッセージ
バッファの ID 番号です。デバイスの事象通知は , 「第 4 章 デバイスドライバ インタ
フェース」を参照してください。
ddev, idev が不正な場合でも , エラーチェックを行わず , 動作は保証されません。
January 31, 2014, CM81-00210-2a
209
第 3 章 システムコールインタフェース
3.12 デバイス管理機能のシステムコール
Su pp or t
3.12.2
So ft
Manu al
tk_ref_idv(Refer Initial Device Information)
デバイス初期情報を獲得します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_ref_idv ( T_IDEV *idev ) ;
typedef struct t_idev {
ID
evtmbfid;
} T_IDEV;
■ パラメータ
● 入力
idev
デバイス初期情報を格納する領域のアドレス
(Initial Device Information)
● 出力
ercd
エラーコード (Error Code)
● idev に返されるデータ
evtmbfid
事象通知用メッセージバッファ ID
(Event Messagebuffer ID)
■ エラーコード
E_OK
0
正常終了
■ ディスパッチ要因
他タスクがデバイス管理機能の API を呼び出して待ち状態の場合 , それが完了するま
で待ち状態となり , ディスパッチが発生する場合があります。
■ 解説
デバイス初期情報を獲得します。tk_def_dev システムコールで得られるものと同じ内容
です。
idev が不正な場合でも , エラーチェックを行わず , 動作は保証されません。
210
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.12 デバイス管理機能のシステムコール
Support
3.12.3
Soft
Ma nual
tk_opn_dev(Open Device)
デバイスをオープンします。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ID dd = tk_opn_dev ( UB *devnm, UINT omode ) ;
■ パラメータ
● 入力
devnm
デバイス名 (Device Name)
omode
オープンモード (Open Mode)
omode := (TD_READ ∥ TD_WRITE ∥ TD_UPDATE) | [TD_EXCL ∥
TD_WEXCL ∥ TD_REXCL]
表 3.12-2 tk_opn_dev の omode で指定できる定数マクロ
モード
値
意味
TD_READ
0x0001
読出し専用
TD_WRITE
0x0002
書込み専用
TD_UPDATE
0x0003
読出しおよび書込み
TD_EXCL
0x0100
排他
TD_WEXCL
0x0200
排他書込み
TD_REXCL
0x0400
排他読出し
● 出力
dd
デバイスディスクリプタ (Device Descriptor)
またはエラーコード (Error Code)
■ エラーコード
E_PAR
-17
TD_READ, TD_WRITE, TD_UPDATE のいずれもが未設定または
未定義のモード
E_BUSY
-65
デバイスは使用中
· 排他オープン中
E_NOEXS
-42
デバイスは存在しない
E_LIMIT
-34
オープン可能な最大数より大きい
その他 デバイスドライバから返されたエラー
January 31, 2014, CM81-00210-2a
211
第 3 章 システムコールインタフェース
3.12 デバイス管理機能のシステムコール
Su pp or t
So ft
Manu al
■ ディスパッチ要因
他タスクがデバイス管理機能の API を呼び出して待ち状態の場合 , それが完了するま
で待ち状態となり , ディスパッチが発生する場合があります。また , デバイスドライバ
にも依存します。
■ 解説
devnm で指定されたデバイスを omode で指定されたモードでオープンします。また ,
デバイスへのアクセスを準備します。復帰値にデバイスディスクリプタを返します。
omode は以下の値を指定します。
• TD_READ, TD_WRITE, TD_UPDATE
アクセスモードを指定します。TD_READ の場合 , tk_wri_dev を使用できません。ま
た , TD_WRITE の場合 , tk_rea_dev を使用できません。
• TD_EXCL, TD_WEXCL, TD_REXCL
排 他 モ ー ド を 指 定 し ま す。TD_EXCL は , 同 時 オ ー プ ン を す べ て 禁 止 し ま す。
TD_WEXCL は , 書込みモード (TD_WRITE または TD_UPDATE) による同時オープ
ンを禁止します。TD_REXCL は , 読出しモード (TD_READ または TD_UPDATE) に
よる同時オープンを禁止します。
なお , 物理デバイスをオープンした場合 , その物理デバイスに属する論理デバイスをす
べて同じモードでオープンしたのと同様に扱って排他オープンの処理を行います。
devnm が不正な場合でも , エラーチェックを行わず , 動作は保証されません。
212
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.12 デバイス管理機能のシステムコール
Support
3.12.4
Soft
Ma nual
tk_cls_dev(Close Device)
デバイスをクローズします。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_cls_dev ( ID dd, UINT option ) ;
■ パラメータ
● 入力
dd
デバイスディスクリプタ (Device Descriptor)
option
クローズオプション (Option)
表 3.12-3 tk_cls_dev の option で指定できる定数マクロ
オプション
TD_EJECT
値
0x0001
意味
クローズ時にメディア排出
● 出力
ercd
エラーコード (Error Code)
■ エラーコード
E_OK
0
正常終了
E_ID
-18
dd が不正
·dd が 0 以下
· 最大デバイスオープン数より大きい
· オープンされていない
E_OACV
-27
オープンしたタスクとは別のタスクからの要求
その他 デバイスドライバから返されたエラー
■ ディスパッチ要因
他タスクがデバイス管理機能の API を呼び出して待ち状態の場合 , それが完了するま
で待ち状態となり , ディスパッチが発生する場合があります。また , デバイスドライバ
にも依存します。
■ 解説
dd のデバイスディスクリプタをクローズします。処理中の要求があった場合 , その処
理を中止させてクローズします。
option に TD_EJECT が指定されていた場合 , 同一デバイスがほかのタスクからオープ
ンされていないとメディアを排出します。ただし , メディアの排出ができないデバイス
では無視します。また , 他のタスクからオープンされている場合 , TD_EJECT が指定さ
れていてもメディアは排出しません。
January 31, 2014, CM81-00210-2a
213
第 3 章 システムコールインタフェース
3.12 デバイス管理機能のシステムコール
Su pp or t
3.12.5
So ft
Manu al
tk_rea_dev(Read Device)
デバイスの読出しを開始します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ID reqid = tk_rea_dev ( ID dd, W start, VP buf, W size, TMO tmout ) ;
■ パラメータ
● 入力
dd
デバイスディスクリプタ (Device Descriptor)
start
読出し開始位置 ( ≧ 0: 固有データ , < 0: 属性データ )
(Start)
buf
読み出したデータを格納するバッファ (Buffer)
size
読み出すサイズ (Size)
tmout
要求受付け待ちタイムアウト時間 (ms) (Timeout)
0 から 0x7fffffff の数値 , および以下のマクロが指定可能
表 3.12-4 tk_cre_alm の almatr で指定できる定数マクロ
名前
値
意味
TMO_FEVR
-1
永久待ち
TMO_POL
0
ポーリング
● 出力
reqid
リクエスト ID (Request ID)
またはエラーコード (Error Code)
■ エラーコード
E_ID
-18
dd が不正
·dd が 0 以下
· 最大デバイスオープン数より大きい
· オープンされていない
E_OACV
-27
オープンモードが不正
·TD_WRITE でオープンされている
E_LIMIT
-34
最大リクエスト数より大きい
その他 デバイスドライバから返されたエラー
214
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.12 デバイス管理機能のシステムコール
Support
Soft
Ma nual
■ ディスパッチ要因
他タスクがデバイス管理機能の API を呼び出して待ち状態の場合 , それが完了するま
で待ち状態となり , ディスパッチが発生する場合があります。また , デバイスドライバ
にも依存します。
■ 解説
デバイスから固有データまたは属性データの読出しを開始します。読出しを開始する
だけで読出し完了を待たずに呼出し元へ復帰します。読出しが完了するまで buf を保
持してください。tk_wai_dev により読出し完了を待ちます。読出し開始のための処理
にかかる時間はデバイスドライバにより異なります。必ずしも即座に復帰するとは限
りません。
固有データの場合 , start および size の単位はデバイスごとに決められます。属性デー
タの場合, start は属性データ番号, size はバイト数となり, start のデータ番号の属性デー
タを読み出します。通常 , size は読み出す属性データのサイズ以上です。複数の属性
データを一度に読み出せません。size=0 が指定された場合 , 実際の読出しは行わずに現
時 点 で 読 出 し 可 能 な サ イ ズ を 調 べ ま す。size=0
で本システムコール呼出し後 ,
tk_wai_dev を呼び出すことにより , tk_wai_dev の復帰値 , asize に読出し可能なサイズを
設定します。
読出しまたは書込みの動作中である場合 , 新たな要求を受け付けられるか否かはデバ
イスドライバによります。新たな要求を受け付けられない状態の場合 , 要求受付け待ち
となります。要求受付け待ちのタイムアウト時間を tmout に指定します。
なお , タイムアウトするのは要求受付けまでです。要求が受け付けられた後にはタイム
アウトしません。
January 31, 2014, CM81-00210-2a
215
第 3 章 システムコールインタフェース
3.12 デバイス管理機能のシステムコール
Su pp or t
3.12.6
So ft
Manu al
tk_srea_dev(Synchronous Read Device)
デバイスの同期読出しを行います。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_srea_dev ( ID dd, W start, VP buf, W size, W *asize ) ;
■ パラメータ
● 入力
dd
デバイスディスクリプタ (Device Descriptor)
start
読出し開始位置 ( ≧ 0: 固有データ , < 0: 属性データ )
(Start)
buf
読み出したデータを格納するバッファ (Buffer)
size
読み出すサイズ (Size)
ercd
エラーコード (Error Code)
asize
読み出したサイズ (Size)
● 出力
■ エラーコード
E_OK
0
正常終了
E_ID
-18
dd が不正
·dd が 0 以下
· 最大デバイスオープン数より大きい
· オープンされていない
E_OACV
-27
オープンモードが不正
·TD_WRITE でオープンされている
E_LIMIT
-34
最大リクエスト数より大きい
その他 デバイスドライバから返されたエラー
■ ディスパッチ要因
他タスクがデバイス管理機能の API を呼び出して待ち状態の場合 , それが完了するま
で待ち状態となり , ディスパッチが発生する場合があります。デバイスドライバにも依
存します。
216
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.12 デバイス管理機能のシステムコール
Support
Soft
Ma nual
■ 解説
デバイスデータの同期読出しを行います。本システムコールが正常に復帰した場合 ,
buf に指定されたアドレスを先頭として asize 分のデバイスデータを格納します。本シ
ステムコールは以下の処理と同等です。
ER tk_srea_dev( ID dd, W start, VP buf, W size, W *asize )
{
ER er, err, ioer;
err = tk_rea_dev(dd, start, buf, size, TMO_FEVR);
if ( err > 0 ) {
err = tk_wai_dev(dd, er, asize, &ioer, TMO_FEVR);
if ( err > 0 ) err = ioerr;
}
return err;
}
asize が不正な場合でも , エラーチェックを行わず , 動作は保証されません。
January 31, 2014, CM81-00210-2a
217
第 3 章 システムコールインタフェース
3.12 デバイス管理機能のシステムコール
Su pp or t
3.12.7
So ft
Manu al
tk_wri_dev(Write Device)
デバイスの書込みを開始します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ID reqid = tk_wri_dev ( ID dd, W start, VP buf, W size, TMO tmout ) ;
■ パラメータ
● 入力
dd
デバイスディスクリプタ (Device Descriptor)
start
書込み開始位置 ( ≧ 0: 固有データ , < 0: 属性データ )
(Start)
buf
書き込むデータを格納するバッファ (Buffer)
size
書き込むサイズ (Size)
tmout
要求受付け待ちタイムアウト時間 (ms) (Timeout)
0 から 0x7fffffff の数値 , および以下のマクロが指定可能
表 3.12-5 tk_wri_dev の tmout で指定できる定数マクロ
名前
値
意味
TMO_FEVR
-1
永久待ち
TMO_POL
0
ポーリング
● 出力
reqid
リクエスト ID (Request ID)
またはエラーコード (Error Code)
■ エラーコード
E_ID
-18
dd が不正
·dd が 0 以下
· 最大デバイスオープン数より大きい
· オープンされていない
E_OACV
-27
オープンモードが不正
·TD_READ でオープンされている
· オープンしたタスクと別のタスクからの要求
E_RONLY
-67
書き込めないデバイス
E_LIMIT
-34
最大リクエスト数より大きい
その他 デバイスドライバから返されたエラー
218
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.12 デバイス管理機能のシステムコール
Support
Soft
Ma nual
■ ディスパッチ要因
他タスクがデバイス管理機能の API を呼び出して待ち状態の場合 , それが完了するま
で待ち状態となり , ディスパッチが発生する場合があります。また , デバイスドライバ
にも依存します。
■ 解説
デバイスへ固有データまたは属性データの書込みを開始します。書込みを開始するだ
けで書込み完了を待たずに呼出し元へ復帰します。書込みが完了するまで buf を保持
してください。tk_wai_dev により書込み完了を待ちます。書込み開始のための処理に
かかる時間はデバイスドライバにより異なります。必ずしも即座に復帰するとは限り
ません。
固有データの場合 , start および size の単位はデバイスごとに決められます。属性デー
タの場合, start は属性データ番号, size はバイト数となり, start のデータ番号の属性デー
タに書き込みます。通常 , size は書き込む属性データのサイズと同じです。複数の属性
データを一度に書き込めません。size=0 が指定された場合 , 実際の書込みを行わずに現
時 点 で 書 込 み 可 能 な サ イ ズ を 調 べ ま す。size=0
で本システムコール呼出し後 ,
tk_wai_dev を呼び出すことにより , tk_wai_dev の復帰値 , asize に書込み可能なサイズを
設定します。
読出しまたは書込みの動作中である場合に新たな要求を受け付けられるか否かはデバ
イスドライバによります。新たな要求を受け付けられない状態の場合 , 要求受付け待ち
となります。要求受付け待ちのタイムアウト時間を tmout に指定します。tmout には
TMO_POL(=0) または TMO_FEVR(=-1) も指定できます。
なお , タイムアウトするのは要求受付けまでです。要求が受け付けられた後にはタイム
アウトしません。
January 31, 2014, CM81-00210-2a
219
第 3 章 システムコールインタフェース
3.12 デバイス管理機能のシステムコール
Su pp or t
3.12.8
So ft
Manu al
tk_swri_dev(Synchronous Write Device)
デバイスの同期書込みを行います。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ER ercd = tk_swri_dev ( ID dd, W start, VP buf, W size, W *asize ) ;
■ パラメータ
● 入力
dd
デバイスディスクリプタ (Device Descriptor)
start
書込み開始位置 ( ≧ 0: 固有データ , < 0: 属性データ )
(Start)
buf
書き込むデータを格納したバッファ (Buffer)
size
書き込むサイズ (Size)
ercd
エラーコード (Error Code)
asize
書き込んだサイズ (Size)
● 出力
■ エラーコード
E_OK
0
正常終了
E_ID
-18
dd が不正
·dd が 0 以下
· 最大デバイスオープン数より大きい
· オープンされていない
E_OACV
-27
オープンモードが不正
·TD_READ でオープンされている
E_RONLY
-67
書き込めないデバイス
E_LIMIT
-34
最大リクエスト数より大きい
その他 デバイスドライバから返されたエラー
■ ディスパッチ要因
他タスクがデバイス管理機能の API を呼び出して待ち状態の場合 , それが完了するま
で待ち状態となり , ディスパッチが発生する場合があります。また , デバイスドライバ
にも依存します。
220
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.12 デバイス管理機能のシステムコール
Support
Soft
Ma nual
■ 解説
デバイスの同期書込みを行います。以下の処理と同等です。
ER tk_swri_dev( ID dd, W start, VP buf, W size, W *asize )
{
ER er, err, ioer;
err = tk_wri_dev(dd, start, buf, size, TMO_FEVR);
if ( err > 0 ) {
err = tk_wai_dev(dd, er, asize, &ioer, TMO_FEVR);
if ( err > 0 ) err = ioer;
}
return err;
}
asize が不正な場合でも , エラーチェックを行わず , 動作は保証されません。
January 31, 2014, CM81-00210-2a
221
第 3 章 システムコールインタフェース
3.12 デバイス管理機能のシステムコール
Su pp or t
3.12.9
So ft
Manu al
tk_wai_dev(Wait Device)
デバイスの要求完了を待ちます。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ID creqid = tk_wai_dev ( ID dd, ID reqid, W *asize, ER *ioer, TMO tmout ) ;
■ パラメータ
● 入力
dd
デバイスディスクリプタ (Device Descriptor)
reqid
リクエスト ID (Request ID)
tmout
要求受付け待ちタイムアウト時間 (ms) (Timeout)
0 から 0x7fffffff の数値 , および以下のマクロが指定可能
表 3.12-6 tk_wai_dev の tmout で指定できる定数マクロ
名前
値
意味
TMO_FEVR
-1
永久待ち
TMO_POL
0
ポーリング
● 出力
creqid
完了したリクエスト ID (Request ID) またはエラーコード (Error Code)
asize
読み出したサイズまたは書き込んだサイズ (Size)
ioer
入出力エラー (IO Error)
■ エラーコード
E_ID
-18
dd が不正
·dd が 0 以下
· 最大デバイスオープン数より大きい
· オープンされていない
·reqid が負かシステムの上限値より大きい
·dd に対する要求ではない
E_OACV
-27
オープンしたタスクとは別のタスクからの要求
E_OBJ
-41
reqid の要求はほかのタスクで完了待ちしている
E_NOEXS
-42
処理中の要求はない (reqid が 0 の場合 )
E_TMOUT
-50
ポーリング失敗 , またはタイムアウト
·tmout の時間経過により待ち状態が解除された
·tmout が TMO_POL で , reqid の要求が完了していない。
その他 デバイスドライバから返されたエラー
222
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.12 デバイス管理機能のシステムコール
Support
Soft
Ma nual
■ ディスパッチ要因
他タスクがデバイス管理機能の API を呼び出して待ち状態の場合 , それが完了するま
で待ち状態となり , ディスパッチが発生する場合があります。また , デバイスドライバ
にも依存します。
■ 解説
dd に対する reqid の要求の完了を待ちます。
reqid=0 の場合 , dd に対する要求のうちのいずれかが完了するのを待ちます。この場合 ,
tk_wai_dev 呼出し時点で処理中の要求だけが完了待ちの対象となります。本システム
コールの呼出し後に要求された処理は完了待ちの対象外です。
複数の要求を同時に処理している場合 , その要求の完了順序は必ずしも要求した順序
ではなくデバイスドライバに依存します。ただし , 要求した順序で処理した場合と結
果が矛盾しない順序で処理することを保証します。例えば , ディスクからの読出しの
場合 , 以下の処理順序の変更が考えられます。
要求順ブロック番号 1 4 3 2 5
処理順ブロック番号 1 2 3 4 5
このように順序を入れ替えて処理することにより , シークや回転待ちを減らすことが
でき , より効率的にディスクアクセスができます。
tmout に完了待ちのタイムアウト時間を指定します。タイムアウト (E_TMOUT) した場
合 , 要求された処理を継続中なので , 再度本システムコールにより完了を待つ必要があ
ります。reqid>0 かつ tmout=TMO_FEVR の場合 , タイムアウトすることはなく , 必ず処
理が完了します。
要求された処理結果のエラー ( 入出力エラーなど ) を creqid ではなく ioer に格納しま
す。creqid は , 要求の完了待ちが正しくできなかった場合 , エラーで復帰します。creqid
にエラーが返された場合 , ioer の内容は不定値です。
表 3.12-7 tk_wai_dev の creqid と ioer の意味
creqid
意味
ioer
正の値
E_OK
待ち対象の処理が正常に完了しました。
正の値
エラー
待ち対象の処理がエラーで完了しました。処理エ
ラー要因をエラーコードとして ioer に格納します。
負の値
不定
完了待ちが失敗しました。失敗した要因を creqid に
エラーコードとして格納します。
また, creqidにエラーコードが返された場合, 処理を継続中なので, 再度本システムコー
ルにより完了を待つ必要があります。
同じリクエスト ID に複数のタスクから同時に完了待ちできません。reqid=0 で待って
いるタスクがあれば , 同じ dd に対する他のタスクの完了待ちは , E_OBJ のエラーとな
ります。
同様に , reqid>0 で待っているタスクがあれば , 他のタスクで reqid=0 の完了待ちはでき
ません。この場合も E_OBJ のエラーとなります。
asize, ioer が不正な場合でも , エラーチェックを行わず , 動作は保証されません。
January 31, 2014, CM81-00210-2a
223
第 3 章 システムコールインタフェース
3.12 デバイス管理機能のシステムコール
Su pp or t
3.12.10
So ft
Manu al
tk_sus_dev(Suspend Device)
デバイスをサスペンドします。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
INT cnt = tk_sus_dev ( UINT mode ) ;
■ パラメータ
● 入力
モード (Mode)
mode
mode := ( (TD_SUSPEND | [TD_FORCE]) ∥ TD_DISSUS ∥
TD_ENASUS ∥ TD_CHECK)
表 3.12-8 tk_sus_dev の mode で指定できる定数マクロ
モード
値
意味
TD_SUSPEND
0x0001
サスペンド
TD_DISSUS
0x0002
サスペンドを禁止
TD_ENASUS
0x0003
サスペンドを許可
TD_CHECK
0x0004
サスペンド禁止要求カウント
獲得
TD_FORCE
0x8000
強制サスペンド指定
● 出力
cnt
サスペンド禁止要求カウント数 (Count)
またはエラーコード (Error Code)
■ エラーコード
E_PAR
-17
モードが未定義
E_BUSY
-65
サスペンド禁止中
E_QOVR
-43
サスペンド禁止要求カウントオーバ
■ ディスパッチ要因
他タスクがデバイス管理機能の API を呼び出して待ち状態の場合 , それが完了するま
で待ち状態となり , ディスパッチが発生する場合があります。また , デバイスドライバ
にも依存します。
224
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.12 デバイス管理機能のシステムコール
Support
Soft
Ma nual
■ 解説
mode に従って処理を行って , その処理を行った後のサスペンド禁止要求カウント数を
復帰値に返します。
• TD_SUSPEND サスペンド
サスペンド許可状態の場合 , サスペンドします。サスペンド禁止状態の場合 ,
E_BUSY を返します。
• TD_SUSPEND|TD_FORCE 強制サスペンド
サスペンド禁止状態の場合 , サスペンドします。
• TD_DISSUS サスペンド禁止
サスペンドを禁止します。
• TD_ENASUS サスペンド許可
サスペンドを許可します。サスペンドを禁止した回数以上に許可した場合 , 何もし
ません。
• TD_CHECK サスペンド禁止カウント獲得
サスペンド禁止要求を行っている回数の獲得だけを行います。
■ 補足事項
サスペンドは , 以下の手順によって行います。
1. 各ディスクデバイス以外のサスペンド処理
2. 各ディスクデバイスのサスペンド処理
3. サスペンド状態へ移行
リジューム ( サスペンドからの復帰 ) は , 以下の手順によって行います。
1. サスペンド状態から復帰
2. 各ディスクデバイスのリジューム処理
3. 各ディスクデバイス以外のリジューム処理
サスペンド禁止は , その要求回数をカウントします。同じ回数だけサスペンド許可を要
求しないとサスペンドを許可しません。システム起動時はサスペンド許可 ( サスペン
ド禁止要求カウント= 0) です。サスペンド禁止要求カウントはシステム全体で 1 つで
す。サスペンド禁止要求カウントの上限は 2147483647(0x7fffffff) です。この上限より
大きい場合 , E_QOVR のエラーで復帰します。
January 31, 2014, CM81-00210-2a
225
第 3 章 システムコールインタフェース
3.12 デバイス管理機能のシステムコール
Su pp or t
3.12.11
So ft
Manu al
tk_get_dev(Get Device)
デバイス名を獲得します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ID phyid = tk_get_dev ( ID devid, UB *devnm ) ;
■ パラメータ
● 入力
devid
デバイス ID (Device ID)
phyid
物理デバイスのデバイス ID (Physical Device ID) またはエラーコード
● 出力
(Error Code)
devnm
デバイス名 (Device Name)
■ エラーコード
E_NOEXS
-42
devid のデバイスは存在しない
■ ディスパッチ要因
他タスクがデバイス管理機能の API を呼び出して待ち状態の場合 , それが完了するま
で待ち状態となり , ディスパッチが発生する場合があります。
■ 解説
devid で指定されたデバイス名を獲得して devnm に格納します。
devid は物理デバイスのデバイス ID または論理デバイスのデバイス ID です。devid が
物理デバイスの場合は devnm には物理デバイス名が格納され , 論理デバイスの場合は
devnm には論理デバイス名を格納します。devnm には L_DEVNM(8)+1 バイト以上の領
域が必要です。
phyid には , devid のデバイスが属する物理デバイスのデバイス ID を返します。
devnm が不正な場合でも , エラーチェックを行わず , 動作は保証されません。
226
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.12 デバイス管理機能のシステムコール
Support
3.12.12
Soft
Ma nual
tk_ref_dev(Refer Device)
デバイス名からデバイス情報を獲得します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ID devid = tk_ref_dev ( UB *devnm, T_RDEV *rdev ) ;
typedef struct t_rdev {
ATR devatr;
W blksz;
INT nsub;
INT subno;
} T_RDEV;
■ パラメータ
● 入力
devnm
デバイス名 (Device Name)
rdev
デバイス情報を格納する領域のアドレス
(Packet of Refer Device)
● 出力
devid
デバイス ID (Device ID)
またはエラーコード (Error Code)
● rdev に返されるデータ
devatr
デバイス属性 (Device Attribute)
blksz
固有データのブロックサイズ (-1: 不明 ) (Block Size)
nsub
サブユニット数 (Number of Sub-unit)
subno
0: 物理デバイス , 1 ~ nsub: サブユニット番号 +1
(Sub-unit Number)
■ エラーコード
E_NOEXS
-42
devnm のデバイスは存在しない
■ ディスパッチ要因
他タスクがデバイス管理機能の API を呼び出して待ち状態の場合 , それが完了するま
で待ち状態となり , ディスパッチが発生する場合があります。
January 31, 2014, CM81-00210-2a
227
第 3 章 システムコールインタフェース
3.12 デバイス管理機能のシステムコール
Su pp or t
So ft
Manu al
■ 解説
devnm で指定されたデバイス情報を獲得して rdev に格納します。rdev=NULL とした場
合 , デバイス情報を格納しません。
nsub は , devnm で指定されたデバイスが属する物理デバイスのサブユニット数です。
復帰値にデバイス ID を返します。
devnm, rdev が不正な場合でも , エラーチェックを行わず , 動作は保証されません。
デバイス属性については , 「第 4 章 デバイスドライバ インタフェース」を参照してく
ださい。
228
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.12 デバイス管理機能のシステムコール
Support
3.12.13
Soft
Ma nual
tk_oref_dev(Refer Device)
デバイスディスクリプタからデバイス情報を獲得します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
ID devid = tk_oref_dev ( ID dd, T_RDEV *rdev ) ;
typedef struct t_rdev {
ATR devatr;
W blksz;
INT nsub;
INT subno;
} T_RDEV;
■ パラメータ
● 入力
dd
デバイスディスクリプタ (Device Descriptor)
rdev
デバイス情報を格納する領域のアドレス
(Packet of Refer Device)
● 出力
devid
デバイス ID (Device ID)
またはエラーコード (Error Code)
● rdev に返されるデータ
devatr
デバイス属性 (Device Attribute)
blksz
固有データのブロックサイズ (-1: 不明 ) (Block Size)
nsub
サブユニット数 (Number of Sub-unit)
subno
0: 物理デバイス , 1 ~ nsub: サブユニット番号 +1
(Sub-unit Number)
■ エラーコード
E_OACV
-27
オープンしたタスクとは別のタスクからの要求
■ ディスパッチ要因
他タスクがデバイス管理機能の API を呼び出して待ち状態の場合 , それが完了するま
で待ち状態となり , ディスパッチが発生する場合があります。
January 31, 2014, CM81-00210-2a
229
第 3 章 システムコールインタフェース
3.12 デバイス管理機能のシステムコール
Su pp or t
So ft
Manu al
■ 解説
dd で指定されたデバイス情報を獲得して rdev に格納します。rdev=NULL とした場合 ,
デバイス情報を格納しません。
nsub は , dd で指定されたデバイスが属する物理デバイスのサブユニット数です。
復帰値にデバイス ID を返します。
rdev が不正な場合でも , エラーチェックを行わず , 動作は保証されません。
デバイス属性については , 「第 4 章 デバイスドライバ インタフェース」を参照してく
ださい。
230
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.12 デバイス管理機能のシステムコール
Support
3.12.14
Soft
Ma nual
tk_lst_dev(List Device)
登録済みデバイスの一覧を獲得します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
INT cnt = tk_lst_dev ( T_LDEV *ldev, INT start, INT ndev ) ;
typedef struct t_ldev {
ATR devatr;
W blksz;
INT nsub;
UB
devnm[L_DEVNM];
} T_LDEV;
■ パラメータ
● 入力
ldev
登録デバイス情報の格納領域 ( 配列 )
(Packet of List Device)
start
開始番号 (Start)
ndev
獲得数 (Number of Device)
cnt
残りのカウント数 (Count)
● 出力
またはエラーコード (Error Code)
● ldev に返されるデータ
devatr
デバイス属性 (Device Attribute)
blksz
固有データのブロックサイズ (-1: 不明 ) (Block Size)
nsub
サブユニット数 (Number of Sub-unit)
devnm[L_DEVNM] 物理デバイス名 (Device Name)
■ エラーコード
E_NOEXS
-42
獲得すべき情報がない
·start が登録済みのデバイスの個数以上
E_PAR
-17
start または ndev が負
■ ディスパッチ要因
他タスクがデバイス管理機能の API を呼び出して待ち状態の場合 , それが完了するま
で待ち状態となり , ディスパッチが発生する場合があります。
January 31, 2014, CM81-00210-2a
231
第 3 章 システムコールインタフェース
3.12 デバイス管理機能のシステムコール
Su pp or t
So ft
Manu al
■ 解説
登録済みのデバイスの情報を獲得します。
登録デバイスは物理デバイス単位で管理します。したがって , 登録デバイス情報も物理
デバイス単位で獲得します。
登録デバイスの数が N の場合 , 登録デバイスに 0 ~ N-1 の連番を振ります。この連番
に従って , start 番目から ndev 個の登録情報を獲得して ldev に格納します。ldev には
ndev 個の情報を格納するために十分な大きさが必要です。
復帰値には残りのカウント数 (N - start) を返します。残りカウント数が ndev 個に満た
ない場合 , 残りのすべてを格納します。復帰値≦ ndev の場合 , すべての登録情報が獲
得できたことを示します。
なお , この連番はデバイスの登録・抹消があると変化します。したがって , 複数回に分
けて獲得すると , 正確な情報が得られない場合があります。
例えば , 10 個のデバイスが登録されている状態で 3 個ずつ登録情報を獲得する場合 ,
start を 0 → 3 → 6 → 9 と変化させて本システムコールを 4 回呼び出すことにより , すべ
てのデバイスの登録情報を獲得できます。本システムコールの 1 回目の呼出しから 4
回目の呼出しの間にデバイスの登録 , 削除を行った場合 , 正確な情報が得られない可能
性があります。この場合 , 再度 start に 0 を指定して , 最初からデバイス情報の獲得をや
り直してください。
ldev が不正な場合でも , エラーチェックを行わず , 動作は保証されません。
232
CM81-00210-2a, January 31, 2014
第 3 章 システムコールインタフェース
3.12 デバイス管理機能のシステムコール
Support
3.12.15
Soft
Ma nual
tk_evt_dev(Event Device)
デバイスにドライバ要求イベントを送信します。
タスク部
○
タスク独立部
○
ディスパッチ禁止状態
○
■ C 言語インタフェース
INT retval = tk_evt_dev ( ID devid, INT evttyp, VP evtinf ) ;
■ パラメータ
● 入力
devid
イベント送信先デバイス ID (Device ID)
evttyp
ドライバ要求イベントタイプ (Event Type)
表 3.12-9 tk_evt_dev の evttyp で指定できる定数マクロ
イベント
値
意味
TDV_CARDEVT
1
PC カードイベント
TDV_USBEVT
2
USB イベント
evtinf
イベントタイプ別の情報 (Event Information)
retval
デバイスドライバからの復帰値 (Return Value)
● 出力
またはエラーコード (Error Code)
■ エラーコード
E_NOEXS
-42
devid のデバイスは存在しない
E_PAR
-17
デバイス管理内部イベント (evttyp < 0)
■ ディスパッチ要因
他タスクがデバイス管理機能の API を呼び出して待ち状態の場合 , それが完了するま
で待ち状態となり , ディスパッチが発生する場合があります。
■ 解説
devid のデバイス ( デバイスドライバ ) にドライバ要求イベントを送信します。
各イベントタイプの詳細は , 「T-Kernel 標準デバイスドライバ仕様書」を参照してくだ
さい ( 本仕様書は T-Engine フォーラムのホームページから無料でダウンロードできま
す )。
January 31, 2014, CM81-00210-2a
233
第 3 章 システムコールインタフェース
3.12 デバイス管理機能のシステムコール
Su pp or t
234
So ft
Manu al
CM81-00210-2a, January 31, 2014
Support
Soft
Ma nual
第4章
デバイスドライバ
インタフェース
デバイスドライバインタフェースを説明します。
4.1 デバイスドライバインタフェース
4.2 デバイス名
4.3 デバイス ID
4.4 デバイスディスクリプタ
4.5 リクエスト ID
4.6 データ番号
4.7 属性データ
4.8 事象通知
4.9 デバイスのサスペンド / リジューム
4.10 入出力要求のデータ形式
4.11 デバイス処理関数
January 31, 2014, CM81-00210-2a
235
第 4 章 デバイスドライバ インタフェース
4.1 デバイスドライバインタフェース
Su pp or t
4.1
So ft
Manu al
デバイスドライバインタフェース
カーネルとデバイスドライバ間のインタフェースを説明します。
■ デバイスドライバインタフェース
デバイスドライバインタフェースは , T-REALOS のデバイス管理機能とユーザプログ
ラムのデバイスドライバ間のインタフェースです。
ユーザプログラムは T-REALOS のデバイス管理機能を利用して , デバイスドライバの
各種機能を使用します。ユーザプログラム-デバイスドライバ間のインタフェースを
統一することで , デバイスへのアクセスを単純化し , デバイスドライバの移植性を向上
させることができます。
デバイスドライバインタフェースは以下の内容で構成されます。
• デバイス名
• デバイス ID
• デバイス属性
• デバイスディスクリプタ
• リクエスト ID
• データ番号
• 事象通知
• デバイスのサスペンド / リジューム処理
• デバイスへの入出力処理要求のデータ形式
• デバイス処理関数
236
CM81-00210-2a, January 31, 2014
第 4 章 デバイスドライバ インタフェース
4.2 デバイス名
Support
4.2
Soft
Ma nual
デバイス名
デバイス名を説明します。
■ デバイス名
デバイス名は最大 8 文字の文字列で , 以下の要素により構成されます。
種別
: デバイスの種別を示す名前です。使用可能な文字は a ~ z , A ~ Z です。
ユニット
: 物理的なデバイスを示す番号です。使用可能な文字は a ~ z です。1 文
字で指定します。ユニットごとに a から順に割り当てます。
サブユニット: 論理的なデバイスを示す番号です。使用可能な文字は 0 ~ 254 の数字
で最大 3 文字です。サブユニットごとに 0 から順に割り当てます。
デバイス名は , 種別+ユニット+サブユニットの形式で表しますが , ユニット , サブユ
ニットはデバイスによっては存在しない場合もあります。その場合 , それぞれのフィー
ルドは存在しません。
特に , 種別+ユニットの形式を物理デバイス名とよびます。また , 種別+ユニット+サ
ブユニットを論理デバイス名とよび , 物理デバイス名と区別します。サブユニットがな
い場合 , 物理デバイス名と論理デバイス名は同じになります。単にデバイス名といった
ときは論理デバイス名を指します。
サブユニットは , 一般的にはハードディスクの区画 ( パーティション ) を表しますが , そ
れ以外でも論理的なデバイスを表すために使用できます。
(例)
had
ハードディスク ( ディスク全体 )
hda0
ハードディスク ( 先頭の区画 )
fda
フロッピィディスク
rsa
シリアルポート
kbpd
キーボード / ポインティングデバイス
January 31, 2014, CM81-00210-2a
237
第 4 章 デバイスドライバ インタフェース
4.3 デバイス ID
Su pp or t
4.3
So ft
Manu al
デバイス ID
デバイス ID を説明します。
■ デバイス ID
デバイス ( デバイスドライバ ) を T-Kernel に登録することにより , デバイス ( 物理デ
バイス名 ) にデバイス ID (>0) が割り当てられます。デバイス ID は物理デバイスごと
に割り当てられて , 論理デバイスのデバイス ID は物理デバイスに割り当てられたデバ
イス ID にサブユニット番号 +1(1 ~ 255) を加えたものとなります。
devid: 登録時に割り当てられたデバイス ID
devid
物理デバイス
devid+n+1
n 番目のサブユニット ( 論理デバイス )
(例)
hdadevid
ハードディスク全体
hda0
devid + 1 ハードディスクの先頭の区画
hda1
devid + 2 ハードディスクの 2 番目の区画
■ デバイス属性
各デバイスの特長を表してデバイスの種類分けを行うため , デバイス属性を以下のよ
うに定義します。
IIII
IIII
IIII
IIII
PRxx
xxxx
KKKK
KKKK
上位 16 ビットは , デバイス依存属性でデバイスごとに定義します。デバイスドライバ
を作成するユーザで自由に決めることができます。
下位 16 ビットは標準属性で , 以下の情報を持ちます。
• 共通属性 (bit15 ~ bit8)
表 4.3-1 共通属性の定数マクロ
名前
238
値
意味
TD_PROTECT
0x8000
P: 書込み禁止
TD_REMOVABLE
0x4000
R: メディアの取外し可能
CM81-00210-2a, January 31, 2014
第 4 章 デバイスドライバ インタフェース
4.3 デバイス ID
Support
Soft
Ma nual
• デバイスタイプ (bit7 ~ bit4) およびメディア種別 (bit3 ~ bit0)
表 4.3-2 デバイスタイプおよびメディア種別の定数マクロ
名前
値
意味
TD_DEVKIND
0x00FF
K: デバイスタイプ / メディア種別
TD_DEVTYPE
0x00f0
デバイスタイプ
TDK_UNDEF
0x0000
未定義 / 不明
TDK_DISK
0x0010
ディスクデバイス
TDK_DISK_UNDEF
0x0010
その他のディスク
TDK_DISK_RAM
0x0011
RAM ディスク ( 主メモリ使用 )
TDK_DISK_ROM
0x0012
ROM ディスク ( 主メモリ使用 )
TDK_DISK_FLA
0x0013
Flash ROM , その他のシリコンディスク
TDK_DISK_FD
0x0014
フロッピィディスク
TDK_DISK_HD
0x0015
ハードディスク
TDK_DISK_CDROM
0x0016
CD-ROM
上記以外のデバイスタイプは , 現在未定義ですが , 将来的には新たなデバイスが追加で
定義される予定です。未定義のデバイスは未定義 TDK_UNDEF とします。
なお , デバイスタイプは , アプリケーションがデバイス / メディアの種類によって処理
内容を変える必要がある場合など , デバイスを使用する側で区別が必要となる場合に
定義します。特に明確な区別をする必要がないデバイスに関しては , デバイスタイプを
割り当てる必要はありません。
January 31, 2014, CM81-00210-2a
239
第 4 章 デバイスドライバ インタフェース
4.4 デバイスディスクリプタ
Su pp or t
4.4
So ft
Manu al
デバイスディスクリプタ
デバイスディスクリプタを説明します。
■ デバイスディスクリプタ
デバイスをアクセスするための識別子で , デバイスをオープンしたときにカーネル に
よりデバイスディスクリプタ (>0) が割り当てられます。
240
CM81-00210-2a, January 31, 2014
第 4 章 デバイスドライバ インタフェース
4.5 リクエスト ID
Support
4.5
Soft
Ma nual
リクエスト ID
リクエスト ID を説明します。
■ リクエスト ID
デバイスに入出力を要求したときに , その要求の識別子としてリクエスト ID(>0) が割
り当てられます。このリクエスト ID により入出力の完了を待てます。
January 31, 2014, CM81-00210-2a
241
第 4 章 デバイスドライバ インタフェース
4.6 データ番号
Su pp or t
4.6
So ft
Manu al
データ番号
データ番号を説明します。
■ データ番号
デバイスのデータはデータ番号により指定します。データ番号は以下の 2 種類に分類
されます。
• 固有データ:データ番号≧ 0
デバイス固有のデータで , データ番号はデバイスごとに定義します。
( 例 ) ディスク
シリアル回線
データ番号=物理ブロック番号
データ番号は 0 だけを使用
• 属性データ:データ番号< 0
ドライバやデバイスの状態の獲得や設定 , 特殊機能などを指定します。
データ番号のいくつかは共通で定義されていますが , デバイス独自にも定義できま
す。
242
CM81-00210-2a, January 31, 2014
第 4 章 デバイスドライバ インタフェース
4.7 属性データ
Support
4.7
Soft
Ma nual
属性データ
属性データを説明します。
■ 属性データ
属性データは , 以下の 3 種類に分類されます。
• 共通属性
すべてのデバイス ( デバイスドライバ ) に共通に定義する属性。
• デバイス種別属性
同じ種類に分類されるデバイス ( デバイスドライバ ) に共通に定義する属性。
• デバイス個別属性
各デバイス ( デバイスドライバ ) ごとに独自に定義した属性。
デバイス種別属性およびデバイス個別属性は , デバイスごとに定義します。デバイスド
ライバを作成するユーザで自由に決めることができます。
共通属性の属性データ番号は -1 ~ -99 の範囲となります。共通属性のデータ番号はす
べてのデバイスで共通となりますが , すべてのデバイスが必ずしもすべての共通属性
に対応しているとは限りません。入出力要求パケット , devreq(「4.10 入出力要求のデー
タ形式」参照 ) の start に未対応の共通属性データ番号が指定された場合 , デバイスド
ライバは E_PAR のエラーで復帰してください。
表 4.7-1 共通属性と属性データ番号の意味
共通属性
属性データ番号
意味
TDN_EVENT
-1
RW: 事象通知用メッセージバッファ ID
TDN_DISKINFO
-2
R-: ディスク情報
TDN_DISPSPEC
-3
R-: 表示デバイス仕様
RW: 読出し (tk_rea_dev)/ 書込み (tk_wri_dev) 可能
R- : 読出し (tk_rea_dev) だけ可能
以下に , 共通属性で取得可能な属性データの形式を示します。
● TDN_EVENT : 事象通知用メッセージバッファ ID
データ形式 :ID
デバイス登録時にシステムデフォルトのメッセージバッファ ID がユーザプログラ
ムに通知されます。ユーザプログラムは , このメッセージバッファ ID をデバイスド
ライバに通知するために , start=TDN_EVENT, buf の内容 = メッセージバッファ ID
で , tk_wri_dev または tk_swri_dev を呼び出してください。
メッセージバッファ ID=0 を設定した場合 , デバイスは事象通知を行いません。
January 31, 2014, CM81-00210-2a
243
第 4 章 デバイスドライバ インタフェース
4.7 属性データ
Su pp or t
So ft
Manu al
● TDN_DISKINFO : ディスク情報
データ形式 DiskInfo
typedef enum {
DiskFmt_STD = 0,
/* 標準 (HD など ) */
DiskFmt_2DD = 1,
/* 2DD 720KB */
DiskFmt_2HD = 2,
/* 2HD 1.44MB */
DiskFmt_CDROM = 4,
/* CD-ROM 640MB */
} DiskFormat;
typedef struct {
DiskFormat format;
/* フォーマット形式 */
UW protect:1;
/* プロテクト状態 */
UW removable:1;
/* 取外し可否 */
UW rsv:30;
/* 予約 ( 常に 0) */
W blocksize;
/* ブロックバイト数 */
W blockcount;
/* 総ブロック数 */
} DiskInfo;
● TDN_DISPSPEC : 表示デバイス仕様
データ形式 DEV_SPEC
typedef struct {
H attr;
/* デバイス属性 */
H planes;
/* プレーン数 */
H pixbits;
/* ピクセルビット数 ( 境界 / 有効 ) */
H hpixels;
/* 横のピクセル数 */
H vpixels;
/* 縦のピクセル数 */
H hres;
/* 横の解像度 */
H vres;
/* 縦の解像度 */
H color[4];
/* カラー情報 */
H resv[6];
/* 予約 */
} DEV_SPEC;
244
CM81-00210-2a, January 31, 2014
第 4 章 デバイスドライバ インタフェース
4.8 事象通知
Support
4.8
Soft
Ma nual
事象通知
事象通知を説明します。
■ 事象通知
デバイスドライバは , デバイスで発生した事象を事象通知用メッセージバッファ
(TDN_EVENT) にデバイス事象通知として送信してください。
事象タイプには以下のものがあります。
typedef enum tdevttyp {
TDE_unknown = 0,
/* 未定義 */
TDE_MOUNT = 0x01,
/* メディア挿入 */
TDE_EJECT = 0x02,
/* メディア排出 */
TDE_ILLMOUNT = 0x03,
/* メディア不正挿入 */
TDE_ILLEJECT = 0x04,
/* メディア不正排出 */
TDE_REMOUNT = 0x05,
/* メディア再挿入 */
TDE_CARDBATLOW = 0x06,
/* カードバッテリ残量警告 */
TDE_CARDBATFAIL = 0x07,
/* カードバッテリ異常 */
TDE_REQEJECT = 0x08,
/* メディア排出要求 */
TDE_PDBUT = 0x11,
/* PD ボタン状態の変化 */
TDE_PDMOVE = 0x12,
/* PD 位置移動 */
TDE_PDSTATE = 0x13,
/* PD の状態変化 */
TDE_PDEXT = 0x14,
/* PD 拡張事象 */
TDE_KEYDOWN = 0x21,
/* キーダウン */
TDE_KEYUP = 0x22,
/* キーアップ */
TDE_KEYMETA = 0x23,
/* メタキー状態の変化 */
TDE_POWEROFF = 0x31,
/* 電源スイッチオフ */
TDE_POWERLOW = 0x32,
/* 電源残量警告 */
TDE_POWERFAIL = 0x33,
/* 電源異常 */
TDE_POWERSUS = 0x34,
/* 自動サスペンド */
TDE_POWERUPTM = 0x35,
/* 時計更新 */
TDE_CKPWON = 0x41
/* 自動電源オン通知 */
} TDEvtTyp;
デバイス事象通知の形式は以下のようになります。事象通知の内容は事象タイプごと
に異なり , サイズも異なります。
typedef struct t_devevt {
TDEvtTyp evttyp;
January 31, 2014, CM81-00210-2a
/* 事象タイプ */
245
第 4 章 デバイスドライバ インタフェース
4.8 事象通知
Su pp or t
So ft
Manu al
/* 以下に事象タイプ別の情報を付加する */
} T_DEVEVT;
デバイス ID 付きのデバイス事象通知の形式は以下のようになります。
typedef struct t_devevt_id {
TDEvtTyp evttyp;
/* 事象タイプ */
ID devid;
/* デバイス ID */
/* 以下に事象タイプ別の情報を付加する */
} T_DEVEVT_ID;
事象通知用メッセージバッファが一杯で事象通知を送信できない場合 , その事象が通
知されないことで , 事象通知の受信側の動作に悪影響が出ないようにしてください。
メッセージバッファが空くまで待ってから事象通知を行ってもかまいませんが , その
場合も原則として事象通知以外のデバイスドライバの処理が滞ってはいけません。
なお , 事象通知の受信側は , できる限りメッセージバッファが溢れないように処理して
ください。
246
CM81-00210-2a, January 31, 2014
第 4 章 デバイスドライバ インタフェース
4.9 デバイスのサスペンド / リジューム
Support
4.9
Soft
Ma nual
デバイスのサスペンド / リジューム
デバイスのサスペンド / リジュームを説明します。
■ デバイスのサスペンド / リジューム
イベント関数 (eventfn) へのサスペンド / リジューム (TDV_SUSPEND/TDV_RESUME)
イベントの呼出しにより , 各デバイスドライバはデバイスのサスペンド / リジューム処
理を行います。サスペンド / リジュームイベントは物理デバイスだけを呼び出します。
● サスペンド (TDV_SUSPEND)
evttyp = TDV_SUSPEND
evtinf = NULL ( なし )
以下の手順でサスペンド処理を行います。
1. 現在処理中の要求がある場合 , 完了するまで待つか , 中断または中止します。どの
方法を選択するかはデバイスドライバの実装に依存します。ただし , できるだけ速
やかにサスペンドする必要があるため , 完了までに時間がかかる場合 , 中断または
中止してください。サスペンドイベントは物理デバイスだけに発行しますが , その
デバイスに含まれるすべての論理デバイスも同様に処理します。
中断 : 処理を一時的に中断してリジューム後に続きを行います。
中止 : 中止処理関数 (abortfn) による中止と同様に処理を中止します。リジューム
後も再開しません。
2. リジュームイベント以外の新たな要求を受け付けないようにします。
3. デバイスの電源を切るなどのサスペンド処理を行います。中止はアプリケーション
への影響が大きいと考えられるため , 極力避けてください。シリアル回線からの長
期の入力待ちなどで , かつ中断とするのが難しい場合以外は中止にせず終了まで待
つか , 可能な場合は中断します。サスペンド期間中にデバイスドライバへ来た要求
は , リジュームまで待たせてリジューム後に受付け処理します。ただし , デバイス
へのアクセスを伴わない処理などはサスペンド中でも受付け可能です。
● リジューム (TDV_RESUME)
evttyp = TDV_RESUME
evtinf = NULL ( なし )
以下の手順でリジューム処理を行います。
1. デバイスの電源を入れてデバイスの状態を復帰させるなどのリジューム処理を行
います。
2. 中断していた処理がある場合は再開します。
3. 要求受付けを再開します。
January 31, 2014, CM81-00210-2a
247
第 4 章 デバイスドライバ インタフェース
4.10 入出力要求のデータ形式
Su pp or t
4.10
So ft
Manu al
入出力要求のデータ形式
入出力要求のデータ形式を説明します。
■ 入出力要求のデータ形式
デバイスドライバへの入出力要求は , リクエスト ID に対応した以下の要求パケットに
より行います。
typedef struct t_devreq {
struct t_devreq *next;
/* I: 要求パケットのリンク (NULL: 終端 ) */
VP exinf;
/* X: 拡張情報 */
ID devid;
/* I: 対象デバイス ID */
INT cmd:4;
/* I: 要求コマンド */
BOOL abort:1;
/* I: 中止要求を行ったとき TRUE */
W start;
/* I: 開始データ番号 */
W size;
/* I: 要求サイズ */
VP buf;
/* I: 入出力バッファアドレス */
W asize;
/* O: 結果サイズ */
ER error;
/* O: 結果エラー */
} T_DEVREQ;
コメント内の I は入力パラメータ , O は出力パラメータ , X はデバイス管理機能で未参
照のパラメータで , 入力パラメータはデバイスドライバで変更できません。入力パラ
メータ (I) 以外は , デバイス管理機能が最初に 0 にクリアします。その後 , デバイス管
理機能は変更しません。
next は , 要求パケットをリンクするために使用します。デバイス管理機能内の要求パ
ケットの管理に使用するほか , 完了待ち関数 (waitfn), 中止処理関数 (abortfn) でも使用
します。
exinf はデバイスドライバ側で任意に使用できます。デバイス管理機能は内容には関知
しません。
devid は要求対象のデバイス ID を指定します。
cmd は要求コマンドを指定します。
cmd := (TDC_READ || TDC_WRITE)
表 4.10-1 要求コマンドの定数マクロ
cmd
値
意味
TDC_READ
1
読出し要求
TDC_WRITE
2
書込み要求
aabort に TRUE が設定されている場合 , 中止処理が要求されたことを示します。TRUE
248
CM81-00210-2a, January 31, 2014
第 4 章 デバイスドライバ インタフェース
4.10 入出力要求のデータ形式
Support
Soft
Ma nual
が設定される条件は以下のとおりです。
• デバイスがクローズされた場合。
start, size は , tk_rea_dev, tk_wri_dev で指定された start, size をそのまま設定します。
buf は , tk_rea_dev, tk_wri_dev で指定された buf をそのまま設定します。
asize は , tk_wai_dev の asize に返す値をデバイスドライバが設定します。
error は , tk_wai_dev の復帰値として返すエラーコードをデバイスドライバが設定しま
す。正常な場合 , E_OK を設定します。
January 31, 2014, CM81-00210-2a
249
第 4 章 デバイスドライバ インタフェース
4.11 デバイス処理関数
Su pp or t
4.11
So ft
Manu al
デバイス処理関数
デバイス処理関数を説明します。
■ デバイス処理関数
これらの処理関数をデバイス管理機能によって呼び出します。これらの処理関数は , 再
入可能 (reentrant) な構造で作成してください。また , 処理関数を排他的に呼び出すこと
は保証しません。例えば , 複数のタスクから同じデバイスに同時に要求があった場合 , そ
れぞれのタスクが同時に処理関数を呼び出すことがあります。このため , デバイスドラ
イバ側は , 必要に応じて排他制御を行ってください。
また , デバイスドライバが返すエラーコードは , 「付録 A エラーコード一覧 」から ,
適切なエラーコードを選択し , 返してください。
● オープン関数 (openfn)
<呼出しインタフェース>
ER ercd = openfn( ID devid, UINT omode, VP exinf )
<パラメータ>
【入力】
devid
オープンするデバイスのデバイス ID
omode
オープンモード (tk_opn_dev と同じ )
exinf
デバイス登録時に指定された拡張情報
【出力】
ercd
エラーコード
<解説>
tk_opn_dev が呼び出されたときに openfn を呼び出します。
openfn は , デバイスの使用開始のための処理を行います。処理内容はデバイスに依存
し , デバイスに合わせて自由に処理できます。必要な処理がない場合 , 何も処理する必
要はありません。また , オープンされているか否かをデバイスドライバで記憶する必要
もなく , オープンされていない (openfn が呼び出されていない ) 理由だけで , ほかの処
理関数が呼び出されたときエラーにする必要もありません。デバイスドライバの動作
に問題ない場合 , オープンされていない状態でほかの処理関数が呼び出されても要求
を処理できます。
openfn でデバイスの初期化などを行う場合でも , 原則として待ちを伴う処理は行わな
いでください。できる限り速やかに処理を行って openfn から復帰してください。例え
ば , シリアル回線のように通信モードを設定する必要があるデバイスは , tk_wri_dev に
より通信モードが設定されたときにデバイスを初期化できます。このため , openfn で
デバイスの初期化を行う必要はありません。
同じデバイスが多重オープンされた場合 , 通常は最初のオープン時だけを呼び出しま
すが , デバイス登録時にドライバ属性として TDA_OPENREQ が指定された場合 , すべ
250
CM81-00210-2a, January 31, 2014
第 4 章 デバイスドライバ インタフェース
4.11 デバイス処理関数
Support
Soft
Ma nual
てのオープン時に呼び出します。多重オープンやオープンモードに関する処理はデバ
イス管理機能で行うため , openfn でそれらに関する処理は特に必要ありません。omode
も参考情報として渡すだけで , omode に関する処理を行う必要はありません。
● クローズ関数 (closefn)
<呼出しインタフェース>
ER ercd = closefn( ID devid, UINT option, VP exinf )
<パラメータ>
【入力】
devid
クローズするデバイスのデバイス ID
option
クローズオプション (tk_cls_dev と同じ )
exinf
デバイス登録時に指定された拡張情報
【出力】
ercd
エラーコード
<解説>
tk_cls_dev が呼び出されたときに closefn を呼び出します。
closefn は , デバイスの使用終了のための処理を行います。処理内容はデバイスに依存
し , デバイスに合わせて自由に処理できます。必要な処理がない場合 , 何も処理する必
要はありません。
メディアの取外しが可能なデバイスの場合 , option に TD_EJECT が指定されている場
合 , メディアの排出を行います。
closefn でデバイスの終了処理やメディアの排出を行う場合でも , 待ちを伴う処理は原
則として行わないでください。できる限り速やかに処理を行って closefn から復帰して
ください。メディアの排出に時間がかかる場合 , 排出の完了を待たずに closefn から復
帰しても構いません。
同じデバイスが多重オープンされていた場合 , 通常は最後のクローズ時だけを呼び出
しますが , デバイス登録時にドライバ属性として TDA_OPENREQ が指定された場合 , す
べてのクローズ時に呼び出します。ただし , この場合も最後のクローズにしか option に
TDA_EJECT を指定することはありません。多重オープンやオープンモードに関する処
理はデバイス管理機能で行うため , closefn でそれらに関する処理は特に必要ありませ
ん。
January 31, 2014, CM81-00210-2a
251
第 4 章 デバイスドライバ インタフェース
4.11 デバイス処理関数
Su pp or t
So ft
Manu al
● 処理開始関数 (execfn)
<呼出しインタフェース>
ER ercd = execfn( T_DEVREQ *devreq, TMO tmout, VP exinf )
<パラメータ>
【入力】
devreq
要求パケット
tmout
要求受付け待ちタイムアウト時間 (ms)
exinf
デバイス登録時に指定された拡張情報
【出力】
ercd
エラーコード
<解説>
tk_rea_dev, tk_srea_dev, tk_wri_dev, または tk_swri_dev が呼び出されたときに execfn を
呼び出します。
execfn は , devreq の要求の処理を開始します。処理を開始するだけで完了を待たずに呼
出し元へ復帰します。処理開始のためにかかる時間はデバイスドライバに依存し , 必ず
しも即座に完了するとは限りません。
新たな要求を受け付けられない状態の場合 , 要求受付け待ちとなります。tmout に指定
された時間以内に新たな要求を受け付けられないとタイムアウトの処理を行います。
tmout には , TMO_POL(= 0) または TMO_FEVR(= -1) を指定することもできます。タイ
ムアウトした場合 , execfn の復帰値に E_TMOUT を返します。要求パケットの error は
変更しません。タイムアウトの処理を行うのは要求を受け付けるまでで , 要求を受け付
けた後にタイムアウトは発生しません。
execfn の復帰値にエラーを返した場合 , 要求が受け付けられなかったものとして要求
パケットは消滅します。デバイスドライバ側の理由で本関数の処理を中止する場合 , そ
の要求の受付け前 ( 処理開始前 ) であれば execfn の復帰値に E_ABORT を返します。こ
の場合 , 要求パケットは消滅します。要求受付け後 ( 処理開始後 ) の場合 , E_OK を返
します。この場合 , 要求パケットは waitfn を実行して処理完了を確認するまで消滅し
ません。
252
CM81-00210-2a, January 31, 2014
第 4 章 デバイスドライバ インタフェース
4.11 デバイス処理関数
Support
Soft
Ma nual
● 完了待ち関数 (waitfn)
<呼出しインタフェース>
INT pktno = waitfn( T_DEVREQ *devreq, INT nreq, TMO tmout, VP exinf)
<パラメータ>
【入力】
devreq
要求パケットのリスト
nreq
要求パケットの数
tmout
タイムアウト時間 (ms)
exinf
デバイス登録時に指定された拡張情報
【出力】
pktno
完了した要求パケットの番号またはエラーコード
<解説>
tk_srea_dev, tk_swri_devまたはtk_wai_devが呼び出されたときにwaitfn を呼び出します。
devreq は devreq->next で接続された要求パケットのリストの中で , devreq から nreq 個
分の要求パケットのうち , いずれかが完了するのを待ちます。リストの最後の next は
必ずしも NULL になっているとは限らないため , 必ず nreq の指定に従います。復帰値
に完了した要求パケットの番号 (devreq から何番目か ) を返します。最初が 0 番目で最
後が nreq-1 番目となります。
なお , 完了とは , 正常終了 / 異常 ( エラー ) 終了 / 中止のいずれかです。
tmout に完了待ちのタイムアウト時間を指定します。TMO_POL (=0) または TMO_FEVR
(= -1) を指定することもできます。タイムアウトしても要求された処理は継続中です。
タイムアウトの場合 , waitfn の復帰値に E_TMOUT を返します。要求パケットの error
は変更しません。
なお , 要求された処理を継続中で waitfn から復帰するときには , waitfn の復帰値に必ず
エラーを返します。復帰値にエラーを返した場合は , 必ず処理が継続していなければな
らず , 復帰値にパケット番号を返した場合 , 必ず処理を完了してください。waitfn の復
帰値にエラーが返されている限り , その要求は処理中として要求パケットは消滅しま
せん。waitfn の復帰値に処理を完了した要求パケットの番号が返されたときに , その要
求の処理は完了したものとして要求パケットは消滅します。
入出力エラーなどデバイスに関するエラーを要求パケットのerror に格納します。
waitfn
の復帰値には完了待ちが正しくできなかった場合のエラーを返します。waitfn の復帰
値が tk_wai_dev の復帰値となり , 要求パケットの error を ioer に戻します。
デバイスドライバ側の理由や中止要求 ( 要求パケットの abort フラグ =TRUE) で完了待
ちの処理を中止する場合 , 単一要求の完了待ち (nreq=1) の場合と , 複数要求の完了待ち
(nreq>1) の場合で中止する処理を変えてください。単一要求の完了待ちの場合 , 処理中
の要求を中止します。複数要求の完了待ちの場合 , 要求の処理自体は中止せずに完了待
ちだけを中止 ( 待ち解除 ) します。複数要求待ちの中止 ( 待ち解除 ) の場合 , waitfn の
復帰値に E_ABORT を返します。
また , 複数要求の場合は中止要求を無視することもできます。ただし , 中止要求に対し
ては , できる限り中止処理を行うことを推奨します。
January 31, 2014, CM81-00210-2a
253
第 4 章 デバイスドライバ インタフェース
4.11 デバイス処理関数
Su pp or t
So ft
Manu al
なお , 中止処理は waitfn からできる限り速やかに復帰することが重要であり , 処理を中
止しなくてもすぐに処理が終了する場合 , 中止する必要はありません。処理が中止され
た場合 , 要求パケットの error に E_ABORT を返すことを原則としますが , そのデバイ
スの特性に合わせて E_ABORT 以外のエラーを返しても構いません。また , 中止する直
前までの処理を有効として E_OK を返しても構いません。
なお , 中止要求があっても正常に最後まで処理した場合 , E_OK を返します。
● 中止処理関数 (abortfn)
<呼出しインタフェース>
ER ercd = abortfn( ID tskid, T_DEVREQ *devreq, INT nreq, VP exinf )
<パラメータ>
【入力】
tskid
execfn, waitfn を実行しているタスクのタスク ID
devreq
要求パケットのリスト
nreq
要求パケットの数
exinf
デバイス登録時に指定された拡張情報
【出力】
ercd
エラーコード
<解説>
tk_cls_dev が呼び出されたときに abortfn を呼び出します。
abortfn は , 指定された要求を実行中の execfn, waitfn を中止させます。通常は , 処理中
の要求を中止させます。ただし , 中止しなくてもすぐに処理が終了する場合 , 必ずしも
中止しなくても構いません。重要なのは , できる限り速やかに execfn, waitfn から復帰
することです。tskid は , devreq で指定された要求を実行中のタスクです。つまり , execfn,
waitfn を実行しているタスクです。devreq, nreq は , execfn, waitfn の入力パラメータとし
て指定されたものと同じです。ただし , execfn の場合は常に nreq=1 です。
abortfn は , execfn, waitfn を実行しているタスクとは別のタスクから呼び出されます。両
者は並行して実行するため , 必要に応じて排他制御などを行ってください。また ,
execfn, waitfn の呼出し直前や execfn, waitfn から復帰する途中にabortfn を呼び出すこと
もできます。この場合も正しく動作するように配慮してください。
abortfn を呼び出す前に , 中止処理対象の要求パケットの abort フラグに TRUE を設定し
ます。execfn, waitfn はこれにより中止要求の有無を確認できます。
複数要求待ち (nreq>1) の waitfn 実行中の場合は , 特別な扱いとなりほかの場合とは以
下の点で異なります。
• 要求の処理を中止せずに完了待ちだけを中止 ( 待ちを解除 ) します。
• 要求パケットの abort フラグはセットしません (abort=FALSE のまま )。
なお, execfn, waitfn の実行中でないときに要求を中止させる場合, abortfn を呼び出すこ
となく , 要求パケットの abort フラグをセットします。abort フラグがセットされた状態
で execfn が呼び出されたときには要求を受け付けません。waitfn が呼び出されたとき
には abortfn が呼び出された場合と同様の中止処理を行ってください。execfn により処
254
CM81-00210-2a, January 31, 2014
第 4 章 デバイスドライバ インタフェース
4.11 デバイス処理関数
Support
Soft
Ma nual
理を開始した要求がwaitfn による完了待ちでない状態で中止された場合, 後でwaitfn が
呼び出されたときに中止されて処理が完了したことを知らせます。処理が中止されて
も waitfn により完了を確認するまでは要求自体は消滅しません。abortfn は中止処理を
開始するだけで中止が完了するのを待たずに速やかに復帰します。abortfn を以下の場
合に呼び出します。
• tk_cls_dev およびサブシステムのクリーンアップ処理によるデバイスクローズ時に ,
クローズするデバイスディスクリプタによる処理中の要求があった場合 , そのデバ
イスディスクリプタによる処理中の要求を中止します。
● イベント関数 (eventfn)
<呼出しインタフェース>
INT rtncd = eventfn( INT evttyp, VP evtinf, VP exinf )
<パラメータ>
【入力】
evttyp
ドライバ要求イベントタイプ
evtinf
イベントタイプ別の情報
exinf
デバイス登録時に指定された拡張情報
【出力】
rtncd
イベントタイプ別に定義された復帰値またはエラー
<解説>
ドライバ要求イベントタイプには以下のものがあり , 正の値が tk_evt_dev の呼出しによ
るもの , 負の値がデバイス管理機能内部からの呼出しによるものです。
表 4.11-1 イベントタイプの定数マクロ
イベント
値
意味
TDV_SUSPEND
-1
サスペンド
TDV_RESUME
-2
リジューム
TDV_CARDEVT
1
PC カードイベント
TDV_USBEVT
2
USB イベント
イベント関数で行う処理をイベントタイプごとに定義します。tk_evt_dev による呼出し
の場合 , eventfn の復帰値はそのまま tk_evt_dev の復帰値となります。イベント関数へ
の要求は , ほかの要求の処理中であっても受け付けられます。よって , できる限り速や
かに処理してください。
January 31, 2014, CM81-00210-2a
255
第 4 章 デバイスドライバ インタフェース
4.11 デバイス処理関数
Su pp or t
256
So ft
Manu al
CM81-00210-2a, January 31, 2014
Support
Soft
Ma nual
付録
エラーコード , 定数マクロ , ITRON 仕様 OS から
の移行時の注意事項について説明します。また , ア
ルファベット順のシステムコール索引を掲載しま
す。
付録 A エラーコード一覧
付録 B 定数マクロ一覧
付録 C ITRON 仕様 OS からの移行時の注意点
付録 D システムコール索引
January 31, 2014, CM81-00210-2a
257
付録
付録 A エラーコード一覧
Su pp or t
付録 A
So ft
Manu al
エラーコード一覧
エラーコードの一覧を示します。
■ エラーコード一覧
表 A-1 エラーコード一覧
エラーコード *1
ラベル
意味
0
H'00
H'00000000
正常終了
E_SYS*2
-5
-H'05
H'fffffffb
システムエラー
E_NOCOP*2
-6
-H'06
H'fffffffa
コプロセッサ使用不可
E_NOSPT*2
-9
-H'09
H'fffffff7
未サポート機能
E_RSFN*2
-10
-H'0a
H'fffffff6
予約機能コード番号
E_RSATR
-11
-H'0b
H'fffffff5
予約属性
E_PAR
-17
-H'11
H'ffffffef
パラメータエラー
E_ID
-18
-H'12
H'ffffffee
不正 ID 番号
E_CTX
-25
-H'19
H'ffffffe7
コンテキストエラー
E_MACV*2
-26
-H'1a
H'ffffffe6
メモリアクセス不能 , メモリアクセス権違反
E_OACV
-27
-H'1b
H'ffffffe5
オブジェクトアクセス権違反
E_ILUSE
-28
-H'1c
H'ffffffe4
システムコール不正使用
E_NOMEM
-33
-H'21
H'ffffffdf
メモリ不足
E_LIMIT
-34
-H'22
H'ffffffde
システムの制限を超過
E_OBJ
-41
-H'29
H'ffffffd7
オブジェクトの状態が不正
E_NOEXS
-42
-H'2a
H'ffffffd6
オブジェクトが存在していない
E_QOVR
-43
-H'2b
H'ffffffd5
キューイングまたはネストのオーバフロー
E_RLWAI
-49
-H'31
H'ffffffcf
待ち状態強制解除
E_TMOUT
-50
-H'32
H'ffffffce
ポーリング失敗またはタイムアウト
E_DLT
-51
-H'33
H'ffffffcd
待ちオブジェクトが削除された
E_DISWAI*2
-52
-H'34
H'ffffffcc
待ち禁止による待ち解除
E_IO
-57
-H'39
H'ffffffc7
入出力エラー
E_NOMDA*2
-58
-H'3a
H'ffffffc6
メディアがない
E_BUSY
-65
-H'41
H'ffffffbe
ビジー状態
E_ABORT
-66
-H'42
H'ffffffbd
中止した
E_RONLY
-67
-H'43
H'ffffffbc
書込み禁止
E_OK
*1:エラーコードは , 左から符号付き 10 進 , 符号付き 16 進 , 16 進絶対値の 3 種類の表
記で記載しています。
*2:T-Kernel では使用しません。T-Kernel との互換性のために規定されています。
258
CM81-00210-2a, January 31, 2014
付録
付録 B 定数マクロ一覧
Support
付録 B
Soft
Ma nual
定数マクロ一覧
定数マクロの一覧を示します。
■ 定数マクロ一覧
表 B-1 定数マクロ一覧 (1 / 4)
種別
タスク
オブジェクト生成
タスクの状態
タスクの待ち状態
January 31, 2014, CM81-00210-2a
マクロ名
値
意味
TSK_SELF
0
自タスク
TPRI_INI
0
起動時優先度
TPRI_RUN
0
実行中タスクの優先度
TA_ASM
0
アセンブラ言語で記述
TA_HLNG
1
C 言語で記述
TA_USERBUF
0x20
ユーザバッファを指定
TA_RNG0
0
メモリ保護レベル 0
TA_RNG1
0x100
メモリ保護レベル 1
TA_RNG2
0x200
メモリ保護レベル 2
TA_RNG3
0x300
メモリ保護レベル 3
TTS_RUN
0x1
実行状態
TTS_RDY
0x2
実行可能状態
TTS_WAI
0x4
待ち状態
TTS_SUS
0x8
強制待ち状態
TTS_WAS
0xc
2 重待ち状態 (WAITING + SUSPENDED)
TTS_DMT
0x10
休止状態
TTW_SLP
0x1
起床待ち
TTW_DLY
0x2
遅延待ち
TTW_SEM
0x4
セマフォ待ち
TTW_FLG
0x8
イベントフラグ待ち
TTW_MBX
0x40
メールボックス受信待ち
TTW_MTX
0x80
ミューテックスロック待ち
TTW_SMBF
0x100
メッセージバッファ送信待ち
TTW_RMBF
0x200
メッセージバッファ受信待ち
TTW_CAL
0x400
ランデブ呼出し待ち
259
付録
付録 B 定数マクロ一覧
Su pp or t
So ft
Manu al
表 B-1 定数マクロ一覧 (2 / 4)
種別
マクロ名
値
意味
TTW_ACP
0x800
ランデブ受付け待ち
TTW_RDV
0x1000
ランデブ終了待ち
TTW_MPF
0x2000
固定長メモリプール獲得待ち
TTW_MPL
0x4000
可変長メモリプール獲得待ち
TA_TFIFO
0
待ち行列が FIFO 順
TA_TPRI
0x1
待ち行列がタスク優先度順
TA_FIRST
0
待ち行列先頭タスクを優先
TA_CNT
0x2
要求数の少ないタスクを優先
TA_INHERIT
0x2
優先度継承プロトコル
TA_CEILING
0x3
優先度上限プロトコル
TA_WSGL
0
複数タスク待ちを禁止
TA_WMUL
0x8
複数タスク待ちを許可
TWF_ANDW
0
イベントフラグの AND 待ち
TWF_ORW
0x1
イベントフラグの OR 待ち
TWF_CLR
0x10
すべてのイベントフラグをクリア
TWF_BITCLR
0x20
特定のイベントフラグをクリア
TA_MFIFO
0
メッセージを FIFO で管理
TA_MPRI
0x2
メッセージを優先度順で管理
TA_STA
0x2
周期ハンドラの起動
TA_PHS
0x4
周期ハンドラの位相を保存
TCYC_STP
0
周期ハンドラを停止
TCYC_STA
0x1
周期ハンドラの動作開始
TALM_STP
0
アラームハンドラを停止
TALM_STA
0x1
アラームハンドラの動作開始
TSS_TSK
0
タスク実行中
TSS_DDSP
0x1
ディスパッチ禁止状態
TSS_DINT
0x2
割込み禁止状態
TSS_INDP
0x4
タスク独立部実行中
TSS_QTSK
0x8
準タスク実行中
TD_PROTECT
0x8000
書込み禁止
TD_REMOVABLE
0x4000
メディアの取外し可能
タスクの待ち状態
待ち行列
ミューテックス属性
イベントフラグ属性
イベントフラグ待ち
モード
メールボックス属性
周期ハンドラ属性
周期ハンドラの動作
アラームハンドラの
動作
システムの状態
デバイス共通属性
260
CM81-00210-2a, January 31, 2014
付録
付録 B 定数マクロ一覧
Support
Soft
Ma nual
表 B-1 定数マクロ一覧 (3 / 4)
種別
デバイスタイプ
マクロ名
値
TD_DEVKIND
0xff
デバイスタイプ / メディアタイプマスク
TD_DEVTYPE
0xf0
デバイスタイプマスク
TDK_UNDEF
0
未定義デバイス
TDK_DISK
0x10
ディスクデバイス
TDK_DISK_UNDEF
0x10
未定義のディスクデバイス
TDK_DISK_RAM
0x11
RAM ディスク
TDK_DISK_ROM
0x12
ROM ディスク
TDK_DISK_FLA
0x13
フラッシュメモリディスク
TDK_DISK_FD
0x14
フロッピィディスク
TDK_DISK_HD
0x15
ハードディスク
TDK_DISK_CDROM
0x16
CD-ROM
TD_READ
0x1
読出し専用
TD_WRITE
0x2
書込み専用
TD_UPDATE
0x3
読出しおよび書込み
TD_EXCL
0x100
オープンの排他
TD_WEXCL
0x200
書込み専用オープンの排他
TD_REXCL
0x400
読出し専用オープンの排他
TD_EJECT
0x1
クローズ時にメディアを排出
TD_SUSPEND
0x1
サスペンド
TD_DISSUS
0x2
サスペンド禁止
TD_ENASUS
0x3
サスペンド許可
TD_CHECK
0x4
サスペンド許可 / 禁止状態のチェック
TD_FORCE
0x8000
強制サスペンド
TDN_EVENT
-1
事象通知用メッセージバッファ ID
TDN_DISKINFO
-2
ディスク情報
TDN_DISPSPEC
-3
ディスプレイデバイス情報
TDN_PCMCIAINFO
-4
PC カード情報
TDA_OPENREQ
0x1
毎回オープン / クローズ
TDC_READ
0x1
読出し要求
TDC_WRITE
0x2
書込み要求
ディスクデバイス
デバイスオープン
モード
デバイスクローズ
オプション
デバイスサスペンド
モード
事象通知用
メッセージバッファ
デバイス登録
意味
デバイス要求
January 31, 2014, CM81-00210-2a
261
付録
付録 B 定数マクロ一覧
Su pp or t
So ft
Manu al
表 B-1 定数マクロ一覧 (4 / 4)
種別
ドライバイベント
マクロ名
値
意味
TDV_SUSPEND
-1
サスペンド
TDV_RESUME
-2
リジューム
TDV_CARDEVT
0x1
PC カードイベント
TDV_USBEVT
0x2
USB イベント
NULL
0
NULL
TA_NULL
0
特別な属性を指定しない
TMO_FEVR
-1
永久待ち
TMO_POL
0
ポーリング
NULL
タイムアウト値
262
CM81-00210-2a, January 31, 2014
付録
付録 C ITRON 仕様 OS からの移行時の注意点
Support
付録 C
Soft
Ma nual
ITRON 仕様 OS からの移行時の注意点
ITRON 仕様 OS と T-REALOS の相違点について説明します。
■ ITRON 仕様 OS との相違点について
ITRON4.0 仕様準拠のリアルタイム OS である SOFTUNE REALOS/FR Spec.4( 以降 ,
REALOS/FR Spec.4 とよびます ) と T-REALOS の機能的な違いについて , 表 C-1 に示
します。REALOS/FR Spec.4 のユーザプログラムを T-REALOS に移植する場合 , これ
らの点について注意してください。
表 C-1 T-REALOS と REALOS/FR Spec.4 の機能相違点一覧
T-REALOS
REALOS/FR Spec.4
オブジェクトの静的生成
×
○
オブジェクト生成時の ID 番号指定
×
○
サブシステム機能
○
×
デバイス管理機能
○
×
カーネルでの領域確保
( タスクスタック , メモリプール領域 )
○
×
タスク例外機能
×
○
セマフォ資源の複数獲得 / 解放
○
×
データキュー機能
×
○
ランデブポート機能
○
×
機能
オブジェクト待ちシステムコール *
( 永久待ち , ポーリング , タイムアウト )
割込みレベルの変更
同一システムコール
別システムコール
×
イベントフラグのビットクリア
○
ビット単位および
全ビット
割込みハンドラの動的登録
○
全ビット
×
〇 : 該当機能をサポート ×:該当機能を未サポート
*: セマフォ待ちのシステムコールには以下の違いがあります。tk_wai_sem では , タイ
ムアウト時間 (tmout) の引数を持ち , tmout の値により待ちの種類を制御します。
REALOS/FR Spec.4
永久待ち
wai_sem()
ポーリング
pol_sem()
タイムアウト
twai_sem()
January 31, 2014, CM81-00210-2a
T-REALOS
tk_wai_sem()
263
付録
付録 D システムコール索引
Su pp or t
付録 D
So ft
Manu al
システムコール索引
システムコールのアルファベット順一覧とその説明の掲載ページを以下に示します。
■ システムコール索引
表 D-1 システムコール索引 (1 / 4)
システムコール名
264
ペー
ジ数
概要
DI
外部割込み禁止
187
EI
外部割込み許可
188
isDI
外部割込み禁止状態の獲得
189
isig_tim(Signal Time)
システム時刻の更新
165
tk_acp_por(Accept Port for Rendezvous)
ランデブポートに対するランデブ受付け
125
tk_cal_por(Call Port for Rendezvous)
ランデブポートに対するランデブ呼出し
122
tk_can_wup(Cancel Wakeup Task)
タスク起床要求を無効化
51
tk_chg_pri(Change Task Priority)
タスク優先度変更
35
tk_clr_flg(Clear Event Flag)
イベントフラグのクリア
78
tk_cls_dev(Close Device)
デバイスのクローズ
213
tk_cre_alm(Create Alarm Handler)
アラームハンドラの生成
176
tk_cre_cyc(Create Cyclic Handler)
周期ハンドラの生成
167
tk_cre_flg(Create Event Flag)
イベントフラグの生成
74
tk_cre_mbf(Create Message Buffer)
メッセージバッファの生成
108
tk_cre_mbx(Create Mailbox)
メールボックスの生成
86
tk_cre_mpf(Create Fixed-size Memory Pool)
固定長メモリプールの生成
138
tk_cre_mpl(Create Variable-size Memory Pool)
可変長メモリプールの生成
149
tk_cre_mtx(Create Mutex)
ミューテックスの生成
97
tk_cre_por(Create Port for Rendezvous)
ランデブポートの生成
119
tk_cre_sem(Create Semaphore)
セマフォの生成
64
tk_cre_tsk(Create Task)
タスクの生成
26
tk_def_dev(Define Device)
デバイスの登録または削除
207
tk_def_int(Define Interrupt Handler)
割込みハンドラの定義または解除
184
tk_def_ssy(Define Subsystem)
サブシステムの定義または解除
202
tk_del_alm(Delete Alarm Handler)
アラームハンドラの削除
178
tk_del_cyc(Delete Cyclic Handler)
周期ハンドラの削除
170
tk_del_flg(Delete Event Flag)
イベントフラグの削除
76
CM81-00210-2a, January 31, 2014
付録
付録 D システムコール索引
Support
Soft
Ma nual
表 D-1 システムコール索引 (2 / 4)
システムコール名
概要
ペー
ジ数
tk_del_mbf(Delete Message Buffer)
メッセージバッファの削除
111
tk_del_mbx(Delete Mailbox)
メールボックスの削除
88
tk_del_mpf(Delete Fixed-size Memory Pool)
固定長メモリプールの削除
141
tk_del_mpl(Delete Variable-size Memory Pool)
可変長メモリプールの削除
152
tk_del_mtx(Delete Mutex)
ミューテックスの削除
99
tk_del_por(Delete Port for Rendezvous)
ランデブポートの削除
121
tk_del_sem(Delete Semaphore)
セマフォの削除
66
tk_del_tsk(Delete Task)
タスクの削除
29
tk_dis_dsp(Disable Dispatch)
ディスパッチ禁止
194
tk_dly_tsk(Delay Task)
時間経過待ち状態へ移行
61
tk_ena_dsp(Enable Dispatch)
ディスパッチ許可
196
tk_evt_dev(Event Device)
デバイスにドライバ要求イベントを送信
233
tk_exd_tsk(Exit and Delete Task)
自タスクの終了と削除
32
tk_ext_tsk(Exit Task)
自タスクの終了
31
tk_frsm_tsk(Force Resume Task)
強制待ち状態のタスクを強制再開
59
tk_fwd_por(Forward Rendezvous to Another Port)
ランデブポートに対するランデブの回送
128
tk_get_dev(Get Device)
デバイス名獲得
226
tk_get_mpf(Get Fixed-size Memory Block)
固定長メモリブロック獲得
142
tk_get_mpl(Get Variable-size Memory Block)
可変長メモリブロック獲得
153
tk_get_otm(Get Operating Time)
システム稼働時間参照
164
tk_get_reg(Get Task Registers)
タスクレジスタの獲得
38
tk_get_tid(Get Task Identifier)
実行状態タスクのタスク ID 参照
193
tk_get_tim(Get Time)
システム時刻参照
163
tk_loc_mtx(Lock Mutex)
ミューテックスのロック
100
tk_lst_dev(List Device)
登録済みデバイス一覧の獲得
231
tk_opn_dev(Open Device)
デバイスのオープン
211
tk_oref_dev(Refer Device)
デバイスディスクリプタからデバイス情
報獲得
229
tk_rcv_mbf(Receive Message from Message
Buffer)
メッセージバッファから受信
114
tk_rcv_mbx(Receive Message from Mailbox)
メールボックスから受信
91
tk_rea_dev(Read Device)
デバイスからの読出し開始
214
tk_ref_alm(Refer Alarm Handler Status)
アラームハンドラの状態を参照
181
tk_ref_cyc(Refer Cyclic Handler Status)
周期ハンドラの状態を参照
173
January 31, 2014, CM81-00210-2a
265
付録
付録 D システムコール索引
Su pp or t
So ft
Manu al
表 D-1 システムコール索引 (3 / 4)
システムコール名
266
ペー
ジ数
概要
tk_ref_dev(Refer Device)
デバイス名からデバイス情報獲得
227
tk_ref_flg(Refer Event Flag Status)
イベントフラグの状態を参照
83
tk_ref_idv(Refer Initial Device Information)
デバイス初期情報の獲得
210
tk_ref_mbf(Refer Message Buffer Status)
メッセージバッファの状態を参照
116
tk_ref_mbx(Refer Mailbox Status)
メールボックスの状態を参照
93
tk_ref_mpf(Refer Fixed-size Memory Pool Status)
固定長メモリプールの状態を参照
146
tk_ref_mpl(Refer Variable-size Memory Pool
Status)
可変長メモリプールの状態を参照
157
tk_ref_mtx(Refer Mutex Status)
ミューテックスの状態を参照
105
tk_ref_por(Refer Port Status)
ランデブポートの状態を参照
134
tk_ref_sem(Refer Semaphore Status)
セマフォの状態を参照
71
tk_ref_ssy(Refer Subsystem Status)
サブシステム定義情報を参照
205
tk_ref_sys(Refer System Status)
システムの状態を参照
197
tk_ref_tsk(Refer Task Status)
タスクの状態を参照
42
tk_ref_ver(Refer Version Information)
バージョン情報を参照
199
tk_rel_mpf(Release Fixed-size Memory Block)
固定長メモリブロックを返却
144
tk_rel_mpl(Release Variable-size Memory Block)
可変長メモリブロックを返却
155
tk_rel_wai(Release Wait)
他タスクの待ち状態解除
53
tk_ret_int(Return from Interrupt Handler)
割込みハンドラからの復帰
186
tk_rot_rdq(Rotate Ready Queue)
タスク優先順位の回転
191
tk_rpl_rdv(Reply Rendezvous)
ランデブ返答
132
tk_rsm_tsk(Resume Task)
強制待ち状態のタスクを再開
57
tk_set_flg(Set Event Flag)
イベントフラグのセット
77
tk_set_reg(Set Task Registers)
タスクレジスタの設定
40
tk_set_tim(Set Time)
システム時刻の設定
161
tk_sig_sem(Signal Semaphore)
セマフォ資源の返却
67
tk_slp_tsk(Sleep Task)
自タスクを起床待ち状態へ移行
47
tk_snd_mbf(Send Message to Message Buffer)
メッセージバッファへ送信
112
tk_snd_mbx(Send Message to Mailbox)
メールボックスへ送信
89
tk_srea_dev(Synchronous Read Device)
デバイスの同期読出し
216
tk_sta_alm(Start Alarm Handler)
アラームハンドラの動作開始
179
tk_sta_cyc(Start Cyclic Handler)
周期ハンドラの動作開始
171
tk_sta_tsk (Start Task)
タスクの起動
30
tk_stp_alm(Stop Alarm Handler)
アラームハンドラの動作停止
180
CM81-00210-2a, January 31, 2014
付録
付録 D システムコール索引
Support
Soft
Ma nual
表 D-1 システムコール索引 (4 / 4)
システムコール名
概要
ペー
ジ数
tk_stp_cyc(Stop Cyclic Handler)
周期ハンドラの動作停止
172
tk_sus_dev(Suspend Device)
デバイスのサスペンド
224
tk_sus_tsk(Suspend Task)
他タスクを強制待ち状態へ移行
55
tk_swri_dev(Synchronous Write Device)
デバイスの同期書込み
220
tk_ter_tsk(Terminate Task)
他タスクを強制終了
33
tk_unl_mtx(Unlock Mutex)
ミューテックスのアンロック
103
tk_wai_dev(Wait Device)
デバイスの要求完了待ち
222
tk_wai_flg(Wait Event Flag)
イベントフラグ待ち
79
tk_wai_sem(Wait on Semaphore)
セマフォ資源の獲得待ち
69
tk_wri_dev(Write Device)
デバイスの書込み開始
218
tk_wup_tsk(Wakeup Task)
他タスクの起床
49
January 31, 2014, CM81-00210-2a
267
付録
付録 D システムコール索引
Su pp or t
268
So ft
Manu al
CM81-00210-2a, January 31, 2014
索引
Support
Soft
Ma nual
索引
Symbols
A
ITRON 仕様 OS
ITRON 仕様 OS との相違点について ..............263
T-Kernel
T-Kernel 固有の意味を持つデータ型の一覧
............................................................................12
T-REALOS
T-REALOS の基本的な用語 ..................................2
Accept
tk_acp_por(Accept Port for Rendezvous) ............... 125
Alarm Handler
tk_cre_alm(Create Alarm Handler) ........................ 176
tk_del_alm(Delete Alarm Handler) ........................ 178
tk_ref_alm(Refer Alarm Handler Status) ............... 181
tk_sta_alm(Start Alarm Handler) ............................179
tk_stp_alm(Stop Alarm Handler) ............................180
B
Buffer
tk_cre_mbf(Create Message Buffer) ...................... 108
tk_del_mbf(Delete Message Buffer) ...................... 111
tk_ref_mbf(Refer Message Buffer Status) ..............116
tk_snd_mbf(Send Message to Message Buffer)
..........................................................................112
C
Call
tk_cal_por(Call Port for Rendezvous) .................... 122
Cancel
tk_can_wup(Cancel Wakeup Task) .......................... 51
Change
tk_chg_pri(Change Task Priority) ............................ 35
Clear
tk_clr_flg(Clear Event Flag) ..................................... 78
Close
tk_cls_dev(Close Device) .......................................213
Create
tk_cre_alm(Create Alarm Handler) ........................ 176
tk_cre_cyc(Create Cyclic Handler) ........................ 167
tk_cre_flg(Create Event Flag) ..................................74
tk_cre_mbf(Create Message Buffer) ...................... 108
tk_cre_mbx(Create Mailbox) ....................................86
tk_cre_mpf(Create Fixed-size Memory Pool)
..........................................................................138
tk_cre_mpl(Create Variable-size Memory Pool)
..........................................................................149
tk_cre_mtx(Create Mutex) ........................................ 97
tk_cre_por(Create Port for Rendezvous) ................ 119
tk_cre_sem(Create Semaphore) ................................64
tk_cre_tsk(Create Task) ............................................ 26
Cyclic Handler
tk_cre_cyc(Create Cyclic Handler) ........................ 167
tk_del_cyc(Delete Cyclic Handler) ........................ 170
tk_ref_cyc(Refer Cyclic Handler Status) ................ 173
tk_sta_cyc(Start Cyclic Handler) ............................171
tk_stp_cyc(Stop Cyclic Handler) ............................172
January 31, 2014, CM81-00210-2a
269
索引
Su pp or t
D
Define
tk_def_dev(Define Device) .....................................207
tk_def_int(Define Interrupt Handler) ......................184
tk_def_ssy(Define Subsystem) ...............................202
Delay
tk_dly_tsk(Delay Task) .............................................61
Delete
tk_del_alm(Delete Alarm Handler) ........................178
tk_del_cyc(Delete Cyclic Handler) .........................170
tk_del_flg(Delete Event Flag) ...................................76
tk_del_mbf(Delete Message Buffer) .......................111
tk_del_mbx(Delete Mailbox) ....................................88
tk_del_mpf(Delete Fixed-size Memory Pool)
..........................................................................141
tk_del_mpl(Delete Variable-size Memory Pool)
..........................................................................152
tk_del_mtx(Delete Mutex) ........................................99
tk_del_por(Delete Port for Rendezvous) ................121
tk_del_sem(Delete Semaphore) ................................66
tk_del_tsk(Delete Task) ............................................29
tk_exd_tsk(Exit and Delete Task) .............................32
Device
tk_cls_dev(Close Device) .......................................213
tk_def_dev(Define Device) .....................................207
tk_evt_dev(Event Device) .......................................233
tk_get_dev(Get Device) ..........................................226
tk_lst_dev(List Device) ...........................................231
tk_opn_dev(Open Device) ......................................211
tk_oref_dev(Refer Device) .....................................229
tk_rea_dev(Read Device) ........................................214
tk_ref_dev(Refer Device) .......................................227
tk_ref_idv(Refer Initial Device Information)
..........................................................................210
tk_srea_dev(Synchronous Read Device) ................216
tk_sus_dev(Suspend Device) ..................................224
tk_swri_dev(Synchronous Write Device) ...............220
tk_wai_dev(Wait Device) .......................................222
tk_wri_dev(Write Device) ......................................218
DI
DI ............................................................................187
Disable
tk_dis_dsp(Disable Dispatch) .................................194
Dispatch
tk_dis_dsp(Disable Dispatch) .................................194
tk_ena_dsp(Enable Dispatch) .................................196
E
EI
EI .............................................................................188
Enable
tk_ena_dsp(Enable Dispatch) .................................196
Event
tk_clr_flg(Clear Event Flag) .....................................78
tk_cre_flg(Create Event Flag) ...................................74
tk_del_flg(Delete Event Flag) ...................................76
tk_evt_dev(Event Device) .......................................233
tk_ref_flg(Refer Event Flag Status) ..........................83
tk_set_flg(Set Event Flag) ........................................77
tk_wai_flg(Wait Event Flag) ....................................79
270
So ft
Manu al
Exit
tk_exd_tsk(Exit and Delete Task) ............................. 32
tk_ext_tsk(Exit Task) ................................................ 31
F
Fixed-size
tk_cre_mpf(Create Fixed-size Memory Pool)
..........................................................................138
tk_del_mpf(Delete Fixed-size Memory Pool)
..........................................................................141
tk_get_mpf(Get Fixed-size Memory Block)
..........................................................................142
tk_ref_mpf(Refer Fixed-size Memory Pool Status)
..........................................................................146
tk_rel_mpf(Release Fixed-size Memory Block)
..........................................................................144
Flag
tk_clr_flg(Clear Event Flag) ..................................... 78
tk_cre_flg(Create Event Flag) ..................................74
tk_del_flg(Delete Event Flag) ..................................76
tk_ref_flg(Refer Event Flag Status) .......................... 83
tk_set_flg(Set Event Flag) ........................................ 77
tk_wai_flg(Wait Event Flag) ....................................79
Force
tk_frsm_tsk(Force Resume Task) ............................. 59
Forward
tk_fwd_por(Forward Rendezvous to Another Port)
........................................................................... 128
G
Get
tk_get_dev(Get Device) .......................................... 226
tk_get_mpf(Get Fixed-size Memory Block)
..........................................................................142
tk_get_mpl(Get Variable-size Memory Block)
..........................................................................153
tk_get_otm(Get Operating Time) ........................... 164
tk_get_reg(Get Task Registers) ................................38
tk_get_tid(Get Task Identifier) ............................... 193
tk_get_tim(Get Time) .............................................163
H
Handler
tk_cre_alm(Create Alarm Handler) ........................ 176
tk_cre_cyc(Create Cyclic Handler) ........................ 167
tk_def_int(Define Interrupt Handler) ...................... 184
tk_del_alm(Delete Alarm Handler) ........................ 178
tk_del_cyc(Delete Cyclic Handler) ........................ 170
tk_ref_alm(Refer Alarm Handler Status) ............... 181
tk_ref_cyc(Refer Cyclic Handler Status) ................ 173
tk_ret_int(Return from Interrupt Handler) ..............186
tk_sta_alm(Start Alarm Handler) ............................179
tk_sta_cyc(Start Cyclic Handler) ............................171
tk_stp_alm(Stop Alarm Handler) ............................180
tk_stp_cyc(Stop Cyclic Handler) ............................172
CM81-00210-2a, January 31, 2014
索引
Support
Soft
I
Ma nual
Kernel
T-Kernel 固有の意味を持つデータ型の一覧
............................................................................12
tk_rel_mpl(Release Variable-size Memory Block)
..........................................................................155
Message
tk_cre_mbf(Create Message Buffer) ...................... 108
tk_del_mbf(Delete Message Buffer) ...................... 111
tk_rcv_mbf(Receive Message from Message Buffer)
........................................................................... 114
tk_rcv_mbx(Receive Message from Mailbox)
............................................................................91
tk_ref_mbf(Refer Message Buffer Status) ..............116
tk_snd_mbf(Send Message to Message Buffer)
..........................................................................112
tk_snd_mbx(Send Message to Mailbox) .................. 89
Message Buffer
tk_cre_mbf(Create Message Buffer) ...................... 108
tk_del_mbf(Delete Message Buffer) ...................... 111
tk_ref_mbf(Refer Message Buffer Status) ..............116
tk_snd_mbf(Send Message to Message Buffer)
..........................................................................112
Mutex
tk_cre_mtx(Create Mutex) ........................................ 97
tk_del_mtx(Delete Mutex) ........................................ 99
tk_loc_mtx(Lock Mutex) ........................................ 100
tk_ref_mtx(Refer Mutex Status) ............................. 105
tk_unl_mtx(Unlock Mutex) .................................... 103
L
O
List
Open
tk_opn_dev(Open Device) ...................................... 211
Operating
tk_get_otm(Get Operating Time) ........................... 164
OS
ITRON 仕様 OS との相違点について ..............263
Identifier
tk_get_tid(Get Task Identifier) ...............................193
Information
tk_ref_idv(Refer Initial Device Information)
..........................................................................210
tk_ref_ver(Refer Version Information) ...................199
Initial
tk_ref_idv(Refer Initial Device Information)
..........................................................................210
Interrupt
tk_def_int(Define Interrupt Handler) ......................184
tk_ret_int(Return from Interrupt Handler) ..............186
isDI
isDI ..........................................................................189
isig_tim
isig_tim(Signal Time) .............................................165
K
tk_lst_dev(List Device) ...........................................231
Lock
tk_loc_mtx(Lock Mutex) ........................................100
M
Mailbox
tk_cre_mbx(Create Mailbox) ....................................86
tk_del_mbx(Delete Mailbox) ....................................88
tk_rcv_mbx(Receive Message from Mailbox)
............................................................................91
tk_ref_mbx(Refer Mailbox Status) ...........................93
tk_snd_mbx(Send Message to Mailbox) ...................89
Memory
tk_cre_mpf(Create Fixed-size Memory Pool)
..........................................................................138
tk_cre_mpl(Create Variable-size Memory Pool)
..........................................................................149
tk_del_mpf(Delete Fixed-size Memory Pool)
..........................................................................141
tk_del_mpl(Delete Variable-size Memory Pool)
..........................................................................152
tk_get_mpf(Get Fixed-size Memory Block)
..........................................................................142
tk_get_mpl(Get Variable-size Memory Block)
..........................................................................153
tk_ref_mpf(Refer Fixed-size Memory Pool Status)
..........................................................................146
tk_ref_mpl(Refer Variable-size Memory Pool Status)
...........................................................................157
tk_rel_mpf(Release Fixed-size Memory Block)
..........................................................................144
January 31, 2014, CM81-00210-2a
P
Port
tk_acp_por(Accept Port for Rendezvous) ............... 125
tk_cal_por(Call Port for Rendezvous) .................... 122
tk_cre_por(Create Port for Rendezvous) ................ 119
tk_del_por(Delete Port for Rendezvous) ................ 121
tk_ref_por(Refer Port Status) ..................................134
Priority
tk_chg_pri(Change Task Priority) ............................ 35
Q
Queue
tk_rot_rdq(Rotate Ready Queue) ............................191
R
Read
tk_rea_dev(Read Device) .......................................214
tk_srea_dev(Synchronous Read Device) ................ 216
Ready Queue
tk_rot_rdq(Rotate Ready Queue) ............................191
REALOS
T-REALOS の基本的な用語 ..................................2
271
索引
Su pp or t
Receive
tk_rcv_mbf(Receive Message from Message Buffer)
...........................................................................114
Receive Message
tk_rcv_mbx(Receive Message from Mailbox)
............................................................................91
Refer
tk_oref_dev(Refer Device) .....................................229
tk_ref_alm(Refer Alarm Handler Status) ................181
tk_ref_cyc(Refer Cyclic Handler Status) ................173
tk_ref_dev(Refer Device) .......................................227
tk_ref_flg(Refer Event Flag Status) ..........................83
tk_ref_idv(Refer Initial Device Information)
..........................................................................210
tk_ref_mbf(Refer Message Buffer Status) ..............116
tk_ref_mbx(Refer Mailbox Status) ...........................93
tk_ref_mpf(Refer Fixed-size Memory Pool Status)
..........................................................................146
tk_ref_mpl(Refer Variable-size Memory Pool Status)
...........................................................................157
tk_ref_mtx(Refer Mutex Status) .............................105
tk_ref_por(Refer Port Status) ..................................134
tk_ref_sem(Refer Semaphore Status) .......................71
tk_ref_ssy(Refer Subsystem Status) .......................205
tk_ref_sys(Refer System Status) .............................197
tk_ref_tsk(Refer Task Status) ...................................42
tk_ref_ver(Refer Version Information) ...................199
Registers
tk_get_reg(Get Task Registers) ................................38
tk_set_reg(Set Task Registers) ..................................40
Release
tk_rel_mpf(Release Fixed-size Memory Block)
..........................................................................144
tk_rel_mpl(Release Variable-size Memory Block)
..........................................................................155
tk_rel_wai(Release Wait) ..........................................53
Rendezvous
tk_acp_por(Accept Port for Rendezvous) ...............125
tk_cal_por(Call Port for Rendezvous) ....................122
tk_cre_por(Create Port for Rendezvous) ................119
tk_del_por(Delete Port for Rendezvous) ................121
tk_fwd_por(Forward Rendezvous to Another Port)
...........................................................................128
tk_rpl_rdv(Reply Rendezvous) ...............................132
Reply
tk_rpl_rdv(Reply Rendezvous) ...............................132
Resume
tk_frsm_tsk(Force Resume Task) .............................59
tk_rsm_tsk(Resume Task) .........................................57
Return
tk_ret_int(Return from Interrupt Handler) ..............186
Rotate
tk_rot_rdq(Rotate Ready Queue) ............................191
S
Semaphore
tk_cre_sem(Create Semaphore) ................................64
tk_del_sem(Delete Semaphore) ................................66
tk_ref_sem(Refer Semaphore Status) .......................71
tk_sig_sem(Signal Semaphore) .................................67
tk_wai_sem(Wait on Semaphore) .............................69
272
So ft
Manu al
Send
tk_snd_mbf(Send Message to Message Buffer)
..........................................................................112
tk_snd_mbx(Send Message to Mailbox) .................. 89
Set
tk_set_flg(Set Event Flag) ........................................ 77
tk_set_reg(Set Task Registers) ................................. 40
tk_set_tim(Set Time) .............................................. 161
Signal
isig_tim(Signal Time) .............................................165
tk_sig_sem(Signal Semaphore) ................................67
Sleep
tk_slp_tsk(Sleep Task) .............................................. 47
Start
tk_sta_alm(Start Alarm Handler) ............................179
tk_sta_cyc(Start Cyclic Handler) ............................171
tk_sta_tsk (Start Task) .............................................. 30
Status
tk_ref_alm(Refer Alarm Handler Status) ............... 181
tk_ref_cyc(Refer Cyclic Handler Status) ................ 173
tk_ref_flg(Refer Event Flag Status) .......................... 83
tk_ref_mbf(Refer Message Buffer Status) ..............116
tk_ref_mbx(Refer Mailbox Status) ...........................93
tk_ref_mtx(Refer Mutex Status) ............................. 105
tk_ref_por(Refer Port Status) ..................................134
tk_ref_sem(Refer Semaphore Status) .......................71
tk_ref_ssy(Refer Subsystem Status) .......................205
tk_ref_sys(Refer System Status) ............................. 197
tk_ref_tsk(Refer Task Status) ................................... 42
Stop
tk_stp_alm(Stop Alarm Handler) ............................180
tk_stp_cyc(Stop Cyclic Handler) ............................172
Subsystem
tk_def_ssy(Define Subsystem) ............................... 202
tk_ref_ssy(Refer Subsystem Status) .......................205
Suspend
tk_sus_dev(Suspend Device) ..................................224
tk_sus_tsk(Suspend Task) .........................................55
Synchronous
tk_srea_dev(Synchronous Read Device) ................ 216
tk_swri_dev(Synchronous Write Device) ............... 220
System
tk_ref_sys(Refer System Status) ............................. 197
T
Task
tk_can_wup(Cancel Wakeup Task) .......................... 51
tk_chg_pri(Change Task Priority) ............................ 35
tk_cre_tsk(Create Task) ............................................ 26
tk_del_tsk(Delete Task) ............................................ 29
tk_dly_tsk(Delay Task) .............................................61
tk_exd_tsk(Exit and Delete Task) ............................. 32
tk_ext_tsk(Exit Task) ................................................ 31
tk_frsm_tsk(Force Resume Task) ............................. 59
tk_get_reg(Get Task Registers) ................................38
tk_get_tid(Get Task Identifier) ............................... 193
tk_ref_tsk(Refer Task Status) ................................... 42
tk_rsm_tsk(Resume Task) ........................................ 57
tk_set_reg(Set Task Registers) ................................. 40
tk_slp_tsk(Sleep Task) .............................................. 47
tk_sta_tsk (Start Task) .............................................. 30
CM81-00210-2a, January 31, 2014
索引
Support
Soft
tk_sus_tsk(Suspend Task) .........................................55
tk_ter_tsk(Terminate Task) .......................................33
tk_wup_tsk(Wakeup Task) .......................................49
Terminate
tk_ter_tsk(Terminate Task) .......................................33
Time
isig_tim(Signal Time) .............................................165
tk_get_otm(Get Operating Time) ............................164
tk_get_tim(Get Time) .............................................163
tk_set_tim(Set Time) ...............................................161
tk_acp_por
tk_acp_por(Accept Port for Rendezvous)
..........................................................................125
tk_cal_por
tk_cal_por(Call Port for Rendezvous) ....................122
tk_can_wup
tk_can_wup(Cancel Wakeup Task) ..........................51
tk_chg_pri
tk_chg_pri(Change Task Priority) ............................35
tk_clr_flg
tk_clr_flg(Clear Event Flag) .....................................78
tk_cls_dev
tk_cls_dev(Close Device) .......................................213
tk_cre_alm
tk_cre_alm(Create Alarm Handler) ........................176
tk_cre_cyc
tk_cre_cyc(Create Cyclic Handler) .........................167
tk_cre_flg
tk_cre_flg(Create Event Flag) ...................................74
tk_cre_mbf
tk_cre_mbf(Create Message Buffer) .......................108
tk_cre_mbx
tk_cre_mbx(Create Mailbox) ....................................86
tk_cre_mpf
tk_cre_mpf(Create Fixed-size Memory Pool)
..........................................................................138
tk_cre_mpl
tk_cre_mpl(Create Variable-size Memory Pool)
..........................................................................149
tk_cre_mtx
tk_cre_mtx(Create Mutex) ........................................97
tk_cre_por
tk_cre_por(Create Port for Rendezvous) ................119
tk_cre_sem
tk_cre_sem(Create Semaphore) ................................64
tk_cre_tsk
tk_cre_tsk(Create Task) ............................................26
tk_def_dev
tk_def_dev(Define Device) .....................................207
tk_def_int
tk_def_int(Define Interrupt Handler) ......................184
tk_def_ssy
tk_def_ssy(Define Subsystem) ...............................202
tk_del_alm
tk_del_alm(Delete Alarm Handler) ........................178
tk_del_cyc
tk_del_cyc(Delete Cyclic Handler) .........................170
tk_del_flg
tk_del_flg(Delete Event Flag) ...................................76
tk_del_mbf
tk_del_mbf(Delete Message Buffer) .......................111
tk_del_mbx
tk_del_mbx(Delete Mailbox) ....................................88
January 31, 2014, CM81-00210-2a
Ma nual
tk_del_mpf
tk_del_mpf(Delete Fixed-size Memory Pool)
..........................................................................141
tk_del_mpl
tk_del_mpl(Delete Variable-size Memory Pool)
..........................................................................152
tk_del_mtx
tk_del_mtx(Delete Mutex) ........................................ 99
tk_del_por
tk_del_por(Delete Port for Rendezvous) ................ 121
tk_del_sem
tk_del_sem(Delete Semaphore) ................................66
tk_del_tsk
tk_del_tsk(Delete Task) ............................................ 29
tk_dis_dsp
tk_dis_dsp(Disable Dispatch) ................................. 194
tk_dly_tsk
tk_dly_tsk(Delay Task) .............................................61
tk_ena_dsp
tk_ena_dsp(Enable Dispatch) ................................. 196
tk_evt_dev
tk_evt_dev(Event Device) ...................................... 233
tk_exd_tsk
tk_exd_tsk(Exit and Delete Task) ............................. 32
tk_ext_tsk
tk_ext_tsk(Exit Task) ................................................ 31
tk_frsm_tsk
tk_frsm_tsk(Force Resume Task) ............................. 59
tk_fwd_por
tk_fwd_por(Forward Rendezvous to Another Port)
........................................................................... 128
tk_get_dev
tk_get_dev(Get Device) .......................................... 226
tk_get_mpf
tk_get_mpf(Get Fixed-size Memory Block) ........... 142
tk_get_mpl
tk_get_mpl(Get Variable-size Memory Block)
..........................................................................153
tk_get_otm
tk_get_otm(Get Operating Time) ........................... 164
tk_get_reg
tk_get_reg(Get Task Registers) ................................38
tk_get_tid
tk_get_tid(Get Task Identifier) ............................... 193
tk_get_tim
tk_get_tim(Get Time) .............................................163
tk_loc_mtx
tk_loc_mtx(Lock Mutex) ........................................ 100
tk_lst_dev
tk_lst_dev(List Device) ...........................................231
tk_opn_dev
tk_opn_dev(Open Device) ...................................... 211
tk_oref_dev
tk_oref_dev(Refer Device) .....................................229
tk_rcv_mbf
tk_rcv_mbf(Receive Message from Message Buffer)
........................................................................... 114
tk_rcv_mbx
tk_rcv_mbx(Receive Message from Mailbox)
............................................................................91
tk_rea_dev
tk_rea_dev(Read Device) .......................................214
273
索引
Su pp or t
tk_ref_alm
tk_ref_alm(Refer Alarm Handler Status) ................181
tk_ref_cyc
tk_ref_cyc(Refer Cyclic Handler Status) ................173
tk_ref_dev
tk_ref_dev(Refer Device) .......................................227
tk_ref_flg
tk_ref_flg(Refer Event Flag Status) ..........................83
tk_ref_idv
tk_ref_idv(Refer Initial Device Information)
..........................................................................210
tk_ref_mbf
tk_ref_mbf(Refer Message Buffer Status) ..............116
tk_ref_mbx
tk_ref_mbx(Refer Mailbox Status) ...........................93
tk_ref_mpf
tk_ref_mpf(Refer Fixed-size Memory Pool Status)
..........................................................................146
tk_ref_mpl
tk_ref_mpl(Refer Variable-size Memory Pool Status)
...........................................................................157
tk_ref_mtx
tk_ref_mtx(Refer Mutex Status) .............................105
tk_ref_por
tk_ref_por(Refer Port Status) ..................................134
tk_ref_sem
tk_ref_sem(Refer Semaphore Status) .......................71
tk_ref_ssy
tk_ref_ssy(Refer Subsystem Status) .......................205
tk_ref_sys
tk_ref_sys(Refer System Status) .............................197
tk_ref_tsk
tk_ref_tsk(Refer Task Status) ...................................42
tk_ref_ver
tk_ref_ver(Refer Version Information) ...................199
tk_rel_mpf
tk_rel_mpf(Release Fixed-size Memory Block)
..........................................................................144
tk_rel_mpl
tk_rel_mpl(Release Variable-size Memory Block)
..........................................................................155
tk_rel_wai
tk_rel_wai(Release Wait) ..........................................53
tk_ret_int
tk_ret_int(Return from Interrupt Handler) ..............186
tk_rot_rdq
tk_rot_rdq(Rotate Ready Queue) ............................191
tk_rpl_rdv
tk_rpl_rdv(Reply Rendezvous) ...............................132
tk_rsm_tsk
tk_rsm_tsk(Resume Task) .........................................57
tk_set_flg
tk_set_flg(Set Event Flag) ........................................77
tk_set_reg
tk_set_reg(Set Task Registers) ..................................40
tk_set_tim
tk_set_tim(Set Time) ...............................................161
tk_sig_sem
tk_sig_sem(Signal Semaphore) .................................67
tk_slp_tsk
tk_slp_tsk(Sleep Task) ..............................................47
274
So ft
Manu al
tk_snd_mbf
tk_snd_mbf(Send Message to Message Buffer)
..........................................................................112
tk_snd_mbx
tk_snd_mbx(Send Message to Mailbox) .................. 89
tk_srea_dev
tk_srea_dev(Synchronous Read Device) ................ 216
tk_sta_alm
tk_sta_alm(Start Alarm Handler) ............................179
tk_sta_cyc
tk_sta_cyc(Start Cyclic Handler) ............................171
tk_sta_tsk
tk_sta_tsk (Start Task) .............................................. 30
tk_stp_alm
tk_stp_alm(Stop Alarm Handler) ............................180
tk_stp_cyc
tk_stp_cyc(Stop Cyclic Handler) ............................172
tk_sus_dev
tk_sus_dev(Suspend Device) ..................................224
tk_sus_tsk
tk_sus_tsk(Suspend Task) .........................................55
tk_swri_dev
tk_swri_dev(Synchronous Write Device) ............... 220
tk_ter_tsk
tk_ter_tsk(Terminate Task) .......................................33
tk_unl_mtx
tk_unl_mtx(Unlock Mutex) .................................... 103
tk_wai_dev
tk_wai_dev(Wait Device) .......................................222
tk_wai_flg
tk_wai_flg(Wait Event Flag) ....................................79
tk_wai_sem
tk_wai_sem(Wait on Semaphore) ............................. 69
tk_wri_dev
tk_wri_dev(Write Device) ...................................... 218
tk_wup_tsk
tk_wup_tsk(Wakeup Task) .......................................49
U
Unlock
tk_unl_mtx(Unlock Mutex) .................................... 103
V
Variable
tk_cre_mpl(Create Variable-size Memory Pool)
..........................................................................149
tk_del_mpl(Delete Variable-size Memory Pool)
..........................................................................152
tk_get_mpl(Get Variable-size Memory Block)
..........................................................................153
tk_ref_mpl(Refer Variable-size Memory Pool Status)
........................................................................... 157
tk_rel_mpl(Release Variable-size Memory Block)
..........................................................................155
Variable-size
tk_cre_mpl(Create Variable-size Memory Pool)
..........................................................................149
tk_del_mpl(Delete Variable-size Memory Pool)
..........................................................................152
CM81-00210-2a, January 31, 2014
索引
Support
Soft
Ma nual
tk_get_mpl(Get Variable-size Memory Block)
..........................................................................153
tk_ref_mpl(Refer Variable-size Memory Pool Status)
...........................................................................157
tk_rel_mpl(Release Variable-size Memory Block)
..........................................................................155
Version
tk_ref_ver(Refer Version Information) ...................199
あ
W
イベントフラグ機能
イベントフラグ機能のシステムコール ..............73
Wait
tk_rel_wai(Release Wait) ..........................................53
tk_wai_dev(Wait Device) .......................................222
tk_wai_flg(Wait Event Flag) ....................................79
tk_wai_sem(Wait on Semaphore) .............................69
Wakeup
tk_can_wup(Cancel Wakeup Task) ..........................51
tk_wup_tsk(Wakeup Task) .......................................49
Write
tk_swri_dev(Synchronous Write Device) ...............220
tk_wri_dev(Write Device) ......................................218
アラームハンドラ機能
アラームハンドラ機能のシステムコール
..........................................................................175
い
え
エラーコード
エラーコード ............................................................ 4
エラーコード一覧 ................................................258
か
拡張仕様
拡張仕様 .................................................................... 8
拡張同期
拡張同期・通信機能のシステムコール ..............95
可変長メモリプール機能
可変長メモリプール機能のシステムコール
..........................................................................148
き
基本的な用語
T-REALOS の基本的な用語 ..................................2
こ
固定長メモリプール機能
固定長メモリプール機能のシステムコール
..........................................................................137
さ
索引
システムコール索引 ............................................ 264
サブシステム機能
サブシステム機能のシステムコール ................ 201
し
時間管理機能
時間管理機能のシステムコール ........................ 159
システムコール
アラームハンドラ機能のシステムコール
..........................................................................175
イベントフラグ機能のシステムコール ..............73
拡張同期・通信機能のシステムコール ..............95
可変長メモリプール機能のシステムコール
..........................................................................148
固定長メモリプール機能のシステムコール
..........................................................................137
サブシステム機能のシステムコール ................ 201
January 31, 2014, CM81-00210-2a
275
索引
Su pp or t
時間管理機能のシステムコール .........................159
システムコール .........................................................4
システムコール一覧 ...............................................16
システムコール索引 .............................................264
システムコール説明内容 .......................................23
システム時刻管理機能のシステムコール
..........................................................................160
システム状態管理機能のシステムコール
..........................................................................190
周期ハンドラ機能のシステムコール .................166
セマフォ機能のシステムコール ...........................63
タスク管理機能のシステムコール .......................25
タスク付属同期機能のシステムコール ...............46
デバイス管理機能のシステムコール .................206
同期・通信機能のシステムコール .......................62
ミューテックス機能のシステムコール ...............96
メールボックス機能のシステムコール ...............85
メッセージバッファ機能のシステムコール
..........................................................................107
メモリプール管理機能のシステムコール
..........................................................................136
ランデブポート機能のシステムコール .............118
割込み管理機能のシステムコール .....................183
システム時刻管理機能
システム時刻管理機能のシステムコール
..........................................................................160
システム状態管理機能
システム状態管理機能のシステムコール
..........................................................................190
実装依存
実装依存 .....................................................................7
実装定義
実装定義 .....................................................................5
周期ハンドラ機能
周期ハンドラ機能のシステムコール .................166
せ
セマフォ機能
セマフォ機能のシステムコール ...........................63
た
タスク管理機能
タスク管理機能のシステムコール .......................25
タスク付属同期機能
タスク付属同期機能のシステムコール ...............46
つ
通信
同期・通信機能のシステムコール .......................62
通信機能
拡張同期・通信機能のシステムコール
............................................................................95
So ft
Manu al
データ型
T-Kernel 固有の意味を持つデータ型の一覧
............................................................................12
データ型 .................................................................... 4
汎用的なデータ型 ..................................................10
デバイス管理機能
デバイス管理機能のシステムコール ................ 206
と
同期
同期・通信機能のシステムコール ...................... 62
は
汎用的なデータ型
汎用的なデータ型 ..................................................10
ま
マクロ
定数マクロ一覧 ....................................................259
み
ミューテックス機能
ミューテックス機能のシステムコール
............................................................................96
め
メールボックス機能
メールボックス機能のシステムコール
............................................................................85
メッセージバッファ機能
メッセージバッファ機能のシステムコール
..........................................................................107
メモリプール管理機能
メモリプール管理機能のシステムコール
..........................................................................136
ら
ランデブポート機能
ランデブポート機能のシステムコール
..........................................................................118
わ
割込み管理機能
割込み管理機能のシステムコール .................... 183
て
定数マクロ
定数マクロ一覧 .....................................................259
276
CM81-00210-2a, January 31, 2014
Support
Soft
Ma nual
CM81-00210-2a
Spansion • CONTROLLER MANUAL
FM3 ファミリ
T-Kernel 仕様準拠
T-REALOS/M3
API リファレンス
2014 年 1 月 第2.1 版発行
発行
Spansion Inc.
編集
マーケティングコミュニケーション部
January 31, 2014, CM81-00210-2a
277
Su pp or t
So ft
Manu al
免責事項
本資料に記載された製品は、通常の産業用 , 一般事務用 , パーソナル用 , 家庭用などの一般的用途 ( ただし、用途の限定はあ
りません ) に使用されることを意図して設計・製造されています。(1) 極めて高度な安全性が要求され、仮に当該安全性が
確保されない場合、社会的に重大な影響を与えかつ直接生命・身体に対する重大な危険性を伴う用途 ( 原子力施設における
核反応制御 , 航空機自動飛行制御 , 航空交通管制 , 大量輸送システムにおける運行制御 , 生命維持のための医療機器 , 兵器シ
ステムにおけるミサイル発射制御等をいう ) 、ならびに (2) 極めて高い信頼性が要求される用途 ( 海底中継器 , 宇宙衛星等を
いう ) に使用されるよう設計・製造されたものではありません。上記の製品の使用法によって惹起されたいかなる請求また
は損害についても、Spansion は、お客様または第三者、あるいはその両方に対して責任を一切負いません。半導体デバイス
はある確率で故障が発生します。当社半導体デバイスが故障しても、結果的に人身事故 , 火災事故 , 社会的な損害を生じさ
せないよう、お客様において、装置の冗長設計 , 延焼対策設計 , 過電流防止対策設計 , 誤動作防止設計などの安全設計をお
願いします。本資料に記載された製品が、外国為替及び外国貿易法、米国輸出管理関連法規などの規制に基づき規制され
ている製品または技術に該当する場合には、本製品の輸出に際して、同法に基づく許可が必要となります。
商標および注記
このドキュメントは、断りなく変更される場合があります。本資料には Spansion が開発中の Spansion 製品に関する情報が
記載されている場合があります。Spansion は、それらの製品に対し、予告なしに仕様を変更したり、開発を中止したりする
権利を有します。このドキュメントに含まれる情報は、現状のまま、保証なしに提供されるものであり、その正確性 , 完全
性 , 実施可能性および特定の目的に対する適合性やその市場性および他者の権利を侵害しない事を保証するものでなく、ま
た、明示 , 黙示または法定されているあらゆる保証をするものでもありません。Spansion は、このドキュメントに含まれる
情報を使用することにより発生したいかなる損害に対しても責任を一切負いません。
Copyright  2010-2014 Spansion Inc. All rights reserved.
商標:Spansion, Spansion ロゴ ( 図形マーク), MirrorBit, MirrorBit Eclipse, ORNAND 及びこれらの組合せは、米国・日
本ほか諸外国におけるSpansion LLC の商標です。第三者の社名・製品名等の記載はここでは情報提供を目的として表記した
ものであり、各権利者の商標もしくは登録商標となっている場合があります。
Copyright © 2007 T-Engine Forum All rights reserved.
278
CM81-00210-2a, January 31, 2014