toppers新世代カーネル統合仕様書 release 1.6.0 1...

382
TOPPERS 新世代カーネル統合仕様書 Release 1.6.0 1 1 2 TOPPERS 新世代カーネル統合仕様書 3 4 バージョン: Release 1.6.0 5 最終更新: 2014年1月6日 6 7 このドキュメントは,TOPPERS新世代カーネルに属する一連のリアルタイムカー 8 ネルの仕様を,統合的に記述したものである.未完成の部分も残っている(特 9 に動的生成対応カーネルに関しては,仕様検討が不十分なところが多い)が, 10 新世代カーネルの仕様検討はこの段階で完了とし,これ以降は第3世代カーネル 11 仕様として検討を続ける計画である. 12 13 この仕様書に準拠している各カーネルのバージョンは,次の通りである. 14 15 TOPPERS/ASP カーネル Release 1.9.0 16 TOPPERS/FMP カーネル Release 1.2.0 17 TOPPERS/HRP2 カーネル Release 2.2.0 18 TOPPERS/SSP カーネル Release 1.2.0 19 20 なお,本文中から参照している図は,ファイルの最後にまとめて掲載してある. 21 22 ---------------------------------------------------------------------- 23 TOPPERS New Generation Kernel Specification 24 25 Copyright (C) 2006 -2014 by Embedded and Real -Time Systems Laboratory 26 Graduate School of Information Science, Nagoya Univ., JAPAN 27 Copyright (C) 2006 -2014 by TOPPERS Project, Inc., JAPAN 28 29 上記著作権者は,以下の (1)~(3) の条件を満たす場合に限り,本ドキュメ 30 ント(本ドキュメントを改変したものを含む.以下同じ)を使用・複製・改 31 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 32 (1) 本ドキュメントを利用する場合には,上記の著作権表示,この利用条件 33 および下記の無保証規定が,そのままの形でドキュメント中に含まれて 34 いること. 35 (2) 本ドキュメントを改変する場合には,ドキュメントを改変した旨の記述 36 を,改変後のドキュメント中に含めること.ただし,改変後のドキュメ 37 ントが,TOPPERSプロジェクト指定の開発成果物である場合には,この限 38 りではない. 39 (3) 本ドキュメントの利用により直接的または間接的に生じるいかなる損害 40 からも,上記著作権者およびTOPPERSプロジェクトを免責すること.また, 41 本ドキュメントのユーザまたはエンドユーザからのいかなる理由に基づ 42 く請求からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 43 44 本ドキュメントは,無保証で提供されているものである.上記著作権者およ 45 びTOPPERSプロジェクトは,本ドキュメントに関して,特定の使用目的に対す 46 る適合性も含めて,いかなる保証も行わない.また,本ドキュメントの利用 47 により直接的または間接的に生じたいかなる損害に関しても,その責任を負 48 わない. 49 ---------------------------------------------------------------------- 50

Upload: others

Post on 24-Jan-2021

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

1

1

2 TOPPERS新世代カーネル統合仕様書

3

4 バージョン: Release 1.6.0

5 最終更新: 2014年1月6日

6

7 このドキュメントは,TOPPERS新世代カーネルに属する一連のリアルタイムカー

8 ネルの仕様を,統合的に記述したものである.未完成の部分も残っている(特

9 に動的生成対応カーネルに関しては,仕様検討が不十分なところが多い)が,

10 新世代カーネルの仕様検討はこの段階で完了とし,これ以降は第3世代カーネル

11 仕様として検討を続ける計画である.

12

13 この仕様書に準拠している各カーネルのバージョンは,次の通りである.

14

15 TOPPERS/ASPカーネル Release 1.9.0

16 TOPPERS/FMPカーネル Release 1.2.0

17 TOPPERS/HRP2カーネル Release 2.2.0

18 TOPPERS/SSPカーネル Release 1.2.0

19

20 なお,本文中から参照している図は,ファイルの最後にまとめて掲載してある.

21

22 ----------------------------------------------------------------------

23 TOPPERS New Generation Kernel Specification

24

25 Copyright (C) 2006 -2014 by Embedded and Real -Time Systems Laboratory

26 Graduate School of Information Science, Nagoya Univ., JAPAN

27 Copyright (C) 2006 -2014 by TOPPERS Project, Inc., JAPAN

28

29 上記著作権者は,以下の (1)~(3) の条件を満たす場合に限り,本ドキュメ

30 ント(本ドキュメントを改変したものを含む.以下同じ)を使用・複製・改

31 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.

32 (1) 本ドキュメントを利用する場合には,上記の著作権表示,この利用条件

33 および下記の無保証規定が,そのままの形でドキュメント中に含まれて

34 いること.

35 (2) 本ドキュメントを改変する場合には,ドキュメントを改変した旨の記述

36 を,改変後のドキュメント中に含めること.ただし,改変後のドキュメ

37 ントが,TOPPERSプロジェクト指定の開発成果物である場合には,この限

38 りではない.

39 (3) 本ドキュメントの利用により直接的または間接的に生じるいかなる損害

40 からも,上記著作権者およびTOPPERSプロジェクトを免責すること.また,

41 本ドキュメントのユーザまたはエンドユーザからのいかなる理由に基づ

42 く請求からも,上記著作権者およびTOPPERSプロジェクトを免責すること.

43

44 本ドキュメントは,無保証で提供されているものである.上記著作権者およ

45 びTOPPERSプロジェクトは,本ドキュメントに関して,特定の使用目的に対す

46 る適合性も含めて,いかなる保証も行わない.また,本ドキュメントの利用

47 により直接的または間接的に生じたいかなる損害に関しても,その責任を負

48 わない.

49 ----------------------------------------------------------------------

50

Page 2: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

2

51 ○目次

52

53 ・目次

54 ・仕様書で用いる記述項目と記号

55 ・タグの付与方法

56

57 第1章 TOPPERS新世代カーネルの概要

58

59 1.1 TOPPERS新世代カーネル仕様の位置付け

60 1.2 TOPPERS新世代カーネル仕様の設計方針

61 1.3 TOPPERS/ASPカーネルの適用対象領域と仕様設計方針

62 1.4 TOPPERS/FMPカーネルの適用対象領域と仕様設計方針

63 1.5 TOPPERS/HRP2カーネルの適用対象領域と仕様設計方針

64 1.6 TOPPERS/SSPカーネルの適用対象領域と仕様設計方針

65 1.7 TOPPERS/ASP Safety カーネルの適用対象領域と仕様設計方針

66

67 第2章 主要な概念と共通定義

68

69 2.1 仕様の位置付け

70 2.1.1 カーネルの機能セット

71 2.1.2 ターゲット非依存の規定とターゲット定義の規定

72 2.1.3 想定するソフトウェア構成

73 2.1.4 想定するハードウェア構成

74 2.1.5 想定するプログラミング言語

75 2.2 APIの構成要素とコンベンション

76 2.2.1 APIの構成要素

77 2.2.2 パラメータとリターンパラメータ

78 2.2.3 返値とエラーコード

79 2.2.4 機能コード

80 2.2.5 ヘッダファイル

81 2.3 主な概念

82 2.3.1 オブジェクトと処理単位

83 2.3.2 サービスコールとパラメータ

84 2.3.3 保護機能

85 2.3.4 マルチプロセッサ対応

86 2.3.5 その他

87 2.4 処理単位の種類と実行

88 2.4.1 処理単位の種類

89 2.4.2 処理単位の実行順序

90 2.4.3 カーネル処理の不可分性

91 2.4.4 処理単位を実行するプロセッサ

92 2.5 システム状態とコンテキスト

93 2.5.1 カーネル動作状態と非動作状態

94 2.5.2 タスクコンテキストと非タスクコンテキスト

95 2.5.3 カーネルの振舞いに影響を与える状態

96 2.5.4 全割込みロック状態と全割込みロック解除状態

97 2.5.5 CPUロック状態とCPUロック解除状態

98 2.5.6 割込み優先度マスク

99 2.5.7 ディスパッチ禁止状態とディスパッチ許可状態

100 2.5.8 ディスパッチ保留状態

Page 3: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

3

101 2.5.9 カーネル管理外の状態

102 2.5.10 処理単位の開始・終了とシステム状態

103 2.6 タスクの状態遷移とスケジューリング規則

104 2.6.1 基本的なタスク状態

105 2.6.2 タスクの状態遷移

106 2.6.3 タスクのスケジューリング規則

107 2.6.4 待ち行列と待ち解除の順序

108 2.6.5 タスク例外処理マスク状態と待ち禁止状態

109 2.6.6 ディスパッチ保留状態で実行中のタスクに対する強制待ち

110 2.6.7 制約タスク

111 2.7 割込み処理モデル

112 2.7.1 割込み処理の流れ

113 2.7.2 割込み優先度

114 2.7.3 割込み要求ラインの属性

115 2.7.4 割込みを受け付ける条件

116 2.7.5 割込み番号と割込みハンドラ番号

117 2.7.6 マルチプロセッサにおける割込み処理

118 2.7.7 カーネル管理外の割込み

119 2.7.8 カーネル管理外の割込みの設定方法

120 2.8 CPU例外処理モデル

121 2.8.1 CPU例外処理の流れ

122 2.8.2 CPU例外ハンドラから呼び出せるサービスコール

123 2.8.3 エミュレートされたCPU例外ハンドラ

124 2.8.4 カーネル管理外のCPU例外

125 2.9 システムの初期化と終了

126 2.9.1 システム初期化手順

127 2.9.2 システム終了手順

128 2.10 オブジェクトの登録とその解除

129 2.10.1 ID番号で識別するオブジェクト

130 2.10.2 オブジェクト番号で識別するオブジェクト

131 2.10.3 識別番号を持たないオブジェクト

132 2.10.4 オブジェクト生成に必要なメモリ領域

133 2.10.5 オブジェクトが属する保護ドメインの設定

134 2.10.6 オブジェクトが属するクラスの設定

135 2.10.7 オブジェクトの状態参照

136 2.11 オブジェクトのアクセス保護

137 2.11.1 オブジェクトのアクセス保護とアクセス違反の通知

138 2.11.2 メモリオブジェクトに対するアクセス許可ベクタの制限

139 2.11.3 デフォルトのアクセス許可ベクタ

140 2.11.4 アクセス許可ベクタの設定

141 2.11.5 カーネルの管理領域のアクセス保護

142 2.11.6 ユーザタスクのユーザスタック領域

143 2.12 システムコンフィギュレーション手順

144 2.12.1 システムコンフィギュレーションファイル

145 2.12.2 静的APIの文法とパラメータ

146 2.12.3 保護ドメインの指定

147 2.12.4 クラスの指定

148 2.12.5 コンフィギュレータの処理モデル

149 2.12.6 静的APIのパラメータに関するエラー検出

150 2.12.7 オブジェクトのID番号の指定

Page 4: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

4

151 2.13 TOPPERSネーミングコンベンション

152 2.13.1 モジュール識別名

153 2.13.2 データ型名

154 2.13.3 関数名

155 2.13.4 変数名

156 2.13.5 定数名

157 2.13.6 マクロ名

158 2.13.7 静的API名

159 2.13.8 ファイル名

160 2.13.9 モジュール内部の名称の衝突回避

161 2.14 TOPPERS共通定義

162 2.14.1 TOPPERS共通ヘッダファイル

163 2.14.2 TOPPERS共通データ型

164 2.14.3 TOPPERS共通定数

165 2.14.4 TOPPERS共通エラーコード

166 2.14.5 TOPPERS共通マクロ

167 2.14.6 TOPPERS共通構成マクロ

168 2.15 カーネル共通定義

169 2.15.1 カーネルヘッダファイル

170 2.15.2 カーネル共通定数

171 2.15.3 カーネル共通マクロ

172 2.15.4 カーネル共通構成マクロ

173

174 第3章 システムインタフェースレイヤAPI仕様

175

176 3.1 システムインタフェースレイヤの概要

177 3.2 SILヘッダファイル

178 3.3 全割込みロック状態の制御

179 3.4 SILスピンロック

180 3.5 微少時間待ち

181 3.6 エンディアンの取得

182 3.7 メモリ空間アクセス関数

183 3.8 I/O空間アクセス関数

184 3.9 プロセッサIDの参照

185

186 第4章 カーネルAPI仕様

187

188 4.1 タスク管理機能

189 4.2 タスク付属同期機能

190 4.3 タスク例外処理機能

191 4.4 同期・通信機能

192 4.4.1 セマフォ

193 4.4.2 イベントフラグ

194 4.4.3 データキュー

195 4.4.4 優先度データキュー

196 4.4.5 メールボックス

197 4.4.6 ミューテックス

198 4.4.7 メッセージバッファ

199 4.4.8 スピンロック

200 4.5 メモリプール管理機能

Page 5: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

5

201 4.5.1 固定長メモリプール

202 4.6 時間管理機能

203 4.6.1 システム時刻管理

204 4.6.2 周期ハンドラ

205 4.6.3 アラームハンドラ

206 4.6.4 オーバランハンドラ

207 4.7 システム状態管理機能

208 4.8 メモリオブジェクト管理機能

209 4.9 割込み管理機能

210 4.10 CPU例外管理機能

211 4.11 拡張サービスコール管理機能

212 4.12 システム構成管理機能

213

214 第5章 リファレンス

215

216 5.1 サービスコール一覧

217 5.2 静的API一覧

218 5.3 データ型

219 5.3.1 TOPPERS共通データ型

220 5.3.2 カーネルの使用するデータ型

221 5.3.3 カーネルの使用するパケット形式

222 5.4 定数とマクロ

223 5.4.1 TOPPERS共通定数

224 5.4.2 TOPPERS共通マクロ

225 5.4.3 カーネル共通定数

226 5.4.4 カーネル共通マクロ

227 5.4.5 カーネルの機能毎の定数

228 5.4.6 カーネルの機能毎のマクロ

229 5.5 構成マクロ

230 5.5.1 TOPPERS共通構成マクロ

231 5.5.2 カーネル共通構成マクロ

232 5.5.3 カーネルの機能毎の構成マクロ

233 5.6 エラーコード一覧

234 5.7 機能コード一覧

235 5.8 カーネルオブジェクトに対するアクセスの種別

236 5.9 ターゲット定義事項一覧

237 5.10 省略名の元になった英語

238 5.10.1 サービスコールと静的APIの名称の中のxxxの元になった英語

239 5.10.2 サービスコールと静的APIの名称の中のyyyの元になった英語

240 5.10.3 サービスコールの名称の中のzの元になった英語

241 5.11 バージョン履歴

242

243

244 ○仕様書で用いる記述項目と記号

245

246 この仕様書では,以下の記述項目を用いる.

247

248 【補足説明】の項では,仕様本体の記述に対する補足事項を説明する.

249

250 【~~カーネルにおける規定】の項では,TOPPERS新世代カーネルに属する特定

Page 6: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

6

251 のカーネルにおける追加仕様を規定する.

252

253 【~~仕様との関係】の項では,この仕様と,μITRON4.0仕様または

254 μITRON4.0/PX仕様との違いについて説明する.

255

256 【未決定事項】の項では,この仕様書の現時点のバージョンでは,決定されず

257 に残っている事項について記述する.

258

259 【仕様決定の理由】の項では,仕様を決定するにあたって考慮した事項につい

260 て説明する.

261

262 「第4章 カーネルAPI仕様」の章の各サービスコールおよび静的APIの仕様記述

263 においては,以下の記述項目を用いる.

264

265 【静的API】の項では,システムコンフィギュレーションファイル中で静的API

266 を記述する形式を規定する.また,【C言語API】の項では,C言語からサービス

267 コールを呼び出す形式を規定する.

268

269 【パラメータ】の項では,サービスコールおよび静的APIに渡すパラメータの名

270 称とデータ型を規定し,簡単な説明を行う.また,【リターンパラメータ】の

271 項では,サービスコールが返すリターンパラメータの名称とデータ型を規定し,

272 簡単な説明を行う.【エラーコード】の項では,サービスコールおよび静的

273 APIが返す可能性のあるメインエラーコードと,その検出条件を規定する.

274

275 【機能】の項では,サービスコールおよび静的APIの機能を規定する.

276

277 TOPPERS新世代カーネルに属する特定のカーネルにおいてのみサポートするAPI

278 につしては,【サポートするカーネル】の項で,そのことを記述する.

279

280 また,「第4章 カーネルAPI仕様」の章では,カーネルのAPIの種別とAPIをサ

281 ポートするカーネルの種類を表すために,次の記号を用いる.

282

283 〔T〕はタスクコンテキスト専用のサービスコールを示す.非タスクコンテキス

284 トから呼び出すと,E_CTXエラーとなる.

285

286 〔I〕は非タスクコンテキスト専用のサービスコールを示す.タスクコンテキス

287 トから呼び出すと,E_CTXエラーとなる.

288

289 〔TI〕はタスクコンテキストからも非タスクコンテキストからも呼び出すこと

290 のできるサービスコールを示す.

291

292 〔S〕は静的APIを示す.

293

294 〔P〕は保護機能対応カーネルのみでサポートされているAPIを示す.保護機能

295 対応でないカーネルでは,このAPIはサポートされない.

296

297 〔p〕は保護機能対応でないカーネルのみでサポートされているAPIを示す.保

298 護機能対応カーネルでは,このAPIはサポートされない.

299

300 〔M〕はマルチプロセッサ対応カーネルのみでサポートされているAPIを示す.

Page 7: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

7

301 マルチプロセッサ対応でないカーネルでは,このAPIはサポートされない.

302

303 〔D〕は動的生成対応カーネルのみでサポートされているAPIを示す.動的生成

304 対応でないカーネルでは,このAPIはサポートされない.

305

306 また,エラーが発生する条件を表すために,次の記号を用いる.

307

308 〔s〕は,サービスコールのみで発生するエラーを示す.静的APIでは,このエ

309 ラーは発生しない.

310

311 〔S〕は静的APIのみで発生するエラーを示す.サービスコールでは,このエラー

312 は発生しない.

313

314 〔P〕は保護機能対応カーネルのみで発生するエラーを示す.保護機能対応でな

315 いカーネルでは,このエラーは発生しない.

316

317 〔D〕は動的生成対応カーネルのみで発生するエラーを示す.動的生成対応でな

318 いカーネルでは,このエラーは発生しない.

319

320

321 ○タグの付与方法

322

323 この仕様書では,トレーサビリティの確保のために,記述事項に対してタグを

324 付与する.具体的には,以下に該当する記述事項を,タグを付与する対象とす

325 る.

326

327 ・対象ソフトウェアの実装に対する要求事項や制限事項

328 ・対象ソフトウェアの仕様に対する一般要求事項

329 ・対象ソフトウェアの動作環境に対する要求事項

330 ・ターゲット定義の規定

331

332 それに対して,用語の定義や補足説明,対象ソフトウェアを使用する上での推

333 奨事項や注意事項,仕様決定の理由,他の仕様との関係に対しては,タグを付

334 与しない.

335

336 タグの形式と意味は次の通りである(xxxxは4桁の数字を表す).

337

338 NGKIxxxx TOPPERS 新世代カーネル全体を対象とした記述

339 ASPSxxxx TOPPERS/ASP カーネルを対象とした記述

340 FMPSxxxx TOPPERS/FMP カーネルを対象とした記述

341 HRPSxxxx TOPPERS/HRP2 カーネルを対象とした記述

342 SSPSxxxx TOPPERS/SSP カーネルを対象とした記述

343 ASSSxxxx TOPPERS/ASP Safety カーネルを対象とした記述

344

345 仕様書中では,ある記述事項に,タグYYYYxxxx(YYYYは4文字の英文字,xxxxは

346 4桁の数字を表す)が付与されていることを,【YYYYxxxx】で表現する.それに

347 対して,タグYYYYxxxxを参照する場合には,[YYYYxxxx]と表記する.

348

349

350 第1章 TOPPERS新世代カーネルの概要

Page 8: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

8

351

352 TOPPERS新世代カーネルとは,TOPPERSプロジェクトにおいてITRON仕様をベース

353 として開発している一連のリアルタイムカーネルの総称である.この章では,

354 TOPPERS新世代カーネル仕様の位置付けと設計方針,それに属する各カーネルの

355 適用対象領域と設計方針について述べる.

356

357 1.1 TOPPERS新世代カーネル仕様の位置付け

358

359 TOPPERSプロジェクトでは,2000年に公開したTOPPERS/JSPカーネルを始めとし

360 て,μITRON4.0仕様およびその保護機能拡張(μITRON4.0/PX仕様)に準拠した

361 リアルタイムカーネルを開発してきた.

362

363 μITRON4.0仕様は1999年に,μITRON4.0/PX仕様は2002年に公表されたが,それ

364 以降現在までの間に,大きな仕様改訂は実施されていない.その間に,組込み

365 システムおよびソフトウェアのますますの大規模化・複雑化,これまで以上に

366 高い信頼性・安全性に対する要求,小さい消費エネルギー下での高い性能要求

367 など,組込みシステム開発を取り巻く状況は刻々変化している.リアルタイム

368 カーネルに対しても,マルチプロセッサへの対応,発展的な保護機能のサポー

369 ト,機能安全対応,省エネルギー制御機能のサポートなど,新しい要求が生じ

370 ている.

371

372 TOPPERSプロジェクトでは,リアルタイムカーネルに対するこのような新しい要

373 求に対応するために,μITRON4.0仕様を発展させる形で,TOPPERS新世代カーネ

374 ル仕様を策定することになった.

375

376 ただし,ITRON仕様が,各社が開発するリアルタイムカーネルを標準化すること

377 を目的に,リアルタイムカーネルの「標準仕様」を規定することを目指してい

378 るのに対して,TOPPERS新世代カーネル仕様は,TOPPERSプロジェクトにおいて

379 開発している一連のリアルタイムカーネルの「実装仕様」を記述するものであ

380 り,ITRON仕様とは異なる目的・位置付けを持つものである.

381

382 1.2 TOPPERS新世代カーネル仕様の設計方針

383

384 TOPPERS新世代カーネル仕様を設計するにあたり,次の方針を設定する.

385

386 (1) μITRON4.0仕様をベースに拡張・改良を加える

387

388 TOPPERS新世代カーネル仕様は,多くの技術者の尽力により作成され,多くの実

389 装・使用実績があるμITRON4.0仕様をベースとする.ただし,μITRON4.0仕様

390 の策定時以降の状況の変化を考慮し,μITRON4.0仕様で不十分と考えられる点

391 については積極的に拡張・改良する.μITRON4.0仕様への準拠性にはこだわら

392 ない.

393

394 (2) ソフトウェアの再利用性を重視する

395

396 μITRON4.0仕様の策定時点と比べると,組込みソフトウェアの大規模化が進展

397 している一方で,ハードウェアの性能向上も著しい.そのため,ソフトウェア

398 の再利用性を向上させるためには,少々のオーバヘッドは許容される状況にあ

399 る.

400

Page 9: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

9

401 そこで,TOPPERS新世代カーネル仕様では,μITRON4.0仕様においてオーバヘッ

402 ド削減のために実装定義または実装依存としていたような項目についても,ター

403 ゲットシステムに依存する項目とするのではなく,強く規定する方針とする.

404

405 (3) 高信頼・安全なシステム構築を支援する

406

407 TOPPERS新世代カーネル仕様は,高信頼・安全な組込みシステム構築を支援する

408 ものとする.

409

410 安全性の面では,アプリケーションプログラムに問題がある場合でも,リーゾ

411 ナブルなオーバヘッドでそれを救済できるなら,救済するような仕様とする.

412 また,アプリケーションプログラムの誤動作を検出する機能や,システムの自

413 己診断のための機能についても,順次取り込んでいく.

414

415 (4) アプリケーションシステム構築に必要な機能は積極的に取り込む

416

417 上記の方針を満たした上で,多くのアプリケーションシステムに共通に必要と

418 なる機能については,積極的にカーネルに取り込む.

419

420 カーネル単体の信頼性を向上させるためには,カーネルの機能は少なくした方

421 が楽である.しかし,アプリケーションシステム構築に必要となる機能は,カー

422 ネルがサポートしていなければアプリケーションプログラムで実現しなければ

423 ならず,システム全体の信頼性を考えると,多くのアプリケーションシステム

424 に共通に必要となる機能については,カーネルに取り込んだ方が有利である.

425

426 1.3 TOPPERS/ASPカーネルの適用対象領域と仕様設計方針

427

428 TOPPERS/ASPカーネル(ASPは,Advanced Standard Profileの略.以下,ASPカー

429 ネル)は,TOPPERS新世代カーネルの出発点となるリアルタイムカーネルである.

430 保護機能を持ったカーネルやマルチプロセッサ対応のカーネルは,ASPカーネル

431 を拡張する形で開発する.

432

433 ASPカーネルは,20年以上に渡るITRON仕様の技術開発成果をベースとして,完

434 成度の高いリアルタイムカーネルを実現するものである.完成度を高めるとい

435 う観点から,カーネル本体の仕様については,枯れた技術で実装できる範囲に

436 留める.

437

438 ASPカーネルの主な適用対象は,高い信頼性・安全性・リアルタイム性を要求さ

439 れる組込みシステムとする.ソフトウェア規模の面では,プログラムサイズ

440 (バイナリコード)が数十KB~1MB程度のシステムを主な適用対象とする.それ

441 より大規模なシステムには,保護機能を持ったリアルタイムカーネルを適用す

442 べきと考えられる.

443

444 ASPカーネルの機能は,カーネル内で動的なメモリ管理が不要な範囲に留める.

445 これは,高い信頼性・安全性・リアルタイム性を要求される組込みシステムで

446 は,システム稼働中に発生するメモリ不足への対処が難しいためである.この

447 方針から,カーネルオブジェクトは静的に生成することとし,動的なオブジェ

448 クト生成機能は設けない.ただし,アプリケーションプログラムが動的なメモ

449 リ管理をするためのカーネル機能である固定長メモリプール機能はサポートす

450 る.

Page 10: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

10

451

452 1.4 TOPPERS/FMPカーネルの適用対象領域と仕様設計方針

453

454 TOPPERS/FMPカーネル(FMPは,Flexible Multiprocessor Profileの略.以下,

455 FMPカーネル)は,ASPカーネルを,マルチプロセッサ対応に拡張したリアルタ

456 イムカーネルである.

457

458 FMPカーネルの適用対象となるターゲットハードウェアは,ホモジニアスなマル

459 チプロセッサシステムである.各プロセッサが全く同一のものである必要はな

460 いが,すべてのプロセッサでバイナリコードを共有することから,同じバイナ

461 リコードを実行できることが必要である.

462

463 FMPカーネルでは,タスクを実行するプロセッサを静的に決定するのが基本であ

464 り,カーネルは自動的に負荷分散する機能を持たないが,タスクをマイグレー

465 ションさせるサービスコールを備えている.これを用いて,アプリケーション

466 で動的な負荷分散を実現することが可能である.

467

468 FMPカーネルの機能は,ASPカーネルと同様に,カーネル内で動的なメモリ管理

469 が不要な範囲に留める.

470

471 1.5 TOPPERS/HRP2カーネルの適用対象領域と仕様設計方針

472

473 TOPPERS/HRP2カーネル(HRPは,High Reliable system Profileの略.2はバー

474 ジョン番号を示す.以下,HRP2カーネル)は,さらに高い信頼性・安全性を要

475 求される組込みシステムや,より大規模な組込みシステム向けに適用できるよ

476 うに,ASPカーネルを拡張したリアルタイムカーネルである.

477

478 HRP2カーネルの適用対象となるターゲットハードウェアは,特権モードと非特

479 権モードを備え,メモリ保護のためにMMU(Memory Management Unit)または

480 MPU(Memory Protection Unit)を持つプロセッサを用いたシステムである.

481 HRP2カーネルの主な適用対象は,ソフトウェア規模の面では,プログラムサイ

482 ズ(バイナリコード)が数百KB以上のシステムである.

483

484 HRP2カーネルの機能は,ASPカーネルと同様に,カーネル内で動的なメモリ管理

485 が不要な範囲に留める.具体的には,ASPカーネルに対して,メモリ保護機能と

486 オブジェクトアクセス保護機能,拡張サービスコール機能,ミューテックス機

487 能,オーバランハンドラ機能を追加し,メールボックス機能を削除している.

488

489 1.6 TOPPERS/SSPカーネルの適用対象領域と仕様設計方針

490

491 TOPPERS/SSPカーネル(SSPは,Smallest Set Profileの略.以下,SSPカーネル)

492 は,小規模システムに用いるために,ASPカーネルをベースに可能な限り機能を

493 絞り込んだリアルタイムカーネルである.

494

495 SSPカーネルの機能は,μITRON4.0仕様の「仕様準拠の最低条件」の考え方を踏

496 襲し,メモリ使用量を最小化するように定めている.具体的には,SSPカーネル

497 においては,タスクは待ち状態を持たない(言い換えると,制約タスクのみを

498 サポートする)のが最大の特徴である.また,ASPカーネルに対して下位互換性

499 を持つように配慮しているが,システム全体のメモリ使用量を最小化するため

500 に有用な機能は,ASPカーネルに対して追加している.

Page 11: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

11

501

502 TOPPERS/SSPカーネルの主な適用対象は,プログラムサイズ(バイナリコード)

503 が数KB~数十KB程度の極めて小規模な組込みシステムである.

504

505 1.7 TOPPERS/ASP Safety カーネルの適用対象領域と仕様設計方針

506

507 TOPPERS/ASP Safetyカーネル(以下,ASP Safetyカーネル)は,小規模な安全

508 関連システムに用いるために,ASPカーネルの機能を徹底的な検証が可能な範囲

509 にサブセット化したものである.メールボックスのように安全性の観点から問

510 題のある機能や,タスク例外処理機能のように使用頻度に比べて検証にコスト

511 のかかる機能はサポートしない.

512

513 ASP Safetyカーネルの主な適用対象は,特に高い安全性を要求される組込みシ

514 ステムとする.ソフトウェア規模の面では,プログラムサイズ(バイナリコー

515 ド)が数十KB~1MB程度のシステムを主な適用対象とする.それより大規模なシ

516 ステムには,保護機能を持ったカーネルを適用すべきと考えられる.

517

518

519 第2章 主要な概念と共通定義

520

521 2.1 仕様の位置付け

522

523 この仕様は,TOPPERS新世代カーネルに属する各カーネルの仕様を,統合的に記

524 述することを目標としている.また,TOPPERS新世代カーネル上で動作する各種

525 のシステムサービスに共通に適用される事項についても規定する.

526

527 2.1.1 カーネルの機能セット

528

529 TOPPERS新世代カーネルは,ASPカーネルをベースとして,保護機能,マルチプ

530 ロセッサ,カーネルオブジェクトの動的生成,機能安全などに対応した一連の

531 カーネルで構成される.

532

533 この仕様では,TOPPERS新世代カーネルを構成する一連のカーネルの仕様を統合

534 的に記述するが,言うまでもなく,カーネルの種類によってサポートする機能

535 は異なる.サポートする機能をカーネルの種類毎に記述する方法もあるが,カー

536 ネルの種類はユーザ要求に対応して増える可能性もあり,その度に仕様書を修

537 正するのは得策ではない.

538

539 そこでこの仕様では,サポートする機能を,カーネルの種類毎ではなく,カー

540 ネルの対応する機能セット毎に記述する.具体的には,保護機能を持ったカー

541 ネルを保護機能対応カーネル,マルチプロセッサに対応したカーネルをマルチ

542 プロセッサ対応カーネル,カーネルオブジェクトの動的生成機能を持ったカー

543 ネルを動的生成対応カーネルと呼ぶことにする.

544

545 【TOPPERS/ASPカーネルにおける規定】

546

547 ASPカーネルは,保護機能対応カーネル,マルチプロセッサ対応カーネル,動的

548 生成対応カーネルのいずれでもない【ASPS0001】.ただし,動的生成機能拡張

549 パッケージを用いると,動的生成対応カーネルとなる【ASPS0002】.

550

Page 12: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

12

551 【TOPPERS/FMPカーネルにおける規定】

552

553 FMPカーネルは,マルチプロセッサ対応カーネルであり,保護機能対応カーネル,

554 動的生成対応カーネルではない【FMPS0001】.

555

556 【TOPPERS/HRP2カーネルにおける規定】

557

558 HRP2カーネルは,保護機能対応カーネルであり,マルチプロセッサ対応カーネ

559 ル,動的生成対応カーネルではない【HRPS0001】.

560

561 【TOPPERS/SSPカーネルにおける規定】

562

563 SSPカーネルは,保護機能対応カーネル,マルチプロセッサ対応カーネル,動的

564 生成対応カーネルのいずれでもない【SSPS0001】.

565

566 【μITRON4.0仕様,μITRON4.0/PX仕様との関係】

567

568 μITRON4.0仕様は,カーネルオブジェクトの動的生成機能を持っているが,保

569 護機能を持っておらず,マルチプロセッサにも対応していない.μITRON4.0/PX

570 仕様は,μITRON4.0仕様に対して保護機能を追加するための仕様であり,カー

571 ネルオブジェクトの動的生成機能と保護機能を持っているが,マルチプロセッ

572 サには対応していない.

573

574 2.1.2 ターゲット非依存の規定とターゲット定義の規定

575

576 TOPPERS新世代カーネルは,アプリケーションプログラムの再利用性を向上させ

577 るために,ターゲットハードウェアや開発環境の違いをできる限り隠蔽するこ

578 とを目指している.ただし,ターゲットハードウェアや開発環境の制限によっ

579 て実現できない機能が生じたり,逆にターゲットハードウェアの特徴を活かす

580 ためには機能拡張が不可欠になる場合がある.また,同一のターゲットハード

581 ウェアであっても,アプリケーションシステムによって使用方法が異なる場合

582 があり,ターゲットシステム毎に仕様の細部に違いが生じることは避けられな

583 い.

584

585 そこで,TOPPERS新世代カーネルの仕様は,ターゲットシステムによらずに定め

586 るターゲット非依存(target-independent)の規定と,ターゲットシステム毎

587 に定めるターゲット定義(target-defined)の規定に分けて記述する.この仕

588 様書は,ターゲット非依存の規定について記述するものであり,この仕様書で

589 「ターゲット定義」とした事項は,ターゲットシステム毎に用意するドキュメ

590 ントにおいて規定する.

591

592 また,この仕様書でターゲット非依存に規定した事項であっても,ターゲット

593 ハードウェアや開発環境の制限によって実現できない場合や,実現するための

594 オーバヘッドが大きくなる場合には,この仕様書の規定を逸脱する場合がある.

595 このような場合には,ターゲットシステム毎に用意するドキュメントでその旨

596 を明記する.

597

598 2.1.3 想定するソフトウェア構成

599

600 この仕様では,アプリケーションシステムを構成するソフトウェアを,アプリ

Page 13: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

13

601 ケーションプログラム(以下,単にアプリケーションと呼ぶ),システムサー

602 ビス,カーネルの3階層に分けて考える(図2-1).カーネルとシステムサービ

603 スをあわせて,ソフトウェアプラットフォームと呼ぶ.

604

605 カーネルは,コンピュータの持つ最も基本的なハードウェア資源であるプロセッ

606 サ,メモリ,タイマを抽象化し,上位階層のソフトウェア(アプリケーション

607 およびシステムサービス)に論理的なプログラム実行環境を提供するソフトウェ

608 アである.

609

610 システムサービスは,各種の周辺デバイスを抽象化するソフトウェアで,ファ

611 イルシステムやネットワークプロトコルスタック,各種のデバイスドライバな

612 どが含まれる.

613

614 また,この仕様では,プロセッサと各種の周辺デバイスの接続方法を隠蔽する

615 ためのソフトウェア階層として,システムインタフェースレイヤ(SIL)を規定

616 する.

617

618 システムインタフェースレイヤ,カーネル,各種のシステムサービス(これら

619 をモジュールと呼ぶ)を,上位階層のソフトウェアから使うためのインタフェー

620 スを,API(Application Programming Interface)と呼ぶ.

621

622 この仕様書では,第3章においてシステムインタフェースレイヤのAPI仕様を,

623 第4章においてカーネルのAPI仕様を規定する.システムサービスのAPI仕様は,

624 システムサービス毎の仕様書で規定される.

625

626 【μITRON4.0仕様との関係】

627

628 μITRON4.0仕様では,カーネルとアプリケーションの中間にあるソフトウェア

629 をソフトウェア部品と呼んでいたが,TOPPERS組込みコンポーネントシステム

630 (TECS)においてはカーネルもソフトウェア部品の1つと捉えることから,この

631 仕様ではシステムサービスと呼ぶことにした.

632

633 2.1.4 想定するハードウェア構成

634

635 この仕様では,カーネルがサポートするハードウェア構成として,以下のこと

636 を想定している.これらに合致しないターゲットハードウェアでカーネルを動

637 作させることは可能であるが,合致しない部分への適応はアプリケーションの

638 責任になる.

639

640 (a) メモリ番地は,常に同一のメモリを指すこと(オーバレイのように,異な

641 るメモリを同一のメモリ番地でアクセスすることがないこと)【NGKI0001】.

642 マルチプロセッサ対応カーネルにおいては,同一のメモリに対しては,各プロ

643 セッサから同一の番地でアクセスできること【NGKI0002】.

644

645 (b) マルチプロセッサ対応カーネルにおいては,各プロセッサが同一の機械語

646 命令を実行できること【NGKI0003】.

647

648 2.1.5 想定するプログラミング言語

649

650 この仕様におけるAPI仕様は,ISO/IEC 9899:1990(以下,C90と呼ぶ)または

Page 14: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

14

651 ISO/IEC 9899:1999(以下,C99と呼ぶ)に準拠したC言語を,フリースタンディ

652 ング環境で用いることを想定して規定している【NGKI0004】.

653

654 ただし,C90の規定に加えて,以下のことを仮定している.

655

656 ・16ビットおよび32ビットの整数型があること【NGKI0005】

657 ・ポインタが格納できるサイズの整数型があること【NGKI0006】

658

659 2.2 APIの構成要素とコンベンション

660

661 2.2.1 APIの構成要素

662

663 (1) サービスコール

664

665 上位階層のソフトウェアから,下位階層のソフトウェアを呼び出すインタフェー

666 スをサービスコール(service call)と呼ぶ.カーネルのサービスコールを,

667 システムコール(system call)と呼ぶ場合もある.

668

669 (2) コールバック

670

671 下位階層のソフトウェアから,上位階層のソフトウェアを呼び出すインタフェー

672 スをコールバック(callback)と呼ぶ.

673

674 (3) 静的API

675

676 オブジェクトの生成情報や初期状態などを定義するために,システムコンフィ

677 ギュレーションファイル中に記述するインタフェースを,静的API(static

678 API)と呼ぶ.

679

680 (4) 構成マクロ

681

682 下位階層のソフトウェアに関する各種の情報を取り出すために,上位階層のソ

683 フトウェアが用いるマクロを,構成マクロ(configuration macro)と呼ぶ.

684

685 2.2.2 パラメータとリターンパラメータ

686

687 サービスコールやコールバックに渡すデータをパラメータ(parameter),それ

688 らが返すデータをリターンパラメータ(return parameter)と呼ぶ.また,静

689 的APIに渡すデータもパラメータと呼ぶ.

690

691 オブジェクトを生成するサービスコールなど,パラメータの数が多い場合やター

692 ゲット定義のパラメータを追加する可能性がある場合には,複数のパラメータ

693 を1つの構造体に入れ,その領域へのポインタをパラメータとして渡す

694 【NGKI0007】.また,パラメータのサイズが大きい場合にも,パラメータを入

695 れた領域へのポインタをパラメータとして渡す場合がある【NGKI0008】.

696

697 C言語APIでは,リターンパラメータは,関数の返値とするか,リターンパラメー

698 タを入れる領域へのポインタをパラメータとして渡すことで実現する

699 【NGKI0009】.オブジェクトの状態を参照するサービスコールなど,リターン

700 パラメータの数が多い場合やターゲット定義のリターンパラメータを追加する

Page 15: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

15

701 可能性がある場合には,複数のリターンパラメータを1つの構造体に入れて返す

702 こととし,その領域へのポインタをパラメータとして渡す【NGKI0010】.

703

704 複数のパラメータまたはリターンパラメータを入れるための構造体を,パケッ

705 ト(packet)と呼ぶ.

706

707 サービスコールやコールバックに,パケットを置く領域へのポインタやリター

708 ンパラメータを入れる領域へのポインタを渡す場合,別に規定がない限りは,

709 サービスコールやコールバックの処理が完了した後は,それらの領域が参照さ

710 れることはなく,別の目的に使用できる【NGKI0011】.

711

712 2.2.3 返値とエラーコード

713

714 一部の例外を除いて,サービスコールおよびコールバックの返値は,処理が正

715 常終了したかを表す符号付き整数とする.処理が正常終了した場合には,E_OK

716 (=0)または正の値が返るものとし,値の意味はサービスコールまたはコール

717 バック毎に定める【NGKI0012】.処理が正常終了しなかった場合には,その原

718 因を表す負の値が返る【NGKI0013】.処理が正常終了しなかった原因を表す値

719 を,エラーコード(error code)と呼ぶ.

720

721 エラーコードは,いずれも負の値のメインエラーコードとサブエラーコードで

722 構成される【NGKI0014】.メインエラーコードとサブエラーコードからエラー

723 コードを構成するマクロ(ERCD)と,エラーコードからメインエラーコードを

724 取り出すマクロ(MERCD),サブエラーコードを取り出すマクロ(SERCD)が用

725 意されている【NGKI0015】.

726

727 メインエラーコードの名称・意味・値は,カーネルとシステムサービスで共通

728 に定める(「2.14.4 TOPPERS共通エラーコード」の節を参照)【NGKI0016】.

729 サービスコールおよびコールバックの機能説明中の「E_XXXXXエラーとなる」ま

730 たは「E_XXXXXエラーが返る」という記述は,メインエラーコードとして

731 E_XXXXXが返ることを意味する.

732

733 サブエラーコードは,エラーの原因をより詳細に表すために用いる.カーネル

734 はサブエラーコードを使用せず,サブエラーコードとして常に-1が返る

735 【NGKI0017】.サブエラーコードの名称・意味・値は,サブエラーコードを使

736 用するシステムサービスのAPI仕様において規定する【NGKI0018】.

737

738 サービスコールが負の値のエラーコード(警告を表すものを除く)を返した場

739 合には,サービスコールによる副作用がないのが原則である【NGKI0019】.た

740 だし,そのような実装ができない場合にはこの原則の例外とし,サービスコー

741 ルの機能説明にその旨を記述する【NGKI0020】.

742

743 サービスコールが複数のエラーを検出するべき状況では,その内のいずれか1つ

744 のエラーを示すエラーコードが返る【NGKI0021】.

745

746 コールバックが複数のエラーを検出するべき状況では,その内のいずれか1つの

747 エラーを示すエラーコードを返せばよい【NGKI0022】.

748

749 なお,静的APIは返値を持たない.静的APIの処理でエラーが検出された場合の

750 扱いについては,「2.12.5 コンフィギュレータの処理モデル」の節および

Page 16: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

16

751 「2.12.6 静的APIのパラメータに関するエラー検出」の節を参照すること.

752

753 2.2.4 機能コード

754

755 ソフトウェア割込みによりサービスコールを呼び出す場合などに用いるための

756 サービスコールを識別するための番号を,機能コード(function code)と呼ぶ.

757 機能コードは符号付きの整数値とし,カーネルのサービスコールには負の値を

758 割り付け,拡張サービスコールには正の値を用いる【NGKI0023】.

759

760 2.2.5 ヘッダファイル

761

762 カーネルやシステムサービスを用いるために必要な定義を含むファイル.

763

764 ヘッダファイルは,原則として,複数回インクルードしてもエラーにならない

765 ように対処されている.具体的には,ヘッダファイルの先頭で特定の識別子

766 (例えば,kernel.hなら"TOPPERS_KERNEL_H")がマクロ定義され,ヘッダファ

767 イルの内容全体をその識別子が定義されていない場合のみ有効とする条件ディ

768 レクティブが付加されている【NGKI0024】.

769

770 2.3 主な概念

771

772 2.3.1 オブジェクトと処理単位

773

774 (1) オブジェクト

775

776 カーネルまたはシステムサービスが管理対象とするソフトウェア資源を,オブ

777 ジェクト(object)と呼ぶ.特に,カーネルが管理対象とするソフトウェア資

778 源を,カーネルオブジェクト(kernel object)と呼ぶ.

779

780 オブジェクトは,種類毎に,番号によって識別する【NGKI0025】.カーネルま

781 たはシステムサービスで,オブジェクトに対して任意に識別番号を付与できる

782 場合には,1から連続する正の整数値でオブジェクトを識別するのを原則とする

783 【NGKI0026】.この場合に,オブジェクトの識別番号を,オブジェクトのID番

784 号(ID number)と呼ぶ.そうでない場合,すなわちカーネルまたはシステムサー

785 ビスの内部または外部からの条件によって識別番号が決まる場合には,オブジェ

786 クトの識別番号を,オブジェクト番号(object number)と呼ぶ.識別する必要

787 のないオブジェクトには,識別番号を付与しない場合がある【NGKI0027】.

788

789 オブジェクト属性(object attribute)は,オブジェクトの動作モードや初期

790 状態を定めるもので,オブジェクトの登録時に指定する【NGKI0028】.オブジェ

791 クト属性にTA_XXXXが指定されている場合,そのオブジェクトを,TA_XXXX属性

792 のオブジェクトと呼ぶ.複数の属性を指定する場合には,オブジェクト属性を

793 渡すパラメータに,指定する属性値のビット毎論理和(C言語の"¦")を渡す

794 【NGKI0029】.また,指定すべきオブジェクト属性がない場合には,TA_NULLを

795 指定する【NGKI0030】.

796

797 (2) 処理単位

798

799 オブジェクトの中には,プログラムが対応付けられるものがある.プログラム

800 が対応付けられるオブジェクト(または,対応付けられるプログラム)を,処

Page 17: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

17

801 理単位(processing unit)と呼ぶ.処理単位に対応付けられるプログラムは,

802 アプリケーションまたはシステムサービスで用意し,カーネルが実行制御する.

803

804 処理単位の実行を要求することを起動(activate),処理単位の実行を開始す

805 ることを実行開始(start)と呼ぶ.

806

807 拡張情報(extended information)は,処理単位が呼び出される時にパラメー

808 タとして渡される情報で,処理単位の登録時に指定する【NGKI0031】.拡張情

809 報は,カーネルやシステムサービスの動作には影響しない【NGKI0032】.

810

811 (3) タスク

812

813 カーネルが実行順序を制御するプログラムの並行実行の単位をタスク(task)

814 と呼ぶ.タスクは,処理単位の1つである.

815

816 サービスコールの機能説明において,サービスコールを呼び出したタスクを,

817 自タスク(invoking task)と呼ぶ.拡張サービスコールからサービスコールを

818 呼び出した場合には,拡張サービスコールを呼び出したタスクが自タスクであ

819 る.

820

821 カーネルには,静的APIにより,少なくとも1つのタスクを登録しなければなら

822 ない.タスクが登録されていない場合には,コンフィギュレータがエラーを報

823 告する【NGKI0033】.

824

825 【補足説明】

826

827 タスクが呼び出した拡張サービスコールが実行されている間は,「サービスコー

828 ルを呼び出した処理単位」は拡張サービスコールであり,「自タスク」とは一

829 致しない.そのため,保護機能対応カーネルにおいて,「サービスコールを呼

830 び出した処理単位の属する保護ドメイン」と「自タスクの属する保護ドメイン」

831 は,異なるものを指す.

832

833 (4) ディスパッチとスケジューリング

834

835 プロセッサが実行するタスクを切り換えることを,タスクディスパッチまたは

836 単にディスパッチ(dispatching)と呼ぶ.それに対して,次に実行すべきタス

837 クを決定する処理を,タスクスケジューリングまたは単にスケジューリング

838 (scheduling)と呼ぶ.

839

840 ディスパッチが起こるべき状態(すなわち,スケジューリングによって,現在

841 実行しているタスクとは異なるタスクが,実行すべきタスクに決定されている

842 状態)となっても,何らかの理由でディスパッチを行わないことを,ディスパッ

843 チの保留(pend dispatching)という.ディスパッチを行わない理由が解除さ

844 れた時点で,ディスパッチが起こる【NGKI0034】.

845

846 (5) 割込みとCPU例外

847

848 プロセッサが実行中の処理とは独立に発生するイベントによって起動される例

849 外処理のことを,外部割込みまたは単に割込み(interrupt)と呼ぶ.それに対

850 して,プロセッサが実行中の処理に依存して起動される例外処理を,CPU例外

Page 18: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

18

851 (CPU exception)と呼ぶ.

852

853 周辺デバイスからの割込み要求をプロセッサに伝える経路を遮断し,割込み要

854 求が受け付けられるのを抑止することを,割込みのマスク(mask interrupt)

855 または割込みの禁止(disable interrupt)という.マスクが解除された時点で,

856 まだ割込み要求が保持されていれば,その時点で割込み要求を受け付ける

857 【NGKI0035】.

858

859 マスクすることができない割込みを,NMI(non-maskable interrupt)と呼ぶ.

860

861 【μITRON4.0仕様との関係】

862

863 μITRON4.0仕様において,未定義のまま使われていた割込みとCPU例外という用

864 語を定義した.

865

866 (6) タイムイベントとタイムイベントハンドラ

867

868 時間の経過をきっかけに発生するイベントをタイムイベント(time event)と

869 呼ぶ.タイムイベントにより起動され,カーネルが実行制御する処理単位を,

870 タイムイベントハンドラ(time event handler)と呼ぶ.

871

872 2.3.2 サービスコールとパラメータ

873

874 (1) 優先順位と優先度

875

876 優先順位(precedence)とは,処理単位の実行順序を説明するための仕様上の

877 概念である.複数の処理単位が実行できる場合には,その中で最も優先順位の

878 高い処理単位が実行される【NGKI0036】.

879

880 優先度(priority)は,タスクなどの処理単位の優先順位や,メッセージなど

881 の配送順序を決定するために,アプリケーションが処理単位やメッセージなど

882 に与える値である.優先度は,符号付きの整数型であるPRI型で表し,1から連

883 続した正の値を用いるのを原則とする【NGKI0037】.優先度は,値が小さいほ

884 ど優先度が高い(すなわち,先に実行または配送される)ものとする

885 【NGKI0038】.

886

887 (2) システム時刻と相対時間

888

889 カーネルが管理する時刻を,システム時刻(system time)と呼ぶ.システム時

890 刻は,符号無しの整数型であるSYSTIM型で表し,単位はミリ秒とする

891 【NGKI0039】.システム時刻は,タイムティック(time tick)を通知するため

892 のタイマ割込みが発生する毎に更新される【NGKI0040】.

893

894 イベントを発生させる時刻を指定する場合には,基準時刻(base time)からの

895 相対時間(relative time)によって指定する【NGKI0041】.基準時刻は,別に

896 規定がない限りは,相対時間を指定するサービスコールを呼び出した時刻とな

897 る【NGKI0042】.

898

899 相対時間は,符号無しの整数型であるRELTIM型で表し,単位はシステム時刻と

900 同一,すなわちミリ秒とする【NGKI0043】.相対時間には,少なくとも,16ビッ

Page 19: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

19

901 トの符号無しの整数型(uint16_t型)に格納できる任意の値を指定することが

902 できるが,RELTIM型(uint_t型に定義される)に格納できる任意の値を指定で

903 きるとは限らない【NGKI0044】.相対時間に指定できる最大値は,構成マクロ

904 TMAX_RELTIMに定義されている【NGKI0045】.

905

906 イベントを発生させる時刻を相対時間で指定した場合,イベントの処理が行わ

907 れるのは,基準時刻から相対時間によって指定した以上の時間が経過した後と

908 なる【NGKI0046】.ただし,基準時刻を定めるサービスコールを呼び出した時

909 に,タイムティックを通知するためのタイマ割込みがマスクされている場合

910 (タイマ割込みより優先して実行される割込み処理が実行されている場合を含

911 む)は,相対時間によって指定した以上の時間が経過した後となることは保証

912 されない【NGKI0047】.

913

914 イベントが発生する時刻を参照する場合には,基準時刻からの相対時間として

915 返される【NGKI0048】.基準時刻は,相対時間を返すサービスコールを呼び出

916 した時刻となる【NGKI0049】.

917

918 イベントが発生する時刻が相対時間で返された場合,イベントの処理が行われ

919 るのは,基準時刻から相対時間として返された以上の時間が経過した後となる

920 【NGKI0050】.ただし,相対時間を返すサービスコールを呼び出した時に,タ

921 イムティックを通知するためのタイマ割込みがマスクされている場合(タイマ

922 割込みより優先して実行される割込み処理が実行されている場合を含む)は,

923 相対時間として返された以上の時間が経過した後となることは保証されない

924 【NGKI0051】.

925

926 【補足説明】

927

928 相対時間に0を指定した場合,基準時刻後の最初のタイムティックでイベントの

929 処理が行われる.また,1を指定した場合,基準時刻後の2回目以降のタイム

930 ティックでイベントの処理が行われる.これは,基準時刻後の最初のタイム

931 ティックは,基準時刻の直後に発生する可能性があるため,ここでイベントの

932 処理を行うと,基準時刻からの経過時間が1以上という仕様を満たせないためで

933 ある.

934

935 同様に,相対時間として0が返された場合,基準時刻後の最初のタイムティック

936 でイベントの処理が行われる.また,1が返された場合,基準時刻後の2回目以

937 降のタイムティックでイベントの処理が行われる.

938

939 【μITRON4.0仕様との関係】

940

941 相対時間(RELTIM型)とシステム時刻(SYSTIM型)の時間単位は,μITRON4.0

942 仕様では実装定義としていたが,この仕様ではミリ秒と規定した.また,相対

943 時間の解釈について,より厳密に規定した.

944

945 TMAX_RELTIMは,μITRON4.0仕様に規定されていないカーネル構成マクロである.

946

947 (3) タイムアウトとポーリング

948

949 サービスコールの中で待ち状態が指定した時間以上継続した場合に,サービス

950 コールの処理を取りやめて,サービスコールからリターンすることを,タイム

Page 20: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

20

951 アウト(timeout)という.タイムアウトしたサービスコールからは,E_TMOUT

952 エラーが返る【NGKI0052】.

953

954 タイムアウトを起こすまでの時間(タイムアウト時間)は,符号付きの整数型

955 であるTMO型で表し,単位はシステム時刻と同一,すなわちミリ秒とする

956 【NGKI0053】.タイムアウト時間に正の値を指定した場合には,タイムアウト

957 を起こすまでの相対時間を表す【NGKI0054】.すなわち,タイムアウトの処理

958 が行われるのは,サービスコールを呼び出してから指定した以上の時間が経過

959 した後となる.

960

961 ポーリング(polling)を行うサービスコールとは,サービスコールの中で待ち

962 状態に遷移すべき状況になった場合に,サービスコールの処理を取りやめてリ

963 ターンするサービスコールのことをいう.ここで,サービスコールの処理を取

964 りやめてリターンすることを,ポーリングに失敗したという.ポーリングに失

965 敗したサービスコールからは,E_TMOUTエラーが返る【NGKI0055】.

966

967 ポーリングを行うサービスコールでは,待ち状態に遷移することはないのが原

968 則である【NGKI0056】.そのため,ポーリングを行うサービスコールは,ディ

969 スパッチ保留状態であっても呼び出せる【NGKI0057】.ただし,サービスコー

970 ルの中で待ち状態に遷移する状況が複数ある場合,ある状況でポーリング動作

971 をしても,他の状況では待ち状態に遷移する場合がある.このような場合の振

972 舞いは,該当するサービスコール毎に規定する【NGKI0058】.

973

974 タイムアウト付きのサービスコールは,別に規定がない限りは,タイムアウト

975 時間にTMO_POL(=0)を指定した場合にはポーリングを行い,TMO_FEVR(=-1)

976 を指定した場合にはタイムアウトを起こさないものとする【NGKI0059】.

977

978 【補足説明】

979

980 [NGKI0019]の原則より,サービスコールがタイムアウトした場合やポーリン

981 グに失敗した場合には,サービスコールによる副作用がないのが原則である.

982 ただし,そのような実装ができない場合にはこの原則の例外とし,どのような

983 副作用があるかをサービスコール毎に規定する.

984

985 タイムアウト付きのサービスコールを,タイムアウト時間をTMO_POLとして呼び

986 出した場合には,ディスパッチ保留状態で呼び出すとE_CTXエラーとなることを

987 除いては,ポーリングを行うサービスコールと同じ振舞いをする.また,タイ

988 ムアウト時間をTMO_FEVRとして呼び出した場合には,タイムアウトなしのサー

989 ビスコールと全く同じ振舞いをする.

990

991 【μITRON4.0仕様との関係】

992

993 タイムアウト時間(TMO型)の時間単位は,μITRON4.0仕様では実装定義として

994 いたが,この仕様ではミリ秒と規定した.

995

996 【仕様決定の理由】

997

998 ディスパッチ保留状態において,ポーリングを行うサービスコールを呼び出せ

999 る場合があるのに対して,タイムアウト付きのサービスコールをタイムアウト

1000 時間をTMO_POLとして呼び出すとエラーになるのは,ディスパッチ保留状態では,

Page 21: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

21

1001 別に規定がない限り,自タスクを広義の待ち状態に遷移させる可能性のあるサー

1002 ビスコール(タイムアウト付きのサービスコールはこれに該当)を呼び出すこ

1003 とはできないと規定されているためである.

1004

1005 (4) ノンブロッキング

1006

1007 サービスコールの中で待ち状態に遷移すべき状況になった時,サービスコール

1008 の処理を継続したままサービスコールからリターンする場合,そのサービスコー

1009 ルをノンブロッキング(non-blocking)という.処理を継続したままリターン

1010 する場合,サービスコールからはE_WBLKエラーが返る【NGKI0060】.E_WBLKは

1011 警告を表すエラーコードであり,サービスコールによる副作用がないという原

1012 則は適用されない【NGKI0061】.

1013

1014 サービスコールからE_WBLKエラーが返った場合には,サービスコールの処理は

1015 継続しているため,サービスコールに渡したパラメータまたはリターンパラメー

1016 タを入れる領域はまだ参照される可能性があり,別の目的に使用することはで

1017 きない【NGKI0062】.継続している処理が完了した場合や,何らかの理由で処

1018 理が取りやめられた場合には,コールバックを呼び出すなどの方法で,サービ

1019 スコールを呼び出したソフトウェアに通知するものとする【NGKI0063】.

1020

1021 ノンブロッキングの指定は,タイムアウト時間にTMO_NBLK(=-2)を指定する

1022 ことによって行う【NGKI0064】.ノンブロッキングの指定を行えるサービスコー

1023 ルは,指定した場合の振舞いをサービスコール毎に規定する【NGKI0065】.

1024

1025 【補足説明】

1026

1027 ノンブロッキングは,システムサービスでサポートすることを想定した機能で

1028 ある.カーネルは,ノンブロッキングの指定を行えるサービスコールをサポー

1029 トしていない.

1030

1031 2.3.3 保護機能

1032

1033 この節では,保護機能に関連する主な概念について説明する.この節の内容は,

1034 保護機能対応カーネルにのみ適用される.

1035

1036 (1) アクセス保護

1037

1038 保護機能対応カーネルは,処理単位が,許可されたカーネルオブジェクトに対

1039 して,許可された種別のアクセスを行うことのみを許し,それ以外のアクセス

1040 を防ぐアクセス保護機能を提供する【NGKI0066】.

1041

1042 アクセス制御の用語では,処理単位が主体(subject),カーネルオブジェクト

1043 が対象(object)ということになる.

1044

1045 (2) メモリオブジェクト

1046

1047 保護機能対応カーネルにおいては,メモリ領域をカーネルオブジェクトとして

1048 扱い,アクセス保護の対象とする【NGKI0067】.カーネルがアクセス保護の対

1049 象とする連続したメモリ領域を,メモリオブジェクト(memory object)と呼ぶ.

1050 メモリオブジェクトは,互いに重なりあうことはない【NGKI0068】.

Page 22: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

22

1051

1052 メモリオブジェクトは,その先頭番地によって識別する【NGKI0069】.言い換

1053 えると,先頭番地がオブジェクト番号となる.

1054

1055 メモリオブジェクトの先頭番地とサイズには,ターゲットハードウェアでメモ

1056 リ保護が実現できるように,ターゲット定義の制約が課せられる【NGKI0070】.

1057

1058 (3) 保護ドメイン

1059

1060 保護機能を提供するために用いるカーネルオブジェクトの集合を,保護ドメイ

1061 ン(protection domain)と呼ぶ.保護ドメインは,保護ドメインIDと呼ぶID番

1062 号によって識別する【NGKI0071】.

1063

1064 カーネルオブジェクトは,たかだか1つの保護ドメインに属する.処理単位は,

1065 いずれか1つの保護ドメインに属さなければならないのに対して,それ以外のカー

1066 ネルオブジェクトは,いずれの保護ドメインにも属さないことができる

1067 【NGKI0072】.いずれの保護ドメインにも属さないカーネルオブジェクトを,

1068 無所属のカーネルオブジェクト(independent kernel object)と呼ぶ.

1069

1070 処理単位がカーネルオブジェクトにアクセスできるかどうかは,処理単位が属

1071 する保護ドメインにより決まるのが原則である【NGKI0073】.すなわち,カー

1072 ネルオブジェクトに対するアクセス権は,処理単位ではなく,保護ドメイン単

1073 位で管理される.このことから,ある保護ドメインに属する処理単位がアクセ

1074 スできることを,単に,その保護ドメインからアクセスできるという.

1075

1076 ただし,タスクのユーザスタック領域は,ターゲット定義での変更がない限り

1077 は,そのタスク(とカーネルドメインに属する処理単位)のみがアクセスでき

1078 る(「2.11.6 ユーザタスクのユーザスタック領域」の節を参照)【NGKI0074】.

1079 これは,[NGKI0073]の原則の例外となっている.

1080

1081 デフォルトでは,保護ドメインに属するカーネルオブジェクトは,同じ保護ド

1082 メイン(とカーネルドメイン)のみからアクセスできる【NGKI0075】.また,

1083 無所属のカーネルオブジェクトは,すべての保護ドメインからアクセスできる

1084 【NGKI0076】.

1085

1086 (4) カーネルドメインとユーザドメイン

1087

1088 システムには,カーネルドメイン(kernel domain)と呼ばれる保護ドメインが

1089 1つ存在する【NGKI0077】.カーネルドメインに属する処理単位は,プロセッサ

1090 の特権モードで実行される【NGKI0078】.また,すべてのカーネルオブジェク

1091 トに対して,すべての種別のアクセスを行うことが許可される【NGKI0079】.

1092 この仕様で,「ある保護ドメイン(またはタスク)のみからアクセスできる」

1093 といった場合でも,カーネルドメインドメインからはアクセスすることができ

1094 る.

1095

1096 カーネルドメイン以外の保護ドメインを,ユーザドメイン(user domain)と呼

1097 ぶ.ユーザドメインに属する処理単位は,プロセッサの非特権モードで実行さ

1098 れる【NGKI0080】.また,どのカーネルオブジェクトに対してどの種別のアク

1099 セスを行えるかを制限することができる【NGKI0081】.

1100

Page 23: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

23

1101 ユーザドメインには,1から連続する正の整数値の保護ドメインIDが付与される

1102 【NGKI0082】.カーネルドメインの保護ドメインIDは,TDOM_KERNEL(=-1)で

1103 ある【NGKI0083】.

1104

1105 この仕様では,システムに登録できるユーザドメインの数は,32個以下に制限

1106 する【NGKI0084】.これを超える数のユーザドメインを登録した場合には,コ

1107 ンフィギュレータがエラーを報告する【NGKI0085】.

1108

1109 【補足説明】

1110

1111 ユーザドメインは,システムコンフィギュレーションファイル中にユーザドメ

1112 インの囲みを記述することで,カーネルに登録する(「2.12.3 保護ドメインの

1113 指定」の節を参照).ユーザドメインを動的に生成する機能は,現時点では用

1114 意していない.

1115

1116 保護機能対応でないカーネルは,カーネルドメインのみをサポートしていると

1117 みなすこともできる.

1118

1119 【μITRON4.0/PX仕様との関係】

1120

1121 μITRON4.0/PX仕様のシステムドメイン(system domain)は,現時点ではサポー

1122 トしない.システムドメインは,それに属する処理単位が,プロセッサの特権

1123 モードで実行され,カーネルオブジェクトに対するアクセスを制限することが

1124 できる保護ドメインである.

1125

1126 (5) システムタスクとユーザタスク

1127

1128 カーネルドメインに属するタスクをシステムタスク(system task),ユーザド

1129 メインに属するタスクをユーザタスク(user task)と呼ぶ.

1130

1131 【補足説明】

1132

1133 特権モードで実行されるタスクをシステムタスク,非特権モードで実行される

1134 タスクをユーザタスクと定義する方法もあるが,ユーザタスクであっても,サー

1135 ビスコールの実行中は特権モードで実行されるため,上記の定義とした.

1136

1137 μITRON4.0/PX仕様のシステムドメインに属するタスクは,システムタスクと呼

1138 ぶことになる.

1139

1140 (6) アクセス許可パターン

1141

1142 あるカーネルオブジェクトに対するある種別のアクセスが,どの保護ドメイン

1143 に属する処理単位に許可されているかを表現するビットパターンを,アクセス

1144 許可パターン(access permission pattern)と呼ぶ.アクセス許可パターンの

1145 各ビットは,1つのユーザドメインに対応する【NGKI0086】.カーネルドメイン

1146 には,すべてのアクセスが許可されているため,カーネルドメインに対応する

1147 ビットは用意されていない.

1148

1149 アクセス許可パターンは,符号無し32ビット整数に定義されるデータ型

1150 (ACPTN)で保持し,値が1のビットに対応するユーザドメインにアクセスが許

Page 24: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

24

1151 可されていることを表す【NGKI0087】.そのため,2つのアクセス許可パターン

1152 のビット毎論理和(C言語の"¦")を求めることで,アクセスを許可されている

1153 ユーザドメインの和集合(union)を得ることができる.また,2つのアクセス

1154 許可パターンのビット毎論理積(C言語の"&")を求めることで,アクセスを許

1155 可されているユーザドメインの積集合(intersection)を得ることができる.

1156

1157 アクセス許可パターンの指定に用いるために,指定したユーザドメインのみに

1158 アクセスを許可することを示すアクセス許可パターンを構成するマクロ(TACP)

1159 が用意されている【NGKI0088】.また,カーネルドメインのみにアクセスを許

1160 可することを示すアクセス許可パターンを表す定数(TACP_KERNEL)と,すべて

1161 の保護ドメインにアクセスを許可することを示すアクセス許可パターンを表す

1162 定数(TACP_SHARED)が用意されている【NGKI0089】.

1163

1164 (7) アクセス許可ベクタ

1165

1166 カーネルオブジェクトに対するアクセスは,カーネルオブジェクトの種類毎に,

1167 通常操作1,通常操作2,管理操作,参照操作の4つの種別に分類されている

1168 【NGKI0090】.あるカーネルオブジェクトに対する4つの種別のアクセスに関す

1169 るアクセス許可パターンをひとまとめにしたものを,アクセス許可ベクタ

1170 (access permission vector)と呼び,次のように定義されるデータ型

1171 (ACVCT)で保持する【NGKI0091】.

1172

1173 typedef struct acvct {

1174 ACPTN acptn1; /* 通常操作1のアクセス許可パターン */

1175 ACPTN acptn2; /* 通常操作2のアクセス許可パターン */

1176 ACPTN acptn3; /* 管理操作のアクセス許可パターン */

1177 ACPTN acptn4; /* 参照操作のアクセス許可パターン */

1178 } ACVCT;

1179

1180 【補足説明】

1181

1182 カーネルオブジェクトの種類毎のアクセスの種別の分類については,「5.8 カー

1183 ネルオブジェクトに対するアクセスの種別」の節を参照すること.

1184

1185 【μITRON4.0/PX仕様との関係】

1186

1187 μITRON4.0/PX仕様では,アクセス許可ベクタを,1つまたは2つのアクセス許可

1188 パターンで構成することも許しているが,この仕様では4つで構成するものと決

1189 めている.

1190

1191 (8) サービスコールの呼出し方法

1192

1193 保護機能対応カーネルでは,サービスコールは,ソフトウェア割込みによって

1194 呼び出すのが基本である.サービスコール呼出しを通常の方法で記述した場合,

1195 ソフトウェア割込みによって呼び出すコードが生成される【NGKI0092】.

1196

1197 一般に,ソフトウェア割込みによるサービスコール呼出しはオーバヘッドが大

1198 きい.そのため,カーネルドメインに属する処理単位からは,関数呼出しによっ

1199 てサービスコールを呼び出すことで,オーバヘッドを削減することができる.

1200 そこで,カーネルドメインに属する処理単位から関数呼出しによってサービス

Page 25: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

25

1201 コールを呼び出せるように,以下の機能が用意されている.

1202

1203 カーネルドメインに属する処理単位が実行する関数のみを含んだソースファイ

1204 ルでは,カーネルヘッダファイル(kernel.h)をインクルードする前に,

1205 TOPPERS_SVC_CALLをマクロ定義することで,サービスコール呼出しを通常の方

1206 法で記述した場合に,関数呼出しによって呼び出すコードが生成される

1207 【NGKI0093】.

1208

1209 また,カーネルドメインに属する処理単位が実行する関数と,ユーザドメイン

1210 に属する処理単位が実行する関数の両方を含んだソースファイルでは,関数呼

1211 出しによってサービスコールを呼び出すための名称を作るマクロ(SVC_CALL)

1212 を用いることで,関数呼出しによって呼び出すコードが生成される

1213 【NGKI0094】.例えば,act_tskを関数呼出しによって呼び出す場合には,次の

1214 ように記述すればよい.

1215

1216 ercd = SVC_CALL(act_tsk)(tskid);

1217

1218 【補足説明】

1219

1220 拡張サービスコールを,関数呼出しによって呼び出す方法は用意されていない.

1221 カーネルドメインに属する処理単位が,関数呼出しによって,拡張サービスコー

1222 ルとして登録した関数を呼び出すことはできるが,その場合には,処理単位が

1223 呼び出した通常の関数であるとみなされ,拡張サービスコールであるとは扱わ

1224 れない.

1225

1226 2.3.4 マルチプロセッサ対応

1227

1228 この節では,マルチプロセッサ対応に関連する主な概念について説明する.こ

1229 の節の内容は,マルチプロセッサ対応カーネルにのみ適用される.

1230

1231 (1) クラス

1232

1233 マルチプロセッサに対応するために用いるカーネルオブジェクトの集合を,ク

1234 ラス(class)と呼ぶ.クラスは,クラスIDと呼ぶID番号によって識別する

1235 【NGKI0095】.

1236

1237 カーネルオブジェクトは,いずれか1つのクラスに属するのが原則である

1238 【NGKI0096】.カーネルオブジェクトが属するクラスは,オブジェクトの登録

1239 時に決定し,登録後に変更することはできない【NGKI0097】.

1240

1241 【補足説明】

1242

1243 処理単位を実行するプロセッサを静的に決定する機能分散型のマルチプロセッ

1244 サシステムでは,プロセッサ毎にクラスを設ける方法が典型的である.それに

1245 対して,対称型のマルチプロセッサシステムで,処理単位のマイグレーション

1246 を許す場合には,プロセッサ毎のクラスに加えて,どのプロセッサでも実行で

1247 きるクラスを(システム中に1つまたは初期割付けプロセッサ毎に)設ける方法

1248 が典型的である.

1249

1250 [NGKI0096]の原則に関わらず,以下のオブジェクトはいずれのクラスにも属

Page 26: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

26

1251 さない.

1252

1253 ・オーバランハンドラ

1254 ・拡張サービスコール

1255 ・グローバル初期化ルーチン

1256 ・グローバル終了処理ルーチン

1257

1258 マルチプロセッサ対応でないカーネルは,カーネルによって規定された1つのク

1259 ラスのみをサポートしているとみなすこともできる.

1260

1261 (2) プロセッサ

1262

1263 たかだか1つの処理単位のみを同時に実行できるハードウェアの単位を,プロセッ

1264 サ(processor)と呼ぶ.プロセッサは,プロセッサIDと呼ぶID番号によって識

1265 別する【NGKI0098】.

1266

1267 複数のプロセッサを持つシステム構成をマルチプロセッサ(multiprocessor)

1268 と呼び,同時に複数の処理単位を実行することができる【NGKI0099】.

1269

1270 システムの初期化時と終了時に特別な役割を果たすプロセッサを,マスタプロ

1271 セッサ(master processor)と呼び,システムに1つ存在する【NGKI0100】.ど

1272 のプロセッサをマスタプロセッサとするかは,ターゲット定義である

1273 【NGKI0101】.マスタプロセッサ以外のプロセッサを,スレーブプロセッサ

1274 (slave processor)と呼ぶ.なお,カーネル動作状態では,マスタプロセッサ

1275 とスレーブプロセッサの振舞いに違いはない【NGKI0102】.

1276

1277 (3) 処理単位の割付けとマイグレーション

1278

1279 処理単位は,後述のマイグレーションが発生しない限りは,いずれか1つのプロ

1280 セッサに割り付けられて実行される【NGKI0103】.処理単位を実行するプロセッ

1281 サを,割付けプロセッサと呼ぶ.また,処理単位が登録時に割り付けられるプ

1282 ロセッサを,初期割付けプロセッサと呼ぶ.

1283

1284 処理単位によっては,処理単位の登録後に,割付けプロセッサを変更すること

1285 が可能である【NGKI0104】.処理単位の登録後に割付けプロセッサを変更する

1286 ことを,処理単位のマイグレーション(migration)と呼ぶ.

1287

1288 割付けプロセッサを変更できる処理単位に対しては,処理単位を割り付けるこ

1289 とができるプロセッサ(これを,割付け可能プロセッサと呼ぶ)を制限するこ

1290 とができる【NGKI0105】.

1291

1292 (4) クラスの持つ属性とカーネルオブジェクト

1293

1294 タスクの初期割付けプロセッサや割付け可能プロセッサなど,カーネルオブジェ

1295 クトをマルチプロセッサ上で実現する際に設定すべき属性は,そのカーネルオ

1296 ブジェクトが属するクラスによって定まる.

1297

1298 各クラスが持ち,それに属するカーネルオブジェクトに適用される属性は,次

1299 の通りである【NGKI0106】.

1300

Page 27: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

27

1301 ・初期割付けプロセッサ

1302 ・割付け可能プロセッサ(複数のプロセッサを指定可能,初期割付けプロセッ

1303 サを含む)

1304 ・ATT_MOD/ATA_MODによって,オブジェクトモジュールに含まれる標準のセ

1305 クションが配置されるメモリリージョン(標準メモリリージョン)

1306 ・オブジェクト生成に必要なメモリ領域(オブジェクトの管理ブロック,タ

1307 スクのスタック領域やデータキューのデータキュー管理領域など)の配置

1308 場所

1309 ・その他の管理情報(ロック単位など)

1310

1311 使用できるクラスのID番号とその属性は,ターゲット定義である【NGKI0107】.

1312

1313 【仕様決定の理由】

1314

1315 クラスを導入することで,カーネルオブジェクト毎に上記の属性を設定できる

1316 ようにしなかったのは,これらの属性をアプリケーション設計者が個別に設定

1317 するよりも,ターゲット依存部の実装者が有益な組み合わせをあらかじめ用意

1318 しておく方が良いと考えたためである.

1319

1320 (5) ローカルタイマ方式とグローバルタイマ方式

1321

1322 システム時刻の管理方式として,プロセッサ毎にシステム時刻を持つローカル

1323 タイマ方式と,システム全体で1つのシステム時刻を持つグローバルタイマ方式

1324 の2つの方式がある.どちらの方式を用いることができるかは,ターゲット定義

1325 である【NGKI0108】.

1326

1327 ローカルタイマ方式では,プロセッサ毎のシステム時刻は,それぞれのプロセッ

1328 サが更新する【NGKI0109】.異なるプロセッサのシステム時刻を同期させる機

1329 能は,カーネルでは用意しない.

1330

1331 グローバルタイマ方式では,システム中の1つのプロセッサがシステム時刻を更

1332 新する【NGKI0110】.これを,システム時刻管理プロセッサと呼ぶ.どのプロ

1333 セッサをシステム時刻管理プロセッサとするかは,ターゲット定義である

1334 【NGKI0111】.

1335

1336 【補足説明】

1337

1338 システム時刻管理プロセッサが,マスタプロセッサと一致している必要はない.

1339

1340 【未決定事項】

1341

1342 ローカルタイマ方式の場合に,プロセッサ毎に異なるタイムティックの周期を

1343 設定したい場合が考えられるが,現時点の実装ではサポートしておらず,

1344 TIC_NUMEとTIC_DENOの扱いも未決定であるため,今後の課題とする.

1345

1346 2.3.5 その他

1347

1348 (1) オブジェクトモジュール

1349

1350 プログラムのオブジェクトコードとデータを含むファイルを,オブジェクトモ

Page 28: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

28

1351 ジュール(object module)と呼ぶ.オブジェクトファイルとライブラリは,オ

1352 ブジェクトモジュールである.

1353

1354 (2) メモリリージョン

1355

1356 オブジェクトモジュールに含まれるセクションの配置対象となる同じ性質を持っ

1357 た連続したメモリ領域をメモリリージョン(memory region)と呼ぶ.

1358

1359 メモリリージョンは,文字列によって識別する【NGKI0112】.メモリリージョ

1360 ンを識別する文字列を,メモリリージョン名と呼ぶ.

1361

1362 【補足説明】

1363

1364 この仕様では,メモリ領域(memory area)という用語は,連続したメモリの範

1365 囲という一般的な意味で使っている.

1366

1367 (3) 標準のセクション

1368

1369 コンパイラに特別な指定をしない場合に出力するセクションを,標準のセクショ

1370 ン(standard sections)と呼ぶ.コンパイラが出力しないセクションの中で,

1371 ターゲット定義のものを,標準のセクションと扱う場合もある【NGKI0113】.

1372

1373 (4) 保護ドメイン毎の標準セクション

1374

1375 保護機能対応カーネルにおいては,保護ドメイン毎に,標準のセクションを配

1376 置するためのセクションが登録される【NGKI0114】.また,無所属の標準のセ

1377 クションを配置するためのセクションが登録される【NGKI0115】.これらのセ

1378 クションを,保護ドメイン毎の標準セクションと呼ぶ(standard sections

1379 for each protection domain ).保護ドメイン毎の標準セクションのセクショ

1380 ン名は,ターゲット定義で別に規定がない限りは,標準のセクション名と保護

1381 ドメイン名(カーネルドメインの場合は"kernel",無所属の場合は"shared")

1382 を"_"でつないだものとする【NGKI0116】.例えば,カーネルドメインの

1383 ".text"セクションのセクション名は,".text_kernel" とする.

1384

1385 2.4 処理単位の種類と実行順序

1386

1387 2.4.1 処理単位の種類

1388

1389 カーネルが実行を制御する処理単位の種類は次の通りである【NGKI0117】.

1390

1391 (a) タスク

1392 (a.1) タスク例外処理ルーチン

1393 (b) 割込みハンドラ

1394 (b.1) 割込みサービスルーチン

1395 (b.2) タイムイベントハンドラ

1396 (c) CPU例外ハンドラ

1397 (d) 拡張サービスコール

1398 (e) 初期化ルーチン

1399 (f) 終了処理ルーチン

1400

Page 29: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

29

1401 ここで,タイムイベントハンドラとは,時間の経過をきっかけに起動される処

1402 理単位である周期ハンドラ,アラームハンドラ,オーバランハンドラの総称で

1403 ある.

1404

1405 【TOPPERS/ASPカーネルにおける規定】

1406

1407 ASPカーネルでは,オーバランハンドラと拡張サービスコールをサポートしてい

1408 ない【ASPS0003】.ただし,オーバランハンドラ機能拡張パッケージを用いる

1409 と,オーバランハンドラ機能を追加することができる【ASPS0004】.

1410

1411 【TOPPERS/FMPカーネルにおける規定】

1412

1413 FMPカーネルでは,オーバランハンドラと拡張サービスコールをサポートしてい

1414 ない【FMPS0002】.

1415

1416 【TOPPERS/SSPカーネルにおける規定】

1417

1418 SSPカーネルでは,タスク例外処理ルーチン,タイムイベントハンドラ,拡張サー

1419 ビスコールをサポートしていない【SSPS0002】.

1420

1421 2.4.2 処理単位の実行順序

1422

1423 処理単位の実行順序を規定するために,ここでは,処理単位の優先順位を規定

1424 する.また,ディスパッチが起こるタイミングを規定するために,ディスパッ

1425 チを行うカーネル内の処理であるディスパッチャの優先順位についても規定す

1426 る.

1427

1428 タスクの優先順位は,ディスパッチャの優先順位よりも低い【NGKI0118】.タ

1429 スク間では,高い優先度を持つ方が優先順位が高く,同じ優先度を持つタスク

1430 間では,先に実行できる状態となった方が優先順位が高い【NGKI0119】.詳し

1431 くは,「2.6.3 タスクのスケジューリング規則」の節を参照すること.

1432

1433 タスク例外処理ルーチンの優先順位は,例外が要求されたタスクと同じである

1434 が,タスクよりも先に実行される【NGKI0120】.

1435

1436 割込みハンドラの優先順位は,ディスパッチャの優先順位よりも高い

1437 【NGKI0121】.割込みハンドラ間では,高い割込み優先度を持つ方が優先順位

1438 が高く,同じ割込み優先度を持つ割込みハンドラ間では,先に実行開始された

1439 方が優先順位が高い【NGKI0122】.同じ割込み優先度を持つ割込みハンドラ間

1440 での実行開始順序は,この仕様では規定しない.詳しくは,「2.7.2 割込み優

1441 先度」の節を参照すること.

1442

1443 割込みサービスルーチンとタイムイベントハンドラの優先順位は,それを呼び

1444 出す割込みハンドラと同じである【NGKI0123】.

1445

1446 CPU例外ハンドラの優先順位は,CPU例外がタスクまたはタスク例外処理ルーチ

1447 ンで発生した場合には,ディスパッチャの優先順位と同じであるが,ディスパッ

1448 チャよりも先に実行される【NGKI0124】.CPU例外がその他の処理単位で発生し

1449 た場合には,CPU例外ハンドラの優先順位は,その処理単位の優先順位と同じで

1450 あるが,その処理単位よりも先に実行される【NGKI0125】.

Page 30: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

30

1451

1452 拡張サービスコールの優先順位は,それを呼び出した処理単位と同じであるが,

1453 それを呼び出した処理単位よりも先に実行される【NGKI0126】.

1454

1455 初期化ルーチンは,カーネルの動作開始前に,システムコンフィギュレーショ

1456 ンファイル中に初期化ルーチンを登録する静的APIを記述したのと同じ順序で実

1457 行される【NGKI0127】.終了処理ルーチンは,カーネルの動作終了後に,終了

1458 処理ルーチンを登録する静的APIを記述したのと逆の順序で実行される

1459 【NGKI0128】.

1460

1461 マルチプロセッサ対応カーネルでは,初期化ルーチンには,クラスに属さない

1462 グローバル初期化ルーチンと,クラスに属するローカル初期化ルーチンがある

1463 【NGKI0129】.グローバル初期化ルーチンがマスタプロセッサで実行された後

1464 に,各プロセッサでローカル初期化ルーチンが実行される【NGKI0130】.また,

1465 終了処理ルーチンには,クラスに属さないグローバル終了処理ルーチンと,ク

1466 ラスに属するローカル終了処理ルーチンがある【NGKI0131】.ローカル終了処

1467 理ルーチンが各プロセッサで実行された後に,マスタプロセッサでグローバル

1468 終了処理ルーチンが実行される【NGKI0132】.

1469

1470 【仕様決定の理由】

1471

1472 終了処理ルーチンを,登録する静的APIを記述したのと逆順で実行するのは,終

1473 了処理は初期化の逆の順序で行うのがよいためである(システムコンフィギュ

1474 レーションファイルを分割すると,終了処理ルーチンを登録する静的APIだけ逆

1475 順に記述するのは難しい).

1476

1477 2.4.3 カーネル処理の不可分性

1478

1479 カーネルのサービスコール処理やディスパッチャ,割込みハンドラとCPU例外ハ

1480 ンドラの入口処理と出口処理などのカーネル処理は不可分に実行されるのが基

1481 本である.実際には,カーネル処理の途中でアプリケーションが実行される場

1482 合はあるが,アプリケーションがサービスコールを用いて観測できる範囲で,

1483 カーネル処理が不可分に実行された場合と同様に振る舞うのが原則である

1484 【NGKI0133】.これを,カーネル処理の不可分性という.

1485

1486 ただし,マルチプロセッサ対応カーネルにおいては,カーネル処理が実行され

1487 ているプロセッサ以外のプロセッサから,カーネル処理の途中の状態が観測で

1488 きる場合がある.具体的には,1つのサービスコールにより複数のオブジェクト

1489 の状態が変化する場合に,一部のオブジェクトの状態のみが変化し,残りのオ

1490 ブジェクトの状態が変化していない過渡的な状態が観測できる場合がある

1491 【NGKI0134】.

1492

1493 【補足説明】

1494

1495 マルチプロセッサ対応でないカーネルでは,1つのサービスコールにより複数の

1496 タスクが実行できる状態になる場合,新しく実行状態となるべきタスクへのディ

1497 スパッチは,すべてのタスクの状態遷移が完了した後に行われる.例えば,低

1498 優先度のタスクAが発行したサービスコールにより,中優先度のタスクBと高優

1499 先度のタスクCがこの順で待ち解除される場合,タスクBとタスクCが待ち解除さ

1500 れた後に,タスクCへのディスパッチが行われる.

Page 31: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

31

1501

1502 マルチプロセッサ対応カーネルでは,上のことは,1つのプロセッサ内では成り

1503 立つが,他のプロセッサに割り付けられたタスクに対しては成り立たない.例

1504 えば,プロセッサ1で低優先度のタスクAが実行されている時に,他のプロセッ

1505 サ2で実行されているタスクが発行したサービスコールにより,プロセッサ1に

1506 割り付けられた中優先度のタスクBと高優先度のタスクCがこの順で待ち解除さ

1507 れる場合,タスクCが待ち解除される前に,タスクBへディスパッチされる場合

1508 がある.

1509

1510 2.4.4 処理単位を実行するプロセッサ

1511

1512 マルチプロセッサ対応カーネルでは,処理単位を実行するプロセッサ(割付け

1513 プロセッサ)は,その処理単位が属するクラスの初期割付けプロセッサと割付

1514 け可能プロセッサから,次のように決まる.

1515

1516 タスク,周期ハンドラ,アラームハンドラは,登録時に,属するクラスの初期

1517 割付けプロセッサに割り付けられる【NGKI0135】.また,割付けプロセッサを

1518 変更するサービスコール(mact_tsk/imact_tsk,mig_tsk,msta_cyc,

1519 msta_alm/imsta_alm)によって,割付けプロセッサを,クラスの割付け可能プ

1520 ロセッサのいずれかに変更することができる【NGKI0136】.

1521

1522 割込みハンドラ,CPU例外ハンドラ,ローカル初期化ルーチン,ローカル終了処

1523 理ルーチンは,属するクラスの初期割付けプロセッサで実行される

1524 【NGKI0137】.クラスの割付け可能プロセッサの情報は用いられない.

1525

1526 割込みサービスルーチンは,属するクラスの割付け可能プロセッサのいずれか

1527 (オプション設定によりすべて)で実行される【NGKI0138】.クラスの初期割

1528 付けプロセッサの情報は用いられない.

1529

1530 以上を整理すると,次の表の通りとなる.この表の中で,「○」はその情報が

1531 使用されることを,「-」はその情報が使用されないことを示す.

1532

1533 初期割付けプロセッサ 割付け可能プロセッサ

1534 ----------------------------------------------------------------------

1535 タスク(タスク例外処理 ○ ○

1536 ルーチンを含む)

1537 ----------------------------------------------------------------------

1538 割込みハンドラ ○ -

1539 割込みサービスルーチン - ○

1540 周期ハンドラ ○ ○

1541 アラームハンドラ ○ ○

1542 ----------------------------------------------------------------------

1543 CPU例外ハンドラ ○ -

1544 ----------------------------------------------------------------------

1545 ローカル初期化ルーチン ○ -

1546 ローカル終了処理ルーチン ○ -

1547 ----------------------------------------------------------------------

1548

1549 オーバランハンドラ,拡張サービスコール,グローバル初期化ルーチン,グロー

1550 バル終了処理ルーチンは,いずれのクラスにも属さない【NGKI0139】.オーバ

Page 32: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

32

1551 ランハンドラは,オーバランを起こしたタスクの割付けプロセッサによって実

1552 行される【NGKI0140】.拡張サービスコールは,それを呼び出した処理単位の

1553 割付けプロセッサによって実行される【NGKI0141】.グローバル初期化ルーチ

1554 ンとグローバル終了処理ルーチンは,マスタプロセッサによって実行される

1555 【NGKI0142】.

1556

1557 2.5 システム状態とコンテキスト

1558

1559 2.5.1 カーネル動作状態と非動作状態

1560

1561 カーネルの初期化が完了した後,カーネルの終了処理が開始されるまでの間を,

1562 カーネル動作状態と呼ぶ.それ以外の状態,すなわちカーネルの初期化完了前

1563 (初期化ルーチンの実行中を含む)と終了処理開始後(終了処理ルーチンの実

1564 行中を含む)を,カーネル非動作状態と呼ぶ.プロセッサは,カーネル動作状

1565 態かカーネル非動作状態のいずれかの状態を取る【NGKI0143】.

1566

1567 カーネル非動作状態では,原則として,NMIを除くすべての割込みがマスクされ

1568 る【NGKI0144】.

1569

1570 カーネル非動作状態では,システムインタフェースレイヤのAPIとカーネル非動

1571 作状態を参照するサービスコール(sns_ker)のみを呼び出すことができる

1572 【NGKI0145】.カーネル非動作状態で,その他のサービスコールを呼び出した

1573 場合の動作は,保証されない【NGKI0146】.

1574

1575 マルチプロセッサ対応カーネルでは,プロセッサ毎に,カーネル動作状態かカー

1576 ネル非動作状態のいずれかの状態を取る【NGKI0147】.

1577

1578 2.5.2 タスクコンテキストと非タスクコンテキスト

1579

1580 処理単位が実行される環境(用いるスタック領域やプロセッサの動作モードな

1581 ど)をコンテキストと呼ぶ.

1582

1583 カーネル動作状態において,処理単位が実行されるコンテキストは,タスクコ

1584 ンテキストと非タスクコンテキストに分類される【NGKI0148】.

1585

1586 タスク(タスク例外処理ルーチンを含む)が実行されるコンテキストは,タス

1587 クコンテキストに分類される【NGKI0149】.また,タスクコンテキストから呼

1588 び出した拡張サービスコールが実行されるコンテキストは,タスクコンテキス

1589 トに分類される【NGKI0150】.

1590

1591 割込みハンドラ(割込みサービスルーチンおよびタイムイベントハンドラを含

1592 む)とCPU例外ハンドラが実行されるコンテキストは,非タスクコンテキストに

1593 分類される【NGKI0151】.また,非タスクコンテキストから呼び出した拡張サー

1594 ビスコールが実行されるコンテキストは,非タスクコンテキストに分類される

1595 【NGKI0152】.

1596

1597 タスクコンテキストで実行される処理単位は,別に規定がない限り,タスクの

1598 スタック領域を用いて実行される【NGKI0153】.非タスクコンテキストで実行

1599 される処理単位は,別に規定がない限り,非タスクコンテキスト用スタック領

1600 域を用いて実行される【NGKI0154】.

Page 33: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

33

1601

1602 タスクコンテキストからは,非タスクコンテキスト専用のサービスコールを呼

1603 び出すことはできない【NGKI0155】.逆に,非タスクコンテキストからは,タ

1604 スクコンテキスト専用のサービスコールを呼び出すことはできない

1605 【NGKI0156】.いずれも,呼び出した場合にはE_CTXエラーとなる【NGKI0157】.

1606

1607 2.5.3 カーネルの振舞いに影響を与える状態

1608

1609 カーネル動作状態において,プロセッサは,カーネルの振舞いに影響を与える

1610 状態として,次の状態を持つ【NGKI0158】.

1611

1612 ・全割込みロックフラグ(全割込みロック状態と全割込みロック解除状態)

1613 ・CPUロックフラグ(CPUロック状態とCPUロック解除状態)

1614 ・割込み優先度マスク(割込み優先度マスク全解除状態と全解除でない状態)

1615 ・ディスパッチ禁止フラグ(ディスパッチ禁止状態とディスパッチ許可状態)

1616

1617 これらの状態は,それぞれ独立な状態である.すなわち,プロセッサは上記の

1618 状態の任意の組合せを取ることができ,それぞれの状態を独立に変化させるこ

1619 とができる【NGKI0159】.

1620

1621 2.5.4 全割込みロック状態と全割込みロック解除状態

1622

1623 プロセッサは,NMIを除くすべての割込みをマスクするための全割込みロックフ

1624 ラグを持つ【NGKI0160】.全割込みロックフラグがセットされた状態を全割込

1625 みロック状態,クリアされた状態を全割込みロック解除状態と呼ぶ.すなわち,

1626 全割込みロック状態では,NMIを除くすべての割込みがマスクされる.

1627

1628 全割込みロック状態では,システムインタフェースレイヤのAPIとカーネル非動

1629 作状態を参照するサービスコール(sns_ker),カーネルを終了するサービスコー

1630 ル(ext_ker)のみを呼び出すことができる【NGKI0161】.全割込みロック状態

1631 で,その他のサービスコールを呼び出した場合の動作は,保証されない

1632 【NGKI0162】.また,全割込みロック状態で,実行中の処理単位からリターン

1633 してはならない.リターンした場合の動作は保証されない【NGKI0164】.

1634

1635 マルチプロセッサ対応カーネルでは,プロセッサ毎に,全割込みロックフラグ

1636 を持つ【NGKI0165】.すなわち,プロセッサ毎に,全割込みロック状態か全割

1637 込みロック解除状態のいずれかの状態を取る.

1638

1639 2.5.5 CPUロック状態とCPUロック解除状態

1640

1641 プロセッサは,カーネル管理の割込み(「2.7.7 カーネル管理外の割込み」の

1642 節を参照)をすべてマスクするためのCPUロックフラグを持つ【NGKI0166】.

1643 CPUロックフラグがセットされた状態をCPUロック状態,クリアされた状態を

1644 CPUロック解除状態と呼ぶ.CPUロック状態では,すべてのカーネル管理の割込

1645 みがマスクされ,ディスパッチが保留される【NGKI0167】.

1646

1647 CPUロック状態で呼び出すことができるサービスコールは次の通り【NGKI0168】.

1648

1649 ・システムインタフェースレイヤのAPI

1650 ・loc_cpu/iloc_cpu,unl_cpu/iunl_cpu

Page 34: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

34

1651 ・unl_spn/iunl_spn(マルチプロセッサ対応カーネルのみ)

1652 ・dis_int,ena_int

1653 ・sns_yyy,xsns_yyy(CPU例外ハンドラからのみ)

1654 ・get_utm

1655 ・ext_tsk,ext_ker

1656 ・prb_mem(保護機能対応カーネルのみ)

1657 ・cal_svc(保護機能対応カーネルのみ)

1658

1659 CPUロック状態で,その他のサービスコールを呼び出した場合には,E_CTXエラー

1660 となる【NGKI0169】.

1661

1662 マルチプロセッサ対応カーネルでは,プロセッサ毎に,CPUロックフラグを持つ

1663 【NGKI0170】.すなわち,プロセッサ毎に,CPUロック状態かCPUロック解除状

1664 態のいずれかの状態を取る.

1665

1666 【補足説明】

1667

1668 NMI以外にカーネル管理外の割込みを設けない場合には,全割込みロックフラグ

1669 とCPUロックフラグの機能は同一となるが,両フラグは独立に存在する.

1670

1671 マルチプロセッサ対応カーネルにおいて,あるプロセッサがCPUロック状態にあ

1672 る間は,そのプロセッサにおいてのみ,すべてのカーネル管理の割込みがマス

1673 クされ,ディスパッチが保留される.それに対して他のプロセッサにおいては,

1674 割込みはマスクされず,ディスパッチも起こるため,CPUロック状態を使って他

1675 のプロセッサで実行される処理単位との排他制御を実現することはできない.

1676

1677 2.5.6 割込み優先度マスク

1678

1679 プロセッサは,割込み優先度を基準に割込みをマスクするための割込み優先度

1680 マスクを持つ【NGKI0171】.割込み優先度マスクがTIPM_ENAALL(=0)の時は,

1681 いずれの割込み要求もマスクされない【NGKI0172】.この状態を割込み優先度

1682 マスク全解除状態と呼ぶ.割込み優先度マスクがTIPM_ENAALL(=0)以外の時

1683 は,割込み優先度マスクと同じかそれより低い割込み優先度を持つ割込みはマ

1684 スクされ,ディスパッチは保留される【NGKI0173】.この状態を割込み優先度

1685 マスクが全解除でない状態と呼ぶ.

1686

1687 割込み優先度マスクが全解除でない状態では,別に規定がない限りは,自タス

1688 クを広義の待ち状態に遷移させる可能性のあるサービスコールを呼び出すこと

1689 はできない【NGKI0174】.呼び出した場合には,E_CTXエラーとなる

1690 【NGKI0175】.

1691

1692 マルチプロセッサ対応カーネルでは,プロセッサ毎に,割込み優先度マスクを

1693 持つ【NGKI0176】.

1694

1695 2.5.7 ディスパッチ禁止状態とディスパッチ許可状態

1696

1697 プロセッサは,ディスパッチを保留するためのディスパッチ禁止フラグを持つ

1698 【NGKI0177】.ディスパッチ禁止フラグがセットされた状態をディスパッチ禁

1699 止状態,クリアされた状態をディスパッチ許可状態と呼ぶ.すなわち,ディス

1700 パッチ禁止状態では,ディスパッチは保留される.

Page 35: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

35

1701

1702 ディスパッチ禁止状態では,別に規定がない限りは,自タスクを広義の待ち状

1703 態に遷移させる可能性のあるサービスコールを呼び出すことはできない

1704 【NGKI0178】.呼び出した場合には,E_CTXエラーとなる【NGKI0179】.

1705

1706 マルチプロセッサ対応カーネルでは,プロセッサ毎に,ディスパッチ禁止フラ

1707 グを持つ【NGKI0180】.すなわち,プロセッサ毎に,ディスパッチ禁止状態か

1708 ディスパッチ許可状態のいずれかの状態を取る.

1709

1710 【補足説明】

1711

1712 マルチプロセッサ対応カーネルにおいて,あるプロセッサがディスパッチ禁止

1713 状態にある間は,そのプロセッサにおいてのみ,ディスパッチが保留される.

1714 それに対して他のプロセッサにおいては,ディスパッチが起こるため,ディス

1715 パッチ禁止状態を使って他のプロセッサで実行されるタスクとの排他制御を実

1716 現することはできない.

1717

1718 2.5.8 ディスパッチ保留状態

1719

1720 非タスクコンテキストの実行中,CPUロック状態,割込み優先度マスクが全解除

1721 でない状態,ディスパッチ禁止状態では,ディスパッチが保留される

1722 【NGKI0181】.これらの状態を総称して,ディスパッチ保留状態と呼ぶ.

1723

1724 マルチプロセッサ対応カーネルでは,プロセッサ毎に,ディスパッチ保留状態

1725 かそうでない状態のいずれかの状態を取る【NGKI0182】.

1726

1727 【補足説明】

1728

1729 全割込みロック状態はカーネルが管理しておらず,ディスパッチが保留される

1730 ことをカーネルが保証できないため,ディスパッチ保留状態に含めていない.

1731

1732 2.5.9 カーネル管理外の状態

1733

1734 全割込みロック状態,カーネル管理外の割込みハンドラ実行中(「2.7.7 カー

1735 ネル管理外の割込み」の節を参照),カーネル管理外のCPU例外ハンドラ実行中

1736 (「2.8.4 カーネル管理外のCPU例外」の節を参照)を総称して,カーネル管理

1737 外の状態と呼ぶ.

1738

1739 それぞれの節で規定する通り,カーネル管理外の状態では,システムインタ

1740 フェースレイヤのAPIとsns_ker,ext_kerのみ(カーネル管理外のCPU例外ハン

1741 ドラからは,それに加えてxsns_dpnとxsns_xpn)を呼び出すことができ,その

1742 他のサービスコールを呼び出すことはできない.カーネル管理外の状態から,

1743 その他のサービスコールを呼び出した場合の動作は,保証されない.

1744

1745 カーネル管理外の状態では,少なくとも,カーネル管理の割込みはマスクされ

1746 ている.カーネル管理外の割込み(の一部)もマスクされている場合もある.

1747 保護機能対応カーネルでは,カーネル管理外の状態になるのは,特権モードで

1748 実行している間に限られる.

1749

1750 2.5.10 処理単位の開始・終了とシステム状態

Page 36: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

36

1751

1752 各処理単位が実行開始されるシステム状態の条件(実行開始条件),各処理単

1753 位の実行開始時にカーネルによって行われるシステム状態の変更処理(実行開

1754 始時処理),各処理単位からのリターン前(または終了前)にアプリケーショ

1755 ンが設定しておくべきシステム状態(リターン前または終了前),各処理単位

1756 からのリターン時(または終了時)にカーネルによって行われるシステム状態

1757 の変更処理(リターン時処理または終了時処理)は,次の表の通りである.

1758

1759 CPU ロック 割込み優先度 ディスパッチ

1760 フラグ マスク 禁止フラグ

1761 ----------------------------------------------------------------

1762 【タスク】【NGKI0183】

1763 実行開始条件 解除 全解除 許可

1764 実行開始時処理 そのまま そのまま そのまま

1765 終了前 原則解除(*1) 原則全解除(*1) 原則許可(*1)

1766 終了時処理 解除する 全解除する 許可する

1767 ----------------------------------------------------------------

1768 【タスク例外処理ルーチン】【NGKI0184】

1769 実行開始条件 解除 全解除 任意

1770 実行開始時処理 そのまま そのまま そのまま

1771 リターン前 原則解除(*1) 原則全解除(*1) 元に戻す

1772 リターン時処理 解除する 全解除する 元に戻す(*4)

1773 ----------------------------------------------------------------

1774 【カーネル管理の割込みハンドラ】【NGKI0185】

1775 【割込みサービスルーチン】【NGKI0186】

1776 【タイムイベントハンドラ】【NGKI0187】

1777 実行開始条件 解除 自優先度より低い 任意

1778 実行開始時処理 そのまま 自優先度に(*2) そのまま

1779 リターン前 原則解除(*1) 変更不可(*3) 変更不可(*3)

1780 リターン時処理 解除する 元に戻す(*5) そのまま

1781 ----------------------------------------------------------------

1782 【CPU例外ハンドラ】【NGKI0188】

1783 実行開始条件 任意 任意 任意

1784 実行開始時処理 そのまま(*6) そのまま そのまま

1785 リターン前 原則元に(*1) 変更不可(*3) 変更不可(*3)

1786 リターン時処理 元に戻す 元に戻す(*5) そのまま

1787 ----------------------------------------------------------------

1788 【拡張サービスコール】【NGKI0189】

1789 実行開始条件 任意 任意 任意

1790 実行開始時処理 そのまま そのまま そのまま

1791 リターン前 任意 任意 任意

1792 リターン時処理 そのまま そのまま そのまま

1793 ----------------------------------------------------------------

1794

1795 この表の中で「原則(*1)」とは,処理単位からのリターン前(または終了前)

1796 に,アプリケーションが指定された状態に設定しておくことが原則であるが,

1797 この原則に従わなくても,リターン時(または終了時)にカーネルによって状

1798 態が設定されるため,支障がないことを意味する.

1799

1800 「自優先度に(*2)」 とは,割込みハンドラと割込みサービスルーチンの場合に

Page 37: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

37

1801 はそれを要求した割込みの割込み優先度,周期ハンドラとアラームハンドラの

1802 場合にはタイマ割込みの割込み優先度,オーバランハンドラの場合にはオーバ

1803 ランタイマ割込みの割込み優先度に変更することを意味する.

1804

1805 「変更不可(*3)」 とは,その処理単位中で,そのシステム状態を変更するAPI

1806 が用意されていないことを示す.

1807

1808 保護機能対応カーネルでは,タスク例外処理ルーチンからのリターン時にディ

1809 スパッチ禁止フラグを元に戻す処理(*4)は,タスクにディスパッチ禁止フラグ

1810 の変更を許可している場合にのみ行われる【NGKI0529】.カーネルは,ディス

1811 パッチ禁止フラグの元の状態をユーザスタック上に保存する【NGKI0530】.ア

1812 プリケーションがユーザスタック上に保存されたディスパッチ禁止フラグの状

1813 態を書き換えた場合,タスク例外処理ルーチンからのリターン時には,書き換

1814 えた後のディスパッチ禁止フラグの状態に変更される(すなわち,元に戻され

1815 るとは限らない)【NGKI0190】.

1816

1817 また,保護機能対応カーネルでは,タスクにディスパッチ禁止フラグの変更を

1818 許可していない場合で,タスク例外処理ルーチン中で拡張サービスコールを用

1819 いてディスパッチ禁止フラグを変更した場合,カーネルは元の状態に戻さない

1820 【NGKI0191】.このことから,タスク例外処理ルーチンからの終了前に,ディ

1821 スパッチ禁止フラグを元の状態に戻すのは,アプリケーションの責任とする

1822 【NGKI0192】.

1823

1824 【補足説明】

1825

1826 マルチプロセッサ対応カーネルにおいて,タスクがタスク例外処理ルーチンを

1827 実行中にマイグレーションされた場合,マイグレーション先のプロセッサにお

1828 いて,割込み優先度マスクとディスパッチ禁止フラグが元に戻される.

1829

1830 【仕様決定の理由】

1831

1832 保護機能対応カーネルにおいて,タスク例外処理ルーチンからのリターン時に

1833 ディスパッチ禁止フラグを元に戻す処理(*4)が,タスクにディスパッチ禁止フ

1834 ラグの変更を許可している場合にのみ行われるのは,タスクがユーザスタック

1835 上の状態を書き換えることで,許可していない状態変更を起こせてしまうこと

1836 を防止するためである.

1837

1838 割込みハンドラやCPU例外ハンドラで,その処理単位中で割込み優先度マスクを

1839 変更するAPIが用意されていないにもかかわらず,処理単位からのリターン時に

1840 元の状態に戻す(*5)のは,プロセッサによっては,割込み優先度マスクがステー

1841 タスレジスタ等に含まれており,APIを用いずに変更できてしまう場合があるた

1842 めである.

1843

1844 CPU例外ハンドラの実行開始時には,CPUロックフラグは変更されない(*6)こと

1845 から,CPUロック状態でCPU例外が発生した場合,CPU例外ハンドラの実行開始直

1846 後はCPUロック状態となっている.CPUロック状態でCPU例外が発生した場合,起

1847 動されるCPU例外ハンドラはカーネル管理外のCPU例外ハンドラであり(xsns_dpn,

1848 xsns_xpnともtrueを返す),CPU例外ハンドラ中でiunl_cpuを呼び出してCPUロッ

1849 ク状態を解除しようとした場合の動作は保証されない.ただし,保証されない

1850 にも関わらずiunl_cpuを呼び出した場合も考えられるため,リターン時には元

Page 38: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

38

1851 に戻すこととしている.

1852

1853 2.6 タスクの状態遷移とスケジューリング規則

1854

1855 2.6.1 基本的なタスク状態

1856

1857 カーネルに登録したタスクは,実行できる状態,休止状態,広義の待ち状態の

1858 いずれかの状態を取る【NGKI0193】.また,実行できる状態と広義の待ち状態

1859 を総称して,起動された状態と呼ぶ.さらに,タスクをカーネルに登録してい

1860 ない仮想的な状態を,未登録状態と呼ぶ.

1861

1862 (a) 実行できる状態(runnable)

1863

1864 タスクを実行できる条件が,プロセッサが使用できるかどうかを除いて,揃っ

1865 ている状態.実行できる状態は,さらに,実行状態と実行可能状態に分類され

1866 る.

1867

1868 (a.1) 実行状態(running)

1869

1870 タスクが実行されている状態.または,そのタスクの実行中に,割込みまたは

1871 CPU例外により非タスクコンテキストの実行が開始され,かつ,タスクコンテキ

1872 ストに戻った後に,そのタスクの実行を再開するという状態.

1873

1874 (a.2) 実行可能状態(ready)

1875

1876 タスク自身は実行できる状態にあるが,それよりも優先順位の高いタスクが実

1877 行状態にあるために,そのタスクが実行されない状態.

1878

1879 (b) 休止状態(dormant)

1880

1881 タスクが実行すべき処理がない状態.タスクの実行を終了した後,次に起動す

1882 るまでの間は,タスクは休止状態となっている.タスクが休止状態にある時に

1883 は,タスクの実行を再開するための情報(実行再開番地やレジスタの内容など)

1884 は保存されていない【NGKI0194】.

1885

1886 (c) 広義の待ち状態(blocked)

1887

1888 タスクが,処理の途中で実行を止められている状態.タスクが広義の待ち状態

1889 にある時には,タスクの実行を再開するための情報(実行再開番地やレジスタ

1890 の内容など)は保存されており,タスクが実行を再開する時には,広義の待ち

1891 状態に遷移する前の状態に戻される【NGKI0195】.広義の待ち状態は,さらに,

1892 (狭義の)待ち状態,強制待ち状態,二重待ち状態に分類される.

1893

1894 (c.1) (狭義の)待ち状態(waiting)

1895

1896 タスクが何らかの条件が揃うのを待つために,自ら実行を止めている状態.

1897

1898 (c.2) 強制待ち状態(suspended)

1899

1900 他のタスクによって,強制的に実行を止められている状態.ただし,自タスク

Page 39: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

39

1901 を強制待ち状態にすることも可能である.

1902

1903 (c.3) 二重待ち状態(waiting-suspended)

1904

1905 待ち状態と強制待ち状態が重なった状態.すなわち,タスクが何らかの条件が

1906 揃うのを待つために自ら実行を止めている時に,他のタスクによって強制的に

1907 実行を止められている状態.

1908

1909 単にタスクが「待ち状態である」といった場合には,二重待ち状態である場合

1910 を含み,「待ち状態でない」といった場合には,二重待ち状態でもないことを

1911 意味する.また,単にタスクが「強制待ち状態である」といった場合には,二

1912 重待ち状態である場合を含み,「強制待ち状態でない」といった場合には,二

1913 重待ち状態でもないことを意味する.

1914

1915 (d) 未登録状態(non-existent)

1916

1917 タスクをカーネルに登録していない仮想的な状態.タスクの生成前と削除後は,

1918 タスクは未登録状態にあるとみなす.

1919

1920 カーネルによっては,これらのタスク状態以外に,過渡的な状態が存在する場

1921 合がある【NGKI0196】.過渡的な状態については,「2.6.6 ディスパッチ保留

1922 状態で実行中のタスクに対する強制待ち」の節を参照すること.

1923

1924 【TOPPERS/ASPカーネルにおける規定】

1925

1926 ASPカーネルでは,タスクが未登録状態になることはない【ASPS0005】.また,

1927 上記のタスク状態以外の過渡的な状態になることもない【ASPS0006】.ただし,

1928 動的生成機能拡張パッケージでは,タスクが未登録状態になる【ASPS0007】.

1929

1930 【TOPPERS/FMPカーネルにおける規定】

1931

1932 FMPカーネルでは,タスクが未登録状態になることはない【FMPS0003】.上記の

1933 タスク状態以外の過渡的な状態として,タスクが強制待ち状態[実行継続中]

1934 になることがある【FMPS0004】.詳しくは,「2.6.6 ディスパッチ保留状態で

1935 実行中のタスクに対する強制待ち」の節を参照すること.

1936

1937 【TOPPERS/HRP2カーネルにおける規定】

1938

1939 HRP2カーネルでは,タスクが未登録状態になることはない【HRPS0002】.また,

1940 上記のタスク状態以外の過渡的な状態になることもない【HRPS0003】.

1941

1942 【TOPPERS/SSPカーネルにおける規定】

1943

1944 SSPカーネルでは,タスクが広義の待ち状態と未登録状態になることはない

1945 【SSPS0003】.また,上記のタスク状態以外の過渡的な状態になることもない

1946 【SSPS0004】.

1947

1948 2.6.2 タスクの状態遷移

1949

1950 タスクの状態遷移を図2-2に示す【NGKI0197】.

Page 40: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

40

1951

1952 未登録状態のタスクをカーネルに登録することを,タスクを生成する(create)

1953 という.生成されたタスクは,休止状態に遷移する【NGKI0198】.また,タス

1954 ク生成時の属性指定により,生成と同時にタスクを起動し,実行できる状態に

1955 することもできる【NGKI0199】.逆に,登録されたタスクを未登録状態に遷移

1956 させることを,タスクを削除する(delete)という.

1957

1958 休止状態のタスクを,実行できる状態にすることを,タスクを起動する

1959 (activate)という.起動されたタスクは,実行できる状態になる

1960 【NGKI0200】.逆に,起動された状態のタスクを,休止状態(または未登録状

1961 態)に遷移させることを,タスクを終了する(terminate)という.

1962

1963 実行できる状態になったタスクは,まずは実行可能状態に遷移するが,そのタ

1964 スクの優先順位が実行状態のタスクよりも高い場合には,ディスパッチ保留状

1965 態でない限りはただちにディスパッチが起こり,実行状態へ遷移する

1966 【NGKI0201】.この時,それまで実行状態であったタスクは実行可能状態に遷

1967 移する【NGKI0202】.この時,実行状態に遷移したタスクは,実行可能状態に

1968 遷移したタスクをプリエンプトしたという.逆に,実行可能状態に遷移したタ

1969 スクは,プリエンプトされたという.

1970

1971 タスクを待ち解除するとは,タスクが待ち状態(二重待ち状態を除く)であれ

1972 ば実行できる状態に,二重待ち状態であれば強制待ち状態に遷移させることを

1973 いう.また,タスクを強制待ちから再開するとは,タスクが強制待ち状態(二

1974 重待ち状態を除く)であれば実行できる状態に,二重待ち状態であれば待ち状

1975 態に遷移させることをいう.

1976

1977 【補足説明】

1978

1979 タスクの実行開始とは,タスクが起動された後に最初に実行される(実行状態

1980 に遷移する)時のことをいう.

1981

1982 2.6.3 タスクのスケジューリング規則

1983

1984 実行できるタスクは,優先順位の高いものから順に実行される【NGKI0203】.

1985 すなわち,ディスパッチ保留状態でない限りは,実行できるタスクの中で最も

1986 高い優先順位を持つタスクが実行状態となり,他は実行可能状態となる.

1987

1988 タスクの優先順位は,タスクの優先度とタスクが実行できる状態になった順序

1989 から,次のように定まる.優先度の異なるタスクの間では,優先度の高いタス

1990 クが高い優先順位を持つ【NGKI0204】.優先度が同一のタスクの間では,先に

1991 実行できる状態になったタスクが高い優先順位を持つ【NGKI0205】.すなわち,

1992 同じ優先度を持つタスクは,FCFS(First Come First Served)方式でスケジュー

1993 リングされる.ただし,サービスコールの呼出しにより,同じ優先度を持つタ

1994 スク間の優先順位を変更することも可能である【NGKI0206】.

1995

1996 最も高い優先順位を持つタスクが変化した場合には,ディスパッチ保留状態で

1997 ない限りはただちにディスパッチが起こり,最も高い優先順位を持つタスクが

1998 実行状態となる【NGKI0207】.ディスパッチ保留状態においては,実行状態の

1999 タスクは切り換わらず,最も高い優先順位を持つタスクは実行可能状態にとど

2000 まる【NGKI0208】.

Page 41: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

41

2001

2002 マルチプロセッサ対応カーネルでは,プロセッサ毎に,上記のスケジューリン

2003 グ規則を適用して,タスクスケジューリングを行う【NGKI0209】.すなわち,

2004 プロセッサがディスパッチ保留状態でない限りは,そのプロセッサに割り付け

2005 られた実行できるタスクの中で最も高い優先順位を持つタスクが実行状態とな

2006 り,他は実行可能状態となる.そのため,実行状態のタスクは,プロセッサ毎

2007 に存在する.

2008

2009 2.6.4 待ち行列と待ち解除の順序

2010

2011 タスクが待ち解除される順序の管理のために,待ち状態のタスクがつながれて

2012 いるキューを,待ち行列と呼ぶ.また,タスクが同期・通信オブジェクトの待

2013 ち行列につながれている場合に,そのオブジェクトを,タスクの待ちオブジェ

2014 クトと呼ぶ.

2015

2016 待ち行列にタスクをつなぐ順序には,FIFO順とタスクの優先度順がある.どち

2017 らの順序でつなぐかは,待ち行列毎に規定される【NGKI0210】.多くの待ち行

2018 列において,どちらの順序でつなぐかを,オブジェクト属性により指定できる

2019 【NGKI0211】.

2020

2021 FIFO順の待ち行列においては,新たに待ち状態に遷移したタスクは待ち行列の

2022 最後につながれる【NGKI0212】.それに対してタスクの優先度順の待ち行列に

2023 おいては,新たに待ち状態に遷移したタスクは,優先度の高い順に待ち行列に

2024 つながれる【NGKI0213】.同じ優先度のタスクが待ち行列につながれている場

2025 合には,新たに待ち状態に遷移したタスクが,同じ優先度のタスクの中で最後

2026 につながれる【NGKI0214】.

2027

2028 待ち解除の条件がタスクによって異なる場合には,待ち行列の先頭のタスクは

2029 待ち解除の条件を満たさないが,後方のタスクが待ち解除の条件を満たす場合

2030 がある.このような場合の振舞いとして,次の2つのケースがある.どちらの振

2031 舞いをするかは,待ち行列毎に規定される【NGKI0215】.

2032

2033 (a) 待ち解除の条件を満たしたタスクの中で,待ち行列の前方につながれたも

2034 のから順に待ち解除される【NGKI0216】.すなわち,待ち行列の前方に待ち解

2035 除の条件を満たさないタスクがあっても,後方のタスクが待ち解除の条件を満

2036 たしていれば,先に待ち解除される.

2037

2038 (b) タスクの待ち解除は,待ち行列につながれている順序で行われる

2039 【NGKI0217】.すなわち,待ち行列の前方に待ち解除の条件を満たさないタス

2040 クがあると,後方のタスクが待ち解除の条件を満たしても,待ち解除されない.

2041

2042 ここで,(b)の振舞いをする待ち行列においては,待ち行列につながれたタスク

2043 の強制終了,タスク優先度の変更(待ち行列がタスクの優先度順の場合のみ),

2044 待ち状態の強制解除が行われた場合に,タスクの待ち解除が起こることがある.

2045 具体的には,これらの操作により新たに待ち行列の先頭になったタスクが,待

2046 ち解除の条件を満たしていれば,ただちに待ち解除される【NGKI0218】.さら

2047 に,この待ち解除により新たに待ち行列の先頭になったタスクに対しても,同

2048 じ処理が繰り返される【NGKI0219】.

2049

2050 2.6.5 タスク例外処理マスク状態と待ち禁止状態

Page 42: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

42

2051

2052 保護機能対応カーネルにおいて,ユーザタスクについては特権モードで実行し

2053 ている間(特権モードを実行している間に,実行可能状態や広義の待ち状態に

2054 なっている場合を含む.また,サービスコールを呼び出して,実行可能状態や

2055 広義の待ち状態になっている場合も含む.タスクの実行開始前は含まない),

2056 システムタスクについては拡張サービスコールを実行している間(拡張サービ

2057 スコールを実行している間に,実行可能状態や広義の待ち状態になっている場

2058 合を含む)は,タスク例外処理ルーチンの実行は開始されない【NGKI0220】.

2059 これらの状態を,タスク例外処理マスク状態と呼ぶ.

2060

2061 タスクは,タスク例外処理マスク状態である時に,基本的なタスク状態と重複

2062 して,待ち禁止状態になることができる【NGKI0221】.待ち禁止状態とは,タ

2063 スクが待ち状態に入ることが一時的に禁止された状態である.待ち禁止状態に

2064 あるタスクが,サービスコールを呼び出して待ち状態に遷移しようとした場合,

2065 サービスコールはE_RLWAIエラーとなる【NGKI0222】.

2066

2067 タスクを待ち禁止状態に遷移させるサービスコールは,対象タスクがタスク例

2068 外処理マスク状態である場合に,対象タスクを待ち禁止状態に遷移させる

2069 【NGKI0223】.その後,タスクがタスク例外処理マスク状態でなくなる時点

2070 (ユーザタスクについては特権モードから戻る時点,システムタスクについて

2071 拡張サービスコールからリターンする時点)で,待ち禁止状態が解除される

2072 【NGKI0224】.また,タスクの待ち禁止状態を解除するサービスコールによっ

2073 ても,待ち禁止状態を解除することができる【NGKI0225】.

2074

2075 【仕様決定の理由】

2076

2077 タスク例外処理ルーチンでは,タスクの本体のための例外処理(例えば,タス

2078 クに対して終了要求があった時の処理)を行うことを想定しており,タスクか

2079 ら呼び出した拡張サービスコールのための例外処理を行うことは想定していな

2080 い.そのため,拡張サービスコールを実行している間にタスク例外処理が要求

2081 された場合に,すぐにタスク例外処理ルーチンを実行すると,拡張サービスコー

2082 ルのための例外処理が行われないことになる.

2083

2084 また,ユーザタスクの場合には,特権モードを実行中にタスク例外処理ルーチ

2085 ンを実行すると,システムスタックに情報を残したまま非特権モードに戻るこ

2086 とになる.この状態で,タスク例外処理ルーチンから大域脱出すると,システ

2087 ムスタック上に不要な情報が残ってしまう.

2088

2089 これらの理由から,タスクが拡張サービスコールを実行している間は,タスク

2090 例外処理マスク状態とし,タスク例外処理ルーチンの実行を開始しないことと

2091 する.さらに,ユーザタスクについては,特権モードを実行している間(拡張

2092 サービスコールを実行している間を含む)を,タスク例外処理マスク状態とす

2093 る.

2094

2095 対象タスクに,タスク例外処理ルーチンをすみやかに実行させたい場合には,

2096 タスク例外処理の要求に加えて,待ち状態の強制解除を行う(必要に応じて,

2097 強制待ち状態からの再開も行う).保護機能対応でないカーネルにおいては,

2098 この方法により,対象タスクが正常に待ち解除されるのを待たずに,タスク例

2099 外処理ルーチンを実行させることができる.

2100

Page 43: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

43

2101 それに対して,保護機能対応カーネルにおいては,対象タスクがタスク例外処

2102 理マスク状態で実行している間は,タスク例外処理ルーチンの実行が開始され

2103 ない.そのため,対象タスクに対して待ち状態の強制解除を行っても,その後

2104 に対象タスクが待ち状態に入ると,タスク例外処理ルーチンがすみやかに実行

2105 されないことになる.

2106

2107 待ち禁止状態は,この問題を解決するために導入したものである.タスク例外

2108 処理の要求(ras_tex/iras_tex)に加えて,待ち禁止状態への遷移(dis_wai/

2109 idis_wai)と待ち状態の強制解除(rel_wai/irel_wai)をこの順序で行うこと

2110 で,対象タスクが正常に待ち解除されるのを待たずに,タスク例外処理ルーチ

2111 ンを実行させることができる.

2112

2113 タスク例外処理マスク状態を,ユーザタスクについても拡張サービスコールを

2114 実行している間とせず,特権モードで実行している間とした理由は,拡張サー

2115 ビスコールを実行している間とした場合に次のような問題があるためである.

2116

2117 ユーザタスクが,ソフトウェア割込みにより自タスクを待ち状態に遷移させる

2118 サービスコールを呼び出した直後に割込みが発生し,その割込みハンドラの中

2119 でiras_tex,idis_wai,irel_waiが呼び出されると,この時点では待ち解除も

2120 されず待ち禁止状態にもならないために,割込みハンドラからのリターン後に

2121 待ち状態に入ってしまう.ソフトウェア割込みによりすべての割込みが禁止さ

2122 れないターゲットプロセッサでは,ソフトウェア割込みの発生とサービスコー

2123 ルの実行を不可分にできないため,このような状況を防ぐことができない.

2124

2125 なお,拡張サービスコールは,待ち状態に入るサービスコールからE_RLWAIが返

2126 された場合には,実行中の処理を取りやめて,E_RLWAIを返値としてリターンす

2127 るように実装すべきである.

2128

2129 【μITRON4.0仕様,μITRON4.0/PX仕様との関係】

2130

2131 待ち禁止状態は,μITRON4.0仕様にはない概念であり,μITRON4.0/PX仕様で導

2132 入された.ただし,μITRON4.0/PX仕様では,タスクの待ち状態を強制解除する

2133 サービスコールが,タスクを待ち禁止状態へ遷移させる機能も持つこととして

2134 いる.その結果μITRON4.0/PX仕様は,待ち状態を強制解除するサービスコール

2135 の仕様において,μITRON4.0仕様との互換性がなくなっている.

2136

2137 この仕様では,待ち状態の強制解除と待ち禁止状態への遷移を別々のサービス

2138 コールで行うこととした.これにより,待ち状態を強制解除するサービスコー

2139 ルの仕様が,μITRON4.0仕様と互換になっている.一方,μITRON4.0/PX仕様と

2140 は互換性がない.

2141

2142 2.6.6 ディスパッチ保留状態で実行中のタスクに対する強制待ち

2143

2144 ディスパッチ保留状態において,実行状態のタスクを強制待ち状態へ遷移させ

2145 るサービスコールを呼び出した場合,実行状態のタスクの切換えは,ディスパッ

2146 チ保留状態が解除されるまで保留される【NGKI0226】.

2147

2148 この間,それまで実行状態であったタスクは,実行状態と強制待ち状態の間の

2149 過渡的な状態にあると考える【NGKI0227】.この状態を,強制待ち状態[実行

2150 継続中]と呼ぶ.一方,ディスパッチ保留状態が解除された後に実行すべきタ

Page 44: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

44

2151 スクは,実行可能状態にとどまる【NGKI0228】.

2152

2153 タスクが強制待ち状態[実行継続中]にある時に,ディスパッチ保留状態が解

2154 除されると,ただちにディスパッチが起こり,タスクは強制待ち状態に遷移す

2155 る【NGKI0229】.

2156

2157 過渡的な状態も含めたタスクの状態遷移を図2-3に示す【NGKI0230】.

2158

2159 タスクが強制待ち状態[実行継続中]である時の扱いは次の通りである.

2160

2161 (a) プロセッサを占有して実行を継続する.

2162

2163 強制待ち状態[実行継続中]のタスクは,プロセッサを占有して,そのまま継

2164 続して実行される【NGKI0231】.

2165

2166 (b) 実行状態のタスクに関する情報を参照するサービスコールでは,実行状態

2167 であるものと扱う.

2168

2169 実行状態のタスクに関する情報を参照するサービスコール(get_tid/

2170 iget_tid,get_did,sns_tex)では,強制待ち状態[実行継続中]のタスクが,

2171 それを実行するプロセッサにおいて実行状態のタスクであるものと扱う.具体

2172 的には,強制待ち状態[実行継続中]のタスクが実行されている時にget_tid/

2173 iget_tidを発行すると,そのタスクのID番号を参照する【NGKI0232】.また,

2174 get_didを発行するとそのタスクが属する保護ドメインのID番号を,sns_texを

2175 発行するとそのタスクのタスク例外処理禁止フラグを参照する【NGKI0233】.

2176

2177 (c) その他のサービスコールでは,強制待ち状態であるものと扱う.

2178

2179 その他のサービスコールでは,強制待ち状態[実行継続中]のタスクは,強制

2180 待ち状態であるものと扱う【NGKI0234】.

2181

2182 【TOPPERS/ASPカーネルにおける規定】

2183

2184 ASPカーネルでは,ディスパッチ保留状態において実行状態のタスクを強制待ち

2185 状態へ遷移させるサービスコールはサポートしていないため,タスクが強制待

2186 ち状態[実行継続中]になることはない【ASPS0008】.

2187

2188 【TOPPERS/FMPカーネルにおける規定】

2189

2190 FMPカーネルでは,ディスパッチ保留状態において実行状態のタスクを強制待ち

2191 状態へ遷移させるサービスコールを,他のプロセッサから呼び出すことができ

2192 るため,タスクが強制待ち状態[実行継続中]になる場合がある【FMPS0005】.

2193

2194 【TOPPERS/HRP2カーネルにおける規定】

2195

2196 HRP2カーネルでは,ディスパッチ保留状態において実行状態のタスクを強制待

2197 ち状態へ遷移させるサービスコールはサポートしていないため,タスクが強制

2198 待ち状態[実行継続中]になることはない【HRPS0004】.

2199

2200 【TOPPERS/SSPカーネルにおける規定】

Page 45: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

45

2201

2202 SSPカーネルでは,タスクが広義の待ち状態になることはないため,タスクが強

2203 制待ち状態[実行継続中]になることもない【SSPS0005】.

2204

2205 【補足説明】

2206

2207 この仕様では,ディスパッチ保留状態において,実行状態のタスクを強制終了

2208 させるサービスコールはサポートしていない.そのため,実行状態と休止状態

2209 の間の過渡的な状態は存在しない.

2210

2211 2.6.7 制約タスク

2212

2213 制約タスク(restricted task)は,複数のタスクでスタック領域を共有するこ

2214 とによるメモリ使用量の削減を目的に,通常のタスクに対して,広義の待ち状

2215 態を持たないなどの機能制限を加えたものである.具体的には,制約タスクに

2216 は以下の機能制限がある.

2217

2218 (a) 広義の待ち状態に入ることができない【NGKI0235】.

2219

2220 (b) サービスコールにより優先度を変更することができない【NGKI0236】.

2221

2222 (c) 対象優先度の中の先頭のタスクが制約タスクである場合には,タスクの優

2223 先順位の回転(rot_rdq/irot_rdq)を行うことができない【NGKI0237】.

2224

2225 (d) マルチプロセッサ対応カーネルでは,割付けプロセッサを変更することが

2226 できない【NGKI0238】.

2227

2228 制約タスクに対して,機能制限により使用できなくなったサービスコールを呼

2229 び出した場合には,E_NOSPTエラーとなる【NGKI0239】.E_NOSPTエラーが返る

2230 ことに依存している場合を除いては,制約タスクを通常のタスクに置き換える

2231 ことができる【NGKI0240】.

2232

2233 【未決定事項】

2234

2235 現状では,制約タスクの優先度を変更するサービスコールは設けていないが,

2236 制約タスクが,自タスクの優先度を,起動時優先度(SSPカーネルにおいては,

2237 実行時優先度)と同じかそれよりも高い値に変更することは許してもよい.た

2238 だし,優先度の変更後は,同じ優先度内で最高優先順位としなければならない

2239 ため,chg_priとは振舞いが異なることになる.自タスクの優先度を起動時優先

2240 度と同じかそれよりも高い値に変更するサービスコールを設けるかどうかは,

2241 今後の課題である.

2242

2243 【TOPPERS/ASPカーネルにおける規定】

2244

2245 ASPカーネルでは,制約タスクをサポートしていない【ASPS0009】.ただし,制

2246 約タスク拡張パッケージを用いると,制約タスクの機能を追加することができ

2247 る【ASPS0010】.

2248

2249 【TOPPERS/FMPカーネルにおける規定】

2250

Page 46: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

46

2251 FMPカーネルでは,制約タスクをサポートしていない【FMPS0006】.

2252

2253 【TOPPERS/HRP2カーネルにおける規定】

2254

2255 HRP2カーネルでは,制約タスクをサポートしていない【HRPS0005】.

2256

2257 【TOPPERS/SSPカーネルにおける規定】

2258

2259 SSPカーネルでは,制約タスクのみをサポートする【SSPS0006】.そのため,す

2260 べてのタスクと非タスクコンテキストがスタック領域を共有することができ,

2261 すべての処理単位で同一のスタック領域を使用している【SSPS0007】.このス

2262 タック領域を,共有スタック領域と呼ぶ.

2263

2264 【μITRON4.0仕様との関係】

2265

2266 制約タスクは,μITRON4.0仕様の自動車制御プロファイルで導入された機能で

2267 ある.この仕様における制約タスクは,μITRON4.0仕様の制約タスクよりも機

2268 能制限が少なくなっている.

2269

2270 2.7 割込み処理モデル

2271

2272 TOPPERS新世代カーネルにおける割込み処理のモデルは,TOPPERS標準割込み処

2273 理モデルに準拠している.

2274

2275 TOPPERS標準割込み処理モデルの概念図を図2-4に示す【NGKI0241】.この図は,

2276 割込み処理モデルの持つすべての機能が,ハードウェア(プロセッサおよび割

2277 込みコントローラ)で実現されているとして描いた概念図である.実際のハー

2278 ドウェアで不足している機能については,カーネル内の割込み処理のソフトウェ

2279 アで実現される.

2280

2281 【μITRON4.0仕様との関係】

2282

2283 割込み処理モデルは,μITRON4.0仕様から大幅に拡張している.

2284

2285 2.7.1 割込み処理の流れ

2286

2287 周辺デバイス(以下,デバイスと呼ぶ)からの割込み要求は,割込みコントロー

2288 ラ(IRC)を経由して,プロセッサに伝えられる.デバイスから割込みコントロー

2289 ラに割込み要求を伝えるための信号線を,割込み要求ラインと呼ぶ.一般には,

2290 1つの割込み要求ラインに,複数のデバイスからの割込み要求が接続される.

2291

2292 プロセッサは,デバイスからの割込み要求を受け付ける条件が満たされた場合,

2293 割込み要求を受け付ける【NGKI0242】.受け付けた割込み要求が,カーネル管

2294 理の割込みである場合には,カーネル内の割込みハンドラの入口処理(割込み

2295 入口処理)を経由して,カーネル内の割込みハンドラを実行する【NGKI0243】.

2296

2297 カーネル内の割込みハンドラは,アプリケーションが割込み要求ラインに対し

2298 て登録した割込みサービスルーチン(ISR)を呼び出す【NGKI0244】.割込みサー

2299 ビスルーチンは,プロセッサの割込みアーキテクチャや割込みコントローラに

2300 依存せず,割込みを要求したデバイスのみに依存して記述するのが原則である

Page 47: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

47

2301 【NGKI0245】.1つの割込み要求ラインに対して複数のデバイスが接続されるこ

2302 とから,1つの割込み要求ラインに対して複数の割込みサービスルーチンを登録

2303 することができる【NGKI0246】.

2304

2305 ただし,カーネルが標準的に用意している割込みハンドラで対応できない特殊

2306 なケースも考えられる.このような場合に対応するために,アプリケーション

2307 が用意した割込みハンドラをカーネルに登録することもできる【NGKI0247】.

2308

2309 カーネルが用いるタイマデバイスからの割込み要求の場合,カーネル内の割込

2310 みハンドラにより,タイムイベントの処理が行われる.具体的には,タイムア

2311 ウト処理等が行われることに加えて,アプリケーションが登録したタイムイベ

2312 ントハンドラが呼び出される【NGKI0248】.

2313

2314 なお,受け付けた割込み要求に対して,割込みサービスルーチンも割込みハン

2315 ドラも登録していない場合の振舞いは,ターゲット定義である【NGKI0249】.

2316

2317 2.7.2 割込み優先度

2318

2319 割込み要求は,割込み処理の優先順位を指定するための割込み優先度を持つ

2320 【NGKI0250】.プロセッサは,割込み優先度マスクの現在値よりも高い割込み

2321 優先度を持つ割込み要求のみを受け付ける【NGKI0251】.逆に言うと,割込み

2322 優先度マスクの現在値と同じか,それより低い割込み優先度を持つ割込みは,

2323 マスクされる.

2324

2325 プロセッサは,割込み要求を受け付けると,割込み優先度マスクを,受け付け

2326 た割込み要求の割込み優先度に設定する(ただし,受け付けた割込みがNMIであ

2327 る場合には例外とする)【NGKI0252】.また,割込み処理からのリターンによ

2328 り,割込み優先度マスクを,割込み要求を受け付ける前の値に戻す

2329 【NGKI0253】.

2330

2331 これらのことから,他の方法で割込みをマスクしていない限り,ある割込み要

2332 求の処理中は,それと同じかそれより低い割込み優先度を持つ割込み要求は受

2333 け付けられず,それより高い割込み優先度を持つ割込み要求は受け付けられる

2334 ことになる.つまり,割込み優先度は,多重割込みを制御するためのものと位

2335 置付けることができる.それに対して,同時に発生している割込み要求の中で,

2336 割込み優先度の高い割込み要求が先に受け付けられるとは限らない

2337 【NGKI0254】.

2338

2339 割込み優先度は,PRI型で表現し,値が小さいほど優先度が高いものとするが,

2340 [NGKI0037]の原則には従わず,-1から連続した負の値を用いる【NGKI0255】.

2341

2342 割込み優先度の段階数は,ターゲット定義である【NGKI0256】.プロセッサが

2343 割込み優先度マスクを実現するための機能を持たないか,実現するために大き

2344 いオーバヘッドを生じる場合には,ターゲット定義で,割込み優先度の段階数

2345 を1にする(すなわち,多重割込みを許さない)場合がある.

2346

2347 【仕様決定の理由】

2348

2349 割込み優先度に-1から連続した負の値を用いるのは,割込み優先度とタスク優

2350 先度を比較できるようになることと,いずれの割込みもマスクしない割込み優

Page 48: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

48

2351 先度マスクの値を0にできるためである.

2352

2353 2.7.3 割込み要求ラインの属性

2354

2355 各割込み要求ラインは,以下の属性を持つ.なお,1つの割込み要求ラインに複

2356 数のデバイスからの割込み要求が接続されている場合,それらの割込み要求は

2357 同一の属性を持つ【NGKI0257】.それらの割込み要求に別々の属性を設定する

2358 ことはできない.

2359

2360 (1) 割込み要求禁止フラグ

2361

2362 割込み要求ライン毎に,割込みをマスクするための割込み要求禁止フラグを持

2363 つ【NGKI0258】.割込み要求禁止フラグをセットすると,その割込み要求ライ

2364 ンによって伝えられる割込み要求はマスクされる【NGKI0259】.

2365

2366 プロセッサが割込み要求禁止フラグを実現するための機能を持たないか,実現

2367 するために大きいオーバヘッドを生じる場合には,ターゲット定義で,割込み

2368 要求禁止フラグをサポートしない場合がある【NGKI0260】.また,プロセッサ

2369 の持つ割込み要求禁止フラグの機能がこの仕様に合致しない場合には,ターゲッ

2370 ト定義で,割込み要求禁止フラグをサポートしないか,振舞いが異なるものと

2371 する場合がある【NGKI0261】.

2372

2373 (2) 割込み優先度

2374

2375 割込み要求ライン毎に,割込み優先度を設定することができる【NGKI0262】.

2376 割込み要求の割込み優先度とは,その割込み要求を伝える割込み要求ラインに

2377 対して設定された割込み優先度のことである【NGKI0263】.

2378

2379 (3) トリガモード

2380

2381 割込み要求ラインに対する割込み要求が,レベルトリガであるかエッジトリガ

2382 であるかを設定することができる【NGKI0264】.エッジトリガの場合には,さ

2383 らに,ターゲット定義で,ポジティブエッジトリガかネガティブエッジトリガ

2384 か両エッジトリガかを設定できる場合もある【NGKI0265】.また,レベルトリ

2385 ガの場合には,ターゲット定義で,ローレベルトリガかハイレベルトリガかを

2386 設定できる場合もある【NGKI0266】.

2387

2388 プロセッサがトリガモードを設定するための機能を持たないか,設定するため

2389 に大きいオーバヘッドを生じる場合には,ターゲット定義で,トリガモードの

2390 設定をサポートしない場合がある【NGKI0267】.

2391

2392 属性が設定されていない割込み要求ラインに対しては,割込み要求禁止フラグ

2393 がセットされ,割込み要求はマスクされる【NGKI0268】.また,割込み要求禁

2394 止フラグをクリアすることもできない【NGKI0269】.

2395

2396 【使用上の注意】

2397

2398 アプリケーションが,割込み要求禁止フラグを動的にセット/クリアする機能

2399 を用いると,次の理由でソフトウェアの再利用性が下がる可能性があるため,

2400 注意が必要である.プロセッサによっては,この割込み処理モデルに合致した

Page 49: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

49

2401 割込み要求禁止フラグの機能を実現できない場合がある.また,割込み要求禁

2402 止フラグをセットすることで,複数のデバイスからの割込みがマスクされる場

2403 合がある.ソフトウェアの再利用性を上げるためには,あるデバイスからの割

2404 込みのみをマスクしたい場合には,そのデバイス自身の機能を使ってマスクを

2405 実現すべきである.

2406

2407 複数のデバイスからの割込み要求が接続されている割込み要求ラインを,エッ

2408 ジトリガに設定することは推奨されない.これは,次のような状況において,

2409 割込み要求を取りこぼす可能性があるためである.ある割込み要求ラインに,

2410 デバイスAとデバイスBからの割込み要求が接続されており,デバイスAの割込み

2411 処理を先に行う場合を考える.この時,デバイスB からの割込み要求によって

2412 割込みハンドラが実行され,デバイスAの割込み処理を行った後,デバイスBの

2413 割込み処理を行う前に,デバイスAからの割込み要求が発生した場合に,デバイ

2414 スAからの割込み要求を取りこぼしてしまう.

2415

2416 2.7.4 割込みを受け付ける条件

2417

2418 NMI以外の割込み要求は,次の4つの条件が揃った場合に受け付けられる

2419 【NGKI0270】.

2420

2421 (a) 割込み要求ラインに対する割込み要求禁止フラグがクリアされていること

2422

2423 (b) 割込み要求ラインに設定された割込み優先度が,割込み優先度マスクの現

2424 在値よりも高い(優先度の値としては小さい)こと

2425

2426 (c) 全割込みロックフラグがクリアされていること

2427

2428 (d) 割込み要求がカーネル管理の割込みである場合には,CPUロックフラグがク

2429 リアされていること

2430

2431 これらの条件が揃った割込み要求が複数ある場合に,どの割込み要求が最初に

2432 受け付けられるかは,この仕様では規定しない【NGKI0271】.すなわち,割込

2433 み優先度の高い割込み要求が先に受け付けられるとは限らない.

2434

2435 2.7.5 割込み番号と割込みハンドラ番号

2436

2437 割込み要求ラインを識別するための番号を,割込み番号と呼ぶ.割込み番号は,

2438 符号無しの整数型であるINTNO型で表し,ターゲットハードウェアの仕様から決

2439 まる自然な番号付けを基本として,ターゲット定義で付与される【NGKI0272】.

2440 そのため,1から連続した正の値であるとは限らない.

2441

2442 それに対して,アプリケーションが用意した割込みハンドラをカーネルに登録

2443 する場合に,割込みハンドラの登録対象となる割込みを識別するための番号を,

2444 割込みハンドラ番号と呼ぶ.割込みハンドラ番号は,符号無しの整数型である

2445 INHNO型で表し,ターゲットハードウェアの仕様から決まる自然な番号付けを基

2446 本として,ターゲット定義で付与される【NGKI0273】.そのため,1から連続し

2447 た正の値であるとは限らない.

2448

2449 割込みハンドラ番号は,割込み番号と1対1に対応するのが基本である(両者が

2450 一致する場合が多い)【NGKI0274】.

Page 50: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

50

2451

2452 ただし,割込みを要求したデバイスが割込みベクタを生成してプロセッサに渡

2453 すアーキテクチャなどでは,割込み番号と割込みハンドラ番号の対応を,カー

2454 ネルが管理していない場合がある【NGKI0275】.そこで,ターゲット定義で,

2455 割込み番号に対応しない割込みハンドラ番号や,割込みハンドラ番号に対応し

2456 ない割込み番号を設ける場合もある【NGKI0276】.ただし,割込みサービスルー

2457 チンの登録対象にできる割込み番号は,割込みハンドラ番号との1対1の対応関

2458 係をカーネルが管理しているもののみである【NGKI0277】.

2459

2460 2.7.6 マルチプロセッサにおける割込み処理

2461

2462 この節では,マルチプロセッサにおける割込み処理について説明する.この節

2463 の内容は,マルチプロセッサ対応カーネルにのみ適用される.

2464

2465 マルチプロセッサ対応カーネルでは,TOPPERS標準割込み処理モデルの構成要素

2466 の中で,図2-4の破線に囲まれた部分はプロセッサ毎に持ち,それ以外の部分は

2467 システム全体で1つのみ持つ【NGKI0278】.すなわち,全割込みロックフラグ,

2468 CPUロックフラグ,割込み優先度マスクはプロセッサ毎に持つのに対して,割込

2469 み要求ラインおよびその属性(割込み要求禁止フラグ,割込み優先度,トリガ

2470 モード)はシステム全体で共通に持つ.

2471

2472 割込み番号は,割込み要求ラインを識別するための番号であることから,割込

2473 み要求ラインが複数のプロセッサに接続されている場合でも,1つの割込み要求

2474 ラインには1つの割込み番号を付与する【NGKI0279】.逆に,複数のプロセッサ

2475 が同じ種類のデバイスを持っている場合でも,別のデバイスからの割込み要求

2476 ラインには異なる割込み番号を付与する(図2-5)【NGKI0280】.図2-5におい

2477 て,ローカルIRCは個々のプロセッサに対する割込みを制御するための回路であ

2478 り,グローバルIRCはデバイスからの割込みをプロセッサに分配するための回路

2479 である.グローバルIRCは,必ず備わっているとは限らない.

2480

2481 割込み要求禁止フラグは,この仕様上はシステム全体で共通に持つこととして

2482 いるが,実際のターゲットハードウェア(特に,グローバルIRCを備えていない

2483 もの)では,プロセッサ毎に持っている場合がある.そのため,ターゲット定

2484 義で,あるプロセッサで割込み要求禁止フラグを動的にセット/クリアしても,

2485 他のプロセッサに対しては割込みがマスク/マスク解除されない場合があるも

2486 のとする【NGKI0281】.

2487

2488 複数のプロセッサに接続された割込み要求ラインに対して登録された割込みサー

2489 ビスルーチンは,それらのプロセッサのいずれによっても実行することができ

2490 る【NGKI0282】.ただし,その内のどのプロセッサで割込みサービスルーチン

2491 を実行するかは,割込みサービスルーチンが属するクラスの割付け可能プロセッ

2492 サにより決定される(「2.4.4 処理単位を実行するプロセッサ」の節を参照).

2493

2494 割込みサービスルーチンが属するクラスの割付け可能プロセッサは,登録対象

2495 の割込み要求ラインが接続されたプロセッサの集合に含まれていなければなら

2496 ない【NGKI0283】.また,同一の割込み要求ラインに対して登録する割込みサー

2497 ビスルーチンは,同一のクラスに属していなければならない【NGKI0284】.

2498

2499 それに対して,割込みハンドラはプロセッサ毎に登録する.そのため,同じ割

2500 込み要求に対応する割込みハンドラであっても,プロセッサ毎に異なる割込み

Page 51: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

51

2501 ハンドラ番号を付与する(図2-5)【NGKI0285】.割込みハンドラが属するクラ

2502 スの初期割付けプロセッサは,割込みが要求されるプロセッサと一致していな

2503 ければならない【NGKI0286】.

2504

2505 【補足説明】

2506

2507 マルチプロセッサ対応カーネルにおける割込み番号の付与方法は,複数のプロ

2508 セッサに接続された割込み要求ラインに対しては,割込み番号の上位ビットを

2509 0とし,1つのプロセッサのみに接続された割込み要求ラインに対しては,割込

2510 み番号の上位ビットに,接続されたプロセッサのID番号を含める方法を基本と

2511 する.また,割込みハンドラ番号の付与方法は,割込みハンドラ番号の上位ビッ

2512 トに,その割込みハンドラを実行するプロセッサのID番号を含める方法を基本

2513 とする(図2-5).

2514

2515 1つのプロセッサのみに接続された割込み要求ラインに対して登録された割込み

2516 サービスルーチンは,そのプロセッサのみを割付け可能プロセッサとするクラ

2517 スに属していなければならない.

2518

2519 【使用上の注意】

2520

2521 複数のプロセッサで実行することができる割込みサービスルーチンは,それら

2522 のプロセッサのいずれかで実行されるものと設定した場合でも,複数回の割込

2523 み要求により,異なるプロセッサで同時に実行される可能性がある.

2524

2525 2.7.7 カーネル管理外の割込み

2526

2527 高い割込み応答性を求められるアプリケーションでは,カーネル内で割込みを

2528 マスクすることにより,割込み応答性の要求を満たせなくなる場合がある.こ

2529 のような要求に対応するために,カーネル内では,ある割込み優先度(これを,

2530 TMIN_INTPRIと書く)よりも高い割込み優先度を持つ割込みをマスクしないこと

2531 としている【NGKI0287】.TMIN_INTPRIを固定するか設定できるようにするか,

2532 設定できるようにする場合の設定方法は,ターゲット定義である【NGKI0288】.

2533

2534 TMIN_INTPRIよりも高い割込み優先度を持ち,カーネル内でマスクしない割込み

2535 を,カーネル管理外の割込みと呼ぶ.また,カーネル管理外の割込みによって

2536 起動される割込みハンドラを,カーネル管理外の割込みハンドラと呼ぶ.NMIは,

2537 カーネル管理外の割込みとして扱う.NMI以外にカーネル管理外の割込みを設け

2538 るか(設けられるようにするか)どうかは,ターゲット定義である【NGKI0289】.

2539

2540 それに対して,TMIN_INTPRIと同じかそれよりも低い割込み優先度を持つ割込み

2541 をカーネル管理の割込み,カーネル管理の割込みによって起動される割込みハ

2542 ンドラをカーネル管理の割込みハンドラと呼ぶ.

2543

2544 カーネル管理外の割込みハンドラは,カーネル内の割込み入口処理を経由せず

2545 に実行するのが基本である【NGKI0290】.ただし,すべての割込みで同じ番地

2546 に分岐するプロセッサでは,カーネル内の割込み入口処理を全く経由せずにカー

2547 ネル管理外の割込みハンドラを実行することができず,入口処理の一部分を経

2548 由してカーネル管理外の割込みハンドラが実行されることになる【NGKI0291】.

2549

2550 カーネル管理外の割込みハンドラが実行開始される時のシステム状態とコンテ

Page 52: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

52

2551 キスト,割込みハンドラの終了時に行われる処理,割込みハンドラの記述方法

2552 は,ターゲット定義である【NGKI0292】.カーネル管理外の割込みハンドラか

2553 らは,システムインタフェースレイヤのAPIとsns_ker,ext_kerのみを呼び出す

2554 ことができ,その他のサービスコールを呼び出すことはできない【NGKI0293】.

2555 カーネル管理外の割込みハンドラから,その他のサービスコールを呼び出した

2556 場合の動作は,保証されない【NGKI0294】.

2557

2558 2.7.8 カーネル管理外の割込みの設定方法

2559

2560 カーネル管理外の割込みの設定方法は,ターゲット定義で,次の3つの方法のい

2561 ずれかが採用される【NGKI0295】.

2562

2563 (a-1) NMI以外にカーネル管理外の割込みを設けない

2564 (a-2) カーネル構築時に特定の割込みをカーネル管理外にすると決める

2565

2566 これら場合には,カーネル管理外とする割込みはカーネル構築時(ターゲット

2567 依存部の実装時やカーネルのコンパイル時)に決まるため,カーネル管理外と

2568 する割込みをアプリケーション側で設定する必要はない【NGKI0296】.ここで,

2569 カーネル管理外とされた割込みに対して,カーネルのAPIにより割込みハンドラ

2570 を登録できるかと,割込み要求ラインの属性を設定できるかは,ターゲット定

2571 義である【NGKI0297】.割込みハンドラを登録できる場合には,それを定義す

2572 るAPIにおいて,カーネル管理外であることを示す割込みハンドラ属性

2573 (TA_NONKERNEL)を指定する【NGKI0298】.また,割込み要求ラインの属性を

2574 設定できる場合には,設定する割込み優先度をTMIN_INTPRIよりも高い値とする

2575 【NGKI0299】.

2576

2577 (b) カーネル管理外とする割込みをアプリケーションで設定できるようにする

2578

2579 この場合には,カーネル管理外とする割込みの設定は,次の方法で行う.まず,

2580 カーネル管理外とする割込みハンドラを定義するAPIにおいて,カーネル管理外

2581 であることを示す割込みハンドラ属性(TA_NONKERNEL)を指定する

2582 【NGKI0300】.また,カーネル管理外とする割込みの割込み要求ラインに対し

2583 て設定する割込み優先度を,TMIN_INTPRIよりも高い値とする【NGKI0301】.

2584

2585 いずれの場合にも,カーネル管理の割込みの割込み要求ラインに対して設定す

2586 る割込み優先度は,TMIN_INTPRIより高い値であってはならない【NGKI0302】.

2587 また,カーネル管理外の割込みに対して,割込みサービスルーチンを登録する

2588 ことはできない【NGKI0303】.

2589

2590 2.8 CPU例外処理モデル

2591

2592 プロセッサが検出するCPU例外の種類や,CPU例外検出時のプロセッサの振舞い

2593 は,プロセッサによって大きく異なる.そのため,CPU例外ハンドラをターゲッ

2594 トハードウェアに依存せずに記述することは,少なくとも現時点では困難であ

2595 る.そこでこの仕様では,CPU例外の処理モデルを厳密に標準化するのではなく,

2596 ターゲットハードウェアに依存せずに決められる範囲で規定する.

2597

2598 2.8.1 CPU例外処理の流れ

2599

2600 アプリケーションは,プロセッサが検出するCPU例外の種類毎に,CPU例外ハン

Page 53: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

53

2601 ドラを登録することができる【NGKI0304】.プロセッサがCPU例外の発生を検出

2602 すると,カーネル内のCPU例外ハンドラの入口処理(CPU例外入口処理)を経由

2603 して,発生したCPU例外に対して登録したCPU例外ハンドラが呼び出される

2604 【NGKI0305】.

2605

2606 CPU例外ハンドラの登録対象となるCPU例外を識別するための番号を,CPU例外ハ

2607 ンドラ番号と呼ぶ.CPU例外ハンドラ番号は,符号無しの整数型であるEXCNO型

2608 で表し,ターゲットハードウェアの仕様から決まる自然な番号付けを基本とし

2609 て,ターゲット定義で付与される【NGKI0306】.そのため,1から連続した正の

2610 値であるとは限らない.

2611

2612 マルチプロセッサ対応カーネルでは,異なるプロセッサで発生するCPU例外は,

2613 異なるCPU例外であると扱う【NGKI0307】.すなわち,同じ種類のCPU例外であっ

2614 ても,異なるプロセッサのCPU例外には異なるCPU例外ハンドラ番号を付与し,

2615 プロセッサ毎にCPU例外ハンドラを登録する.CPU例外ハンドラが属するクラス

2616 の初期割付けプロセッサは,CPU例外が発生するプロセッサと一致していなけれ

2617 ばならない【NGKI0308】.

2618

2619 CPU例外ハンドラにおいては,CPU例外が発生した状態からのリカバリ処理を行

2620 う【NGKI0309】.どのようなリカバリ処理を行うかは,一般にはCPU例外の種類

2621 やそれが発生したコンテキストおよび状態に依存するが,大きく次の4つの方法

2622 が考えられる【NGKI0310】.

2623

2624 (a) カーネルに依存しない形でCPU例外の原因を取り除き,実行を継続する.

2625

2626 (b) CPU例外を起こしたタスクよりも優先度の高いタスクを起動または待ち解除

2627 し,そのタスクでリカバリ処理を行う(例えば,CPU例外を起こしたタスクを強

2628 制終了し,再度起動する).ただし,CPU例外を起こしたタスクが最高優先度の

2629 場合には,この方法でリカバリ処理を行うことはできない(リカバリ処理を行

2630 うタスクを最高優先度とし,タスクの起動または待ち解除後に優先順位を回転

2631 させることで,リカバリ処理を行える可能性があるが,CPU例外を起こしたタス

2632 クが制約タスクの場合には適用できないなど,推奨できる方法ではない)

2633 【NGKI0311】.

2634

2635 (c) CPU例外を起こしたタスクにタスク例外処理を要求し,タスク例外処理ルー

2636 チンでリカバリ処理を行う(例えば,CPU例外を起こしたタスクを終了する).

2637

2638 (d) システム全体に対してリカバリ処理を行う(例えば,システムを再起動す

2639 る).

2640

2641 この中で(a)と(d)の方法は,カーネルの機能を必要としないため,CPU例外が発

2642 生したコンテキストおよび状態に依存せずに常に行える【NGKI0312】.それに

2643 対して(b)と(c)の方法は,CPU例外ハンドラからそのためのサービスコールを呼

2644 び出せることが必要であり,それが行えるかどうかは,CPU例外が発生したコン

2645 テキストおよび状態に依存する【NGKI0313】.

2646

2647 なお,発生したCPU例外に対して,CPU例外ハンドラを登録していない場合の振

2648 舞いは,ターゲット定義である【NGKI0314】.

2649

2650 【使用上の注意】

Page 54: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

54

2651

2652 CPU例外入口処理でCPU例外が発生し,それを処理するためのCPU例外ハンドラの

2653 入口処理で同じ原因でCPU例外が発生すると,CPU例外が繰り返し発生し,アプ

2654 リケーションが登録したCPU例外ハンドラまで処理が到達しない状況が考えられ

2655 る.このような状況が発生するかどうかはターゲットによるが,これが許容で

2656 きない場合には,CPU例外入口処理を経由せずに,アプリケーションが用意した

2657 CPU例外ハンドラを直接実行するようにしなければならない.

2658

2659 【補足説明】

2660

2661 マルチプロセッサ対応カーネルにおけるCPU例外ハンドラ番号の付与方法は,

2662 CPU例外ハンドラ番号の上位ビットに,そのCPU例外が発生するプロセッサのID

2663 番号を含める方法を基本とする.

2664

2665 【μITRON4.0仕様との関係】

2666

2667 μITRON4.0仕様では,CPU例外からのリカバリ処理の方法については,記述され

2668 ていない.

2669

2670 2.8.2 CPU例外ハンドラから呼び出せるサービスコール

2671

2672 CPU例外ハンドラからは,CPU例外発生時のディスパッチ保留状態を参照するサー

2673 ビスコール(xsns_dpn)と,CPU例外発生時にタスク例外処理ルーチンを実行開

2674 始できない状態であったかを参照するサービスコール(xsns_xpn)を呼び出す

2675 ことができる【NGKI0315】.

2676

2677 xsns_dpnは,CPU例外がタスクコンテキストで発生し,そのタスクがディスパッ

2678 チできる状態であった場合にfalseを返す【NGKI0316】.xsns_dpnがfalseを返

2679 した場合,そのCPU例外ハンドラから,非タスクコンテキストから呼び出せるす

2680 べてのサービスコールを呼び出すことができ,(b)の方法によるリカバリ処理が

2681 可能である【NGKI0317】.ただし,CPU例外を起こしたタスクが最高優先度の場

2682 合には,この方法でリカバリ処理を行うことはできない【NGKI0318】.

2683

2684 xsns_xpnは,CPU例外がタスクコンテキストで発生し,そのタスクがタスク例外

2685 処理ルーチンを実行できる状態であった場合にfalseを返す【NGKI0319】.

2686 xsns_xpnがfalse を返した場合,そのCPU例外ハンドラから,非タスクコンテキ

2687 ストから呼び出せるすべてのサービスコールを呼び出すことができ,(c)の方法

2688 によるリカバリ処理が可能である【NGKI0320】.

2689

2690 xsns_dpnとxsns_xpnのいずれのサービスコールもtrueを返した場合,そのCPU例

2691 外ハンドラからは,xsns_dpnとxsns_xpnに加えて,システムインタフェースレ

2692 イヤのAPIとsns_ker,ext_kerのみを呼び出すことができ,その他のサービスコー

2693 ルを呼び出すことはできない【NGKI0321】.いずれのサービスコールもtrueを

2694 返したにもかかわらず,その他のサービスコールを呼び出した場合の動作は,

2695 保証されない【NGKI0322】.この場合には,(b)と(c)の方法によるリカバリ処

2696 理は行うことはできず,(a)または(d)の方法によるリカバリ処理を行うしかな

2697 いことになる.

2698

2699 【μITRON4.0仕様との関係】

2700

Page 55: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

55

2701 CPU例外ハンドラで行える操作に関しては,μITRON4.0仕様を見直し,全面的に

2702 修正した.

2703

2704 2.8.3 エミュレートされたCPU例外ハンドラ

2705

2706 エラーコードによってアプリケーションに通知できないエラーをカーネルが検

2707 出した場合に,アプリケーションが登録したエラー処理を,カーネルが呼び出

2708 す場合がある【NGKI0323】.この場合に,カーネルが検出するエラーをCPU例外

2709 と同等に扱うものとし,エミュレートされたCPU例外と呼ぶ【NGKI0324】.また,

2710 エラー処理のためのプログラムをCPU例外ハンドラと同等に扱うものとし,エミュ

2711 レートされたCPU例外ハンドラと呼ぶ【NGKI0325】.

2712

2713 具体的には,エミュレートされたCPU例外ハンドラに対してもCPU例外ハンドラ

2714 番号が付与され,CPU例外ハンドラと同じ方法で登録できる【NGKI0326】.また,

2715 エミュレートされたCPU例外ハンドラからも,CPU例外ハンドラから呼び出せる

2716 サービスコールを呼び出すことができ,CPU例外ハンドラと同様のリカバリ処理

2717 を行うことができる【NGKI0327】.

2718

2719 【μITRON4.0仕様との関係】

2720

2721 エミュレートされたCPU例外およびCPU例外ハンドラは,μITRON4.0仕様に定義

2722 されていない概念である.

2723

2724 2.8.4 カーネル管理外のCPU例外

2725

2726 カーネル非動作状態,カーネル内のクリティカルセクションの実行中(これを,

2727 カーネル実行中と呼ぶ),全割込みロック状態,CPUロック状態,カーネル管理

2728 外の割込みハンドラ実行中のいずれかで発生したCPU例外を,カーネル管理外の

2729 CPU例外と呼ぶ.また,それによって起動されるCPU例外ハンドラを,カーネル

2730 管理外のCPU例外ハンドラと呼ぶ.さらに,カーネル管理外のCPU例外ハンドラ

2731 実行中に発生したCPU例外も,カーネル管理外のCPU例外とする.

2732

2733 それに対して,カーネル管理外のCPU例外以外のCPU例外をカーネル管理のCPU例

2734 外,カーネル管理のCPU例外によって起動されるCPU例外ハンドラをカーネル管

2735 理のCPU例外ハンドラと呼ぶ.

2736

2737 カーネル管理外のCPU例外ハンドラからは,システムインタフェースレイヤの

2738 APIとsns_ker,ext_ker,xsns_dpn,xsns_xpnのみを呼び出すことができ,その

2739 他のサービスコールを呼び出すことはできない【NGKI0328】.カーネル管理外

2740 のCPU例外ハンドラから,その他のサービスコールを呼び出した場合の動作は,

2741 保証されない【NGKI0329】.

2742

2743 カーネル管理外のCPU例外ハンドラにおいては,xsns_dpnとxsns_xpnのいずれの

2744 サービスコールもtrueを返す【NGKI0330】.そのため,カーネル管理外のCPU例

2745 外からは,(a)または(d)の方法によるリカバリ処理しか行えない.

2746

2747 【補足説明】

2748

2749 カーネル管理外のCPU例外は,カーネル管理外の割込みと異なり,特定のCPU例

2750 外をカーネル外とするわけではない.同じCPU例外であっても,CPU例外が起こ

Page 56: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

56

2751 る状況によって,カーネル管理となる場合とカーネル管理外となる場合がある.

2752

2753 2.9 システムの初期化と終了

2754

2755 2.9.1 システム初期化手順

2756

2757 システムのリセット後,最初に実行するプログラムを,スタートアップモジュー

2758 ルと呼ぶ.スタートアップモジュールはカーネルの管理外であり,アプリケー

2759 ションで用意するのが基本であるが,スタートアップモジュールで行うべき処

2760 理を明確にするために,カーネルの配布パッケージの中に,標準のスタートアッ

2761 プモジュールが用意されている【NGKI0331】.

2762

2763 標準のスタートアップモジュールは,プロセッサのモードとスタックポインタ

2764 等の初期化,NMIを除くすべての割込みのマスク(全割込みロック状態と同等の

2765 状態にする),ターゲットシステム依存の初期化フックの呼出し,非初期化デー

2766 タセクション(bssセクション)のクリア,初期化データセクション(dataセク

2767 ション)の初期化,ソフトウェア環境(ライブラリなど)依存の初期化フック

2768 の呼出しを行った後,カーネルの初期化処理へ分岐する【NGKI0332】.ここで

2769 呼び出すターゲットシステム依存の初期化フックでは,リセット後に速やかに

2770 行うべき初期化処理を行うことが想定されている.

2771

2772 マルチプロセッサ対応カーネルでは,すべてのプロセッサがスタートアップモ

2773 ジュールを実行し,カーネルの初期化処理へ分岐する【NGKI0333】.ただし,

2774 共有リソースの初期化処理(非初期化データセクションのクリア,初期化デー

2775 タセクションの初期化,ソフトウェア環境依存の初期化フックの呼出しなど)

2776 は,マスタプロセッサのみで実行する【NGKI0334】.各プロセッサがカーネル

2777 の初期化処理へ分岐するのは,共有リソースの初期化処理が完了した後でなけ

2778 ればならないため,スレーブプロセッサは,カーネルの初期化処理へ分岐する

2779 前に,マスタプロセッサによる共有リソースの初期化処理の完了を待ち合わせ

2780 る必要がある【NGKI0335】.

2781

2782 カーネルの初期化処理においては,まず,カーネル自身の初期化処理(カーネ

2783 ル内のデータ構造の初期化,カーネルが用いるデバイスの初期化など)と静的

2784 APIの処理(オブジェクトの登録など)が行われる【NGKI0336】.静的APIのパ

2785 ラメータに関するエラーは,コンフィギュレータによって検出されるのが原則

2786 であるが,コンフィギュレータで検出できないエラーが,この処理中に検出さ

2787 れる場合もある【NGKI0337】.

2788

2789 静的APIの処理順序によりシステムの規定された振舞いが変化する場合には,シ

2790 ステムコンフィギュレーションファイルにおける静的APIの記述順と同じ順序で

2791 静的APIが処理された場合と,同じ振舞いとなる【NGKI0338】.例えば,静的

2792 APIによって同じ優先度のタスクを複数生成・起動した場合,静的APIの記述順

2793 が先のタスクが高い優先順位を持つ.それに対して,周期ハンドラの動作開始

2794 順序は,同じタイムティックで行うべき処理が複数ある場合の処理順序が規定

2795 されないことから(「4.6.1 システム時刻管理」の節を参照),静的APIの記述

2796 順となるとは限らない.

2797

2798 次に,静的API(ATT_INI)により登録した初期化ルーチンが,システムコンフィ

2799 ギュレーションファイルにおける静的APIの記述順と同じ順序で実行される

2800 【NGKI0339】.

Page 57: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

57

2801

2802 マルチプロセッサ対応カーネルでは,すべてのプロセッサがカーネル自身の初

2803 期化処理と静的APIの処理を完了した後に,マスタプロセッサがグローバル初期

2804 化ルーチンを実行する【NGKI0340】.グローバル初期化ルーチンの実行が完了

2805 した後に,各プロセッサは,自プロセッサに割り付けられたローカル初期化ルー

2806 チンを実行する【NGKI0341】.すなわち,ローカル初期化ルーチンは,初期割

2807 付けプロセッサにより実行される.

2808

2809 以上が終了すると,カーネル非動作状態から動作状態に遷移し(「2.5.1 カー

2810 ネル動作状態と非動作状態」の節を参照),カーネルの動作が開始される

2811 【NGKI0342】.具体的には,システム状態が,全割込みロック解除状態・CPUロッ

2812 ク解除状態・割込み優先度マスク全解除状態・ディスパッチ許可状態に設定さ

2813 れ(すなわち,割込みがマスク解除され),タスクの実行が開始される.

2814

2815 マルチプロセッサ対応カーネルでは,すべてのプロセッサがローカル初期化ルー

2816 チンの実行を完了した後に,カーネル非動作状態から動作状態に遷移し,カー

2817 ネルの動作が開始される【NGKI0343】.マルチプロセッサ対応カーネルにおけ

2818 るシステム初期化の流れと,各プロセッサが同期を取るタイミングを,図2-6に

2819 示す【NGKI0344】.

2820

2821 【μITRON4.0仕様との関係】

2822

2823 μITRON4.0仕様においては,初期化ルーチンの実行は静的APIの処理に含まれる

2824 ものとしていたが,この仕様では,初期化ルーチンを登録する静的APIの処理は,

2825 初期化ルーチンを登録することのみを意味し,初期化ルーチンの実行は含まな

2826 いものとした.

2827

2828 2.9.2 システム終了手順

2829

2830 カーネルを終了させるサービスコール(ext_ker)を呼び出すと,カーネル動作

2831 状態から非動作状態に遷移する(「2.5.1 カーネル動作状態と非動作状態」の

2832 節を参照)【NGKI0345】.具体的には,NMIを除くすべての割込みがマスクされ,

2833 タスクの実行が停止される.

2834

2835 マルチプロセッサ対応カーネルでは,カーネルを終了させるサービスコール

2836 (ext_ker)は,どのプロセッサからでも呼び出すことができる【NGKI0346】.

2837 1つのプロセッサでカーネルを終了させるサービスコールを呼び出すと,そのプ

2838 ロセッサがカーネル動作状態から非動作状態に遷移した後,他のプロセッサに

2839 対してカーネル終了処理の開始を要求する【NGKI0347】.複数のプロセッサか

2840 ら,カーネルを終了させるサービスコール(ext_ker)を呼び出してもよい

2841 【NGKI0348】.

2842

2843 次に,静的API(ATT_TER)により登録した終了処理ルーチンが,システムコン

2844 フィギュレーションファイルにおける静的APIの記述順と逆の順序で実行される

2845 【NGKI0349】.

2846

2847 マルチプロセッサ対応カーネルでは,すべてのプロセッサがカーネル非動作状

2848 態に遷移した後に,各プロセッサが,自プロセッサに割り付けられたローカル

2849 終了処理ルーチンを実行する【NGKI0350】.すなわち,ローカル終了処理ルー

2850 チンは,初期割付けプロセッサにより実行される.すべてのプロセッサでロー

Page 58: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

58

2851 カル終了処理ルーチンの実行が完了した後に,マスタプロセッサがグローバル

2852 終了処理ルーチンを実行する【NGKI0351】.

2853

2854 以上が終了すると,ターゲットシステム依存の終了処理が呼び出される

2855 【NGKI0352】.ターゲットシステム依存の終了処理は,カーネルの管理外であ

2856 り,アプリケーションで用意するのが基本であるが,カーネルの配布パッケー

2857 ジの中に,ターゲットシステム毎に標準的なルーチンが用意されている

2858 【NGKI0353】.標準のターゲットシステム依存の終了処理では,ソフトウェア

2859 環境(ライブラリなど)依存の終了処理フックを呼び出す【NGKI0354】.

2860

2861 マルチプロセッサ対応カーネルでは,すべてのプロセッサで,ターゲットシス

2862 テム依存の終了処理が呼び出される【NGKI0355】.マルチプロセッサ対応カー

2863 ネルにおけるシステム終了処理の流れと,各プロセッサが同期を取るタイミン

2864 グを,図2-7に示す【NGKI0356】.

2865

2866 【使用上の注意】

2867

2868 マルチプロセッサ対応カーネルで,あるプロセッサからカーネルを終了させる

2869 サービスコール(ext_ker)を呼び出しても,他のプロセッサがカーネル動作状

2870 態で割込みをマスクしたまま実行し続けると,カーネルが終了しない.

2871

2872 プロセッサが割込みをマスクしたまま実行し続けないようにするのは,アプリ

2873 ケーションの責任である.例えば,ある時間を超えて割込みをマスクしたまま

2874 実行し続けていないかを,ウォッチドッグタイマを用いて監視する方法が考え

2875 られる.割込みをマスクしたまま実行し続けていた場合には,そのプロセッサ

2876 からもカーネルを終了させるサービスコール(ext_ker)を呼び出すことで,カー

2877 ネルを終了させることができる.

2878

2879 【μITRON4.0仕様との関係】

2880

2881 μITRON4.0仕様には,システム終了に関する規定はない.

2882

2883 2.10 オブジェクトの登録とその解除

2884

2885 2.10.1 ID番号で識別するオブジェクト

2886

2887 ID番号で識別するオブジェクトは,オブジェクトを生成する静的

2888 API(CRE_YYY),サービスコール(acre_yyy),またはオブジェクトを追加す

2889 る静的API(ATT_YYY,ATA_YYY)によってカーネルに登録する【NGKI0357】.オ

2890 ブジェクトを追加する静的APIによって登録されたオブジェクトはID番号を持た

2891 ないため,ID番号を指定して操作することができない【NGKI0358】.

2892

2893 オブジェクトを生成する静的API(CRE_YYY)は,生成するオブジェクトにID番

2894 号を割り付け,ID番号を指定するパラメータとして記述した識別名を,割り付

2895 けたID番号にマクロ定義する【NGKI0359】.同じ識別名のオブジェクトが生成

2896 済みの場合には,E_OBJエラーとなる【NGKI0360】.

2897

2898 オブジェクトを生成するサービスコール(acre_yyy)は,割付け可能なID番号

2899 の数を指定する静的API(AID_YYY)によって確保されたID番号の中から,使用

2900 されていないID番号を1つ選び,生成するオブジェクトに割り付ける

Page 59: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

59

2901 【NGKI0361】.割り付けたID番号は,サービスコールの返値としてアプリケー

2902 ションに通知する【NGKI0362】.使用されていないID番号が残っていない場合

2903 には,E_NOID エラーとなる【NGKI0363】.

2904

2905 割付け可能なID番号の数を指定する静的API(AID_YYY)は,システムコンフィ

2906 ギュレーションファイル中に複数記述することができる【NGKI0364】.その場

2907 合,各静的APIで指定した数の合計の数のID番号が確保される【NGKI0365】.

2908

2909 オブジェクトを生成するサービスコール(acre_yyy)によって登録したオブジェ

2910 クトは,オブジェクトを削除するサービスコール(del_yyy)によって登録を解

2911 除することができる【NGKI0366】.登録解除したオブジェクトのID番号は,未

2912 使用の状態に戻され,そのID番号を用いて新しいオブジェクトを登録すること

2913 ができる【NGKI0367】.この場合に,登録解除前のオブジェクトに対して行う

2914 つもりの操作が,新たに登録したオブジェクトに対して行われないように,注

2915 意が必要である.

2916

2917 オブジェクトを生成または追加する静的APIによって登録したオブジェクトは,

2918 登録を解除することができない【NGKI0368】.登録を解除しようとした場合に

2919 は,E_OBJエラーとなる【NGKI0369】.

2920

2921 タスク以外の処理単位は,その処理単位が実行されている間でも,登録解除す

2922 ることができる【NGKI0370】.この場合,登録解除された処理単位に実行が強

2923 制的に終了させられることはなく,処理単位が自ら実行を終了するまで,処理

2924 単位の実行は継続される【NGKI0371】.

2925

2926 同期・通信オブジェクトを削除した時に,そのオブジェクトを待っているタス

2927 クがあった場合,それらのタスクは待ち解除され,待ち状態に遷移させたサー

2928 ビスコールはE_DLTエラーとなる【NGKI0372】.複数のタスクが待ち解除される

2929 場合には,待ち行列につながれていた順序で待ち解除される【NGKI0373】.削

2930 除した同期・通信オブジェクトが複数の待ち行列を持つ場合には,別の待ち行

2931 列で待っていたタスクの間の待ち解除の順序は,該当するサービスコール毎に

2932 規定する【NGKI0374】.

2933

2934 オブジェクトを再初期化するサービスコール(ini_yyy)は,指定したオブジェ

2935 クトを削除した後に,同じパラメータで再度生成したのと等価の振舞いをする

2936 【NGKI0375】.ただし,オブジェクトを生成または追加する静的APIによって登

2937 録したオブジェクトも,再初期化することができる【NGKI0376】.

2938

2939 なお,動的生成対応カーネル以外では,オブジェクトを生成するサービスコー

2940 ル(acre_yyy),割付け可能なID番号の数を指定する静的API(AID_YYY),オ

2941 ブジェクトを削除するサービスコール(del_yyy)は,サポートされない

2942 【NGKI0377】.

2943

2944 【μITRON4.0仕様との関係】

2945

2946 ID番号を指定してオブジェクトを生成するサービスコール(cre_yyy)を廃止し

2947 た.また,オブジェクトを生成または追加する静的APIによって登録したオブジェ

2948 クトは,登録解除できないこととした.

2949

2950 μITRON4.0仕様では,割付け可能なID番号の数を指定する静的API(AID_YYY)

Page 60: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

60

2951 は規定されていない.

2952

2953 複数の待ち行列を持つ同期・通信オブジェクトを削除した時に,別の待ち行列

2954 で待っていたタスクの間の待ち解除の順序は,μITRON4.0仕様では実装依存と

2955 されている.

2956

2957 【μITRON4.0/PX仕様との関係】

2958

2959 アクセス許可ベクタを指定してオブジェクトを生成する静的API(CRA_YYY)は

2960 廃止し,オブジェクトの登録後にアクセス許可ベクタを設定する静的

2961 API(SAC_YYY)をサポートすることとした.これにあわせて,アクセス許可ベ

2962 クタを指定してオブジェクトを登録するサービスコール(cra_yyy,acra_yyy,

2963 ata_yyy)も廃止した.

2964

2965 【仕様決定の理由】

2966

2967 ID番号を指定してオブジェクトを生成するサービスコール(cre_yyy)とアクセ

2968 ス許可ベクタを指定してオブジェクトを登録するサービスコール(cra_yyy,

2969 acra_yyy,ata_yyy)を廃止したのは,必要性が低いと考えたためである.

2970 静的APIについても,サービスコールに整合するよう変更した.

2971

2972 2.10.2 オブジェクト番号で識別するオブジェクト

2973

2974 オブジェクト番号で識別するオブジェクトは,オブジェクトを定義する静的

2975 API(DEF_YYY)またはサービスコール(def_yyy)によってカーネルに登録する

2976 【NGKI0378】.

2977

2978 オブジェクトを定義するサービスコール(def_yyy)によって登録したオブジェ

2979 クトは,同じサービスコールを,オブジェクトの定義情報を入れたパケットへ

2980 のポインタをNULLとして呼び出すことによって,登録を解除することができる

2981 【NGKI0379】.登録解除したオブジェクト番号は,オブジェクト登録前の状態

2982 に戻され,同じオブジェクト番号に対して新たにオブジェクトを定義すること

2983 ができる【NGKI0380】.登録解除されていないオブジェクト番号に対して再度

2984 オブジェクトを登録しようとした場合には,E_OBJエラーとなる【NGKI0381】.

2985

2986 オブジェクトを定義する静的APIによって登録したオブジェクトは,登録を解除

2987 することができない【NGKI0382】.登録を解除しようとした場合には,E_OBJエ

2988 ラーとなる【NGKI0383】.

2989

2990 なお,動的生成対応カーネル以外では,オブジェクトを定義するサービスコー

2991 ル(def_yyy)はサポートされない【NGKI0384】.

2992

2993 【μITRON4.0仕様との関係】

2994

2995 この仕様では,オブジェクトの定義を変更したい場合には,一度登録解除した

2996 後に,新たにオブジェクトを定義する必要がある.また,オブジェクトを定義

2997 する静的APIによって登録したオブジェクトは,この仕様では,登録解除できな

2998 いこととした.

2999

3000 2.10.3 識別番号を持たないオブジェクト

Page 61: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

61

3001

3002 識別する必要がないために,識別番号を持たないオブジェクトは,オブジェク

3003 トを追加する静的API(ATT_YYY)によってカーネルに登録する.

3004

3005 2.10.4 オブジェクト生成に必要なメモリ領域

3006

3007 カーネルオブジェクトを生成する際に,サイズが一定でないメモリ領域を必要

3008 とする場合には,カーネルオブジェクトを生成する静的APIおよびサービスコー

3009 ルに,使用するメモリ領域の先頭番地を渡すパラメータを設けている

3010 【NGKI0385】.このパラメータをNULLとした場合,必要なメモリ領域は,コン

3011 フィギュレータまたはカーネルにより確保される【NGKI0386】.

3012

3013 オブジェクト生成に必要なメモリ領域の中で,カーネルの内部で用いるものを,

3014 カーネルの用いるオブジェクト管理領域と呼ぶ.この仕様では,以下のメモリ

3015 領域が,カーネルの用いるオブジェクト管理領域に該当する.

3016

3017 ・データキュー管理領域

3018 ・優先度データキュー管理領域

3019 ・優先度別のメッセージキューヘッダ領域

3020 ・固定長メモリプール管理領域

3021

3022 【補足説明】

3023

3024 カーネルオブジェクトを生成する際には,管理ブロックなどを置くためのメモ

3025 リ領域も必要になるが,サイズが一定のメモリ領域はコンフィギュレータによ

3026 り確保されるため,カーネルオブジェクトを生成する静的APIおよびサービスコー

3027 ルにそれらのメモリ領域の先頭番地を渡すパラメータを設けていない.

3028

3029 2.10.5 オブジェクトが属する保護ドメインの設定

3030

3031 保護機能対応カーネルにおいて,カーネルオブジェクトが属する保護ドメイン

3032 は,オブジェクトの登録時に決定し,登録後に変更することはできない

3033 【NGKI0387】.

3034

3035 カーネルオブジェクトを静的APIによって登録する場合には,オブジェクトを登

3036 録する静的APIを,そのオブジェクトを属させる保護ドメインの囲みの中に記述

3037 する【NGKI0388】.無所属のオブジェクトを登録する静的APIは,保護ドメイン

3038 の囲みの外に記述する(「2.12.3 保護ドメインの指定」の節を参照)

3039 【NGKI0389】.

3040

3041 カーネルオブジェクトをサービスコールによって登録する場合には,オブジェ

3042 クト属性にTA_DOM(domid)を指定することにより,オブジェクトを属させる保護

3043 ドメインを設定する【NGKI0390】.ここでdomidは,そのオブジェクトを属させ

3044 る保護ドメインのID番号であり,TDOM_KERNEL(=-1)を指定することでカーネ

3045 ルドメインに属させることができる.また,domidにTDOM_SELF(=0)を指定す

3046 るか,オブジェクト属性にTA_DOM(domid)を指定しないことで,自タスクが属す

3047 る保護ドメインに属させることができる.さらに,無所属のオブジェクトを登

3048 録する場合には,domidにTDOM_NONE(=-2)を指定する.

3049

3050 ただし,特定の保護ドメインのみに属することができるカーネルオブジェクト

Page 62: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

62

3051 を登録するサービスコールの中には,オブジェクトを属させる保護ドメインを

3052 オブジェクト属性で設定する必要がないものもある【NGKI0391】.

3053

3054 割付け可能なID番号の数を指定する静的API(AID_YYY)で確保したID番号は,

3055 どの保護ドメインに属するオブジェクトにも(また,無所属のオブジェクトに

3056 も)割り付けられる【NGKI0392】.これらの静的APIは,保護ドメインの囲みの

3057 外に記述しなければならない.保護ドメインの囲みの中に記述した場合には,

3058 E_RSATRエラーとなる【NGKI0394】.

3059

3060 【補足説明】

3061

3062 この仕様では,カーネルオブジェクトの属する保護ドメインを参照する機能は

3063 用意していない.

3064

3065 【仕様決定の理由】

3066

3067 カーネルオブジェクトをサービスコールによって登録する場合に,オブジェク

3068 トを属させる保護ドメインをオブジェクト属性で指定することにしたのは,保

3069 護機能対応でないカーネルとの互換性のためには,サービスコールのパラメー

3070 タを増やさない方が望ましいためである.

3071

3072 2.10.6 オブジェクトが属するクラスの設定

3073

3074 マルチプロセッサ対応カーネルにおいて,カーネルオブジェクトが属するクラ

3075 スは,オブジェクトの登録時に決定し,登録後に変更することはできない

3076 【NGKI0395】.

3077

3078 カーネルオブジェクトを静的APIによって登録する場合には,オブジェクトを登

3079 録する静的APIを,そのオブジェクトを属させるクラスの囲みの中に記述する

3080 【NGKI0396】.クラスに属さないオブジェクトを登録する静的APIは,クラスの

3081 囲みの外に記述する(「2.12.4 クラスの指定」の節を参照)【NGKI0397】.

3082

3083 カーネルオブジェクトをサービスコールによって登録する場合には,オブジェ

3084 クト属性にTA_CLS(clsid)を指定することにより,オブジェクトを属させるクラ

3085 スを設定する【NGKI0398】.ここでclsidは,そのオブジェクトを属させるクラ

3086 スのID番号であり,clsidにTCLS_SELF(=0)を指定するか,オブジェクト属性

3087 にTA_CLS(clsid)を指定しないことで,自タスクが属するクラスに属させること

3088 ができる.

3089

3090 割付け可能なID番号の数を指定する静的API(AID_YYY)で確保したID番号は,

3091 静的APIを囲むクラスに属するオブジェクトにのみ割り付けられる【NGKI0399】.

3092 これらの静的APIは,確保したID番号を割り付けるオブジェクトの属すべきクラ

3093 スの囲みの中に記述しなければならない.クラスの囲みの外に記述した場合に

3094 は,E_RSATRエラーとなる【NGKI0401】.

3095

3096 【補足説明】

3097

3098 この仕様では,カーネルオブジェクトの属するクラスを参照する機能は用意し

3099 ていない.

3100

Page 63: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

63

3101 【仕様決定の理由】

3102

3103 カーネルオブジェクトをサービスコールによって登録する場合に,オブジェク

3104 トを属させるクラスをオブジェクト属性で指定することにしたのは,マルチプ

3105 ロセッサ対応でないカーネルとの互換性のためには,サービスコールのパラメー

3106 タを増やさない方が望ましいためである.

3107

3108 2.10.7 オブジェクトの状態参照

3109

3110 ID番号で識別するオブジェクトのすべてと,オブジェクト番号で識別するオブ

3111 ジェクトの一部に対して,オブジェクトの状態を参照するサービスコール

3112 (ref_yyy,get_yyy)を用意する【NGKI0402】.

3113

3114 オブジェクトの状態を参照するサービスコールでは,オブジェクトの登録時に

3115 指定し,その後に変化しない情報(例えば,タスクのタスク属性や初期優先度)

3116 を参照するための機能は用意しないことを原則とする【NGKI0403】.自タスク

3117 の拡張情報の参照するサービスコール(get_inf)は,この原則に対する例外で

3118 ある【NGKI0404】.

3119

3120 2.11 オブジェクトのアクセス保護

3121

3122 この節では,カーネルオブジェクトのアクセス保護について述べる.この節の

3123 内容は,保護機能対応カーネルにのみ適用される.

3124

3125 2.11.1 オブジェクトのアクセス保護とアクセス違反の通知

3126

3127 カーネルオブジェクトに対するアクセスは,そのオブジェクトに対して設定さ

3128 れたアクセス許可ベクタによって保護される【NGKI0405】.ただし,アクセス

3129 許可ベクタを持たないオブジェクトに対するアクセスは,システム状態に対す

3130 るアクセス許可ベクタによって保護される【NGKI0406】.また,オブジェクト

3131 を登録するサービスコールと,特定のオブジェクトに関連しないシステムの状

3132 態に対するアクセスについては,システム状態のアクセス許可ベクタによって

3133 保護される【NGKI0407】.

3134

3135 アクセス許可ベクタによって許可されていないアクセス(アクセス違反)は,

3136 カーネルによって検出され,以下の方法によって通知される.

3137

3138 サービスコールにより,メモリオブジェクト以外のカーネルオブジェクトに対

3139 して,許可されていないアクセスを行おうとした場合,サービスコールから

3140 E_OACVエラーが返る【NGKI0408】.また,メモリオブジェクトに対して,許可

3141 されていない管理操作または参照操作を行おうとした場合も,サービスコール

3142 からE_OACVエラーが返る【NGKI0409】.

3143

3144 メモリオブジェクトに対して,通常のメモリアクセスにより,許可されていな

3145 い書込みアクセスまたは読出しアクセス(実行アクセスを含む)を行おうとし

3146 た場合,CPU例外ハンドラが起動される【NGKI0410】.どのCPU例外ハンドラが

3147 起動されるかは,ターゲット定義である【NGKI0411】.ターゲットによっては,

3148 エミュレートされたCPU例外ハンドラの場合もある.また,ターゲット定義で,

3149 アクセス違反の状況に応じて異なるCPU例外ハンドラが起動される場合もある.

3150 この(これらの)CPU例外ハンドラを,メモリアクセス違反ハンドラと呼ぶ.

Page 64: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

64

3151

3152 メモリオブジェクトに対して,サービスコールを通じて,許可されていない書

3153 込みアクセスまたは読出しアクセスを行おうとした場合,サービスコールから

3154 E_MACVエラーが返るか,メモリアクセス違反ハンドラが起動される

3155 【NGKI0412】.E_MACVエラーが返るかメモリアクセス違反ハンドラされるかは,

3156 ターゲット定義である【NGKI0413】.

3157

3158 メモリアクセス違反ハンドラでは,アクセス違反を発生させたアクセスに関す

3159 る情報(アクセスした番地,アクセスの種別,アクセスした命令の番地など)

3160 を参照する方法を,ターゲット定義で用意する【NGKI0414】.

3161

3162 メモリオブジェクトとしてカーネルに登録されていないメモリ領域に対して,

3163 ユーザドメインから書込みアクセスまたは読出しアクセス(実行アクセスを含

3164 む)を行おうとした場合には,メモリオブジェクトに対するアクセスが許可さ

3165 れていない場合と同様に扱われる【NGKI0415】.カーネルドメインから同様の

3166 アクセスを行おうとした場合の動作は保証されない【NGKI0416】.

3167

3168 【未決定事項】

3169

3170 マルチプロセッサ対応カーネルにおいて,システム状態のアクセス許可ベクタ

3171 をシステム全体で1つ持つかプロセッサ毎に持つかは,今後の課題である.

3172

3173 【μITRON4.0/PX仕様との関係】

3174

3175 μITRON4.0/PX仕様では,アクセス保護の実装定義の制限について規定している

3176 が,この仕様では,メモリオブジェクトに対するアクセス許可ベクタのターゲッ

3177 ト定義の制限以外については規定していない.

3178

3179 【仕様決定の理由】

3180

3181 オブジェクトを登録するサービスコールを,そのオブジェクトのアクセス許可

3182 ベクタによって保護しないのは,オブジェクトを登録する前には,アクセス許

3183 可ベクタが設定されていないためである.

3184

3185 2.11.2 メモリオブジェクトに対するアクセス許可ベクタの制限

3186

3187 メモリオブジェクトの書込みアクセスと読出しアクセス(実行アクセスを含む)

3188 に対して設定できるアクセス許可パターンは,ターゲット定義で制限される場

3189 合がある【NGKI0417】.

3190

3191 ただし,少なくとも,次の5つの組み合わせの設定は,行うことができる.

3192

3193 (a) メモリオブジェクトが属する保護ドメインのみに,読出しアクセス(実行

3194 アクセスを含む)のみを許可する【NGKI0418】.これを,専有リードオン

3195 リー(private read only)と呼ぶ.

3196

3197 (b) メモリオブジェクトが属する保護ドメインのみに,書込みアクセスと読出

3198 しアクセス(実行アクセスを含む)を許可する【NGKI0419】.これを,専

3199 有リードライト(private read/write)と呼ぶ.

3200

Page 65: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

65

3201 (c) すべての保護ドメインに,読出しアクセス(実行アクセスを含む)のみを

3202 許可する【NGKI0420】.これを,共有リードオンリー(shared read only)

3203 と呼ぶ.

3204

3205 (d) すべての保護ドメインに,書込みアクセスと読出しアクセス(実行アクセ

3206 スを含む)を許可する【NGKI0421】.これを,共有リードライト(shared

3207 read/write)と呼ぶ.

3208

3209 (e) メモリオブジェクトが属する保護ドメインに,書込みアクセスと読出しア

3210 クセス(実行アクセスを含む)を許可し,他の保護ドメインには,読出し

3211 アクセス(実行アクセスを含む)のみを許可する【NGKI0422】.これを,

3212 共有リード専有ライト(shared read private write)と呼ぶ.

3213

3214 また,ターゲット定義で,1つの保護ドメインに登録できるメモリオブジェクト

3215 の数が制限される場合がある【NGKI0423】.

3216

3217 2.11.3 デフォルトのアクセス許可ベクタ

3218

3219 静的APIによりカーネルオブジェクトを登録した直後は,次に規定されるデフォ

3220 ルトのアクセス許可ベクタが設定される.

3221

3222 保護ドメインに属するカーネルオブジェクトに対しては,4つの種別のアクセス

3223 がいずれも,その保護ドメインのみに許可される【NGKI0424】.すなわち,カー

3224 ネルドメインに属するオブジェクトに対しては,4つのアクセス許可パターンが

3225 いずれもTACP_KERNELに,ユーザドメインに属するオブジェクトに対しては,4

3226 つのアクセス許可パターンがいずれもTACP(domid)(domidはオブジェクトが属

3227 する保護ドメインのID番号)に設定される.

3228

3229 無所属のカーネルオブジェクトに対しては,4つの種別のアクセスがいずれも,

3230 すべての保護ドメインに許可される【NGKI0425】.すなわち,4つのアクセス許

3231 可パターンがいずれも,TACP_SHAREDに設定される.

3232

3233 システム状態のアクセス許可ベクタは,4つの種別のアクセスがいずれも,カー

3234 ネルドメインのみに許可される【NGKI0426】.すなわち,4つのアクセス許可パ

3235 ターンがいずれも,TACP_KERNELに設定される.

3236

3237 【未決定事項】

3238

3239 サービスコールによりカーネルオブジェクトを登録した直後のアクセス許可ベ

3240 クタについては,今後の課題である.

3241

3242 2.11.4 アクセス許可ベクタの設定

3243

3244 アクセス許可ベクタをデフォルト以外の値に設定するために,カーネルオブジェ

3245 クトのアクセス許可ベクタを設定する静的API(SAC_YYY)と,システム状態の

3246 アクセス許可ベクタを設定する静的API(SAC_SYS)が用意されている

3247 【NGKI0427】.

3248

3249 また,動的生成対応カーネルにおいては,カーネルオブジェクトのアクセス許

3250 可ベクタを設定するサービスコール(sac_yyy)と,システム状態のアクセス許

Page 66: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

66

3251 可ベクタを設定するサービスコール(sac_sys)が用意されている【NGKI0428】.

3252 ただし,静的APIによって登録したオブジェクトは,サービスコール(sac_yyy)

3253 によってアクセス許可ベクタを設定することができない【NGKI0429】.アクセ

3254 ス許可ベクタを設定しようとした場合には,E_OBJエラーとなる【NGKI0430】.

3255

3256 メモリオブジェクトに対しては,アクセス許可ベクタを設定する静的APIは用意

3257 されておらず,オブジェクトの登録と同時にアクセス許可ベクタを設定する静

3258 的API(ATA_YYY)が用意されている【NGKI0431】.

3259

3260 オブジェクトに対するアクセスが許可されているかは,そのオブジェクトにア

3261 クセスするサービスコールを呼び出した時点でチェックされる【NGKI0432】.

3262 そのため,アクセス許可ベクタを変更しても,変更以前に呼び出されたサービ

3263 スコールの振舞いには影響しない.例えば,待ち行列を持つ同期・通信オブジェ

3264 クトのアクセス許可ベクタを変更しても,呼び出した時点ですでに待ち行列に

3265 つながれているタスクには影響しない.また,ミューテックスのアクセス許可

3266 ベクタを変更しても,呼び出した時点ですでにミューテックをロックしていた

3267 タスクには影響しない.

3268

3269 この仕様では,カーネルオブジェクトに設定されたアクセス許可ベクタを参照

3270 する機能は用意していない.

3271

3272 【μITRON4.0/PX仕様との関係】

3273

3274 アクセス許可ベクタを指定してオブジェクトを生成する静的API(CRA_YYY)は

3275 廃止し,オブジェクトの登録後にアクセス許可ベクタを設定する静的

3276 API(SAC_YYY)をサポートすることとした.

3277

3278 静的APIによって登録したオブジェクトは,サービスコール(sac_yyy)によっ

3279 てアクセス許可ベクタを設定することができないこととした.

3280

3281 オブジェクトの状態参照するサービスコール(ref_yyy)により,オブジェクト

3282 に設定されたアクセス許可ベクタを参照する機能サポートしないこととした.

3283 これは,[NGKI0403]の原則に合わせるための修正である.

3284

3285 2.11.5 カーネルの管理領域のアクセス保護

3286

3287 カーネルが動作するために,カーネルの内部で用いるメモリ領域を,カーネル

3288 の管理領域と呼ぶ.ユーザタスクからカーネルを保護するためには,カーネル

3289 の管理領域にアクセスできるのは,カーネルドメインのみでなければならない.

3290 そのため,カーネルの管理領域は,4つの種別のアクセスがカーネルドメインの

3291 みに許可されたメモリオブジェクト(これを,カーネル専用のメモリオブジェ

3292 クトと呼ぶ)の中に置かれる【NGKI0433】.

3293

3294 カーネルの用いるオブジェクト管理領域(カーネルの管理領域に該当する.

3295 「2.10.4 オブジェクト生成に必要なメモリ領域」の節を参照)として,カーネ

3296 ル専用のメモリオブジェクトに含まれないメモリ領域を指定した場合,E_OBJエ

3297 ラーとなる【NGKI0434】.また,カーネルの用いるオブジェクト管理領域の先

3298 頭番地にNULL を指定した場合,必要なメモリ領域が,カーネル専用のメモリオ

3299 ブジェクトの中に確保される【NGKI0435】.

3300

Page 67: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

67

3301 システムタスクのスタック領域,ユーザタスクのシステムスタック領域,非タ

3302 スクコンテキスト用のスタック領域は,カーネルの用いるオブジェクト管理領

3303 域には該当しないが,カーネルドメインの実行中にのみアクセスされるため,

3304 カーネルの用いるオブジェクト管理領域と同様の扱いとなる【NGKI0436】.一

3305 方,ユーザタスクのユーザスタック領域と固定長メモリプール領域は,ユーザ

3306 ドメインの実行中にもアクセスされるため,カーネルの用いるオブジェクト管

3307 理領域とは異なる扱いとなる.

3308

3309 2.11.6 ユーザタスクのユーザスタック領域

3310

3311 ユーザタスクが非特権モードで実行する間に用いるスタック領域を,システム

3312 スタック領域(「4.1 タスク管理機能」の節を参照)と対比させて,ユーザス

3313 タック領域と呼ぶ.ユーザスタック領域は,そのタスクと同じ保護ドメインに

3314 属する1つのメモリオブジェクトとしてカーネルに登録される【NGKI0437】.た

3315 だし,他のメモリオブジェクトとは異なり,次のように扱われる.

3316

3317 タスクのユーザスタック領域に対しては,そのタスクのみが書込みアクセスお

3318 よび読出しアクセスを行うことができる【NGKI0438】.そのため,書込みアク

3319 セスと読出しアクセス(実行アクセスを含む)に対するアクセス許可パターン

3320 は意味を持たない【NGKI0439】.ユーザスタック領域に対して実行アクセスを

3321 行えるかどうかは,ターゲット定義である【NGKI0440】.

3322

3323 ただし,上記の仕様を実現するために大きいオーバヘッドを生じる場合には,

3324 ターゲット定義で,タスクのユーザスタック領域を,そのタスクが属する保護

3325 ドメイン全体からアクセスできるものとする場合がある【NGKI0441】.

3326

3327 【μITRON4.0/PX仕様との関係】

3328

3329 この仕様では,タスクのユーザスタック領域は,そのタスクのみがアクセスで

3330 きるものとした.

3331

3332 2.12 システムコンフィギュレーション手順

3333

3334 2.12.1 システムコンフィギュレーションファイル

3335

3336 カーネルやシステムサービスが管理するオブジェクトの生成情報や初期状態な

3337 どを記述するファイルを,システムコンフィギュレーションファイル(system

3338 configuration file)と呼ぶ.また,システムコンフィギュレーションファイ

3339 ルを解釈して,カーネルやシステムサービスの構成・初期化情報を含むファイ

3340 ルなどを生成するツールを,コンフィギュレータ(configurator)と呼ぶ.

3341

3342 システムコンフィギュレーションファイルには,カーネルの静的API,システム

3343 サービスの静的API,保護ドメインの囲み,クラスの囲み,コンフィギュレータ

3344 に対するINCLUDEディレクティブ,C言語プリプロセッサのインクルードディレ

3345 クティブ(#include)と条件ディレクティブ(#if,#ifdefなど)のみを記述す

3346 ることができる【NGKI0442】.

3347

3348 コンフィギュレータに対するINCLUDEディレクティブは,システムコンフィギュ

3349 レーションファイルを複数のファイルに分割して記述するために用いるもので,

3350 その文法は次のいずれかである(両者の違いは,指定されたファイルを探すディ

Page 68: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

68

3351 レクトリの違いのみ)【NGKI0443】.

3352

3353 INCLUDE("ファイル名");

3354 INCLUDE(<ファイル名>);

3355

3356 コンフィギュレータは,INCLUDEディレクティブによって指定されたファイル中

3357 の記述を,システムコンフィギュレーションファイルの一部分として解釈する

3358 【NGKI0444】.すなわち,INCLUDEディレクティブによって指定されたファイル

3359 中には,カーネルの静的API,システムサービスの静的API,コンフィギュレー

3360 タに対するINCLUDEディレクティブ,C言語プリプロセッサのインクルードディ

3361 レクティブと条件ディレクティブのみを記述することができる.

3362

3363 C言語プリプロセッサのインクルードディレクティブは,静的APIのパラメータ

3364 を解釈するために必要なC言語のヘッダファイルを指定するために用いる

3365 【NGKI0445】.また,条件ディレクティブは,有効とする静的APIを選択するた

3366 めに用いることができる【NGKI0446】.ただし,インクルードディレクティブ

3367 は,コンフィギュレータが生成するファイルでは先頭に集められる

3368 【NGKI0447】.そのため,条件ディレクティブの中にインクルードディレクティ

3369 ブを記述しても,インクルードディレクティブは常に有効となる.また,1つの

3370 静的APIの記述の途中に,条件ディレクティブを記述することはできない

3371 【NGKI0448】.

3372

3373 コンフィギュレータは,システムコンフィギュレーションファイル中の静的

3374 APIを,その記述順に解釈する【NGKI0449】.そのため例えば,タスクを生成す

3375 る静的APIの前に,そのタスクにタスク例外処理ルーチンを定義する静的APIが

3376 記述されていた場合,タスク例外処理ルーチンを定義する静的APIがE_NOEXSエ

3377 ラーとなる.

3378

3379 【μITRON4.0仕様との関係】

3380

3381 システムコンフィギュレーションファイルにおけるC言語プリプロセッサのディ

3382 レクティブの扱いを全面的に見直し,コンフィギュレータに対するINCLUDEディ

3383 レクティブを設けた.また,共通静的APIを廃止した.μITRON4.0仕様における

3384 #includeディレクティブの役割は,この仕様ではINCLUDEディレクティブに置き

3385 換わる.逆に,μITRON4.0仕様におけるINCLUDE静的APIの役割は,この仕様で

3386 は#includeディレクティブに置き換わる.

3387

3388 2.12.2 静的APIの文法とパラメータ

3389

3390 静的APIは,次に述べる例外を除いては,C言語の関数呼出しと同様の文法で記

3391 述する【NGKI0450】.すなわち,静的APIの名称に続けて,静的APIの各パラメー

3392 タを","で区切って列挙したものを"("と")"で囲んで記述し,最後に";"を記述

3393 する.ただし,静的APIのパラメータに構造体(または構造体へのポインタ)を

3394 記述する場合には,構造体の各フィールドを","で区切って列挙したものを"{"

3395 と"}"で囲んだ形で記述する【NGKI0451】.

3396

3397 サービスコールに対応する静的APIの場合,静的APIのパラメータは,対応する

3398 サービスコールのパラメータと同一とすることを原則とする【NGKI0452】.

3399

3400 静的APIのパラメータは,次の4種類に分類される.

Page 69: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

69

3401

3402 (a) オブジェクト識別名

3403

3404 オブジェクトのID番号を指定するパラメータ.オブジェクトの名称を表す単一

3405 の識別名のみを記述することができる.

3406

3407 コンフィギュレータは,オブジェクト生成のための静的API(CRE_YYY)を処理

3408 する際に,オブジェクトにID番号を割り付け,構成・初期化ヘッダファイルに,

3409 指定された識別名を割り付けたID番号にマクロ定義するC言語プリプロセッサの

3410 ディレクティブ(#define)を生成する【NGKI0453】.

3411

3412 オブジェクト生成以外の静的APIが,オブジェクトのID番号をパラメータに取る

3413 場合(カーネルの静的APIでは,SAC_TSKやDEF_TEXのtskidパラメータ等がこれ

3414 に該当する)には,パラメータとして記述する識別名は,生成済みのオブジェ

3415 クトの名称を表す識別名でなければならない.そうでない場合には,コンフィ

3416 ギュレータがエラーを報告する【NGKI0455】.

3417

3418 静的APIの整数定数式パラメータの記述に,オブジェクト識別名を使用すること

3419 はできない【NGKI0456】.

3420

3421 (b) 整数定数式パラメータ

3422

3423 オブジェクト番号や機能コード,オブジェクト属性,サイズや数,優先度など,

3424 整数値を指定するパラメータ.プログラムが配置される番地に依存せずに値の

3425 決まる整数定数式を記述することができる.

3426

3427 整数定数式の解釈に必要な定義や宣言等は,システムコンフィギュレーション

3428 ファイルからC言語プリプロセッサのインクルードディレクティブによってイン

3429 クルードするファイルに含まれていなければならない【NGKI0457】.

3430

3431 (c) 一般定数式パラメータ

3432

3433 処理単位のエントリ番地,メモリ領域の先頭番地,拡張情報など,番地を指定

3434 する可能性のあるパラメータ.任意の定数式を記述することができる.

3435

3436 定数式の解釈に必要な定義や宣言等は,システムコンフィギュレーションファ

3437 イルからC言語プリプロセッサのインクルードディレクティブによってインクルー

3438 ドするファイルに含まれていなければならない【NGKI0458】.

3439

3440 (d) 文字列パラメータ

3441

3442 オブジェクトモジュール名やセクション名など,文字列を指定するパラメータ.

3443 任意の文字列を,C言語の文字列の記法で記述することができる.

3444

3445 【μITRON4.0仕様との関係】

3446

3447 μITRON4.0仕様においては,静的APIのパラメータを次の4種類に分類していた

3448 が,コンフィギュレータの仕組みを見直したことに伴い全面的に見直した.

3449

3450 (A) 自動割付け対応整数値パラメータ

Page 70: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

70

3451 (B) 自動割付け非対応整数値パラメータ

3452 (C) プリプロセッサ定数式パラメータ

3453 (D) 一般定数式パラメータ

3454

3455 この仕様の(a)が,おおよそμITRON4.0仕様の(A)に相当するが,(a)には整数値

3456 を記述できない点が異なる.(b)~(c)と(B)~(D)の間には単純な対応関係がな

3457 いが,記述できる定数式の範囲には,(B)⊂(C)⊂(b)⊂(c)=(D)の関係がある.

3458

3459 μITRON4.0仕様では,静的APIのパラメータは基本的には(D)とし,コンフィギュ

3460 レータが値を知る必要があるパラメータを(B),構成・初期化ファイルに生成す

3461 るC言語プリプロセッサの条件ディレクティブ(#if)中に含めたい可能性のあ

3462 るパラメータを(C)としていた.

3463

3464 それに対して,この仕様におけるコンフィギュレータの処理モデル(「2.12.5

3465 コンフィギュレータの処理モデル」の節を参照)では,コンフィギュレータの

3466 パス2において定数式パラメータの値を知ることができるため,(B)~(D)の区別

3467 をする必要がない.そのため,静的APIのパラメータは基本的には(b)とし,パ

3468 ス2で値を知ることのできない定数式パラメータのみを(c)としている.

3469

3470 2.12.3 保護ドメインの指定

3471

3472 保護機能対応カーネルでは,オブジェクトを登録する静的API等を,そのオブジェ

3473 クトが属する保護ドメインの囲みの中に記述する【NGKI0459】.無所属のオブ

3474 ジェクトを登録する静的APIは,保護ドメインの囲みの外に記述する

3475 【NGKI0460】.保護ドメインに属すべきオブジェクトを登録する静的API等を,

3476 保護ドメインの囲みの外に記述した場合には,コンフィギュレータがE_RSATRエ

3477 ラーを報告する【NGKI0461】.

3478

3479 ユーザドメインの囲みの文法は次の通り【NGKI0462】.

3480

3481 DOMAIN(保護ドメイン名) {

3482 ユーザドメインに属するオブジェクトを登録する静的API等

3483 }

3484

3485 保護ドメイン名には,ユーザドメインの名称を表す単一の識別名のみを記述す

3486 ることができる【NGKI0463】.

3487

3488 コンフィギュレータは,ユーザドメインの囲みを処理する際に,ユーザドメイ

3489 ンに保護ドメインIDを割り付け,構成・初期化ヘッダファイルに,指定された

3490 保護ドメイン名を割り付けた保護ドメインIDにマクロ定義するC言語プリプロセッ

3491 サのディレクティブ(#define)を生成する【NGKI0464】.また,ユーザドメイ

3492 ンの囲みの中およびそれ以降に記述する静的APIの整数定数式パラメータの記述

3493 に保護ドメイン名を記述すると,割り付けた保護ドメインIDの値に評価される

3494 【NGKI0465】.

3495

3496 ユーザドメインの囲みの中を空にすることで,ユーザドメインへの保護ドメイ

3497 ンIDの割付けのみを行うことができる【NGKI0466】.

3498

3499 カーネルドメインの囲みの文法は次の通り【NGKI0467】.

3500

Page 71: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

71

3501 KERNEL_DOMAIN {

3502 カーネルドメインに属するオブジェクトを登録する静的API等

3503 }

3504

3505 同じ保護ドメイン名を指定したユーザドメインの囲みや,カーネルドメインの

3506 囲みを,複数回記述してもよい【NGKI0468】.保護機能対応でないカーネルで

3507 保護ドメインの囲みを記述した場合や,保護ドメインの囲みの中に保護ドメイ

3508 ンの囲みを記述した場合には,コンフィギュレータがエラーを報告する

3509 【NGKI0469】.

3510

3511 【μITRON4.0/PX仕様との関係】

3512

3513 保護ドメインの囲みの文法を変更した.

3514

3515 【仕様決定の理由】

3516

3517 保護ドメインに属すべきオブジェクトを登録する静的API等を保護ドメインの囲

3518 みの外に記述した場合のエラーコードをE_RSATRとしたのは,オブジェクトを動

3519 的に登録するAPIにおいては,オブジェクトの属する保護ドメインを,オブジェ

3520 クト属性によって指定するためである.

3521

3522 2.12.4 クラスの指定

3523

3524 マルチプロセッサ対応カーネルでは,オブジェクトを登録する静的API等を,そ

3525 のオブジェクトが属するクラスの囲みの中に記述する【NGKI0470】.クラスに

3526 属すべきオブジェクトを登録する静的API等を,クラスの囲みの外に記述した場

3527 合には,コンフィギュレータがE_RSATRエラーを報告する【NGKI0471】.

3528

3529 クラスの囲みの文法は次の通り【NGKI0472】.

3530

3531 CLASS(クラスID) {

3532 クラスに属するオブジェクトを登録する静的API等

3533 }

3534

3535 クラスIDには,静的APIの整数定数式パラメータと同等の定数式を記述すること

3536 ができる【NGKI0473】.使用できないクラスIDを指定した場合には,コンフィ

3537 ギュレータがE_IDエラーを報告する【NGKI0474】.

3538

3539 同じクラスIDを指定したクラスの囲みを複数回記述してもよい【NGKI0475】.

3540 マルチプロセッサ対応でないカーネルでクラスの囲みを記述した場合や,クラ

3541 スの囲みの中にクラスの囲みを記述した場合には,コンフィギュレータがエラー

3542 を報告する【NGKI0476】.

3543

3544 なお,保護機能とマルチプロセッサの両方に対応するカーネルでは,保護ドメ

3545 インの囲みとクラスの囲みはどちらが外側になっていてもよい【NGKI0477】.

3546

3547 【仕様決定の理由】

3548

3549 クラスに属すべきオブジェクトを登録する静的API等をクラスの囲みの外に記述

3550 した場合のエラーコードをE_RSATRとしたのは,オブジェクトを動的に登録する

Page 72: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

72

3551 APIにおいては,オブジェクトの属するクラスを,オブジェクト属性によって指

3552 定するためである.

3553

3554 2.12.5 コンフィギュレータの処理モデル

3555

3556 コンフィギュレータは,次の3つないしは4つのパスにより,システムコンフィ

3557 ギュレーションファイルを解釈し,構成・初期化情報を含むファイルなどを生

3558 成する(図2-8).

3559

3560 最初のパス1では,システムコンフィギュレーションファイルを解釈し,そこに

3561 含まれる静的APIの整数定数式パラメータの値をCコンパイラを用いて求めるた

3562 めに,パラメータ計算用C言語ファイル(cfg1_out.c)を生成する.この時,シ

3563 ステムコンフィギュレーションファイルに含まれるC言語プリプロセッサのイン

3564 クルードディレクティブは,パラメータ計算用C言語ファイルの先頭に集めて生

3565 成する.また,条件ディレクティブは,順序も含めて,そのままの形でパラメー

3566 タ計算用C言語ファイルに出力する.システムコンフィギュレーションファイル

3567 に文法エラーや未サポートの記述があった場合には,この段階で検出される.

3568

3569 次に,Cコンパイラおよび関連ツールを用いて,パラメータ計算用C言語ファイ

3570 ルをコンパイルし,ロードモジュールを生成する.また,それをSレコードフォー

3571 マットの形に変換したSレコードファイル(cfg1_out.srec)と,その中の各シ

3572 ンボルとアドレスの対応表を含むシンボルファイル(cfg1_out.syms)を生成す

3573 る.静的APIの整数定数式パラメータに解釈できない式が記述された場合には,

3574 この段階でエラーが検出される.

3575

3576 コンフィギュレータのパス2では,パス1で生成されたロードモジュールのSレコー

3577 ドファイルとシンボルファイルから,C言語プリプロセッサの条件ディレクティ

3578 ブによりどの静的APIが有効となったかと,それらの静的APIの整数定数式パラ

3579 メータの値を取り出し,カーネルおよびシステムサービスの構成・初期化ファ

3580 イル(kernel_cfg.cなど)と構成・初期化ヘッダファイル(kernel_cfg.hなど)

3581 を生成する.構成・初期化ヘッダファイルには,登録できるオブジェクトの数

3582 (動的生成対応カーネル以外では,静的APIによって登録されたオブジェクトの

3583 数に一致)やオブジェクトのID番号などの定義を出力する.静的APIの整数定数

3584 式パラメータに不正がある場合には,この段階でエラーが検出される.

3585

3586 パス2で生成されたファイルを,他のソースファイルとあわせてコンパイルし,

3587 アプリケーションのロードモジュールを生成する.また,そのSレコードファイ

3588 ル(system.srec)とシンボルファイル(system.syms)を生成する.静的APIの

3589 一般定数式パラメータに解釈できない式が記述された場合には,この段階でエ

3590 ラーが検出される.

3591

3592 コンフィギュレータのパス3では,パス1およびパス2で生成されたロードモジュー

3593 ルのSレコードファイルとシンボルファイルから,静的APIのパラメータの値な

3594 どを取り出し,妥当性のチェックを行う.静的APIの一般定数式パラメータに不

3595 正がある場合には,この段階でエラーが検出される.

3596

3597 保護機能対応カーネルにおいては,メモリ配置を決定し,メモリ保護のための

3598 設定情報を生成するために,さらに以下の処理を行う(図2-9).

3599

3600 コンフィギュレータは,決定したメモリ配置に従ってロードモジュールを生成

Page 73: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

73

3601 するために,リンクスクリプト(ldscript.ld)を生成する.また,メモリ保護

3602 のための設定情報を,メモリ構成・初期化ファイル(kernel_mem.c)に生成す

3603 る.これらのファイルを生成するためには,パス3以降で初めて得られる情報が

3604 必要となるため,これらのファイルはパス3以降でしか生成できず,最終的なロー

3605 ドモジュールも,パス3以降で生成する.

3606

3607 そのため,パス2で生成されたロードモジュールは,仮のロードモジュールとい

3608 う位置付けになる.ここで,パス3以降で必要な情報を取り出し,最終的なロー

3609 ドモジュールのサイズを割り出せるように,パス3以降でメモリ構成・初期化ファ

3610 イルに生成するのと同様のデータ構造を,パス2において仮のメモリ構成・初期

3611 化ファイル(kernel_mem2.c)に生成する.また,これをリンクするための仮の

3612 リンクスクリプト(cfg2_out.ld)を生成し,これらを用いて仮のロードモジュー

3613 ルを生成する.さらに,仮のロードモジュールのSレコードファイル

3614 (cfg2_out.srec)とシンボルファイル(cfg2_out.syms)も,最終的なものと

3615 混同しないように,異なるファイル名で生成する.

3616

3617 パス3は,ターゲット依存で用いるパスで,メモリ配置やメモリ保護のための設

3618 定情報のサイズを最適化するための処理を行う.パス2で生成された仮のロード

3619 モジュールのSレコードファイルとシンボルファイルから必要な情報を取り出し,

3620 再度,仮のメモリ構成・初期化ファイル(kernel_mem3.c)と仮のリンクスクリ

3621 プト(cfg3_out.ld)を生成する.また,これらのファイルを他のソースファイ

3622 ルとあわせてコンパイルして仮のロードモジュールを生成し,そのSレコードファ

3623 イル(cfg3_out.srec)とシンボルファイル(cfg3_out.syms)を生成する.こ

3624 の段階で,メモリオブジェクトに重なりがあるなどのエラーが検出される場合

3625 もある.

3626

3627 パス4では,パス3(パス3を用いない場合はパス2)で生成された仮のロードモ

3628 ジュールのSレコードファイルとシンボルファイルから必要な情報を取り出し,

3629 最終的なメモリ構成・初期化ファイル(kernel_mem.c)とリンクスクリプト

3630 (ldscript.ld)を生成する.またパス4では,保護機能対応でないカーネルに

3631 おいてパス3で行っていた静的APIパラメータの値などの妥当性のチェックも行

3632 う.そのため,静的APIの一般定数式パラメータに不正がある場合には,この段

3633 階でエラーが検出される.

3634

3635 パス4で生成されたファイルを,他のソースファイルとあわせてコンパイルし,

3636 アプリケーションの最終的なロードモジュールを生成する.また,そのSレコー

3637 ドファイル(system.srec,必要な場合のみ)とシンボルファイル

3638 (system.syms)を生成する.

3639

3640 最後に,最終的なロードモジュールが,パス3(パス3を用いない場合はパス2)

3641 で生成された仮のロードモジュールと同じメモリ配置であることをチェックす

3642 る.両者のメモリ配置が異なっていた場合には,ロードモジュールが正しく生

3643 成されていない可能性があるが,これは,コンフィギュレーション処理の不具

3644 合を示すものである.

3645

3646 【μITRON4.0仕様との関係】

3647

3648 コンフィギュレータの処理モデルは全面的に変更した.

3649

3650 2.12.6 静的APIのパラメータに関するエラー検出

Page 74: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

74

3651

3652 静的APIのパラメータに関するエラー検出は,同じものがサービスコールとして

3653 呼ばれた場合と同等とすることを原則とする【NGKI0478】.言い換えると,サー

3654 ビスコールによっても検出できないエラーは,静的APIにおいても検出しない.

3655 静的APIの機能説明中の「E_XXXXXエラーとなる」または「E_XXXXXエラーが返る」

3656 という記述は,コンフィギュレータがそのエラーを検出することを意味する.

3657

3658 ただし,エラーの種類によっては,サービスコールと同等のエラー検出を行う

3659 ことが難しいため,そのようなものについては例外とする【NGKI0479】.例え

3660 ば,メモリ不足をコンフィギュレータによって検出するのは容易ではない.

3661

3662 逆に,オブジェクト属性については,サービスコールより強力なエラーチェッ

3663 クを行える可能性がある.例えば,タスク属性にTA_STAと記述されている場合,

3664 サービスコールではエラーを検出できないが,コンフィギュレータでは検出で

3665 きる可能性がある.ただし,このようなエラー検出を完全に行おうとするとコ

3666 ンフィギュレータが複雑になるため,このようなエラーを検出することは必須

3667 とせず,検出できた場合には警告として報告する【NGKI0480】.

3668

3669 【μITRON4.0仕様との関係】

3670

3671 μITRON4.0仕様では,静的APIのパラメータに関するエラー検出について規定さ

3672 れていない.

3673

3674 2.12.7 オブジェクトのID番号の指定

3675

3676 コンフィギュレータのオプション機能として,アプリケーション設計者がオブ

3677 ジェクトのID番号を指定するための次の機能を用意する.

3678

3679 コンフィギュレータのオプション指定により,オブジェクト識別名とID番号の

3680 対応表を含むファイルを渡すと,コンフィギュレータはそれに従ってオブジェ

3681 クトにID番号を割り付ける【NGKI0481】.それに従ったID番号割付けができな

3682 い場合(ID番号に抜けができる場合など)には,コンフィギュレータはエラー

3683 を報告する【NGKI0482】.

3684

3685 またコンフィギュレータは,オプション指定により,オブジェクト識別名とコ

3686 ンフィギュレータが割り付けたID番号の対応表を含むファイルを,コンフィギュ

3687 レータに渡すファイルと同じフォーマットで生成する【NGKI0483】.

3688

3689 【μITRON4.0仕様との関係】

3690

3691 μITRON4.0仕様では,オブジェクト生成のための静的APIのID番号を指定するパ

3692 ラメータに整数値を記述できるため,このような機能は用意されていない.

3693

3694 2.13 TOPPERSネーミングコンベンション

3695

3696 この節では,TOPPERSソフトウェアのAPIの構成要素の名称に関するネーミング

3697 コンベンションについて述べる.このネーミングコンベンションは,モジュー

3698 ル間のインタフェースに関わる名称に適用することを想定しているが,モジュー

3699 ル内部の名称に適用してもよい.

3700

Page 75: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

75

3701 2.13.1 モジュール識別名

3702

3703 異なるモジュールのAPIの構成要素の名称が衝突することを避けるために,各モ

3704 ジュールに対して,それを識別するためのモジュール識別名を定める.モジュー

3705 ル識別名は,英文字と数字で構成し,2~8文字程度の長さとする.

3706

3707 カーネルのモジュール識別名は"kernel",システムインタフェースレイヤのモ

3708 ジュール識別名は"sil"とする.

3709

3710 APIの構成要素の名称には,モジュール識別名を含めることを原則とするが,カー

3711 ネルのAPIなど,頻繁に使用されて衝突のおそれが少ない場合には,モジュール

3712 識別名を含めない名称を使用する.

3713

3714 以下では,モジュール識別名の英文字を英小文字としたものをwww,英大文字と

3715 したものをWWWと表記する.

3716

3717 2.13.2 データ型名

3718

3719 各サイズの整数型など,データの意味を定めない基本データ型の名称は,英小

3720 文字,数字,"_"で構成する.データ型であることを明示するために,末尾が

3721 "_t"である名称とする.

3722

3723 複合データ型やデータの意味を定めるデータ型の名称は,英大文字,数字,

3724 "_"で構成する.データ型であることを明示するために,先頭が"T_"または末尾

3725 が"_T"である名称とする場合もある.

3726

3727 データ型の種類毎に,次のネーミングコンベンションを定める.

3728

3729 (A) パケットのデータ型

3730

3731 T_CYYY acre_yyy に渡すパケットのデータ型

3732 T_DYYY def_yyyに渡すパケットのデータ型

3733 T_RYYY ref_yyy に渡すパケットのデータ型

3734 T_WWW_CYYY www_acre_yyy に渡すパケットのデータ型

3735 T_WWW_DYYY www_def_yyy に渡すパケットのデータ型

3736 T_WWW_RYYY www_ref_yyy に渡すパケットのデータ型

3737

3738 2.13.3 関数名

3739

3740 関数の名称は,英小文字,数字,"_"で構成する.

3741

3742 関数の種類毎に,次のネーミングコンベンションを定める.

3743

3744 (A) サービスコール

3745

3746 サービスコールは,xxx_yyyまたはwww_xxx_yyyの名称とする.ここで,xxxは操

3747 作の方法,yyyは操作の対象を表す.xxx_yyyまたはwww_xxx_yyyから派生したサー

3748 ビスコールは,それぞれzxxx_yyyまたはwww_zxxx_yyyの名称とする.ここでzは,

3749 派生したことを表す文字である.派生したことを表す文字を2つ付加する場合に

3750 は,zzxxx_yyyまたはwww_zzxxx_yyyの名称となる.

Page 76: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

76

3751

3752 非タスクコンテキスト専用のサービスコールの名称は,派生したことを表す文

3753 字として"i"を付加し,ixxx_yyy,izxxx_yyy,www_ixxx_yyy,www_izxxx_yyyと

3754 いった名称とする.

3755

3756 【補足説明】

3757

3758 サービスコールの名称を構成する省略名(xxx,yyy,z)の元になった英語につ

3759 いては,「5.10 省略名の元になった英語」の節を参照すること.

3760

3761 (B) コールバック

3762

3763 コールバックの名称は,サービスコールのネーミングコンベンションに従う.

3764

3765 2.13.4 変数名

3766

3767 変数(const修飾子のついたものを含む)の名称は,英小文字,数字,"_"で構

3768 成する.データ型が異なる変数には,異なる名称を付けることを原則とする.

3769

3770 変数の名称に関して,次のガイドラインを設ける.

3771

3772 ~id ~ID(オブジェクトのID番号,ID型)

3773 ~no ~番号(オブジェクト番号)

3774 ~atr ~属性(オブジェクト属性,ATR型)

3775 ~stat ~状態(オブジェクト状態,STAT型)

3776 ~mode ~モード(サービスコールの動作モード,MODE型)

3777 ~pri ~優先度(優先度,PRI型)

3778 ~sz ~サイズ(単位はバイト数,SIZE型またはuint_t型)

3779 ~cnt ~の個数(単位は個数,uint_t型)

3780 ~ptn ~パターン

3781 ~tim ~時刻,~時間

3782 ~cd ~コード

3783 i~ ~の初期値

3784 max~ ~の最大値

3785 min~ ~の最小値

3786 left~ ~の残り

3787

3788 また,ポインタ変数(関数ポインタを除く)の名称に関して,次のガイドライ

3789 ンを設ける.

3790

3791 p_~ ポインタ

3792 pp_~ ポインタを入れる領域へのポインタ

3793 pk_~ パケットへのポインタ

3794 ppk_~ パケットへのポインタを入れる領域へのポインタ

3795

3796 変数の種類毎に,次のネーミングコンベンションを定める.

3797

3798 (A) パケットへのポインタ

3799

3800 pk_cyyy acre_yyy に渡すパケットへのポインタ

Page 77: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

77

3801 pk_dyyy def_yyyに渡すパケットへのポインタ

3802 pk_ryyy ref_yyy に渡すパケットへのポインタ

3803 pk_www_cyyy www_acre_yyy に渡すパケットへのポインタ

3804 pk_www_dyyy www_def_yyy に渡すパケットへのポインタ

3805 pk_www_ryyy www_ref_yyy に渡すパケットへのポインタ

3806

3807 2.13.5 定数名

3808

3809 定数(C言語プリプロセッサのマクロ定義によるもの)の名称は,英大文字,数

3810 字,"_"で構成する.

3811

3812 定数の種類毎に,次のネーミングコンベンションを定める.

3813

3814 (A) メインエラーコード

3815

3816 メインエラーコードは,先頭が"E_"である名称とする.

3817

3818 (B) 機能コード

3819

3820 TFN_XXX_YYY xxx_yyy の機能コード

3821 TFN_WWW_XXX_YYY www_xxx_yyy の機能コード

3822

3823 (C) その他の定数

3824

3825 その他の定数は,先頭がTUU_またはTUU_WWW_である名称とする.ここでUUは,

3826 定数の種類またはデータ型を表す.同じパラメータまたはリターンパラメータ

3827 に用いられる定数の名称については,UUを同一にすることを原則とする.

3828

3829 また,定数の名称に関して,次のガイドラインを設ける.

3830

3831 TA_~ オブジェクトの属性値

3832 TSZ_~ ~のサイズ

3833 TBIT_~ ~のビット数

3834 TMAX_~ ~の最大値

3835 TMIN_~ ~の最小値

3836

3837 2.13.6 マクロ名

3838

3839 マクロ(C言語プリプロセッサのマクロ定義によるもの)の名称は,それが表す

3840 構成要素のネーミングコンベンションに従う.すなわち,関数を表すマクロは

3841 関数のネーミングコンベンションに,定数を表すマクロは定数のネーミングコ

3842 ンベンションに従う.ただし,簡単な関数を表すマクロや,副作用があるなど

3843 の理由でマクロであることを明示したい場合には,英大文字,数字,"_"で構成

3844 する場合もある.

3845

3846 マクロの種類毎に,次のネーミングコンベンションを定める.

3847

3848 (A) 構成マクロ

3849

3850 構成マクロの名称は,英大文字,数字,"_"で構成し,次のガイドラインを設け

Page 78: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

78

3851 る.

3852

3853 TSZ_~ ~のサイズ

3854 TBIT_~ ~のビット数

3855 TMAX_~ ~の最大値

3856 TMIN_~ ~の最小値

3857

3858 2.13.7 静的API名

3859

3860 静的APIの名称は,英大文字,数字,"_"で構成し,対応するサービスコールの

3861 名称中の英小文字を英大文字で置き換えたものとする.対応するサービスコー

3862 ルがない場合には,サービスコールのネーミングコンベンションに従って定め

3863 た名称中の英小文字を英大文字で置き換えたものとする.

3864

3865 2.13.8 ファイル名

3866

3867 ファイルの名称は,英小文字,数字,"_","."で構成する.英大文字と英小文

3868 字を区別しないファイルシステムに対応するために,英大文字は使用しない.

3869 また,"-"も使用しない.

3870

3871 ファイルの種類毎に,次のネーミングコンベンションを定める.

3872

3873 (A) ヘッダファイル

3874

3875 モジュールを用いるために必要な定義を含むヘッダファイルは,そのモジュー

3876 ルのモジュール識別名の末尾に".h"を付加した名前(すなわち,www.h)とする.

3877

3878 2.13.9 モジュール内部の名称の衝突回避

3879

3880 モジュール内部の名称が,他のモジュール内部の名称と衝突することを避ける

3881 ために,次のガイドラインを設ける.

3882

3883 モジュール内部に閉じて使われる関数や変数などの名称で,オブジェクトファ

3884 イルのシンボル表に登録されて外部から参照できる名称は,C言語レベルで,先

3885 頭が_www_または_WWW_である名称とする.例えば,カーネルの内部シンボルは,

3886 C言語レベルで,先頭が"_kernel_"または"_KERNEL_"である名称とする.

3887

3888 また,モジュールを用いるために必要な定義を含むヘッダファイル中に用いる

3889 名称で,それをインクルードする他のモジュールで使用する名称と衝突する可

3890 能性のある名称は,"TOPPERS_"で始まる名称とする.

3891

3892 2.14 TOPPERS共通定義

3893

3894 TOPPERSソフトウェアに共通に用いる定義を,TOPPERS共通定義と呼ぶ.

3895

3896 2.14.1 TOPPERS共通ヘッダファイル

3897

3898 TOPPERS共通定義(共通データ型,共通定数,共通マクロ)は,TOPPERS共通ヘッ

3899 ダファイル(t_stddef.h)およびそこからインクルードされるファイルに含ま

3900 れている【NGKI0484】.TOPPERS共通定義を用いる場合には,TOPPERS共通ヘッ

Page 79: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

79

3901 ダファイルをインクルードする【NGKI0485】.

3902

3903 TOPPERS共通ヘッダファイルは,カーネルヘッダファイル(kernel.h)やシステ

3904 ムインタフェースレイヤヘッダファイル(sil.h)からインクルードされるため,

3905 これらのファイルをインクルードする場合には,TOPPERS共通ヘッダファイルを

3906 直接インクルードする必要はない【NGKI0486】.

3907

3908 2.14.2 TOPPERS共通データ型

3909

3910 C90に規定されているデータ型以外で,TOPPERSソフトウェアで共通に用いるデー

3911 タ型は次の通りである【NGKI0487】.

3912

3913 int8_t 符号付き8ビット整数(オプション,C99準拠)

3914 uint8_t 符号無し8ビット整数(オプション,C99準拠)

3915 int16_t 符号付き16ビット整数(C99準拠)

3916 uint16_t 符号無し16ビット整数(C99準拠)

3917 int32_t 符号付き32ビット整数(C99準拠)

3918 uint32_t 符号無し32ビット整数(C99準拠)

3919 int64_t 符号付き64ビット整数(オプション,C99準拠)

3920 uint64_t 符号無し64ビット整数(オプション,C99準拠)

3921 int128_t 符号付き128ビット整数(オプション,C99準拠)

3922 uint128_t 符号無し128ビット整数(オプション,C99準拠)

3923

3924 int_least8_t 8 ビット以上の符号付き整数(C99準拠)

3925 uint_least8_t int_least8_t 型と同じサイズの符号無し整数(C99準拠)

3926

3927 float32_t IEEE754準拠の32ビット単精度浮動小数点数(オプション)

3928 double64_t IEEE754 準拠の64ビット倍精度浮動小数点数(オプション)

3929

3930 bool_t 真偽値(trueまたはfalse)

3931 int_t 16ビット以上の符号付き整数

3932 uint_t int_t 型と同じサイズの符号無し整数

3933 long_t 32ビット以上かつint_t型以上のサイズの符号付き整数

3934 ulong_t long_t 型と同じサイズの符号無し整数

3935

3936 intptr_t ポインタを格納できるサイズの符号付き整数(C99準拠)

3937 uintptr_t intptr_t 型と同じサイズの符号無し整数(C99準拠)

3938

3939 FN 機能コード(符号付き整数,int_tに定義)

3940 ER 正常終了(E_OK)またはエラーコード(符号付き整数,int_t

3941 に定義)

3942 ID オブジェクトのID番号(符号付き整数,int_tに定義)

3943 ATR オブジェクト属性(符号無し整数,uint_tに定義)

3944 STAT オブジェクトの状態(符号無し整数,uint_tに定義)

3945 MODE サービスコールの動作モード(符号無し整数,uint_tに定義)

3946 PRI 優先度(符号付き整数,int_tに定義)

3947 SIZE メモリ領域のサイズ(符号無し整数,ポインタを格納できる

3948 サイズの符号無し整数型に定義)

3949

3950 TMO タイムアウト指定(符号付き整数,単位はミリ秒,int_tに定義)

Page 80: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

80

3951 RELTIM 相対時間(符号無し整数,単位はミリ秒,uint_tに定義)

3952 SYSTIM システム時刻(符号無し整数,単位はミリ秒,ulong_tに定義)

3953 SYSUTM 性能評価用システム時刻(符号無し整数,単位はマイクロ秒,

3954 ulong_tに定義)

3955

3956 FP プログラムの起動番地(型の定まらない関数ポインタ)

3957

3958 ER_BOOL エラーコードまたは真偽値(符号付き整数,int_tに定義)

3959 ER_ID エラーコードまたはID番号(符号付き整数,int_tに定義,

3960 負のID番号は格納できない)

3961 ER_UINT エラーコードまたは符号無し整数(符号付き整数,int_tに

3962 定義,符号無し整数を格納する場合の有効ビット数はuint_t

3963 より1ビット短い)

3964

3965 MB_T オブジェクト管理領域を確保するためのデータ型

3966

3967 ACPTN アクセス許可パターン(符号無し32ビット整数,uint32_tに

3968 定義)

3969 ACVCT アクセス許可ベクタ

3970

3971 ここで,データ型が「AまたはB」とは,AかBのいずれかの値を取ることを示す.

3972 例えばER_BOOLは,エラーコードまたは真偽値のいずれかの値を取る.

3973

3974 int8_t,uint8_t,int64_t,uint64_t,int128_t,uint128_t,float32_t,

3975 double64_tが使用できるかどうかは,ターゲット定義である【NGKI0488】.こ

3976 れらが使用できるかどうかは,それぞれ,INT8_MAX,UINT8_MAX,INT64_MAX,

3977 UINT64_MAX,INT128_MAX,UINT128_MAX,FLOAT32_MAX,DOUBLE64_MAXがマクロ

3978 定義されているかどうかで判別することができる【NGKI0489】.IEEE754準拠の

3979 浮動小数点数がサポートされていない場合には,ターゲット定義で,

3980 float32_tとdouble64_tは使用できないものとする【NGKI0490】.

3981

3982 【μITRON4.0仕様との関係】

3983

3984 B,UB,H,UH,W,UW,D,UD,VP_INTに代えて,C99準拠のint8_t,uint8_t,

3985 int16_t,uint16_t,int32_t,uint32_t,int64_t,uint64_t,intptr_tを用い

3986 ることにした.また,uintptr_t,int128_t,uint128_tを用意することにした.

3987

3988 VPは,void *と等価であるため,用意しないことにした.また,ターゲットシ

3989 ステムにより振舞いが一定しないことから,VB,VH,VW,VDに代わるデータ型

3990 は用意しないことにした.

3991

3992 INT,UINTに代えて,C99の型名と相性が良いint_t,uint_tを用いることにした.

3993 また,32ビット以上かつint_t型(またはuint_t型)以上のサイズが保証される

3994 整数型として,long_t,ulong_tを用意し,8ビット以上のサイズで必ず存在す

3995 る整数型として,C99準拠のint_least8_t,uint_least8_tを導入することにし

3996 た.int_least16_t,uint_least16_t,int_least32_t,uint_least32_tを導入

3997 しなかったのは,16ビットおよび32ビットの整数型があることを仮定しており,

3998 それぞれint16_t,uint16_t,int32_t,uint32_tで代用できるためである.

3999

4000 TECSとの整合性を取るために,BOOLに代えて,bool_tを用いることにした.ま

Page 81: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

81

4001 た,IEEE754準拠の単精度浮動小数点数を表す型としてfloat32_t,IEEE754準拠

4002 の64ビットを表す型としてdouble64_tを導入した.

4003

4004 性能評価用システム時刻のためのデータ型としてSYSUTMを,オブジェクト管理

4005 領域を確保するためのデータ型としてMB_Tを用意することにした

4006

4007 2.14.3 TOPPERS共通定数

4008

4009 C90に規定されている定数以外で,TOPPERSソフトウェアで共通に用いる定数は

4010 次の通りである(一部,C90に規定されているものも含む).

4011

4012 (1) 一般定数【NGKI0491】

4013

4014 NULL 無効ポインタ

4015

4016 true 1 真

4017 false 0 偽

4018

4019 E_OK 0 正常終了

4020

4021 【μITRON4.0仕様との関係】

4022

4023 BOOLをbool_tに代えたことから,TRUEおよびFALSEに代えて,trueおよびfalse

4024 を用いることにした.

4025

4026 (2) 整数型に格納できる最大値と最小値【NGKI0492】

4027

4028 INT8_MAX int8_tに格納できる最大値(オプション,C99準拠)

4029 INT8_MIN int8_t に格納できる最小値(オプション,C99準拠)

4030 UINT8_MAX uint8_t に格納できる最大値(オプション,C99準拠)

4031 INT16_MAX int16_t に格納できる最大値(C99準拠)

4032 INT16_MIN int16_tに格納できる最小値(C99準拠)

4033 UINT16_MAX uint16_t に格納できる最大値(C99準拠)

4034 INT32_MAX int32_t に格納できる最大値(C99準拠)

4035 INT32_MIN int32_t に格納できる最小値(C99準拠)

4036 UINT32_MAX uint32_t に格納できる最大値(C99準拠)

4037 INT64_MAX int64_t に格納できる最大値(オプション,C99準拠)

4038 INT64_MIN int64_t に格納できる最小値(オプション,C99準拠)

4039 UINT64_MAX uint64_t に格納できる最大値(オプション,C99準拠)

4040 INT128_MAX int128_t に格納できる最大値(オプション,C99準拠)

4041 INT128_MIN int128_t に格納できる最小値(オプション,C99準拠)

4042 UINT128_MAX uint128_t に格納できる最大値(オプション,C99準拠)

4043

4044 INT_LEAST8_MAX int_least8_t に格納できる最大値(C99準拠)

4045 INT_LEAST8_MIN int_least8_t に格納できる最小値(C99準拠)

4046 UINT_LEAST8_MAX uint_least8_t に格納できる最大値(C99準拠)

4047 INT_MAX int_t に格納できる最大値(C90準拠)

4048 INT_MIN int_t に格納できる最小値(C90準拠)

4049 UINT_MAX uint_t に格納できる最大値(C90準拠)

4050 LONG_MAX long_t に格納できる最大値(C90準拠)

Page 82: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

82

4051 LONG_MIN long_t に格納できる最小値(C90準拠)

4052 ULONG_MAX ulong_t に格納できる最大値(C90準拠)

4053

4054 FLOAT32_MIN float32_tに格納できる最小の正規化された正の浮

4055 動小数点数(オプション)

4056 FLOAT32_MAX float32_t に格納できる表現可能な最大の有限浮動

4057 小数点数(オプション)

4058 DOUBLE64_MIN double64_t に格納できる最小の正規化された正の浮

4059 動小数点数(オプション)

4060 DOUBLE64_MAX double64_t に格納できる表現可能な最大の有限浮動

4061 小数点数(オプション)

4062

4063 (3) 整数型のビット数【NGKI0493】

4064

4065 CHAR_BIT cha r型のビット数(C90準拠)

4066

4067 (4) オブジェクト属性【NGKI0494】

4068

4069 TA_NULL 0U オブジェクト属性を指定しない

4070

4071 (5) タイムアウト指定【NGKI0495】

4072

4073 TMO_POL 0 ポーリング

4074 TMO_FEVR -1 永久待ち

4075 TMO_NBLK -2 ノンブロッキング

4076

4077 (6) アクセス許可パターン【NGKI0496】

4078

4079 TACP_KERNEL 0U カーネルドメインのみにアクセスを許可

4080 TACP_SHARED ̃0U すべての保護ドメインにアクセスを許可

4081

4082 2.14.4 TOPPERS共通エラーコード

4083

4084 TOPPERSソフトウェアで共通に用いるメインエラーコードは次の通りである

4085 【NGKI0497】.

4086

4087 (A) 内部エラークラス(EC_SYS,-5~-8)

4088

4089 E_SYS -5 システムエラー

4090

4091 (B) 未サポートエラークラス(EC_NOSPT,-9~-16)

4092

4093 E_NOSPT -9 未サポート機能

4094 E_RSFN -10 予約機能コード

4095 E_RSATR -11 予約属性

4096

4097 (C) パラメータエラークラス(EC_PAR,-17~-24)

4098

4099 E_PAR -17 パラメータエラー

4100 E_ID -18 不正ID番号

Page 83: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

83

4101

4102 (D) 呼出しコンテキストエラークラス(EC_CTX,-25~-32)

4103

4104 E_CTX -25 コンテキストエラー

4105 E_MACV -26 メモリアクセス違反

4106 E_OACV -27 オブジェクトアクセス違反

4107 E_ILUSE -28 サービスコール不正使用

4108

4109 (E) 資源不足エラークラス(EC_NOMEM,-33~-40)

4110

4111 E_NOMEM -33 メモリ不足

4112 E_NOID -34 ID番号不足

4113 E_NORES -35 資源不足

4114

4115 (F) オブジェクト状態エラークラス(EC_OBJ,-41~-48)

4116

4117 E_OBJ -41 オブジェクト状態エラー

4118 E_NOEXS -42 オブジェクト未登録

4119 E_QOVR -43 キューイングオーバフロー

4120

4121 (G) 待ち解除エラークラス(EC_RLWAI,-49~-56)

4122

4123 E_RLWAI -49 待ち禁止状態または待ち状態の強制解除

4124 E_TMOUT -50 ポーリング失敗またはタイムアウト

4125 E_DLT -51 待ちオブジェクトの削除または再初期化

4126 E_CLS -52 待ちオブジェクトの状態変化

4127

4128 (H) 警告クラス(EC_WARN,-57~-64)

4129

4130 E_WBLK -57 ノンブロッキング受付け

4131 E_BOVR -58 バッファオーバフロー

4132

4133 このエラークラスに属するエラーコードは,警告を表すエラーコードであり,

4134 [NGKI0019]の原則では例外としている.

4135

4136 【μITRON4.0仕様との関係】

4137

4138 E_NORESは,μITRON4.0仕様に規定されていないエラーコードである.

4139

4140 2.14.5 TOPPERS共通マクロ

4141

4142 (1) 整数定数を作るマクロ【NGKI0498】

4143

4144 INT8_C(val) int_least8_t 型の定数を作るマクロ(C99準拠)

4145 UINT8_C(val) uint_least8_t 型の定数を作るマクロ(C99準拠)

4146 INT16_C(val) int16_t 型の定数を作るマクロ(C99準拠)

4147 UINT16_C(val) uint16_t 型の定数を作るマクロ(C99準拠)

4148 INT32_C(val) int32_t 型の定数を作るマクロ(C99準拠)

4149 UINT32_C(val) uint32_t 型の定数を作るマクロ(C99準拠)

4150 INT64_C(val) int64_t型の定数を作るマクロ(オプション,C99準拠)

Page 84: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

84

4151 UINT64_C(val) uint64_t 型の定数を作るマクロ(オプション,C99準拠)

4152 INT128_C(val) int128_t 型の定数を作るマクロ(オプション,C99準拠)

4153 UINT128_C(val) uint128_t 型の定数を作るマクロ(オプション,C99準拠)

4154

4155 UINT_C(val) uint_t 型の定数を作るマクロ

4156 ULONG_C(val) ulong_t 型の定数を作るマクロ

4157

4158 【仕様決定の理由】

4159

4160 C99に用意されていないUINT_CとULONG_Cを導入したのは,アセンブリ言語から

4161 も参照する定数を記述するためである.C言語のみで用いる定数をこれらのマク

4162 ロを使って記述する必要はない.

4163

4164 (2) 型に関する情報を取り出すためのマクロ【NGKI0499】

4165

4166 offsetof(structure, field) 構造体structure中のフィールドfieldの

4167 バイト位置を返すマクロ(C90準拠)

4168

4169 alignof(typ e) 型typeのアラインメント単位を返すマクロ

4170

4171 ALIGN_TYPE(addr, type) 番地addrが型typeに対してアラインしてい

4172 るかどうかを返すマクロ

4173

4174 (3) assertマクロ【NGKI0500】

4175

4176 assert(exp) expが成立しているかを検査するマクロ(C90準拠)

4177

4178 (4) コンパイラの拡張機能のためのマクロ【NGKI0501】

4179

4180 inline インライン関数

4181 Inline ファイルローカルなインライン関数

4182 asm インラインアセンブラ

4183 Asm インラインアセンブラ(最適化抑止)

4184 throw() 例外を発生しない関数

4185 NoReturn リターンしない関数

4186

4187 (5) エラーコード構成・分解マクロ【NGKI0502】

4188

4189 ERCD(mercd, sercd) メインエラーコードmercdとサブエラーコードsercdか

4190 ら,エラーコードを構成するためのマクロ

4191

4192 MERCD(ercd) エラーコードercdからメインエラーコードを抽出する

4193 ためのマクロ

4194 SERCD(ercd) エラーコードercdからサブエラーコードを抽出するた

4195 めのマクロ

4196

4197 (6) アクセス許可パターン構成マクロ【NGKI0503】

4198

4199 TACP(domid) domid で指定されるユーザドメインのみにアクセスを

4200 許可するアクセス許可パターンを構成するためのマ

Page 85: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

85

4201 クロ

4202

4203 ここで,TACPのパラメータ(domid)には,ユーザドメインのID番号のみを指定

4204 することができる【NGKI0504】.TDOM_SELF,TDOM_KERNEL,TDOM_NONEを指定し

4205 た場合の動作は,保証されない【NGKI0505】.

4206

4207 2.14.6 TOPPERS共通構成マクロ

4208

4209 (1) 相対時間の範囲【NGKI0506】

4210

4211 TMAX_RELTIM 相対時間に指定できる最大値

4212

4213 2.15 カーネル共通定義

4214

4215 カーネルの複数の機能で共通に用いる定義を,カーネル共通定義と呼ぶ.

4216

4217 2.15.1 カーネルヘッダファイル

4218

4219 カーネルを用いるために必要な定義は,カーネルヘッダファイル(kernel.h)

4220 およびそこからインクルードされるファイルに含まれている【NGKI0507】.カー

4221 ネルを用いる場合には,カーネルヘッダファイルをインクルードする

4222 【NGKI0508】.

4223

4224 ただし,カーネルを用いるために必要な定義の中で,コンフィギュレータによっ

4225 て生成されるものは,カーネル構成・初期化ヘッダファイル(kernel_cfg.h)

4226 に含まれる【NGKI0509】.具体的には,登録できるオブジェクトの数

4227 (TNUM_YYY)やオブジェクトのID番号などの定義が,これに該当する.これら

4228 の定義を用いる場合には,カーネル構成・初期化ヘッダファイルをインクルー

4229 ドする【NGKI0510】.

4230

4231 μITRON4.0仕様で規定されており,この仕様で廃止されたデータ型および定数

4232 を用いる場合には,ITRON仕様互換ヘッダファイル(itron.h)をインクルード

4233 する【NGKI0511】.

4234

4235 【μITRON4.0仕様との関係】

4236

4237 この仕様では,コンフィギュレータが生成するヘッダファイルに,オブジェク

4238 トのID番号の定義に加えて,登録できるオブジェクトの数(TNUM_YYY)の定義

4239 が含まれることとした.これに伴い,ヘッダファイルの名称を,μITRON4.0仕

4240 様の自動割付け結果ヘッダファイル(kernel_id.h)から,カーネル構成・初期

4241 化ヘッダファイル(kernel_cfg.h)に変更した.

4242

4243 2.15.2 カーネル共通定数

4244

4245 (1) オブジェクト属性【NGKI0512】

4246

4247 TA_TPRI 0x01U タスクの待ち行列をタスクの優先度順に

4248

4249 【μITRON4.0仕様との関係】

4250

Page 86: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

86

4251 値が0のオブジェクト属性(TA_HLNG,TA_TFIFO,TA_MFIFO,TA_WSGL)は,デフォ

4252 ルトの扱いにして廃止した.これは,「(tskatr & TA_HLNG) != 0U」のような

4253 間違いを防ぐためである.TA_ASMは,有効な使途がないために廃止した.

4254 TA_MPRIは,メールボックス機能でのみ使用するため,カーネル共通定義から外

4255 した.

4256

4257 (2) 保護ドメインID【NGKI0513】

4258

4259 TDOM_SELF 0 自タスクの属する保護ドメイン

4260 TDOM_KERNEL -1 カーネルドメイン

4261 TDOM_NONE -2 無所属(保護ドメインに属さない)

4262

4263 (3) その他のカーネル共通定数【NGKI0514】

4264

4265 TCLS_SELF 0 自タスクの属するクラス

4266

4267 TPRC_NONE 0 割付けプロセッサの指定がない

4268 TPRC_INI 0 初期割付けプロセッサ

4269

4270 TSK_SELF 0 自タスク指定

4271 TSK_NONE 0 該当するタスクがない

4272

4273 TPRI_SELF 0 自タスクのベース優先度の指定

4274 TPRI_INI 0 タスクの起動時優先度の指定

4275

4276 TIPM_ENAALL 0 割込み優先度マスク全解除

4277

4278 (4) カーネルで用いるメインエラーコード

4279

4280 「2.14.4 TOPPERS共通エラーコード」の節で定義したメインエラーコードの中

4281 で,E_CLS,E_WBLK,E_BOVRの3つは,カーネルでは使用しない【NGKI0515】.

4282

4283 【TOPPERS/ASPカーネルにおける規定】

4284

4285 ASPカーネルでは,サービスコールから,E_RSFN,E_RSATR,E_MACV,E_OACV,

4286 E_NOMEM,E_NOID,E_NORES,E_NOEXSが返る状況は起こらない【ASPS0011】.

4287 E_RSATRは,コンフィギュレータによって検出される【ASPS0012】.ただし,動

4288 的生成機能拡張パッケージでは,E_RSATR,E_NOMEM,E_NOID,E_NOEXSが返る状

4289 況が起こる【ASPS0013】.

4290

4291 【TOPPERS/FMPカーネルにおける規定】

4292

4293 FMPカーネルでは,サービスコールから,E_RSFN,E_RSATR,E_MACV,E_OACV,

4294 E_NOMEM,E_NOID,E_NORES,E_NOEXSが返る状況は起こらない【FMPS0007】.

4295 E_RSATRとE_NORESは,コンフィギュレータによって検出される【FMPS0008】.

4296

4297 【TOPPERS/HRP2カーネルにおける規定】

4298

4299 HRP2カーネルでは,サービスコールから,E_RSATR,E_NOID,E_NORES,

4300 E_NOEXSが返る状況は起こらない【HRPS0006】.E_RSATRは,コンフィギュレー

Page 87: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

87

4301 タによって検出される【HRPS0007】.

4302

4303 【TOPPERS/SSPカーネルにおける規定】

4304

4305 SSPカーネルでは,サービスコールから,E_RSFN,E_RSATR,E_MACV,E_OACV,

4306 E_ILUSE,E_NOMEM,E_NOID,E_NORES,E_NOEXS,E_RLWAI,E_TMOUT,E_DLTが返

4307 る状況は起こらない【SSPS0008】.E_RSATRは,コンフィギュレータによって検

4308 出される【SSPS0009】.

4309

4310 2.15.3 カーネル共通マクロ

4311

4312 (1) スタック領域をアプリケーションで確保するためのデータ型とマクロ

4313

4314 スタック領域をアプリケーションで確保するために,次のデータ型とマクロを

4315 用意している【NGKI0516】.

4316

4317 STK_T スタック領域を確保するためのデータ型

4318

4319 COUNT_STK_T(sz) サイズszのスタック領域を確保するために必要な

4320 STK_T 型の配列の要素数

4321 ROUND_STK_T(sz) 要素数COUNT_STK_T(sz)のSTK_T型の配列のサイズ(sz

4322 を,STK_T型のサイズの倍数になるように大きい方に

4323 丸めた値)

4324

4325 これらを用いてスタック領域を確保する方法は次の通り【NGKI0517】.

4326

4327 STK_T <スタック領域の変数名>[COUNT_STK_T(<スタック領域のサイズ>)];

4328

4329 この方法で確保したスタック領域を,サービスコールまたは静的APIに渡す場合

4330 には,スタック領域の先頭番地に<スタック領域の変数名>を,スタック領域の

4331 サイズにROUND_STK_T(<スタック領域のサイズ>)を指定する【NGKI0518】.

4332

4333 ただし,保護機能対応カーネルにおいては,上の方法によりタスクのユーザス

4334 タック領域を確保することはできない【NGKI0519】.詳しくは,「4.1 タスク

4335 管理機能」の節のCRE_TSKの機能の項を参照すること.

4336

4337 (2) オブジェクト属性を作るマクロ

4338

4339 保護機能対応カーネルでは,オブジェクトが属する保護ドメインを指定するた

4340 めのオブジェクト属性を作るマクロとして,次のマクロを用意している

4341 【NGKI0520】.

4342

4343 TA_DOM(domid) domid で指定される保護ドメインに属する

4344

4345 マルチプロセッサ対応カーネルでは,オブジェクトが属するクラスを指定する

4346 ためのオブジェクト属性を作るマクロとして,次のマクロを用意している

4347 【NGKI0521】.

4348

4349 TA_CLS(clsid) clsid で指定されるクラスに属する

4350

Page 88: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

88

4351 (3) サービスコールの呼出し方法を指定するマクロ

4352

4353 保護機能対応カーネルでは,サービスコールの呼出し方法を指定するためのマ

4354 クロとして,次のマクロを用意している【NGKI0522】.

4355

4356 SVC_CALL(svc) svc で指定されるサービスコールを関数呼出しによっ

4357 て呼び出すための名称

4358

4359 2.15.4 カーネル共通構成マクロ

4360

4361 (1) サポートする機能【NGKI0523】

4362

4363 TOPPERS_SUPPORT_PROTECT 保護機能対応のカーネル

4364 TOPPERS_SUPPORT_MULTI_PRC マルチプロセッサ対応のカーネル

4365 TOPPERS_SUPPORT_DYNAMIC_CRE 動的生成対応のカーネル

4366

4367 【未決定事項】

4368

4369 マクロ名は,今後変更する可能性がある.

4370

4371 (2) 優先度の範囲【NGKI0524】

4372

4373 TMIN_TPRI タスク優先度の最小値(=1)

4374 TMAX_TPRI タスク優先度の最大値

4375

4376 【TOPPERS/ASPカーネルにおける規定】

4377

4378 ASPカーネルでは,タスク優先度の最大値(TMAX_TPRI)は16に固定されている

4379 【ASPS0014】.ただし,タスク優先度拡張パッケージを用いると,TMAX_TPRIを

4380 256に拡張することができる【ASPS0015】.

4381

4382 【TOPPERS/FMPカーネルにおける規定】

4383

4384 FMPカーネルでは,タスク優先度の最大値(TMAX_TPRI)は16に固定されている

4385 【FMPS0009】.

4386

4387 【TOPPERS/HRP2カーネルにおける規定】

4388

4389 HRP2カーネルでは,タスク優先度の最大値(TMAX_TPRI)は16に固定されている

4390 【HRPS0008】.

4391

4392 【TOPPERS/SSPカーネルにおける規定】

4393

4394 SSPカーネルでは,タスク優先度の最大値(TMAX_TPRI)は16に固定されている

4395 【SSPS0010】.

4396

4397 【μITRON4.0仕様との関係】

4398

4399 メッセージ優先度の最小値(TMIN_MPRI)と最大値(TMAX_MPRI)は,メールボッ

4400 クス機能でのみ使用するため,カーネル共通定義から外した.

Page 89: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

89

4401

4402 (3) プロセッサの数

4403

4404 マルチプロセッサ対応カーネルでは,プロセッサの数を知るためのマクロとし

4405 て,次の構成マクロを用意している【NGKI0525】.

4406

4407 TNUM_PRCID プロセッサの数

4408

4409 (4) 特殊な役割を持ったプロセッサ

4410

4411 マルチプロセッサ対応カーネルでは,特殊な役割を持ったプロセッサを知るた

4412 めのマクロとして,次の構成マクロを用意している【NGKI0526】.

4413

4414 TOPPERS_MASTER_PRCID マスタプロセッサのID番号

4415 TOPPERS_SYSTIM_PRCID システム時刻管理プロセッサのID番号(グ

4416 ローバルタイマ方式の場合のみ)

4417

4418 (5) タイマ方式

4419

4420 マルチプロセッサ対応カーネルでは,システム時刻の方式を知るためのマクロ

4421 として,次の構成マクロを用意している【NGKI0527】.

4422

4423 TOPPERS_SYSTIM_LOCAL ローカルタイマ方式の場合にマクロ定義

4424 TOPPERS_SYSTIM_GLOBAL グローバルタイマ方式の場合にマクロ定義

4425

4426 (6) バージョン情報【NGKI0528】

4427

4428 TKERNEL_MAKER カーネルのメーカコード(=0x0118)

4429 TKERNEL_PRID カーネルの識別番号

4430 TKERNEL_SPVER カーネル仕様のバージョン番号

4431 TKERNEL_PRVER カーネルのバージョン番号

4432

4433 カーネルのメーカコード(TKERNEL_MAKER)は,TOPPERSプロジェクトから配布

4434 するカーネルでは,TOPPERSプロジェクトを表す値(0x0118)に設定されている.

4435

4436 カーネルの識別番号(TKERNEL_PRID)は,TOPPERSカーネルの種類を表す.

4437

4438 0x0001 TOPPERS/JSP カーネル

4439 0x0002 予約(IIMPカーネル)

4440 0x0003 予約(IDLカーネル)

4441 0x0004 TOPPERS/FI4 カーネル

4442 0x0005 TOPPERS/FDMP カーネル

4443 0x0006 TOPPERS/HRP カーネル

4444 0x0007 TOPPERS/ASP カーネル

4445 0x0008 TOPPERS/FMP カーネル

4446 0x0009 TOPPERS/SSPカーネル

4447 0x000a TOPPERS/ASP Safety カーネル

4448

4449 カーネル仕様のバージョン番号(TKERNEL_SPVER)は,上位8ビット(0xf5)が

4450 TOPPERS新世代カーネル仕様であることを,中位4ビットがメジャーバージョン

Page 90: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

90

4451 番号,下位4ビットがマイナーバージョン番号を表す.

4452

4453 カーネルのバージョン番号(TKERNEL_PRVER)は,上位4ビットがメジャーバー

4454 ジョン番号,中位8ビットがマイナーバージョン番号,下位4ビットがパッチレ

4455 ベルを表す.

4456

4457

4458 第3章 システムインタフェースレイヤAPI仕様

4459

4460 3.1 システムインタフェースレイヤの概要

4461

4462 システムインタフェースレイヤ(この章では,SILと略記する)は,デバイスを

4463 直接操作するプログラムが用いるための機能である.ITRONデバイスドライバ設

4464 計ガイドラインの一部分として検討されたものをベースに,TOPPERSプロジェク

4465 トにおいて修正を加えて用いている.

4466

4467 SILの機能は,プロセッサの特権モードで実行されているプログラムが使用する

4468 ことを想定している【NGKI0801】.非特権モードで実行されているプログラム

4469 からSILの機能を呼び出した場合の動作は,次の例外を除いては保証されない

4470 【NGKI0802】.

4471

4472 ・微少時間待ちの機能を呼び出すこと

4473 ・エンディアンの取得のためのマクロを参照すること

4474 ・メモリ空間アクセス関数により,アクセスを許可されたメモリ領域にアクセ

4475 スすること

4476 ・I/O空間アクセス関数により,アクセスを許可されたI/O領域にアクセスする

4477 こと

4478

4479 3.2 SILヘッダファイル

4480

4481 SILを用いるために必要な定義は,SILヘッダファイル(sil.h)およびそこから

4482 インクルードされるファイルに含まれている【NGKI0803】.SILを用いる場合に

4483 は,SILヘッダファイルをインクルードする【NGKI0804】.

4484

4485 3.3 全割込みロック状態の制御

4486

4487 デバイスを扱うプログラムの中では,すべての割込み(NMIを除く,以下同じ)

4488 をマスクしたい場合がある.カーネルで制御できるCPUロック状態は,カーネル

4489 管理外の割込み(NMI以外にカーネル管理外の割込みがあるかはターゲット定義)

4490 をマスクしないため,このような場合に用いることはできない.

4491

4492 そこで,SILでは,すべての割込みをマスクする全割込みロック状態を制御する

4493 ための以下の機能を用意している.

4494

4495 (1) SIL_PRE_LOC

4496

4497 全割込みロック状態の制御に必要な変数を宣言するマクロ【NGKI0805】.通常

4498 は,型と変数名を並べたもので,最後に";"を含まない.

4499

4500 このマクロは,SIL_LOC_INT,SIL_UNL_INTを用いる関数またはブロックの先頭

Page 91: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

91

4501 の変数宣言部に記述しなければならない【NGKI0806】.SIL_LOC_INT,

4502 SIL_UNL_INTを1つの関数内でネストして用いることは可能であるが,その場合

4503 には,ネストレベル毎にブロックを作り,そのブロックの先頭の変数宣言部に

4504 SIL_PRE_LOCを記述しなければならない【NGKI0807】.そのように記述しなかっ

4505 た場合の動作は保証されない【NGKI0808】.

4506

4507 (2) SIL_LOC_INT()

4508

4509 全割込みロックフラグをセットすることで,NMIを除くすべての割込みをマスク

4510 し,全割込みロック状態に遷移する【NGKI0809】.

4511

4512 (3) SIL_UNL_INT()

4513

4514 全割込みロックフラグを,対応するSIL_LOC_INTを実行する前の状態に戻す

4515 【NGKI0810】.SIL_LOC_INTを実行せずにSIL_UNL_INTを呼び出した場合の動作

4516 は保証されない【NGKI0811】.

4517

4518 なお,全割込みロック状態で呼び出せるサービスコールなどの制限事項につい

4519 ては,「2.5.4 全割込みロック状態と全割込みロック解除状態」の節を参照す

4520 ること.

4521

4522 【補足説明】

4523

4524 全割込みロック状態の制御機能の使用例は次の通り.

4525

4526 {

4527 SIL_PRE_LOC;

4528

4529 SIL_LOC_INT();

4530 // この間はNMIを除くすべての割込みがマスクされる.

4531 // この間にサービスコールを呼び出してはならない(一部例外あり).

4532 SIL_UNL_INT();

4533 }

4534

4535 3.4 SILスピンロック

4536

4537 マルチプロセッサシステムにおいて,カーネルの機能を用いずに,他のプロセッ

4538 サとの間でも排他制御を実現したい場合がある.そこでSILでは,割込みのマス

4539 クとプロセッサ間ロックの取得により排他制御を行うためのスピンロックの機

4540 能を用意している.これを,カーネルのスピンロック機能と区別するために,

4541 SILスピンロックと呼ぶ.

4542

4543 プロセッサ間ロックを取得している間は,全割込みロック状態にすることです

4544 べての割込み(NMIを除く)がマスクされる【NGKI0812】.ロックが他のプロセッ

4545 サに取得されている場合には,ロックが取得できるまでループによって待つ

4546 【NGKI0813】.ロックの取得を待つ間は,割込みはマスクされない(ロックの

4547 取得を試みる前にマスクしていた割込みは,マスク解除されない)

4548 【NGKI0814】.プロセッサ間ロックを取得し割込みをマスクすることを,SILス

4549 ピンロックを取得するという.また,プロセッサ間ロックを返却し割込みをマ

4550 スク解除することを,SILスピンロックを返却するという.

Page 92: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

92

4551

4552 SILで取得・返却するプロセッサ間ロックは,システムに唯一存在する

4553 【NGKI0815】.

4554

4555 (1) SIL_PRE_LOC

4556

4557 全割込みロック状態の制御に必要な変数を宣言するマクロであるが,SILスピン

4558 ロックの取得・解放にも兼用する【NGKI0816】.

4559

4560 このマクロは,SIL_LOC_SPN,SIL_UNL_SPNを用いる関数またはブロックの先頭

4561 の変数宣言部に記述しなければならない【NGKI0817】.SIL_LOC_SPN,

4562 SIL_UNL_SPNを,同じ関数内のSIL_LOC_INT,SIL_UNL_INTとネストして用いるこ

4563 とは可能であるが,その場合には,ネストレベル毎にブロックを作り,そのブ

4564 ロックの先頭の変数宣言部にSIL_PRE_LOCを記述しなければならない

4565 【NGKI0818】.そのように記述しなかった場合の動作は保証されない

4566 【NGKI0819】.

4567

4568 (2) SIL_LOC_SPN()

4569

4570 SILスピンロックが取得されていない状態である場合には,プロセッサ間ロック

4571 の取得を試みる【NGKI0820】.ロックが他のプロセッサに取得されている状態

4572 である場合や,他のプロセッサがロックの取得に成功した場合には,ロックが

4573 返却されるまでループによって待ち,返却されたらロックの取得を試みる

4574 【NGKI0821】.ロックの取得に成功した場合には,全割込みロックフラグをセッ

4575 トし,全割込みロック状態に遷移する【NGKI0822】.

4576

4577 (3) SIL_UNL_SPN()

4578

4579 プロセッサ間ロックを返却し,全割込みロックフラグを対応するSIL_LOC_SPNを

4580 実行する前の状態に戻す【NGKI0823】.

4581

4582 SILスピンロックを取得している状態でSIL_LOC_SPNを呼び出した場合の動作は

4583 保証されない【NGKI0824】.逆に,SILスピンロックを取得していない状態で

4584 SIL_UNL_SPNを呼び出した場合の動作も保証されない【NGKI0825】.

4585

4586 なお,SILスピンロック取得中は全割込みロック状態となっているため,SILス

4587 ピンロック取得中に呼び出せるサービスコールなどについては,「2.5.4 全割

4588 込みロック状態と全割込みロック解除状態」の節の制限事項が適用される.

4589

4590 なお,マルチプロセッサシステム以外では,SIL_LOC_SPNとSIL_UNL_SPNは用意

4591 されていない【NGKI0826】.

4592

4593 【使用上の注意】

4594

4595 全割込ロック状態やCPUロック状態でSIL_LOC_SPNを呼び出すことはできるが,

4596 割込みがマスクされている時間が長くなるために,そのような使い方は避ける

4597 べきである.

4598

4599 【補足説明】

4600

Page 93: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

93

4601 SILスピンロック機能の使用例は次の通り.

4602

4603 {

4604 SIL_PRE_LOC;

4605

4606 SIL_LOC_SPN();

4607 // この間はSILスピンロックを取得している.

4608 // この間はNMIを除くすべての割込みがマスクされる.

4609 // この間にサービスコールを呼び出してはならない(一部例外あり).

4610 SIL_UNL_SPN();

4611 }

4612

4613 3.5 微少時間待ち

4614

4615 デバイスをアクセスする際に,微少な時間待ちを入れなければならない場合が

4616 ある.そのような場合に,NOP命令をいくつか入れるなどの方法で対応すると,

4617 ポータビリティを損なうことになる.そこで,SILでは,微少な時間待ちを行う

4618 ための以下の機能を用意している.

4619

4620 (1) void sil_dly_nse(ulong_t dlytim)

4621

4622 dlytimで指定された以上の時間(単位はナノ秒),ループなどによって待つ

4623 【NGKI0827】.指定した値によっては,指定した時間よりもかなり長く待つ場

4624 合があるので注意すること.

4625

4626 3.6 エンディアンの取得

4627

4628 プロセッサのバイトエンディアンを取得するためのマクロとして,SILでは,以

4629 下のマクロを定義している.

4630

4631 (1) SIL_ENDIAN_BIG,SIL_ENDIAN_LITTLE

4632

4633 ビッグエンディアンプロセッサではSIL_ENDIAN_BIGを,リトルエンディアンプ

4634 ロセッサではSIL_ENDIAL_LITTLEを,マクロ定義している【NGKI0828】.

4635

4636 3.7 メモリ空間アクセス関数

4637

4638 メモリ空間にマッピングされたデバイスレジスタや,デバイスとの共有メモリ

4639 をアクセスするために,SILでは,以下の関数を用意している.

4640

4641 (1) uint8_t sil_reb_mem(const uint8_t *mem)

4642

4643 memで指定されるアドレスから8ビット単位で読み出した値を返す【NGKI0829】.

4644

4645 (2) void sil_wrb_mem(uint8_t *mem, uint8_t data)

4646

4647 memで指定されるアドレスにdataで指定される値を8ビット単位で書き込む

4648 【NGKI0830】.

4649

4650 (3) uint16_t sil_reh _mem(const uint16_t *mem)

Page 94: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

94

4651

4652 memで指定されるアドレスから16ビット単位で読み出した値を返す【NGKI0831】.

4653

4654 (4) void sil_wrh_mem(uint16_t *mem, uint16_t data)

4655

4656 memで指定されるアドレスにdataで指定される値を16ビット単位で書き込む

4657 【NGKI0832】.

4658

4659 (5) uint16_t sil_reh_lem(const uint16_t *mem)

4660

4661 memで指定されるアドレスから16ビット単位でリトルエンディアンで読み出した

4662 値を返す【NGKI0833】.リトルエンディアンプロセッサでは,sil_reh_memと一

4663 致する.ビッグエンディアンプロセッサでは,sil_reh_memが返す値を,エンディ

4664 アン変換した値を返す.

4665

4666 (6) void sil_wrh_lem(uint16_t *mem, uint16_t data)

4667

4668 memで指定されるアドレスにdataで指定される値を16ビット単位でリトルエンディ

4669 アンで書き込む【NGKI0834】.リトルエンディアンプロセッサでは,

4670 sil_wrh_memと一致する.ビッグエンディアンプロセッサでは,dataをエンディ

4671 アン変換した値を,sil_wrh_memで書き込むのと同じ結果となる.

4672

4673 (7) uint16_t sil_reh_bem(const uint16_t *mem)

4674

4675 memで指定されるアドレスから16ビット単位でビッグエンディアンで読み出した

4676 値を返す【NGKI0835】.ビッグエンディアンプロセッサでは,sil_reh_memと一

4677 致する.リトルエンディアンプロセッサでは,sil_reh_memが返す値を,エンディ

4678 アン変換した値を返す.

4679

4680 (8) void sil_wrh_bem(uint16_t *mem, uint16_t data)

4681

4682 memで指定されるアドレスにdataで指定される値を16ビット単位でビッグエンディ

4683 アンで書き込む【NGKI0836】.ビッグエンディアンプロセッサでは,

4684 sil_wrh_memと一致する.リトルエンディアンプロセッサでは,dataをエンディ

4685 アン変換した値を,sil_wrh_memで書き込むのと同じ結果となる.

4686

4687 (9) uint32_t sil_rew_mem(const uint32_t *mem)

4688

4689 memで指定されるアドレスから32ビット単位で読み出した値を返す【NGKI0837】.

4690

4691 (10) void sil_wrw_mem(uint32_t *mem, uint32_t data)

4692

4693 memで指定されるアドレスにdataで指定される値を32ビット単位で書き込む

4694 【NGKI0838】.

4695

4696 (11) uint32_t sil_rew_lem(const uint32_t *mem)

4697

4698 memで指定されるアドレスから32ビット単位でリトルエンディアンで読み出した

4699 値を返す【NGKI0839】.リトルエンディアンプロセッサでは,sil_rew_memと一

4700 致する.ビッグエンディアンプロセッサでは,sil_rew_memが返す値を,エンディ

Page 95: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

95

4701 アン変換した値を返す.

4702

4703 (12) void sil_wrw_lem(uint32_t *mem, uint32_t data)

4704

4705 memで指定されるアドレスにdataで指定される値を32ビット単位でリトルエンディ

4706 アンで書き込む【NGKI0840】.リトルエンディアンプロセッサでは,

4707 sil_wrw_memと一致する.ビッグエンディアンプロセッサでは,dataをエンディ

4708 アン変換した値を,sil_wrw_memで書き込むのと同じ結果となる.

4709

4710 (13) uint32_t sil_rew_bem(const uint32_t *mem)

4711

4712 memで指定されるアドレスから32ビット単位でビッグエンディアンで読み出した

4713 値を返す【NGKI0841】.ビッグエンディアンプロセッサでは,sil_rew_memと一

4714 致する.リトルエンディアンプロセッサでは,sil_rew_memが返す値を,エンディ

4715 アン変換した値を返す.

4716

4717 (14) void sil_wrw_bem(uint32_t *mem, uint32_t data)

4718

4719 memで指定されるアドレスにdataで指定される値を32ビット単位でビッグエンディ

4720 アンで書き込む【NGKI0842】.ビッグエンディアンプロセッサでは,

4721 sil_wrw_memと一致する.リトルエンディアンプロセッサでは,dataをエンディ

4722 アン変換した値を,sil_wrw_memで書き込むのと同じ結果となる.

4723

4724 3.8 I/O空間アクセス関数

4725

4726 メモリ空間とは別にI/O空間を持つプロセッサでは,I/O空間にあるデバイスレ

4727 ジスタをアクセスするために,メモリ空間アクセス関数と同等の以下の関数を

4728 用意している【NGKI0843】.

4729

4730 (1) uint8_t sil_reb_iop(const uint8_t *iop)

4731 (2) void sil_wrb_iop(uint8_t *iop, uint8_t data)

4732 (3) uint16_t sil_reh_iop(const uint16_t *iop)

4733 (4) void sil_wrh_iop(uint16_t *iop, uint16_t data)

4734 (5) uint16_t sil_reh_lep(const uint16_t *iop)

4735 (6) void sil_wrh_lep(uint16_t *iop, uint16_t data)

4736 (7) uint16_t sil_reh_b ep(const uint16_t *iop)

4737 (8) void sil_wrh_bep(uint16_t *iop, uint16_t data)

4738 (9) uint32_t sil_rew_iop(const uint32_t *iop)

4739 (10) void sil_wrw_iop(uint32_t *iop, uint32_t data)

4740 (11) uint32_t sil_rew_lep(const uint32_t *i op)

4741 (12) void sil_wrw_lep(uint32_t *iop, uint32_t data)

4742 (13) uint32_t sil_rew_bep(const uint32_t *iop)

4743 (14) void sil_wrw_bep(uint32_t *iop, uint32_t data)

4744

4745 3.9 プロセッサIDの参照

4746

4747 マルチプロセッサシステムにおいては,プログラムがどのプロセッサで実行さ

4748 れているかを参照するために,以下の関数を用意している.

4749

4750 (1) void sil_get_pid(ID *p_prcid)

Page 96: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

96

4751

4752 この関数を呼び出したプログラムを実行しているプロセッサのID番号を参照し,

4753 p_prcidで指定したメモリ領域に返す【NGKI0844】.

4754

4755 【使用上の注意】

4756

4757 タスクは,sil_get_pidを用いて,自タスクを実行しているプロセッサを正しく

4758 参照できるとは限らない.これは,sil_get_pidを呼び出し,自タスクを実行し

4759 ているプロセッサのID番号を参照した直後に割込みが発生した場合,

4760 sil_get_pidから戻ってきた時には自タスクを実行しているプロセッサが変化し

4761 ている可能性があるためである.

4762

4763

4764 第4章 カーネルAPI仕様

4765

4766 この章では,カーネルのAPI仕様について規定する.

4767

4768 【μITRON4.0仕様との関係】

4769

4770 TOPPERS共通データ型に従い,パラメータのデータ型を次の通り変更した.これ

4771 らの変更については,個別のAPI仕様では記述しない.

4772

4773 INT → int_t

4774 UINT → uint_t

4775 VP → void *

4776 VP_INT → intptr_t

4777

4778 【μITRON4.0/PX仕様との関係】

4779

4780 ID番号で識別するオブジェクトのアクセス許可ベクタをデフォルト以外に設定

4781 する場合には,オブジェクトを生成した後に設定することとし,アクセス許可

4782 ベクタを設定する静的API(SAC_YYY)を新設した.逆に,アクセス許可ベクタ

4783 を指定してオブジェクトを生成する機能(CRA_YYY,cra_yyy,acra_yyy)は廃

4784 止した.これらの変更については,個別のAPI仕様では記述しない.

4785

4786 4.1 タスク管理機能

4787

4788 タスクは,プログラムの並行実行の単位で,カーネルが実行を制御する処理単

4789 位である.タスクは,タスクIDと呼ぶID番号によって識別する【NGKI1001】.

4790

4791 タスク管理機能に関連して,各タスクが持つ情報は次の通り【NGKI1002】.

4792

4793 ・タスク属性

4794 ・タスク状態

4795 ・ベース優先度

4796 ・現在優先度

4797 ・起動要求キューイング数

4798 ・割付けプロセッサ(マルチプロセッサ対応カーネルの場合)

4799 ・次回起動時の割付けプロセッサ(マルチプロセッサ対応カーネルの場合)

4800 ・拡張情報

Page 97: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

97

4801 ・メインルーチンの先頭番地

4802 ・起動時優先度

4803 ・実行時優先度(TOPPERS/SSPカーネルの場合)

4804 ・スタック領域

4805 ・システムスタック領域(保護機能対応カーネルの場合)

4806 ・アクセス許可ベクタ(保護機能対応カーネルの場合)

4807 ・属する保護ドメイン(保護機能対応カーネルの場合)

4808 ・属するクラス(マルチプロセッサ対応カーネルの場合)

4809

4810 タスクのベース優先度は,タスクの現在優先度を決定するために使われる優先

4811 度であり,タスクの起動時に起動時優先度に初期化される【NGKI1003】.

4812

4813 タスクの現在優先度は,タスクの実行順位を決定するために使われる優先度で

4814 ある.単にタスクの優先度と言った場合には,現在優先度のことを指す.タス

4815 クがミューテックスをロックしていない間は,タスクの現在優先度はベース優

4816 先度に一致する【NGKI1004】.ミューテックスをロックしている間のタスクの

4817 現在優先度については,「4.4.6 ミューテックス」の節を参照すること.

4818

4819 タスクの起動要求キューイング数は,処理されていないタスクの起動要求の数

4820 であり,タスクの生成時に0に初期化される【NGKI1005】.

4821

4822 割付けプロセッサは,マルチプロセッサ対応カーネルにおいて,タスクを実行

4823 するプロセッサで,タスクの生成時に,タスクが属するクラスによって定まる

4824 初期割付けプロセッサに初期化される【NGKI1006】.

4825

4826 次回起動時の割付けプロセッサは,マルチプロセッサ対応カーネルにおいて,

4827 タスクが次に起動される時に割り付けられるプロセッサで,タスクの生成時に

4828 未設定の状態に初期化される【NGKI1007】.タスクの起動時に,次回起動時の

4829 割付けプロセッサが設定されていれば,タスクの割付けプロセッサがそのプロ

4830 セッサに変更され,次回起動時の割付けプロセッサは未設定の状態に戻される

4831 【NGKI1008】.次回起動時の割付けプロセッサが未設定の場合には,タスクの

4832 割付けプロセッサは変更されない(つまり,タスクが前に実行されていたのと

4833 同じプロセッサで実行される)【NGKI1009】.

4834

4835 保護機能対応カーネルにおいては,スタック領域の扱いは,ユーザタスクとシ

4836 ステムタスクで異なる.ユーザタスクのスタック領域は,ユーザタスクが非特

4837 権モードで実行する間に用いるスタック領域であり,ユーザスタック領域と呼

4838 ぶ【NGKI1010】.その扱いについては,「2.11.6 ユーザタスクのユーザスタッ

4839 ク領域」の節を参照すること.システムタスクのスタック領域は,カーネルの

4840 用いるオブジェクト管理領域と同様に扱われる【NGKI1011】.

4841

4842 システムスタック領域は,保護機能対応カーネルにおいて,ユーザタスクがサー

4843 ビスコール(拡張サービスコールを含む)を呼び出し,特権モードで実行する

4844 間に用いるスタック領域である【NGKI1012】.システムスタック領域は,カー

4845 ネルの用いるオブジェクト管理領域と同様に扱われる【NGKI1013】.

4846

4847 タスク属性には,次の属性を指定することができる【NGKI1014】.

4848

4849 TA_ACT 0x02U タスクの生成時にタスクを起動する

4850 TA_RSTR 0x04U 生成するタスクを制約タスクとする

Page 98: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

98

4851

4852 TA_ACTを指定しない場合,タスクの生成直後には,タスクは休止状態となる

4853 【NGKI1015】.また,ターゲットによっては,ターゲット定義のタスク属性を

4854 指定できる場合がある【NGKI1016】.ターゲット定義のタスク属性として,次

4855 の属性を予約している【NGKI1017】.

4856

4857 TA_FPU FPU レジスタをコンテキストに含める

4858

4859 C言語によるタスクの記述形式は次の通り【NGKI1018】.

4860

4861 void task(intptr_t exinf)

4862 {

4863 タスク本体

4864 ext_tsk();

4865 }

4866

4867 exinfには,タスクの拡張情報が渡される【NGKI1019】.ext_tskを呼び出さず,

4868 タスクのメインルーチンからリターンした場合,ext_tskを呼び出した場合と同

4869 じ動作をする【NGKI1020】.

4870

4871 タスク管理機能に関連するカーネル構成マクロは次の通り.

4872

4873 TMAX_ACTCNT タスクの起動要求キューイング数の最大値【NGKI1021】

4874

4875 TNUM_TSKID 登録できるタスクの数(動的生成対応でないカーネルで

4876 は,静的APIによって登録されたタスクの数に一致)

4877 【NGKI1022】

4878

4879 【TOPPERS/ASPカーネルにおける規定】

4880

4881 ASPカーネルでは,TMAX_ACTCNTは1に固定されている【ASPS0101】.また,制約

4882 タスクはサポートしていない【ASPS0102】.ただし,制約タスク拡張パッケー

4883 ジを用いると,制約タスクの機能を追加することができる【ASPS0103】.

4884

4885 【TOPPERS/FMPカーネルにおける規定】

4886

4887 FMPカーネルでは,TMAX_ACTCNTは1に固定されている【FMPS0101】.また,制約

4888 タスクはサポートしていない【FMPS0102】.

4889

4890 【TOPPERS/HRP2カーネルにおける規定】

4891

4892 HRP2カーネルでは,TMAX_ACTCNTは1に固定されている【HRPS0101】.また,制

4893 約タスクはサポートしていない【HRPS0102】.

4894

4895 【TOPPERS/SSPカーネルにおける規定】

4896

4897 SSPカーネルでは,TMAX_ACTCNTは1に固定されている【SSPS0101】.

4898

4899 SSPカーネルは,制約タスクのみをサポートすることから,すべてのタスクでス

4900 タック領域を共有しており,タスク毎にスタック領域の情報を持たない

Page 99: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

99

4901 【SSPS0102】.

4902

4903 SSPカーネルにおける追加機能として,タスクに対して,実行時優先度の情報を

4904 持つ【SSPS0103】.SSPカーネルにおいては,タスクが起動された後,最初に実

4905 行状態になる時に,タスクのベース優先度が,タスクの実行時優先度に設定さ

4906 れる【SSPS0104】.実行時優先度の機能は,起動時優先度よりも高い優先度で

4907 タスクを実行することで,同時期に共有スタック領域を使用している状態にな

4908 るタスクの組み合わせを限定し,スタック領域を節約するための機能である.

4909

4910 タスクの実行時優先度は,実行時優先度を定義する静的API(DEF_EPR)によっ

4911 て設定する【SSPS0105】.実行時優先度を定義しない場合,タスクの実行時優

4912 先度は,起動時優先度と同じ値に設定される【SSPS0106】.

4913

4914 〔実行時優先度によるスタック領域の節約〕

4915

4916 いずれのタスクにも実行時優先度が設定されていない場合には,すべてのタス

4917 クが同時期に共有スタック領域を使用している状態になる可能性があるため,

4918 すべてのタスクのスタック領域のサイズの和に,非タスクコンテキスト用のス

4919 タック領域のサイズを加えたものが,共有スタック領域に必要なサイズとなる.

4920

4921 タスクAに対して実行時優先度が設定されており,タスクAの起動時優先度より

4922 も高く,タスクAの実行時優先度と同じかそれよりも低い起動時優先度を持つタ

4923 スクBがある場合,タスクAとタスクBは同時期に共有スタック領域を使用してい

4924 る状態にならない.そのため,タスクAとタスクBの内,サイズが小さい方のス

4925 タック領域のサイズは,共有スタック領域のサイズに加える必要がなくなり,

4926 スタック領域を節約できることになる.

4927

4928 【μITRON4.0仕様との関係】

4929

4930 この仕様では,自タスクの拡張情報の参照するサービスコール(get_inf)をサ

4931 ポートし,起動コードを指定してタスクを起動するサービスコール(sta_tsk),

4932 タスクを終了と同時に削除するサービスコール(exd_tsk),タスクの状態を参

4933 照するサービスコールの簡易版(ref_tst)はサポートしないこととした.

4934

4935 TNUM_TSKIDは,μITRON4.0仕様に規定されていないカーネル構成マクロである.

4936 ----------------------------------------------------------------------

4937 CRE_TSK タスクの生成〔S〕【NGKI1023】

4938 acre_tsk タスクの生成〔TD〕【NGKI1024】

4939

4940 【静的API】

4941 *保護機能対応でないカーネルの場合

4942 CRE_TSK(ID tskid, { ATR tskatr, intptr_t exinf, TASK task,

4943 PRI itskpri, SIZE stksz, STK_T *stk })

4944

4945 *保護機能対応カーネルの場合

4946 CRE_TSK(ID tskid, { ATR tskatr, intptr_t exinf, TASK task,

4947 PRI itskpri, SIZE stksz, STK_T *stk, SIZE sstksz, STK_T *sstk })

4948 ※ sstkszおよびsstkの記述は省略することができる【NGKI1025】.

4949

4950 【C言語API】

Page 100: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

100

4951 ER_ID tskid = acre_tsk(const T_CTSK *pk_ctsk)

4952

4953 【パラメータ】

4954 ID tskid 生成するタスクのID番号(CRE_TSKの場合)

4955 T_CTSK * pk_ctsk タスクの生成情報を入れたパケットへのポイン

4956 タ(静的APIを除く)

4957

4958 *タスクの生成情報(パケットの内容)

4959 ATR tskatr タスク属性

4960 intptr_t exinf タスクの拡張情報

4961 TASK task タスクのメインルーチンの先頭番地

4962 PRI itskpri タスクの起動時優先度

4963 SIZE stksz タスクのスタック領域のサイズ(バイト数)

4964 STK_T * stk タスクのスタック領域の先頭番地

4965 SIZE sstksz タスクのシステムスタック領域のサイズ(バイ

4966 ト数,保護機能対応カーネルの場合,静的API

4967 においては省略可)

4968 STK_T * sstk タスクのシステムスタック領域の先頭番地(保

4969 護機能対応カーネルの場合,静的APIにおいて

4970 は省略可)

4971

4972 【リターンパラメータ】

4973 ER_ID tskid 生成されたタスクのID番号(正の値)またはエ

4974 ラーコード

4975

4976 【エラーコード】

4977 E_CTX コンテキストエラー

4978 ・非タスクコンテキストからの呼出し〔s〕【NGKI1026】

4979 ・CPUロック状態からの呼出し〔s〕【NGKI1027】

4980 E_RSATR 予約属性

4981 ・tskatrが無効【NGKI1028】

4982 ・属する保護ドメインの指定が有効範囲外または無所属〔sP〕

4983 【NGKI1029】

4984 ・保護ドメインの囲みの中に記述されていない〔SP〕【NGKI1030】

4985 ・属するクラスの指定が有効範囲外〔sM〕【NGKI1031】

4986 ・クラスの囲みの中に記述されていない〔SM〕【NGKI1032】

4987 E_PAR パラメータエラー

4988 ・taskがプログラムの先頭番地として正しくない【NGKI1033】

4989 ・itskpriが有効範囲外【NGKI1034】

4990 ・その他の条件については機能の項を参照

4991 E_OACV オブジェクトアクセス違反

4992 ・システム状態に対する管理操作が許可されていない〔sP〕

4993 【NGKI1035】

4994 E_MACV メモリアクセス違反

4995 ・pk_ctskが指すメモリ領域への読出しアクセスが許可されて

4996 いない〔sP〕【NGKI1036】

4997 E_NOID ID番号不足

4998 ・割り付けられるタスクIDがない〔sD〕【NGKI1037】

4999 E_NOMEM メモリ不足

5000 ・スタック領域が確保できない【NGKI1038】

Page 101: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

101

5001 ・システムスタック領域が確保できない【NGKI1039】

5002 E_OBJ オブジェクト状態エラー

5003 ・tskidで指定したタスクが登録済み(CRE_TSKの場合)【NGKI1040】

5004 ・その他の条件については機能の項を参照

5005

5006 【機能】

5007

5008 各パラメータで指定したタスク生成情報に従って,タスクを生成する.具体的

5009 な振舞いは以下の通り.

5010

5011 まず,stkとstkszからタスクが用いるスタック領域が設定される【NGKI1041】.

5012 ただし,保護機能対応カーネルで,生成するタスクがシステムタスクの場合に

5013 は,スタック領域の設定にsstkszも用いられる.stkszに0以下の値を指定した

5014 時や,設定されるスタック領域のサイズがターゲット定義の最小値よりも小さ

5015 くなる時には,E_PARエラーとなる【NGKI1042】.

5016

5017 また,保護機能対応カーネルで,生成するタスクがユーザタスクの場合には,

5018 sstkとsstkszからシステムスタック領域が設定される【NGKI1043】.この場合,

5019 sstkszに0以下の値を指定した時や,ターゲット定義の最小値よりも小さい値を

5020 指定した時には,E_PARエラーとなる【NGKI1044】.

5021

5022 次に,生成されたタスクに対してタスク生成時に行うべき初期化処理が行われ,

5023 生成されたタスクは休止状態になる【NGKI1045】.さらに,tskatrにTA_ACTを

5024 指定した場合には,タスク起動時に行うべき初期化処理が行われ,生成された

5025 タスクは実行できる状態になる【NGKI1046】.

5026

5027 静的APIにおいては,tskidはオブジェクト識別名,tskatr,itskpri,stkszは

5028 整数定数式パラメータ,exinf,task,stkは一般定数式パラメータである

5029 【NGKI1047】.コンフィギュレータは,静的APIのメモリ不足(E_NOMEM)エラー

5030 を検出することができない【NGKI1048】.

5031

5032 〔stkにNULLを指定した場合〕

5033

5034 stkをNULLとした場合,stkszで指定したサイズのスタック領域が,コンフィギュ

5035 レータまたはカーネルにより確保される【NGKI1049】.stkszにターゲット定義

5036 の制約に合致しないサイズを指定した時には,ターゲット定義の制約に合致す

5037 るように大きい方に丸めたサイズで確保される【NGKI1050】.

5038

5039 保護機能対応カーネルにおいて,生成するタスクがユーザタスクの場合,コン

5040 フィギュレータまたはカーネルにより確保されるスタック領域(ユーザスタッ

5041 ク領域)は,「2.11.6 ユーザタスクのユーザスタック領域」の節の規定に従っ

5042 て,メモリオブジェクトとしてカーネルに登録される【NGKI1051】.

5043

5044 静的APIにより制約タスクを生成する場合(tskatrにTA_RSTRを指定して生成す

5045 る場合),スタック領域は,制約タスクの起動時優先度毎に確保され,同じ起

5046 動時優先度を持つ制約タスクで共有される【NGKI1052】.確保されるスタック

5047 領域のサイズは,それを共有する制約タスクのスタック領域のサイズ(stksz)

5048 の最大値となる【NGKI1053】.マルチプロセッサ対応カーネルでは,以上のス

5049 タック領域の確保処理を,制約タスクの初期割付けプロセッサ毎に行う

5050 【NGKI1054】.

Page 102: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

102

5051

5052 〔stkにNULL以外を指定した場合〕

5053

5054 stkにNULL以外を指定した場合,stkとstkszで指定したスタック領域は,アプリ

5055 ケーションで確保しておく必要がある【NGKI1055】.スタック領域をアプリケー

5056 ションで確保する方法については,「2.15.3 カーネル共通マクロ」の節を参照

5057 すること.その方法に従わず,stkやstkszにターゲット定義の制約に合致しな

5058 い先頭番地やサイズを指定した時には,E_PARエラーとなる【NGKI1056】.

5059

5060 保護機能対応カーネルにおいて,生成するタスクがシステムタスクの場合に,

5061 stkとstkszで指定したスタック領域がカーネル専用のメモリオブジェクトに含

5062 まれない場合,E_OBJエラーとなる【NGKI1057】.

5063

5064 保護機能対応カーネルにおいて,生成するタスクがユーザタスクの場合,stkと

5065 stkszで指定したスタック領域(ユーザスタック領域)は,「2.11.6 ユーザタ

5066 スクのユーザスタック領域」の節の規定に従って,メモリオブジェクトとして

5067 カーネルに登録される【NGKI1058】.そのため,上の方法を用いてスタック領

5068 域を確保しても,ターゲット定義の制約に合致する先頭番地とサイズとなると

5069 は限らず,スタック領域をアプリケーションで確保する方法は,ターゲット定

5070 義である【NGKI1059】.また,stkとstkszで指定したスタック領域が,登録済

5071 みのメモリオブジェクトとメモリ領域が重なる場合には,E_OBJエラーとなる

5072 【NGKI1060】.

5073

5074 〔sstkとsstkszの扱い〕

5075

5076 保護機能対応カーネルにおけるsstkとsstkszの扱いは,生成するタスクがユー

5077 ザタスクの場合とシステムタスクの場合で異なる.

5078

5079 生成するタスクがユーザタスクの場合の扱いは次の通り.

5080

5081 sstkの記述を省略するか,sstkをNULLとした場合,sstkszで指定したサイズの

5082 システムスタック領域が,コンフィギュレータまたはカーネルにより確保され

5083 る【NGKI1061】.sstkszにターゲット定義の制約に合致しないサイズを指定し

5084 た時には,ターゲット定義の制約に合致するように大きい方に丸めたサイズで

5085 確保される【NGKI1062】.sstkszの記述も省略した場合には,ターゲット定義

5086 のデフォルトのサイズで確保される【NGKI1063】.

5087

5088 sstkにNULL以外を指定した場合,sstkとsstkszで指定したスタック領域は,ア

5089 プリケーションで確保しておく必要がある【NGKI1064】.スタック領域をアプ

5090 リケーションで確保する方法については,「2.15.3 カーネル共通マクロ」の節

5091 を参照すること.その方法に従わず,sstkやsstkszにターゲット定義の制約に

5092 合致しない先頭番地やサイズを指定した時には,E_PARエラーとなる

5093 【NGKI1065】.また,stkとstkszで指定したシステムスタック領域がカーネル

5094 専用のメモリオブジェクトに含まれない場合,E_OBJエラーとなる【NGKI1066】.

5095

5096 生成するタスクがシステムタスクの場合の扱いは次の通り.

5097

5098 sstkに指定することができるのは,NULLのみである.sstkにNULL以外を指定し

5099 た場合には,E_PARエラーとなる【NGKI1068】.

5100

Page 103: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

103

5101 sstkszに0以外の値を指定した場合で,stkがNULLの場合には,コンフィギュレー

5102 タまたはカーネルにより確保されるスタック領域のサイズに,sstkszが加えら

5103 れる【NGKI1069】.stkszにsstkszを加えた値が,ターゲット定義の制約に合致

5104 しないサイズになる時には,ターゲット定義の制約に合致するように大きい方

5105 に丸めたサイズで確保される【NGKI1070】.

5106

5107 sstkszに0以外の値を指定した場合で,stkがNULLでない場合には,E_PARエラー

5108 となる【NGKI1071】.

5109

5110 sstkszに0を指定した場合,これらの処理は行わず,E_PARエラーにもならない

5111 【NGKI1072】.

5112

5113 【TOPPERS/ASPカーネルにおける規定】

5114

5115 ASPカーネルでは,CRE_TSKのみをサポートする【ASPS0104】.ただし,動的生

5116 成機能拡張パッケージでは,acre_tskもサポートする【ASPS0105】.

5117

5118 【TOPPERS/FMPカーネルにおける規定】

5119

5120 FMPカーネルでは,CRE_TSKのみをサポートする【FMPS0103】.

5121

5122 【TOPPERS/HRP2カーネルにおける規定】

5123

5124 HRP2カーネルでは,CRE_TSKのみをサポートする【HRPS0103】.

5125

5126 【TOPPERS/SSPカーネルにおける規定】

5127

5128 SSPカーネルでは,CRE_TSKのみをサポートする【SSPS0107】.

5129

5130 SSPカーネルでは,複数のタスクに対して,同じ起動時優先度を設定することは

5131 できない.設定した場合には,コンフィギュレータがE_PARエラーを報告する

5132 【SSPS0109】.

5133

5134 SSPカーネルでは,制約タスクのみをサポートするため,タスク属性にTA_RSTR

5135 を指定しない場合でも,生成されるタスクは制約タスクとなる【SSPS0110】.

5136

5137 SSPカーネルでは,stkにはNULLを指定しなくてはならず,その場合でも,コン

5138 フィギュレータはタスクのスタック領域を確保しない【SSPS0111】.これは,

5139 SSPカーネルでは,すべての処理単位が共有スタック領域を使用し,タスク毎に

5140 スタック領域を持たないためである.stkにNULL以外を指定した場合には,

5141 E_PARエラーとなる【SSPS0112】.

5142

5143 共有スタック領域の設定方法については,DEF_STKの項を参照すること.

5144

5145 【μITRON4.0仕様との関係】

5146

5147 taskのデータ型をTASKに,stkのデータ型をSTK_T *に変更した.COUNT_STK_Tと

5148 ROUND_STK_Tを新設し,スタック領域をアプリケーションで確保する方法を規定

5149 した.

5150

Page 104: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

104

5151 【μITRON4.0/PX仕様との関係】

5152

5153 sstkのデータ型をSTK_T *に変更した.システムスタック領域をアプリケーショ

5154 ンで確保する方法を規定した.

5155

5156 【未決定事項】

5157

5158 サービスコール(acre_tsk)により,stkにNULLを指定して制約タスクを生成し

5159 た場合のスタック領域の確保方法については,今後の課題である.

5160

5161 【仕様決定の理由】

5162

5163 保護機能対応カーネルにおいて,sstkszおよびsstkの記述は省略することがで

5164 きることとしたのは,保護機能対応でないカーネル用のシステムコンフィギュ

5165 レーションファイルを,保護機能対応カーネルにも変更なしに使えるようにす

5166 るためである.

5167 ----------------------------------------------------------------------

5168 AID_TSK 割付け可能なタスクIDの数の指定〔SD〕【NGKI1073】

5169

5170 【静的API】

5171 AID_TSK(uint_t notsk)

5172

5173 【パラメータ】

5174 uint_t notsk 割付け可能なタスクIDの数

5175

5176 【エラーコード】

5177 E_RSATR 予約属性

5178 ・保護ドメインの囲みの中に記述されていない〔P〕【NGKI1074】

5179 ・クラスの囲みの中に記述されていない〔M〕【NGKI1075】

5180 E_PAR パラメータエラー

5181 ・notskが負の値【NGKI3276】

5182

5183 【機能】

5184

5185 notskで指定した数のタスクIDを,タスクを生成するサービスコールによって割

5186 付け可能なタスクIDとして確保する【NGKI1076】.

5187

5188 notskは整数定数式パラメータである【NGKI1077】.

5189 ----------------------------------------------------------------------

5190 SAC_TSK タスクのアクセス許可ベクタの設定〔SP〕【NGKI1078】

5191 sac_tsk タスクのアクセス許可ベクタの設定〔TPD〕【NGKI1079】

5192

5193 【静的API】

5194 SAC_TSK(ID tskid, { ACPTN acptn1, ACPTN acptn2,

5195 ACPTN acptn3, ACPTN acptn4 })

5196

5197 【C言語API】

5198 ER ercd = sac_tsk(ID tskid, const ACVCT *p_acvct)

5199

5200 【パラメータ】

Page 105: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

105

5201 ID tskid 対象タスクのID番号

5202 ACVCT * p_acvct アクセス許可ベクタを入れたパケットへのポ

5203 インタ(静的APIを除く)

5204

5205 *アクセス許可ベクタ(パケットの内容)

5206 ACPTN acptn1 通常操作1のアクセス許可パターン

5207 ACPTN acptn2 通常操作2のアクセス許可パターン

5208 ACPTN acptn3 管理操作のアクセス許可パターン

5209 ACPTN acptn4 参照操作のアクセス許可パターン

5210

5211 【リターンパラメータ】

5212 ER ercd 正常終了(E_OK)またはエラーコード

5213

5214 【エラーコード】

5215 E_CTX コンテキストエラー

5216 ・非タスクコンテキストからの呼出し〔s〕【NGKI1080】

5217 ・CPUロック状態からの呼出し〔s〕【NGKI1081】

5218 E_ID 不正ID番号

5219 ・tskidが有効範囲外〔s〕【NGKI1082】

5220 E_RSATR 予約属性

5221 ・対象タスクが属する保護ドメインの囲みの中に記述されて

5222 いない〔S〕【NGKI1083】

5223 ・対象タスクが属するクラスの囲みの中に記述されていない

5224 〔SM〕【NGKI1084】

5225 E_NOEXS オブジェクト未登録

5226 ・対象タスクが未登録【NGKI1085】

5227 E_OACV オブジェクトアクセス違反

5228 ・対象タスクに対する管理操作が許可されていない〔s〕【NGKI1086】

5229 E_MACV メモリアクセス違反

5230 ・p_acvctが指すメモリ領域への読出しアクセスが許可されて

5231 いない〔s〕【NGKI1087】

5232 E_OBJ オブジェクト状態エラー

5233 ・対象タスクは静的APIで生成された〔s〕【NGKI1088】

5234 ・対象タスクに対してアクセス許可ベクタが設定済み〔S〕

5235 【NGKI1089】

5236

5237 【機能】

5238

5239 tskidで指定したタスク(対象タスク)のアクセス許可ベクタ(4つのアクセス

5240 許可パターンの組)を,各パラメータで指定した値に設定する【NGKI1090】.

5241

5242 静的APIにおいては,tskidはオブジェクト識別名,acptn1~acptn4は整数定数

5243 式パラメータである【NGKI1091】.

5244

5245 sac_tskにおいてtskidにTSK_SELF(=0)を指定すると,自タスクが対象タスク

5246 となる【NGKI1092】.

5247

5248 【TOPPERS/ASPカーネルにおける規定】

5249

5250 ASPカーネルでは,SAC_TSK,sac_tskをサポートしない【ASPS0106】.

Page 106: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

106

5251

5252 【TOPPERS/FMPカーネルにおける規定】

5253

5254 FMPカーネルでは,SAC_TSK,sac_tskをサポートしない【FMPS0104】.

5255

5256 【TOPPERS/HRP2カーネルにおける規定】

5257

5258 HRP2カーネルでは,SAC_TSKのみをサポートする【HRPS0104】.

5259

5260 【TOPPERS/SSPカーネルにおける規定】

5261

5262 SSPカーネルでは,SAC_TSK,sac_tskをサポートしない【SSPS0113】.

5263 ----------------------------------------------------------------------

5264 DEF_EPR タスクの実行時優先度の定義〔S〕【NGKI1093】

5265

5266 【静的API】

5267 DEF_EPR(ID tskid, { PRI exepri })

5268

5269 【パラメータ】

5270 ID tskid 対象タスクのID番号

5271 PRI exepri タスクの実行時優先度

5272

5273 【エラーコード】

5274 E_PAR パラメータエラー

5275 ・exepriが有効範囲外【NGKI1094】

5276 E_ILUSE サービスコール不正使用

5277 ・条件については機能の項を参照

5278 E_OBJ オブジェクト状態エラー

5279 ・対象タスクに対して実行優先度が設定済み【NGKI1095】

5280

5281 【サポートするカーネル】

5282

5283 DEF_EPRは,TOPPERS/SSPカーネルのみがサポートする静的APIである.他のカー

5284 ネルは,DEF_EPRをサポートしない【NGKI1096】.

5285

5286 【機能】

5287

5288 tskidで指定したタスク(対象タスク)の実行時優先度を,exepriで指定した優

5289 先度に設定する【NGKI1097】.

5290

5291 tskidはオブジェクト識別名,exepriは整数定数式パラメータである【NGKI1098】.

5292

5293 exepriが,対象タスクの起動時優先度よりも低い場合には,E_ILUSEエラーとな

5294 る【NGKI1099】.

5295

5296 【μITRON4.0仕様との関係】

5297

5298 μITRON4.0仕様に定義されていない静的APIである.

5299 ----------------------------------------------------------------------

5300 del_tsk タスクの削除〔TD〕【NGKI1100】

Page 107: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

107

5301

5302 【C言語API】

5303 ER ercd = del_tsk(ID tskid)

5304

5305 【パラメータ】

5306 ID tskid 対象タスクのID番号

5307

5308 【リターンパラメータ】

5309 ER ercd 正常終了(E_OK)またはエラーコード

5310

5311 【エラーコード】

5312 E_CTX コンテキストエラー

5313 ・非タスクコンテキストからの呼出し【NGKI1101】

5314 ・CPUロック状態からの呼出し【NGKI1102】

5315 E_ID 不正ID番号

5316 ・tskidが有効範囲外【NGKI1103】

5317 E_NOEXS オブジェクト未登録

5318 ・対象タスクが未登録【NGKI1104】

5319 E_OACV オブジェクトアクセス違反

5320 ・対象タスクに対する管理操作が許可されていない〔P〕【NGKI1105】

5321 E_OBJ オブジェクト状態エラー

5322 ・対象タスクが休止状態でない【NGKI1106】

5323 ・対象タスクは静的APIで生成された【NGKI1107】

5324

5325 【機能】

5326

5327 tskidで指定したタスク(対象タスク)を削除する.具体的な振舞いは以下の通

5328 り.

5329

5330 対象タスクが休止状態である場合には,対象タスクの登録が解除され,そのタ

5331 スクIDが未使用の状態に戻される【NGKI1108】.また,タスクの生成時にタス

5332 クのスタック領域およびシステムスタック領域がカーネルによって確保された

5333 場合は,それらのメモリ領域が解放される【NGKI1109】.

5334

5335 【TOPPERS/ASPカーネルにおける規定】

5336

5337 ASPカーネルでは,del_tskをサポートしない【ASPS0107】.ただし,動的生成

5338 機能拡張パッケージでは,del_tskをサポートする【ASPS0108】.

5339

5340 【TOPPERS/FMPカーネルにおける規定】

5341

5342 FMPカーネルでは,del_tskをサポートしない【FMPS0105】.

5343

5344 【TOPPERS/HRP2カーネルにおける規定】

5345

5346 HRP2カーネルでは,del_tskをサポートしない【HRPS0105】.

5347

5348 【TOPPERS/SSPカーネルにおける規定】

5349

5350 SSPカーネルでは,del_tskをサポートしない【SSPS0114】.

Page 108: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

108

5351 ----------------------------------------------------------------------

5352 act_tsk タスクの起動〔T〕【NGKI1110】

5353 iact_tsk タスクの起動〔I〕【NGKI1111】

5354

5355 【C言語API】

5356 ER ercd = act_tsk(ID tskid)

5357 ER ercd = iact_tsk(ID tskid)

5358

5359 【パラメータ】

5360 ID tskid 対象タスクのID番号

5361

5362 【リターンパラメータ】

5363 ER ercd 正常終了(E_OK)またはエラーコード

5364

5365 【エラーコード】

5366 E_CTX コンテキストエラー

5367 ・非タスクコンテキストからの呼出し(act_tskの場合)【NGKI1112】

5368 ・タスクコンテキストからの呼出し(iact_tskの場合)【NGKI1113】

5369 ・CPUロック状態からの呼出し【NGKI1114】

5370 E_ID 不正ID番号

5371 ・tskidが有効範囲外【NGKI1115】

5372 E_NOEXS オブジェクト未登録

5373 ・対象タスクが未登録〔D〕【NGKI1116】

5374 E_OACV オブジェクトアクセス違反

5375 ・対象タスクに対する通常操作1が許可されていない(act_tsk

5376 の場合)〔P〕【NGKI1117】

5377 E_QOVR キューイングオーバフロー

5378 ・条件については機能の項を参照

5379

5380 【機能】

5381

5382 tskidで指定したタスク(対象タスク)に対して起動要求を行う.具体的な振舞

5383 いは以下の通り.

5384

5385 対象タスクが休止状態である場合には,対象タスクに対してタスク起動時に行

5386 うべき初期化処理が行われ,対象タスクは実行できる状態になる【NGKI1118】.

5387

5388 対象タスクが休止状態でない場合には,対象タスクの起動要求キューイング数

5389 に1が加えられる【NGKI1119】.起動要求キューイング数に1を加えると

5390 TMAX_ACTCNTを超える場合には,E_QOVRエラーとなる【NGKI1120】.

5391

5392 act_tskにおいてtskidにTSK_SELF(=0)を指定すると,自タスクが対象タスク

5393 となる【NGKI1121】.

5394

5395 【補足説明】

5396

5397 マルチプロセッサ対応カーネルでは,act_tsk/iact_tskは,対象タスクの次回

5398 起動時の割付けプロセッサを変更しない.

5399 ----------------------------------------------------------------------

5400 mact_tsk 割付けプロセッサ指定でのタスクの起動〔TM〕【NGKI1122】

Page 109: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

109

5401 imact_tsk 割付けプロセッサ指定でのタスクの起動〔IM〕【NGKI1123】

5402

5403 【C言語API】

5404 ER ercd = mact_tsk(ID tskid, ID prcid)

5405 ER ercd = imact_tsk(ID tskid, ID prcid)

5406

5407 【パラメータ】

5408 ID tskid 対象タスクのID番号

5409 ID prcid タスクの割付け対象のプロセッサのID番号

5410

5411 【リターンパラメータ】

5412 ER ercd 正常終了(E_OK)またはエラーコード

5413

5414 【エラーコード】

5415 E_CTX コンテキストエラー

5416 ・非タスクコンテキストからの呼出し(mact_tskの場合)

5417 【NGKI1124】

5418 ・タスクコンテキストからの呼出し(imact_tskの場合)

5419 【NGKI1125】

5420 ・CPUロック状態からの呼出し【NGKI1126】

5421 E_NOSPT 未サポート機能

5422 ・対象タスクが制約タスク【NGKI1127】

5423 E_ID 不正ID番号

5424 ・tskidが有効範囲外【NGKI1128】

5425 ・prcidが有効範囲外【NGKI1129】

5426 E_PAR パラメータエラー

5427 ・条件については機能の項を参照

5428 E_NOEXS オブジェクト未登録

5429 ・対象タスクが未登録〔D〕【NGKI1130】

5430 E_OACV オブジェクトアクセス違反

5431 ・対象タスクに対する通常操作1が許可されていない(mact_tsk

5432 の場合)〔P〕【NGKI1131】

5433 E_QOVR キューイングオーバフロー

5434 ・条件については機能の項を参照

5435

5436 【機能】

5437

5438 prcidで指定したプロセッサを割付けプロセッサとして,tskidで指定したタス

5439 ク(対象タスク)に対して起動要求を行う.具体的な振舞いは以下の通り.

5440

5441 対象タスクが休止状態である場合には,対象タスクの割付けプロセッサが

5442 prcidで指定したプロセッサに変更された後,対象タスクに対してタスク起動時

5443 に行うべき初期化処理が行われ,対象タスクは実行できる状態になる

5444 【NGKI1132】.

5445

5446 対象タスクが休止状態でない場合には,対象タスクの起動要求キューイング数

5447 に1が加えられ,次回起動時の割付けプロセッサがprcidで指定したプロセッサ

5448 に変更される【NGKI1133】.起動要求キューイング数に1を加えると

5449 TMAX_ACTCNTを超える場合には,E_QOVRエラーとなる【NGKI1134】.

5450

Page 110: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

110

5451 mact_tskにおいてtskidにTSK_SELF(=0)を指定すると,自タスクが対象タス

5452 クとなる【NGKI1135】.

5453

5454 対象タスクの属するクラスの割付け可能プロセッサが,prcidで指定したプロセッ

5455 サを含んでいない場合には,E_PARエラーとなる【NGKI1136】.

5456

5457 prcidにTPRC_INI(=0)を指定すると,対象タスクの割付けプロセッサを,そ

5458 れが属するクラスの初期割付けプロセッサとする【NGKI1137】.

5459

5460 【補足説明】

5461

5462 TMAX_ACTCNTが2以上の場合でも,対象タスクが次に起動される時の割付けプロ

5463 セッサは,キューイングされない.すなわち,プロセッサAに割り付けられた休

5464 止状態でないタスクを対象として,プロセッサBを割付けプロセッサとして

5465 mact_tskを呼び出し,さらにプロセッサCを割付けプロセッサとしてmact_tskを

5466 呼び出すと,対象タスクの次回起動時の割付けプロセッサがプロセッサCに変更

5467 され,対象タスクがプロセッサBで実行されることはない.なお,TMAX_ACTCNT

5468 が1の場合には,プロセッサCを割付けプロセッサとした2回目のmact_tskが

5469 E_QOVRエラーとなるため,次回起動時の割付けプロセッサはプロセッサBのまま

5470 変更されない.

5471

5472 【TOPPERS/ASPカーネルにおける規定】

5473

5474 ASPカーネルでは,mact_tsk,imact_tskをサポートしない【ASPS0109】.

5475

5476 【TOPPERS/HRP2カーネルにおける規定】

5477

5478 HRP2カーネルでは,mact_tsk,imact_tskをサポートしない【HRPS0106】.

5479

5480 【TOPPERS/SSPカーネルにおける規定】

5481

5482 SSPカーネルでは,mact_tsk,imact_tskをサポートしない【SSPS0115】.

5483

5484 【μITRON4.0仕様との関係】

5485

5486 μITRON4.0仕様に定義されていないサービスコールである.

5487 ----------------------------------------------------------------------

5488 can_act タスク起動要求のキャンセル〔T〕【NGKI1138】

5489

5490 【C言語API】

5491 ER_UINT actcnt = can_act(ID tskid)

5492

5493 【パラメータ】

5494 ID tskid 対象タスクのID番号

5495

5496 【リターンパラメータ】

5497 ER_UINT actcnt キューイングされていた起動要求の数(正の値

5498 または0)またはエラーコード

5499

5500 【エラーコード】

Page 111: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

111

5501 E_CTX コンテキストエラー

5502 ・非タスクコンテキストからの呼出し【NGKI1139】

5503 ・CPUロック状態からの呼出し【NGKI1140】

5504 E_ID 不正ID番号

5505 ・tskidが有効範囲外【NGKI1141】

5506 E_NOEXS オブジェクト未登録

5507 ・対象タスクが未登録〔D〕【NGKI1142】

5508 E_OACV オブジェクトアクセス違反

5509 ・対象タスクに対する通常操作1が許可されていない〔P〕

5510 【NGKI1143】

5511

5512 【機能】

5513

5514 tskidで指定したタスク(対象タスク)に対する処理されていない起動要求をす

5515 べてキャンセルし,キャンセルした起動要求の数を返す.具体的な振舞いは以

5516 下の通り.

5517

5518 対象タスクの起動要求キューイング数が0に設定され,0に設定する前の起動要

5519 求キューイング数が,サービスコールの返値として返される【NGKI1144】.ま

5520 た,マルチプロセッサ対応カーネルにおいては,対象タスクの次回起動時の割

5521 付けプロセッサが未設定状態に戻される【NGKI1145】.

5522

5523 tskidにTSK_SELF(=0)を指定すると,自タスクが対象タスクとなる

5524 【NGKI1146】.

5525

5526 【TOPPERS/SSPカーネルにおける規定】

5527

5528 SSPカーネルでは,can_actをサポートしない【SSPS0116】.

5529 ----------------------------------------------------------------------

5530 mig_tsk タスクの割付けプロセッサの変更〔TM〕【NGKI1147】

5531

5532 【C言語API】

5533 ER ercd = mig_tsk(ID tskid, ID prcid)

5534

5535 【パラメータ】

5536 ID tskid 対象タスクのID番号

5537 ID prcid タスクの割付けプロセッサのID番号

5538

5539 【リターンパラメータ】

5540 ER ercd 正常終了(E_OK)またはエラーコード

5541

5542 【エラーコード】

5543 E_CTX コンテキストエラー

5544 ・非タスクコンテキストからの呼出し【NGKI1148】

5545 ・CPUロック状態からの呼出し【NGKI1149】

5546 ・その他の条件については機能の項を参照

5547 E_NOSPT 未サポート機能

5548 ・対象タスクが制約タスク【NGKI1150】

5549 E_ID 不正ID番号

5550 ・tskidが有効範囲外【NGKI1151】

Page 112: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

112

5551 ・prcidが有効範囲外【NGKI1152】

5552 E_PAR パラメータエラー

5553 ・条件については機能の項を参照

5554 E_NOEXS オブジェクト未登録

5555 ・対象タスクが未登録〔D〕【NGKI1153】

5556 E_OACV オブジェクトアクセス違反

5557 ・対象タスクに対する通常操作1が許可されていない〔P〕

5558 【NGKI1154】

5559 E_OBJ オブジェクト状態エラー

5560 ・条件については機能の項を参照

5561

5562 【機能】

5563

5564 tskidで指定したタスクの割付けプロセッサを,prcidで指定したプロセッサに

5565 変更する.具体的な振舞いは以下の通り.

5566

5567 対象タスクが,自タスクが割り付けられたプロセッサに割り付けられている場

5568 合には,対象タスクをprcidで指定したプロセッサに割り付ける【NGKI1155】.

5569 対象タスクが実行できる状態の場合には,prcidで指定したプロセッサに割り付

5570 けられた同じ優先度のタスクの中で,最も優先順位が低い状態となる

5571 【NGKI1156】.

5572

5573 対象タスクが,自タスクが割付けられたプロセッサと異なるプロセッサに割り

5574 付けられている場合には,E_OBJエラーとなる【NGKI1157】.

5575

5576 tskidにTSK_SELF(=0)を指定すると,自タスクが対象タスクとなる

5577 【NGKI1158】.

5578

5579 ディスパッチ保留状態で,対象タスクを自タスクとしてmig_tskを呼び出すと,

5580 E_CTXエラーとなる【NGKI1159】.

5581

5582 対象タスクの属するクラスの割付け可能プロセッサが,prcidで指定したプロセッ

5583 サを含んでいない場合には,E_PARエラーとなる【NGKI1160】.

5584

5585 prcidにTPRC_INI(=0)を指定すると,対象タスクの割付けプロセッサを,そ

5586 れが属するクラスの初期割付けプロセッサに変更する【NGKI1161】.

5587

5588 【補足説明】

5589

5590 この仕様では,タスクをマイグレーションさせることができるのは,そのタス

5591 クと同じプロセッサに割り付けられたタスクのみである.そのため,CPUロック

5592 状態やディスパッチ禁止状態を用いて,他のタスクへのディスパッチが起こら

5593 ないようにすることで,自タスクが他のプロセッサへマイグレーションされる

5594 のを防ぐことができる.

5595

5596 対象タスクが,最初からprcidで指定したプロセッサに割り付けられている場合

5597 には,割付けプロセッサの変更は起こらないが,優先順位が同一優先度のタス

5598 クの中で最低となる.

5599

5600 【TOPPERS/ASPカーネルにおける規定】

Page 113: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

113

5601

5602 ASPカーネルでは,mig_tskをサポートしない【ASPS0110】.

5603

5604 【TOPPERS/HRP2カーネルにおける規定】

5605

5606 HRP2カーネルでは,mig_tskをサポートしない【HRPS0107】.

5607

5608 【TOPPERS/SSPカーネルにおける規定】

5609

5610 SSPカーネルでは,mig_tskをサポートしない【SSPS0117】.

5611

5612 【μITRON4.0仕様との関係】

5613

5614 μITRON4.0仕様に定義されていないサービスコールである.

5615 ----------------------------------------------------------------------

5616 ext_tsk 自タスクの終了〔T〕【NGKI1162】

5617

5618 【C言語API】

5619 ER ercd = ext_tsk()

5620

5621 【パラメータ】

5622 なし

5623

5624 【リターンパラメータ】

5625 ER ercd エラーコード

5626

5627 【エラーコード】

5628 E_SYS システムエラー

5629 ・カーネルの誤動作【NGKI1163】

5630 E_CTX コンテキストエラー

5631 ・非タスクコンテキストからの呼出し【NGKI1164】

5632

5633 【機能】

5634

5635 自タスクを終了させる.具体的な振舞いは以下の通り.

5636

5637 自タスクに対してタスク終了時に行うべき処理が行われ,自タスクは休止状態

5638 になる【NGKI1165】.さらに,自タスクの起動要求キューイング数が0でない場

5639 合には,自タスクに対してタスク起動時に行うべき処理が行われ,自タスクは

5640 実行できる状態になる【NGKI1166】.またこの時,起動要求キューイング数か

5641 ら1が減ぜられる【NGKI1167】.

5642

5643 ext_tskは,CPUロック解除状態,割込み優先度マスク全解除状態,ディスパッ

5644 チ許可状態で呼び出すのが原則であるが,そうでない状態で呼び出された場合

5645 には,CPUロック解除状態,割込み優先度マスク全解除状態,ディスパッチ許可

5646 状態に遷移させた後,自タスクを終了させる【NGKI1168】.

5647

5648 ext_tskが正常に処理された場合,ext_tskからはリターンしない【NGKI1169】.

5649

5650 【TOPPERS/SSPカーネルにおける規定】

Page 114: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

114

5651

5652 SSPカーネルでは,ext_tskをサポートしない【SSPS0118】.自タスクを終了さ

5653 せる場合には,タスクのメインルーチンからリターンする【SSPS0119】.

5654

5655 【μITRON4.0仕様との関係】

5656

5657 ext_tskを非タスクコンテキストから呼び出した場合に,E_CTXエラーが返るこ

5658 ととした.μITRON4.0仕様においては,ext_tskからはリターンしないと規定さ

5659 れている.

5660 ----------------------------------------------------------------------

5661 ter_tsk タスクの強制終了〔T〕【NGKI1170】

5662

5663 【C言語API】

5664 ER ercd = ter_tsk(ID tskid)

5665

5666 【パラメータ】

5667 ID tskid 対象タスクのID番号

5668

5669 【リターンパラメータ】

5670 ER ercd 正常終了(E_OK)またはエラーコード

5671

5672 【エラーコード】

5673 E_CTX コンテキストエラー

5674 ・非タスクコンテキストからの呼出し【NGKI1171】

5675 ・CPUロック状態からの呼出し【NGKI1172】

5676 E_ID 不正ID番号

5677 ・tskidが有効範囲外【NGKI1173】

5678 E_NOEXS オブジェクト未登録

5679 ・対象タスクが未登録〔D〕【NGKI1174】

5680 E_OACV オブジェクトアクセス違反

5681 ・対象タスクに対する通常操作2が許可されていない〔P〕

5682 【NGKI1175】

5683 E_ILUSE サービスコール不正使用

5684 ・対象タスクが自タスク【NGKI1176】

5685 E_OBJ オブジェクト状態エラー

5686 ・対象タスクが休止状態【NGKI1177】

5687 ・その他の条件については機能の項を参照

5688

5689 【機能】

5690

5691 tskidで指定したタスク(対象タスク)を終了させる.具体的な振舞いは以下の

5692 通り.

5693

5694 対象タスクが休止状態でない場合には,対象タスクに対してタスク終了時に行

5695 うべき処理が行われ,対象タスクは休止状態になる【NGKI1178】.さらに,対

5696 象タスクの起動要求キューイング数が0でない場合には,対象タスクに対してタ

5697 スク起動時に行うべき処理が行われ,対象タスクは実行できる状態になる

5698 【NGKI1179】.またこの時,起動要求キューイング数から1が減ぜられる

5699 【NGKI1180】.

5700

Page 115: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

115

5701 マルチプロセッサ対応カーネルでは,対象タスクは,自タスクと同じプロセッ

5702 サに割り付けられているタスクに限られる【NGKI1181】.対象タスクが自タス

5703 クと異なるプロセッサに割り付けられている場合には,E_OBJエラーとなる

5704 【NGKI1182】.

5705

5706 【TOPPERS/FMPカーネルにおける使用上の注意】

5707

5708 現時点のFMPカーネルの実装では,デッドロック回避のためのリトライ処理によ

5709 り,サービスコールの処理時間に上限がないため,注意が必要である(ロック

5710 方式にも依存する).

5711

5712 【TOPPERS/SSPカーネルにおける規定】

5713

5714 SSPカーネルでは,ter_tskをサポートしない【SSPS0120】.

5715 ----------------------------------------------------------------------

5716 chg_pri タスクのベース優先度の変更〔T〕【NGKI1183】

5717

5718 【C言語API】

5719 ER ercd = chg_pri(ID tskid, PRI tskpri)

5720

5721 【パラメータ】

5722 ID tskid 対象タスクのID番号

5723 PRI tskpri ベース優先度

5724

5725 【リターンパラメータ】

5726 ER ercd 正常終了(E_OK)またはエラーコード

5727

5728 【エラーコード】

5729 E_CTX コンテキストエラー

5730 ・非タスクコンテキストからの呼出し【NGKI1184】

5731 ・CPUロック状態からの呼出し【NGKI1185】

5732 E_NOSPT 未サポート機能

5733 ・対象タスクが制約タスク【NGKI1186】

5734 E_ID 不正ID番号

5735 ・tskidが有効範囲外【NGKI1187】

5736 E_PAR パラメータエラー

5737 ・tskpriが有効範囲外【NGKI1188】

5738 E_NOEXS オブジェクト未登録

5739 ・対象タスクが未登録〔D〕【NGKI1189】

5740 E_OACV オブジェクトアクセス違反

5741 ・対象タスクに対する通常操作2が許可されていない〔P〕

5742 【NGKI1190】

5743 E_ILUSE サービスコール不正使用

5744 ・条件については機能の項を参照

5745 E_OBJ オブジェクト状態エラー

5746 ・対象タスクが休止状態【NGKI1191】

5747

5748 【機能】

5749

5750 tskidで指定したタスク(対象タスク)のベース優先度を,tskpriで指定した優

Page 116: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

116

5751 先度に変更する.具体的な振舞いは以下の通り.

5752

5753 対象タスクが休止状態でない場合には,対象タスクのベース優先度が,tskpri

5754 で指定した優先度に変更される【NGKI1192】.それに伴って,対象タスクの現

5755 在優先度も変更される【NGKI1193】.

5756

5757 対象タスクが,優先度上限ミューテックスをロックしていない場合には,次の

5758 処理が行われる.対象タスクが実行できる状態の場合には,同じ優先度のタス

5759 クの中で最低優先順位となる【NGKI1194】.対象タスクが待ち状態で,タスク

5760 の優先度順の待ち行列につながれている場合には,対象タスクの変更後の現在

5761 優先度に従って,その待ち行列中での順序が変更される【NGKI1195】.待ち行

5762 列中に同じ現在優先度のタスクがある場合には,対象タスクの順序はそれらの

5763 中で最後になる【NGKI1196】.

5764

5765 対象タスクが,優先度上限ミューテックスをロックしている場合には,対象タ

5766 スクの現在優先度が変更されることはなく,優先順位も変更されない

5767 【NGKI1197】.

5768

5769 tskidにTSK_SELF(=0)を指定すると,自タスクが対象タスクとなる

5770 【NGKI1198】.また,tskpriにTPRI_INI(=0)を指定すると,対象タスクのベー

5771 ス優先度が,起動時優先度に変更される【NGKI1199】.

5772

5773 対象タスクが優先度上限ミューテックスをロックしているかロックを待ってい

5774 る場合,tskpriは,それらのミューテックスの上限優先度と同じかそれより低

5775 くなければならない.そうでない場合には,E_ILUSEエラーとなる【NGKI1201】.

5776

5777 【TOPPERS/SSPカーネルにおける規定】

5778

5779 SSPカーネルでは,chg_priをサポートしない【SSPS0121】.

5780

5781 【μITRON4.0仕様との関係】

5782

5783 対象タスクが,同じ優先度のタスクの中で最低の優先順位となる(対象タスク

5784 が待ち状態で,タスクの優先度順の待ち行列につながれている場合には,同じ

5785 優先度のタスクの中での順序が最後になる)条件を変更した.

5786 ----------------------------------------------------------------------

5787 get_pri タスク優先度の参照〔T〕【NGKI1202】

5788

5789 【C言語API】

5790 ER ercd = get_pri(ID tskid, PRI *p_tskpri)

5791

5792 【パラメータ】

5793 ID tskid 対象タスクのID番号

5794 PRI * p_tskpri 現在優先度を入れるメモリ領域へのポインタ

5795

5796 【リターンパラメータ】

5797 ER ercd 正常終了(E_OK)またはエラーコード

5798 PRI tskpri 現在優先度

5799

5800 【エラーコード】

Page 117: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

117

5801 E_CTX コンテキストエラー

5802 ・非タスクコンテキストからの呼出し【NGKI1203】

5803 ・CPUロック状態からの呼出し【NGKI1204】

5804 E_ID 不正ID番号

5805 ・tskidが有効範囲外【NGKI1205】

5806 E_NOEXS オブジェクト未登録

5807 ・対象タスクが未登録〔D〕【NGKI1206】

5808 E_OACV オブジェクトアクセス違反

5809 ・対象タスクに対する参照操作が許可されていない〔P〕【NGKI1207】

5810 E_MACV メモリアクセス違反

5811 ・p_tskpriが指すメモリ領域への書込みアクセスが許可され

5812 ていない〔P〕【NGKI1208】

5813 E_OBJ オブジェクト状態エラー

5814 ・対象タスクが休止状態【NGKI1209】

5815

5816 【機能】

5817

5818 tskidで指定したタスク(対象タスク)の現在優先度を参照する.具体的な振舞

5819 いは以下の通り.

5820

5821 対象タスクが休止状態でない場合には,対象タスクの現在優先度が,p_tskpri

5822 が指すメモリ領域に返される【NGKI1210】.

5823

5824 tskidにTSK_SELF(=0)を指定すると,自タスクが対象タスクとなる

5825 【NGKI1211】.

5826

5827 【TOPPERS/SSPカーネルにおける規定】

5828

5829 SSPカーネルでは,get_priをサポートしない【SSPS0122】.

5830 ----------------------------------------------------------------------

5831 get_inf 自タスクの拡張情報の参照〔T〕【NGKI1212】

5832

5833 【C言語API】

5834 ER ercd = get_inf(intptr_t *p_exinf)

5835

5836 【パラメータ】

5837 intptr_t * p_exinf 拡張情報を入れるメモリ領域へのポインタ

5838

5839 【リターンパラメータ】

5840 ER ercd 正常終了(E_OK)またはエラーコード

5841 intptr_t exinf 拡張情報

5842

5843 【エラーコード】

5844 E_CTX コンテキストエラー

5845 ・非タスクコンテキストからの呼出し【NGKI1213】

5846 ・CPUロック状態からの呼出し【NGKI1214】

5847 E_MACV メモリアクセス違反

5848 ・p_exinfが指すメモリ領域への書込みアクセスが許可されて

5849 いない〔P〕【NGKI1215】

5850

Page 118: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

118

5851 【機能】

5852

5853 自タスクの拡張情報を参照する.参照した拡張情報は,p_exinfが指すメモリ領

5854 域に返される【NGKI1216】.

5855

5856 【TOPPERS/SSPカーネルにおける規定】

5857

5858 SSPカーネルでは,get_infをサポートしない【SSPS0123】.

5859

5860 【μITRON4.0仕様との関係】

5861

5862 μITRON4.0仕様に定義されていないサービスコールである.

5863 ----------------------------------------------------------------------

5864 ref_tsk タスクの状態参照〔T〕【NGKI1217】

5865

5866 【C言語API】

5867 ER ercd = ref_tsk(ID tskid, T_RTSK *pk_rtsk)

5868

5869 【パラメータ】

5870 ID tskid 対象タスクのID番号

5871 T_RTSK * pk_rtsk タスクの現在状態を入れるパケットへのポインタ

5872

5873 【リターンパラメータ】

5874 ER ercd 正常終了(E_OK)またはエラーコード

5875

5876 *タスクの現在状態(パケットの内容)

5877 STAT tskstat タスク状態

5878 PRI tskpri タスクの現在優先度

5879 PRI tskbpri タスクのベース優先度

5880 STAT tskwait タスクの待ち要因

5881 ID wobjid タスクの待ち対象のオブジェクトのID

5882 TMO lefttmo タスクがタイムアウトするまでの時間

5883 uint_t actcnt タスクの起動要求キューイング数

5884 uint_t wupcnt タスクの起床要求キューイング数

5885 bool_t texmsk タスクがタスク例外処理マスク状態か否か(保

5886 護機能対応カーネルの場合)

5887 bool_t waifbd タスクが待ち禁止状態か否か(保護機能対応カー

5888 ネルの場合)

5889 uint_t svclevel タスクの拡張サービスコールのネストレベル(保

5890 護機能対応カーネルの場合)

5891 ID prcid タスクの割付けプロセッサのID(マルチプロセッ

5892 サ対応カーネルの場合)

5893 ID actprc タスクの次回起動時の割付けプロセッサのID(マ

5894 ルチプロセッサ対応カーネルの場合)

5895

5896 【エラーコード】

5897 E_CTX コンテキストエラー

5898 ・非タスクコンテキストからの呼出し【NGKI1218】

5899 ・CPUロック状態からの呼出し【NGKI1219】

5900 E_ID 不正ID番号

Page 119: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

119

5901 ・tskidが有効範囲外【NGKI1220】

5902 E_NOEXS オブジェクト未登録

5903 ・対象タスクが未登録〔D〕【NGKI1221】

5904 E_OACV オブジェクトアクセス違反

5905 ・対象タスクに対する参照操作が許可されていない〔P〕【NGKI1222】

5906 E_MACV メモリアクセス違反

5907 ・pk_rtskが指すメモリ領域への書込みアクセスが許可されて

5908 いない〔P〕【NGKI1223】

5909

5910 【機能】

5911

5912 tskidで指定したタスク(対象タスク)の現在状態を参照する.参照した現在状

5913 態は,pk_rtskで指定したメモリ領域に返される【NGKI1224】.

5914

5915 tskstatには,対象タスクの現在のタスク状態を表す次のいずれかの値が返され

5916 る【NGKI1225】.

5917

5918 TTS_RUN 0x01U 実行状態

5919 TTS_RDY 0x02U 実行可能状態

5920 TTS_WAI 0x04U 待ち状態

5921 TTS_SUS 0x08U 強制待ち状態

5922 TTS_WAS 0x0cU 二重待ち状態

5923 TTS_DMT 0x10U 休止状態

5924

5925 マルチプロセッサ対応カーネルでは,対象タスクが自タスクの場合にも,

5926 tskstatがTTS_SUSとなる場合がある【NGKI1226】.この状況は,自タスクに対

5927 してref_tskを発行するのと同じタイミングで,他のプロセッサで実行されてい

5928 るタスクから同じタスクに対してsus_tskが発行された場合に発生する可能性が

5929 ある.

5930

5931 対象タスクが休止状態でない場合には,tskpriには対象タスクの現在優先度が,

5932 tskbpriには対象タスクのベース優先度が返される【NGKI1227】.対象タスクが

5933 休止状態である場合には,tskpriとtskbpriの値は保証されない【NGKI1228】.

5934

5935 対象タスクが待ち状態である場合には,tskwaitには,対象タスクが何を待って

5936 いる状態であるかを表す次のいずれかの値が返される【NGKI1229】.

5937

5938 TTW_SLP 0x0001U 起床待ち

5939 TTW_DLY 0x0002U 時間経過待ち

5940 TTW_SEM 0x0004U セマフォの資源獲得待ち

5941 TTW_FLG 0x0008U イベントフラグ待ち

5942 TTW_SDTQ 0x0010U データキューへの送信待ち

5943 TTW_RDTQ 0x0020U データキューからの受信待ち

5944 TTW_SPDQ 0x0100U 優先度データキューへの送信待ち

5945 TTW_RPDQ 0x0200U 優先度データキューからの受信待ち

5946 TTW_MBX 0x0040U メールボックスからの受信待ち

5947 TTW_MTX 0x0080U ミューテックスのロック待ち状態

5948 TTW_SMBF 0x0400U メッセージバッファへの送信待ち

5949 TTW_RMBF 0x0800U メッセージバッファからの受信待ち

5950 TTW_MPF 0x2000U 固定長メモリブロックの獲得待ち

Page 120: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

120

5951

5952 対象タスクが待ち状態でない場合には,tskwaitの値は保証されない

5953 【NGKI1230】.

5954

5955 対象タスクが起床待ち状態および時間経過待ち状態以外の待ち状態である場合

5956 には,wobjidに,対象タスクが待っているオブジェクトのID番号が返される

5957 【NGKI1231】.対象タスクが待ち状態でない場合や,起床待ち状態または時間

5958 経過待ち状態である場合には,wobjidの値は保証されない【NGKI1232】.

5959

5960 対象タスクが時間経過待ち状態以外の待ち状態である場合には,lefttmoに,タ

5961 スクがタイムアウトを起こすまでの相対時間が返される【NGKI1233】.タスク

5962 がタイムアウトを起こさない場合には,TMO_FEVR(=-1)が返される

5963 【NGKI1234】.

5964

5965 対象タスクが時間経過待ち状態である場合には,lefttmoに,タスクの遅延時間

5966 が経過して待ち解除されるまでの相対時間が返される【NGKI1235】.ただし,

5967 返されるべき相対時間がTMO型に格納することができない場合がありうる.この

5968 場合には,相対時間(RELTIM型,uint_t型に定義される)をTMO型(int_t型に

5969 定義される)に型キャストした値が返される【NGKI1236】.

5970

5971 対象タスクが待ち状態でない場合には,lefttmoの値は保証されない

5972 【NGKI1237】.

5973

5974 actcntには,対象タスクの起動要求キューイング数が返される【NGKI1238】.

5975

5976 対象タスクが休止状態でない場合には,wupcntに,タスクの起床要求キューイ

5977 ング数が返される【NGKI1239】.対象タスクが休止状態である場合には,

5978 wupcntの値は保証されない【NGKI1240】.

5979

5980 保護機能対応カーネルで,対象タスクが休止状態でない場合には,texmskに,

5981 対象タスクがタスク例外処理マスク状態の場合にtrue,そうでない場合に

5982 falseが返される【NGKI1241】.waifbdには,対象タスクが待ち禁止状態の場合

5983 にtrue,そうでない場合にfalseが返される【NGKI1242】.またsvclevelには,

5984 対象タスクが拡張サービスコールを呼び出していない場合には0,呼び出してい

5985 る場合には,実行中の拡張サービスコールがネスト段数が返される

5986 【NGKI1243】.対象タスクが休止状態である場合には,texmsk,waifbd,

5987 svclevelの値は保証されない【NGKI1244】.

5988

5989 マルチプロセッサ対応カーネルでは,prcidに,対象タスクの割付けプロセッサ

5990 のID番号が返される【NGKI1245】.またactprcには,対象タスクの次回起動時

5991 の割付けプロセッサのID番号が返される【NGKI1246】.次回起動時の割付けプ

5992 ロセッサが未設定の場合には,actprcにTPRC_NONE(=0)が返される

5993 【NGKI1247】.

5994

5995 tskidにTSK_SELF(=0)を指定すると,自タスクが対象タスクとなる

5996 【NGKI1248】.

5997

5998 【補足説明】

5999

6000 対象タスクが時間経過待ち状態である場合に,lefttmo(TMO型)に返される値

Page 121: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

121

6001 をRELTIM型に型キャストすることで,タスクが待ち解除されるまでの相対時間

6002 を正しく得ることができる.

6003

6004 【TOPPERS/ASPカーネルにおける規定】

6005

6006 ASPカーネルでは,tskwaitにTTW_MTX,TTW_SMBF,TTW_RMBFが返ることはない

6007 【ASPS0111】.ただし,ミューテックス機能拡張パッケージを用いると,

6008 tskwaitにTTW_MTXが返る場合がある【ASPS0112】.また,メッセージバッファ

6009 機能拡張パッケージを用いると,tskwaitにTTW_SMBFとTTW_RMBFが返る場合があ

6010 る【ASPS0208】.

6011

6012 【TOPPERS/FMPカーネルにおける規定】

6013

6014 FMPカーネルでは,tskwaitにTTW_MTX,TTW_SMBF,TTW_RMBFが返ることはない

6015 【FMPS0106】.

6016

6017 【TOPPERS/HRP2カーネルにおける規定】

6018

6019 HRP2カーネルでは,tskwaitにTTW_MBX,TTW_SMBF,TTW_RMBFが返ることはない

6020 【HRPS0108】.ただし,メッセージバッファ機能拡張パッケージを用いると,

6021 tskwaitにTTW_SMBFとTTW_RMBFが返る場合がある【HRPS0174】.

6022

6023 【TOPPERS/SSPカーネルにおける規定】

6024

6025 SSPカーネルでは,ref_tskをサポートしない【SSPS0124】.

6026

6027 【使用上の注意】

6028

6029 ref_tskはデバッグ時向けの機能であり,その他の目的に使用することは推奨し

6030 ない.これは,ref_tskを呼び出し,対象タスクの現在状態を参照した直後に割

6031 込みが発生した場合,ref_tskから戻ってきた時には対象タスクの状態が変化し

6032 ている可能性があるためである.

6033

6034 【μITRON4.0仕様との関係】

6035

6036 対象タスクが時間経過待ち状態の時にlefttmoに返される値について規定した.

6037 また,参照できるタスクの状態から,強制待ち要求ネスト数(suscnt)を除外

6038 した.

6039

6040 マルチプロセッサ対応カーネルで参照できる情報として,割付けプロセッサの

6041 ID(prcid)と次回起動時の割付けプロセッサのID(actprc)を追加した.

6042

6043 【μITRON4.0/PX仕様との関係】

6044

6045 保護機能対応カーネルで参照できる情報として,タスク例外処理マスク状態か

6046 否か(texmsk),待ち禁止状態か否か(waifbd),拡張サービスコールのネス

6047 トレベル(svclevel)を追加した.

6048 ----------------------------------------------------------------------

6049

6050 4.2 タスク付属同期機能

Page 122: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

122

6051

6052 タスク付属同期機能は,タスクとタスクの間,または非タスクコンテキストの

6053 処理とタスクの間で同期を取るために,タスク単独で持っている機能である.

6054

6055 タスク付属同期機能に関連して,各タスクが持つ情報は次の通り【NGKI1249】.

6056

6057 ・起床要求キューイング数

6058

6059 タスクの起床要求キューイング数は,処理されていないタスクの起床要求の数

6060 であり,タスクの起動時に0に初期化される【NGKI1250】.

6061

6062 タスク付属同期機能に関連するカーネル構成マクロは次の通り.

6063

6064 TMAX_WUPCNT タスクの起床要求キューイング数の最大値【NGKI1251】

6065

6066 【TOPPERS/ASPカーネルにおける規定】

6067

6068 ASPカーネルでは,TMAX_WUPCNTは1に固定されている【ASPS0113】.

6069

6070 【TOPPERS/FMPカーネルにおける規定】

6071

6072 FMPカーネルでは,TMAX_WUPCNTは1に固定されている【FMPS0107】.

6073

6074 【TOPPERS/HRP2カーネルにおける規定】

6075

6076 HRP2カーネルでは,TMAX_WUPCNTは1に固定されている【HRPS0109】.

6077

6078 【TOPPERS/SSPカーネルにおける規定】

6079

6080 SSPカーネルでは,タスク付属同期機能をサポートしない【SSPS0125】.

6081

6082 【μITRON4.0仕様との関係】

6083

6084 この仕様では,強制待ち要求をネストする機能をサポートしないこととした.

6085 言い換えると,強制待ち要求ネスト数の最大値を1に固定する.これに伴い,強

6086 制待ち状態から強制再開するサービスコール(frsm_tsk)とタスクの強制待ち

6087 要求ネスト数の最大値を表すカーネル構成マクロ(TMAX_SUSCNT)は廃止した.

6088 また,ref_tskで参照できる情報(T_RTSKのフィールド)から,強制待ち要求ネ

6089 スト数(suscnt)を除外した.

6090 ----------------------------------------------------------------------

6091 slp_tsk 起床待ち〔T〕【NGKI1252】

6092 tslp_tsk 起床待ち(タイムアウト付き)〔T〕【NGKI1253】

6093

6094 【C言語API】

6095 ER ercd = slp_tsk()

6096 ER ercd = tslp_tsk(TMO tmout)

6097

6098 【パラメータ】

6099 TMO tmout タイムアウト時間(tslp_tskの場合)

6100

Page 123: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

123

6101 【リターンパラメータ】

6102 ER ercd 正常終了(E_OK)またはエラーコード

6103

6104 【エラーコード】

6105 E_CTX コンテキストエラー

6106 ・ディスパッチ保留状態からの呼出し【NGKI1254】

6107 E_NOSPT 未サポート機能

6108 ・制約タスクからの呼出し【NGKI1255】

6109 E_PAR パラメータエラー

6110 ・tmoutが無効(tslp_tskの場合)【NGKI1256】

6111 E_TMOUT ポーリング失敗またはタイムアウト(slp_tskを除く)【NGKI1257】

6112 E_RLWAI 待ち禁止状態または待ち状態の強制解除【NGKI1258】

6113

6114 【機能】

6115

6116 自タスクを起床待ちさせる.具体的な振舞いは以下の通り.

6117

6118 自タスクの起床要求キューイング数が0でない場合には,起床要求キューイング

6119 数から1が減ぜられる【NGKI1259】.起床要求キューイング数が0の場合には,

6120 自タスクは起床待ち状態となる【NGKI1260】.

6121

6122 【補足説明】

6123

6124 自タスクの起床要求キューイング数が0でない場合には,自タスクは実行できる

6125 状態を維持し,自タスクの優先順位は変化しない.

6126 ----------------------------------------------------------------------

6127 wup_tsk タスクの起床〔T〕【NGKI1261】

6128 iwup_tsk タスクの起床〔I〕【NGKI1262】

6129

6130 【C言語API】

6131 ER ercd = wup_tsk(ID tskid)

6132 ER ercd = iwup_tsk(ID tskid)

6133

6134 【パラメータ】

6135 ID tskid 対象タスクのID番号

6136

6137 【リターンパラメータ】

6138 ER ercd 正常終了(E_OK)またはエラーコード

6139

6140 【エラーコード】

6141 E_CTX コンテキストエラー

6142 ・非タスクコンテキストからの呼出し(wup_tskの場合)【NGKI1263】

6143 ・タスクコンテキストからの呼出し(iwup_tskの場合)【NGKI1264】

6144 ・CPUロック状態からの呼出し【NGKI1265】

6145 E_NOSPT 未サポート機能

6146 ・対象タスクが制約タスク【NGKI1266】

6147 E_ID 不正ID番号

6148 ・tskidが有効範囲外【NGKI1267】

6149 E_NOEXS オブジェクト未登録

6150 ・対象タスクが未登録〔D〕【NGKI1268】

Page 124: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

124

6151 E_OACV オブジェクトアクセス違反

6152 ・対象タスクに対する通常操作1が許可されていない(wup_tsk

6153 の場合)〔P〕【NGKI1269】

6154 E_OBJ オブジェクト状態エラー

6155 ・対象タスクが休止状態【NGKI1270】

6156 E_QOVR キューイングオーバフロー

6157 ・条件については機能の項を参照

6158

6159 【機能】

6160

6161 tskidで指定したタスク(対象タスク)を起床する.具体的な振舞いは以下の通

6162 り.

6163

6164 対象タスクが起床待ち状態である場合には,対象タスクが待ち解除される

6165 【NGKI1271】.待ち解除されたタスクには,待ち状態となったサービスコール

6166 からE_OKが返る【NGKI1272】.

6167

6168 対象タスクが起床待ち状態でなく,休止状態でもない場合には,対象タスクの

6169 起床要求キューイング数に1が加えられる【NGKI1273】.起床要求キューイング

6170 数に1を加えるとTMAX_WUPCNTを超える場合には,E_QOVRエラーとなる

6171 【NGKI1274】.

6172

6173 wup_tskにおいてtskidにTSK_SELF(=0)を指定すると,自タスクが対象タスク

6174 となる【NGKI1275】.

6175 ----------------------------------------------------------------------

6176 can_wup タスク起床要求のキャンセル〔T〕【NGKI1276】

6177

6178 【C言語API】

6179 ER_UINT wupcnt = can_wup(ID tskid)

6180

6181 【パラメータ】

6182 ID tskid 対象タスクのID番号

6183

6184 【リターンパラメータ】

6185 ER_UINT wupcnt キューイングされていた起床要求の数(正の値

6186 または0)またはエラーコード

6187

6188 【エラーコード】

6189 E_CTX コンテキストエラー

6190 ・非タスクコンテキストからの呼出し【NGKI1277】

6191 ・CPUロック状態からの呼出し【NGKI1278】

6192 E_NOSPT 未サポート機能

6193 ・対象タスクが制約タスク【NGKI1279】

6194 E_ID 不正ID番号

6195 ・tskidが有効範囲外【NGKI1280】

6196 E_NOEXS オブジェクト未登録

6197 ・対象タスクが未登録〔D〕【NGKI1281】

6198 E_OACV オブジェクトアクセス違反

6199 ・対象タスクに対する通常操作1が許可されていない〔P〕

6200 【NGKI1282】

Page 125: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

125

6201 E_OBJ オブジェクト状態エラー

6202 ・対象タスクが休止状態【NGKI1283】

6203

6204 【機能】

6205

6206 tskidで指定したタスク(対象タスク)に対する処理されていない起床要求をす

6207 べてキャンセルし,キャンセルした起床要求の数を返す.具体的な振舞いは以

6208 下の通り.

6209

6210 対象タスクが休止状態でない場合には,対象タスクの起床要求キューイング数

6211 が0に設定され,0に設定する前の起床要求キューイング数が,サービスコール

6212 の返値として返される【NGKI1284】.

6213

6214 tskidにTSK_SELF(=0)を指定すると,自タスクが対象タスクとなる

6215 【NGKI1285】.

6216 ----------------------------------------------------------------------

6217 rel_wai 強制的な待ち解除〔T〕【NGKI1286】

6218 irel_wai 強制的な待ち解除〔I〕【NGKI1287】

6219

6220 【C言語API】

6221 ER ercd = rel_wai(ID tskid)

6222 ER ercd = irel_wai(ID t skid)

6223

6224 【パラメータ】

6225 ID tskid 対象タスクのID番号

6226

6227 【リターンパラメータ】

6228 ER ercd 正常終了(E_OK)またはエラーコード

6229

6230 【エラーコード】

6231 E_CTX コンテキストエラー

6232 ・非タスクコンテキストからの呼出し(rel_waiの場合)【NGKI1288】

6233 ・タスクコンテキストからの呼出し(irel_waiの場合)【NGKI1289】

6234 ・CPUロック状態からの呼出し【NGKI1290】

6235 E_NOSPT 未サポート機能

6236 ・対象タスクが制約タスク【NGKI1291】

6237 E_ID 不正ID番号

6238 ・tskidが有効範囲外【NGKI1292】

6239 E_NOEXS オブジェクト未登録

6240 ・対象タスクが未登録〔D〕【NGKI1293】

6241 E_OACV オブジェクトアクセス違反

6242 ・対象タスクに対する通常操作2が許可されていない(rel_wai

6243 の場合)〔P〕【NGKI1294】

6244 E_OBJ オブジェクト状態エラー

6245 ・対象タスクが待ち状態でない【NGKI1295】

6246

6247 【機能】

6248

6249 tskidで指定したタスク(対象タスク)を,強制的に待ち解除する.具体的な振

6250 舞いは以下の通り.

Page 126: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

126

6251

6252 対象タスクが待ち状態である場合には,対象タスクが待ち解除される

6253 【NGKI1296】.待ち解除されたタスクには,待ち状態となったサービスコール

6254 からE_RLWAIが返る【NGKI1297】.

6255 ----------------------------------------------------------------------

6256 sus_tsk 強制待ち状態への遷移〔T〕【NGKI1298】

6257

6258 【C言語API】

6259 ER ercd = sus_tsk(ID tskid)

6260

6261 【パラメータ】

6262 ID tskid 対象タスクのID番号

6263

6264 【リターンパラメータ】

6265 ER e rcd 正常終了(E_OK)またはエラーコード

6266

6267 【エラーコード】

6268 E_CTX コンテキストエラー

6269 ・非タスクコンテキストからの呼出し【NGKI1299】

6270 ・CPUロック状態からの呼出し【NGKI1300】

6271 ・その他の条件については機能の項を参照

6272 E_NOSPT 未サポート機能

6273 ・対象タスクが制約タスク【NGKI1301】

6274 E_ID 不正ID番号

6275 ・tskidが有効範囲外【NGKI1302】

6276 E_NOEXS オブジェクト未登録

6277 ・対象タスクが未登録〔D〕【NGKI1303】

6278 E_OACV オブジェクトアクセス違反

6279 ・対象タスクに対する通常操作2が許可されていない〔P〕

6280 【NGKI1304】

6281 E_OBJ オブジェクト状態エラー

6282 ・対象タスクが休止状態【NGKI1305】

6283 E_QOVR キューイングオーバフロー

6284 ・対象タスクが強制待ち状態(二重待ち状態を含む)【NGKI1306】

6285

6286 【機能】

6287

6288 tskidで指定したタスク(対象タスク)を強制待ちにする.具体的な振舞いは以

6289 下の通り.

6290

6291 対象タスクが実行できる状態である場合には,対象タスクは強制待ち状態とな

6292 る【NGKI1307】.また,待ち状態(二重待ち状態を除く)である場合には,二

6293 重待ち状態となる【NGKI1308】.

6294

6295 マルチプロセッサ対応カーネルでは,対象タスクが自タスクの場合にも,

6296 E_QOVRエラーとなる場合がある【NGKI1309】.この状況は,自タスクに対して

6297 sus_tskを発行するのと同じタイミングで,他のプロセッサで実行されているタ

6298 スクから同じタスクに対してsus_tskが発行された場合に発生する可能性がある.

6299

6300 tskidにTSK_SELF(=0)を指定すると,自タスクが対象タスクとなる

Page 127: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

127

6301 【NGKI1310】.

6302

6303 ディスパッチ保留状態で,対象タスクを自タスクとしてsus_tskを呼び出すと,

6304 E_CTXエラーとなる【NGKI1311】.

6305 ----------------------------------------------------------------------

6306 rsm_tsk 強制待ち状態からの再開〔T〕【NGKI1312】

6307

6308 【C言語API】

6309 ER ercd = rsm_tsk(ID tskid)

6310

6311 【パラメータ】

6312 ID tskid 対象タスクのID番号

6313

6314 【リターンパラメータ】

6315 ER ercd 正常終了(E_OK)またはエラーコード

6316

6317 【エラーコード】

6318 E_CTX コンテキストエラー

6319 ・非タスクコンテキストからの呼出し【NGKI1313】

6320 ・CPUロック状態からの呼出し【NGKI1314】

6321 E_NOSPT 未サポート機能

6322 ・対象タスクが制約タスク【NGKI1315】

6323 E_ID 不正ID番号

6324 ・tskidが有効範囲外【NGKI1316】

6325 E_NOEXS オブジェクト未登録

6326 ・対象タスクが未登録〔D〕【NGKI1317】

6327 E_OACV オブジェクトアクセス違反

6328 ・対象タスクに対する通常操作2が許可されていない〔P〕

6329 【NGKI1318】

6330 E_OBJ オブジェクト状態エラー

6331 ・対象タスクが強制待ち状態(二重待ち状態を含む)でない

6332 【NGKI1319】

6333

6334 【機能】

6335

6336 tskidで指定したタスク(対象タスク)を,強制待ちから再開する.具体的な振

6337 舞いは以下の通り.

6338

6339 対象タスクが強制待ち状態である場合には,対象タスクは強制待ちから再開さ

6340 れる【NGKI1320】.

6341 ----------------------------------------------------------------------

6342 dis_wai 待ち禁止状態への遷移〔TP〕【NGKI1321】

6343 idis_wai 待ち禁止状態への遷移〔IP〕【NGKI1322】

6344

6345 【C言語API】

6346 ER ercd = dis_wai(ID tskid)

6347 ER ercd = idis_wai(ID tskid)

6348

6349 【パラメータ】

6350 ID tskid 対象タスクのID番号

Page 128: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

128

6351

6352 【リターンパラメータ】

6353 ER ercd 正常終了(E_OK)またはエラーコード

6354

6355 【エラーコード】

6356 E_CTX コンテキストエラー

6357 ・非タスクコンテキストからの呼出し(dis_waiの場合)【NGKI1323】

6358 ・タスクコンテキストからの呼出し(idis_waiの場合)【NGKI1324】

6359 ・CPUロック状態からの呼出し【NGKI1325】

6360 E_NOSPT 未サポート機能

6361 ・対象タスクが制約タスク【NGKI1326】

6362 E_ID 不正ID番号

6363 ・tskidが有効範囲外【NGKI1327】

6364 E_NOEXS オブジェクト未登録

6365 ・対象タスクが未登録〔D〕【NGKI1328】

6366 E_OACV オブジェクトアクセス違反

6367 ・対象タスクに対する通常操作2が許可されていない(dis_wai

6368 の場合)【NGKI1329】

6369 E_OBJ オブジェクト状態エラー

6370 ・対象タスクが休止状態【NGKI1330】

6371 ・対象タスクがタスク例外処理マスク状態でない【NGKI1331】

6372 E_QOVR キューイングオーバフロー

6373 ・対象タスクが待ち禁止状態【NGKI1332】

6374

6375 【機能】

6376

6377 tskidで指定したタスク(対象タスク)を待ち禁止状態にする.具体的な振舞い

6378 は以下の通り.

6379

6380 対象タスクがタスク例外処理マスク状態であり,待ち禁止状態でない場合には,

6381 対象タスクは待ち禁止状態になる【NGKI1333】.

6382

6383 dis_waiにおいてtskidにTSK_SELF(=0)を指定すると,自タスクが対象タスク

6384 となる【NGKI1334】.

6385

6386 【TOPPERS/ASPカーネルにおける規定】

6387

6388 ASPカーネルでは,dis_waiをサポートしない【ASPS0114】.

6389

6390 【TOPPERS/FMPカーネルにおける規定】

6391

6392 FMPカーネルでは,dis_waiをサポートしない【FMPS0108】.

6393

6394 【補足説明】

6395

6396 dis_waiは,対象タスクの待ち解除は行わない.対象タスクを待ち禁止状態にす

6397 ることに加えて待ち解除したい場合には,dis_waiを呼び出した後に,rel_wai

6398 を呼び出せばよい.

6399

6400 【未決定事項】

Page 129: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

129

6401

6402 マルチプロセッサ対応カーネルでは,対象タスクを,自タスクと同じプロセッ

6403 サに割り付けられているタスクに限るなどの制限を導入する可能性があるが,

6404 現時点では未決定である.

6405

6406 【μITRON4.0/PX仕様との関係】

6407

6408 μITRON4.0/PX仕様に定義されていないサービスコールである.

6409 ----------------------------------------------------------------------

6410 ena_wai 待ち禁止状態の解除〔TP〕【NGKI1335】

6411 iena_wai 待ち禁止状態の解除〔IP〕【NGKI1336】

6412

6413 【C言語API】

6414 ER ercd = ena_wai(ID tskid)

6415 ER ercd = iena_wai(ID tskid)

6416

6417 【パラメータ】

6418 ID ts kid 対象タスクのID番号

6419

6420 【リターンパラメータ】

6421 ER ercd 正常終了(E_OK)またはエラーコード

6422

6423 【エラーコード】

6424 E_CTX コンテキストエラー

6425 ・非タスクコンテキストからの呼出し(ena_waiの場合)【NGKI1337】

6426 ・タスクコンテキストからの呼出し(iena_waiの場合)【NGKI1338】

6427 ・CPUロック状態からの呼出し【NGKI1339】

6428 E_NOSPT 未サポート機能

6429 ・対象タスクが制約タスク【NGKI1340】

6430 E_ID 不正ID番号

6431 ・tskidが有効範囲外【NGKI1341】

6432 E_NOEXS オブジェクト未登録

6433 ・対象タスクが未登録〔D〕【NGKI1342】

6434 E_OACV オブジェクトアクセス違反

6435 ・対象タスクに対する通常操作2が許可されていない(ena_wai

6436 の場合)【NGKI1343】

6437 E_OBJ オブジェクト状態エラー

6438 ・対象タスクが休止状態【NGKI1344】

6439 ・対象タスクが待ち禁止状態でない【NGKI1345】

6440

6441 【機能】

6442

6443 tskidで指定したタスク(対象タスク)の待ち禁止状態を解除する.具体的な振

6444 舞いは以下の通り.

6445

6446 対象タスクが待ち禁止状態である場合には,待ち禁止状態は解除される

6447 【NGKI1346】.

6448

6449 ena_waiにおいてtskidにTSK_SELF(=0)を指定すると,自タスクが対象タスク

6450 となる【NGKI1347】.

Page 130: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

130

6451

6452 【TOPPERS/ASPカーネルにおける規定】

6453

6454 ASPカーネルでは,ena_waiをサポートしない【ASPS0115】.

6455

6456 【TOPPERS/FMPカーネルにおける規定】

6457

6458 FMPカーネルでは,ena_waiをサポートしない【FMPS0109】.

6459

6460 【未決定事項】

6461

6462 マルチプロセッサ対応カーネルでは,対象タスクを,自タスクと同じプロセッ

6463 サに割り付けられているタスクに限るなどの制限を導入する可能性があるが,

6464 現時点では未決定である.

6465

6466 【μITRON4.0/PX仕様との関係】

6467

6468 μITRON4.0/PX仕様に定義されていないサービスコールである.

6469 ----------------------------------------------------------------------

6470 dly_tsk 自タスクの遅延〔T〕【NGKI1348】

6471

6472 【C言語API】

6473 ER ercd = dly_tsk(RELTIM dlytim)

6474

6475 【パラメータ】

6476 RELTIM dlytim 遅延時間

6477

6478 【リターンパラメータ】

6479 ER ercd 正常終了(E_OK)またはエラーコード

6480

6481 【エラーコード】

6482 E_CTX コンテキストエラー

6483 ・ディスパッチ保留状態からの呼出し【NGKI1349】

6484 E_NOSPT 未サポート機能

6485 ・制約タスクからの呼出し【NGKI1350】

6486 E_PAR パラメータエラー

6487 ・dlytimがTMAX_RELTIMより大きい【NGKI1351】

6488 E_RLWAI 待ち禁止状態または待ち状態の強制解除【NGKI1352】

6489

6490 【機能】

6491

6492 dlytimで指定した時間,自タスクを遅延させる.具体的な振舞いは以下の通り.

6493

6494 自タスクは,dlytimで指定した時間が経過するまでの間,時間経過待ち状態と

6495 なる【NGKI1353】.dly_tskを呼び出してからdlytimで指定した相対時間後に,

6496 自タスクは待ち解除され,dly_tskからE_OKが返る【NGKI1354】.

6497 ----------------------------------------------------------------------

6498

6499 4.3 タスク例外処理機能

6500

Page 131: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

131

6501 タスク例外処理ルーチンは,カーネルが実行を制御する処理単位で,タスクと

6502 同一のコンテキスト内で実行される.タスク例外処理ルーチンは,各タスクに

6503 1つのみ登録できるため,タスクIDによって識別する【NGKI1355】.

6504

6505 タスク例外処理機能に関連して,各タスクが持つ情報は次の通り【NGKI1356】.

6506

6507 ・タスク例外処理ルーチン属性

6508 ・タスク例外処理禁止フラグ

6509 ・保留例外要因

6510 ・タスク例外処理ルーチンの先頭番地

6511

6512 タスク例外処理ルーチン属性に指定できる属性はない【NGKI1357】.そのため,

6513 タスク例外処理ルーチン属性には,TA_NULLを指定しなければならない

6514 【NGKI1358】.

6515

6516 タスクは,タスク例外処理ルーチンの実行を保留するためのタスク例外処理禁

6517 止フラグを持つ【NGKI1359】.タスク例外処理禁止フラグがセットされた状態

6518 をタスク例外処理禁止状態,クリアされた状態をタスク例外処理許可状態と呼

6519 ぶ【NGKI1360】.タスク例外処理禁止フラグは,タスクの起動時に,セットし

6520 た状態に初期化される【NGKI1361】.

6521

6522 タスクの保留例外要因は,タスクに対して要求された例外要因を蓄積するため

6523 のビットマップであり,タスクの起動時に0に初期化される【NGKI1362】.

6524

6525 タスク例外処理ルーチンは,「タスク例外処理許可状態である」「保留例外要

6526 因が0でない」「タスクが実行状態である」「タスクコンテキストが実行されて

6527 いる」「割込み優先度マスク全解除状態である」「CPUロック状態でない」の6

6528 つの条件が揃った場合に実行が開始される【NGKI1363】.保護機能対応カーネ

6529 ルにおいては,さらに,「タスク例外処理マスク状態でない」という条件が追

6530 加される【NGKI1364】.タスク例外処理マスク状態については,「2.6.5 タス

6531 ク例外処理マスク状態と待ち禁止状態」の節を参照すること.

6532

6533 タスク例外処理ルーチンの実行が開始される時,タスク例外処理禁止フラグは

6534 セットされ,保留例外要因は0にクリアされる【NGKI1365】.また,タスク例外

6535 処理ルーチンからのリターン時には,タスク例外処理禁止フラグはクリアされ

6536 る【NGKI1366】.

6537

6538 保護機能対応カーネルでは,ユーザタスクのタスク例外処理ルーチンの実行開

6539 始時に,リターン先の番地やシステム状態等が,ユーザスタック上に保存され

6540 る【NGKI1367】.ここで,ユーザスタック領域に十分な空きがない場合や,ユー

6541 ザスタックポインタがユーザスタック領域以外を指している場合,カーネルは,

6542 エミュレートされたCPU例外を発生させる【NGKI1368】.これを,タスク例外実

6543 行開始時スタック不正例外と呼ぶ.

6544

6545 逆に,タスク例外処理ルーチンからのリターン時には,リターン先の番地やシ

6546 ステム状態等が,ユーザスタック上から取り出される【NGKI1369】.ここで,

6547 ユーザスタック領域に積まれている情報が足りない場合や,ユーザスタックポ

6548 インタがユーザスタック領域以外を指している場合,カーネルは,エミュレー

6549 トされたCPU例外を発生させる【NGKI1370】.これを,タスク例外リターン時ス

6550 タック不正例外と呼ぶ.

Page 132: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

132

6551

6552 タスク例外実行開始時スタック不正例外またはタスク例外リターン時スタック

6553 不正例外を起こしたタスクの実行を継続した場合の動作は保証されないため,

6554 アプリケーションは,これらのCPU例外を処理するCPU例外ハンドラで,

6555 「2.8.1 CPU例外処理の流れ」の節の(b)または(d)の方法でリカバリ処理を行う

6556 必要がある【NGKI1371】.この方法に従わなかった場合の動作は,保証されな

6557 い【NGKI1372】.

6558

6559 保護機能対応カーネルにおいて,タスク例外処理ルーチンは,タスクと同じ保

6560 護ドメインに属する【NGKI1373】.

6561

6562 タスク例外処理機能に用いるデータ型は次の通り.

6563

6564 TEXPTN タスク例外要因のビットパターン(符号無し整数,uint_tに

6565 定義)【NGKI1374】

6566

6567 C言語によるタスク例外処理ルーチンの記述形式は次の通り【NGKI1375】.

6568

6569 void task_exception_routine(TEXPTN texptn, intptr_t exinf)

6570 {

6571 タスク例外処理ルーチン本体

6572 }

6573

6574 texptnにはタスク例外処理ルーチン起動時の保留例外要因が,exinfにはタスク

6575 の拡張情報が,それぞれ渡される【NGKI1376】.

6576

6577 タスク例外処理機能に関連するカーネル構成マクロは次の通り.

6578

6579 TBIT_TEXPTN タスク例外要因のビット数(TEXPTNの有効ビット数)

6580 【NGKI1377】

6581

6582 【補足説明】

6583

6584 保護機能対応でないカーネルでは,タスク例外処理ルーチンの実行開始条件の

6585 内,「CPUロック状態でない」は省いても同じ結果になる.これは,CPUロック

6586 状態で他の条件が揃うことはないためである.一方,保護機能対応カーネルで

6587 は,CPUロック状態で拡張サービスコールからリターンした場合(言い換えると,

6588 タスク例外処理マスク状態が解除された場合)に,CPUロック状態で他の条件が

6589 揃うことになる.

6590

6591 【TOPPERS/ASPカーネルにおける規定】

6592

6593 ASPカーネルでは,タスク例外要因のビット数(TBIT_TEXPTN)は16以上である

6594 【ASPS0116】.

6595

6596 【TOPPERS/FMPカーネルにおける規定】

6597

6598 FMPカーネルでは,タスク例外要因のビット数(TBIT_TEXPTN)は16以上である

6599 【FMPS0110】.

6600

Page 133: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

133

6601 【TOPPERS/HRP2カーネルにおける規定】

6602

6603 HRP2カーネルでは,タスク例外要因のビット数(TBIT_TEXPTN)は16以上である

6604 【HRPS0110】.

6605

6606 【TOPPERS/SSPカーネルにおける規定】

6607

6608 SSPカーネルでは,タスク例外処理機能をサポートしない【SSPS0126】.

6609

6610 【μITRON4.0仕様との関係】

6611

6612 割込み優先度マスク全解除状態でない場合には,タスク例外処理ルーチンの実

6613 行が開始されないという仕様に変更した.

6614

6615 【μITRON4.0/PX仕様との関係】

6616

6617 ユーザタスクのタスク例外処理ルーチンの実行開始時とリターン時にユーザス

6618 タックが不正となる問題に関して,μITRON4.0/PX仕様では考慮されていない.

6619

6620 【仕様変更の経緯】

6621

6622 この仕様のRelease 1.2以前では,タスク例外処理ルーチンの実行開始条件に

6623 「割込み優先度マスク全解除状態である」の条件がなかったが,Release1.3以

6624 降で追加した.これは,マルチプロセッサ対応カーネルにおいて,他プロセッ

6625 サで実行中のタスクに対してタスク例外処理を要求した場合に,割込み優先度

6626 マスクが全解除でないと,タスク例外処理ルーチンをただちに実行開始するこ

6627 とができないためである.なお,ASPカーネル Release 1.6以前と,FMPカーネ

6628 ル Release 1.1.1以前のバージョンは,古い仕様に従って実装されている.

6629 ----------------------------------------------------------------------

6630 DEF_TEX タスク例外処理ルーチンの定義〔S〕【NGKI1378】

6631 def_tex タスク例外処理ルーチンの定義〔TD〕【NGKI1379】

6632

6633 【静的API】

6634 DEF_TEX(ID tskid, { ATR texatr, TEXRTN texrtn })

6635

6636 【C言語API】

6637 ER ercd = def_tex(ID tskid, const T_DTEX *pk_dtex)

6638

6639 【パラメータ】

6640 ID tskid 対象タスクのID番号

6641 T_DTEX * pk_dtex タスク例外処理ルーチンの定義情報を入れたパ

6642 ケットへのポインタ(静的APIを除く)

6643

6644 *タスク例外処理ルーチンの定義情報(パケットの内容)

6645 ATR texatr タスク例外処理ルーチン属性

6646 TEXRTN texrtn タスク例外処理ルーチンの先頭番地

6647

6648 【リターンパラメータ】

6649 ER ercd 正常終了(E_OK)またはエラーコード

6650

Page 134: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

134

6651 【エラーコード】

6652 E_CTX コンテキストエラー

6653 ・非タスクコンテキストからの呼出し〔s〕【NGKI1380】

6654 ・CPUロック状態からの呼出し〔s〕【NGKI1381】

6655 E_ID 不正ID番号

6656 ・tskidが有効範囲外〔s〕【NGKI1382】

6657 E_RSATR 予約属性

6658 ・texatrが無効【NGKI1383】

6659 ・その他の条件については機能の項を参照

6660 E_PAR パラメータエラー

6661 ・texrtnがプログラムの先頭番地として正しくない【NGKI1384】

6662 E_NOEXS オブジェクト未登録

6663 ・対象タスクが未登録【NGKI1385】

6664 E_OACV オブジェクトアクセス違反

6665 ・対象タスクに対する管理操作が許可されていない〔sP〕

6666 【NGKI1386】

6667 E_MACV メモリアクセス違反

6668 ・pk_dtexが指すメモリ領域への読出しアクセスが許可されて

6669 いない〔sP〕【NGKI1387】

6670 E_OBJ オブジェクト状態エラー

6671 ・対象タスクは静的APIで生成された〔s〕【NGKI1388】

6672 ・その他の条件については機能の項を参照

6673

6674 【機能】

6675

6676 tskidで指定したタスク(対象タスク)に対して,各パラメータで指定したタス

6677 ク例外処理ルーチン定義情報に従って,タスク例外処理ルーチンを定義する

6678 【NGKI1389】.

6679

6680 ただし,def_texにおいてpk_dtexをNULLにした場合には,対象タスクに対する

6681 タスク例外処理ルーチンの定義を解除する【NGKI1390】.また,対象タスクの

6682 タスク例外処理禁止フラグをセットし,保留例外要因を0に初期化する

6683 【NGKI1391】.

6684

6685 静的APIにおいては,tskidはオブジェクト識別名,texatrは整数定数式パラメー

6686 タ,texrtnは一般定数式パラメータである【NGKI1392】.

6687

6688 タスク例外処理ルーチンを定義する場合(DEF_TEXの場合およびdef_texにおい

6689 てpk_dtexをNULL以外にした場合)で,対象タスクに対してすでにタスク例外処

6690 理ルーチンが定義されている場合には,E_OBJエラーとなる【NGKI1393】.

6691

6692 保護機能対応カーネルにおいて,DEF_TEXは,対象タスクが属する保護ドメイン

6693 の囲みの中に記述しなければならない.そうでない場合には,E_RSATRエラーと

6694 なる【NGKI1395】.また,def_texでタスク例外処理ルーチンを定義する場合に

6695 は,タスク例外処理ルーチンの属する保護ドメインを設定する必要はなく,タ

6696 スク例外処理ルーチン属性にTA_DOM(domid)を指定した場合にはE_RSATRエラー

6697 となる【NGKI1396】.ただし,TA_DOM(TDOM_SELF)を指定した場合には,指定が

6698 無視され,E_RSATRエラーは検出されない【NGKI1397】.

6699

6700 マルチプロセッサ対応カーネルにおいて,DEF_TEXは,対象タスクが属するクラ

Page 135: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

135

6701 スの囲みの中に記述しなければならない.そうでない場合には,E_RSATRエラー

6702 となる【NGKI1399】.また,def_texでタスク例外処理ルーチンを定義する場合

6703 には,タスク例外処理ルーチンの属するクラスを設定する必要はなく,タスク

6704 例外処理ルーチン属性にTA_CLS(clsid)を指定した場合にはE_RSATRエラーとな

6705 る【NGKI1400】.ただし,TA_CLS(CLS_SELF)を指定した場合には,指定が無視

6706 され,E_RSATRエラーは検出されない【NGKI1401】.

6707

6708 タスク例外処理ルーチンの定義を解除する場合(def_texにおいてpk_dtexを

6709 NULLにした場合)で,対象タスクに対してタスク例外処理ルーチンが定義され

6710 ていない場合には,E_OBJエラーとなる【NGKI1402】.

6711

6712 def_texにおいてtskidにTSK_SELF(=0)を指定すると,自タスクが対象タスク

6713 となる【NGKI1403】.

6714

6715 【TOPPERS/ASPカーネルにおける規定】

6716

6717 ASPカーネルでは,DEF_TEXのみをサポートする【ASPS0117】.ただし,動的生

6718 成機能拡張パッケージでは,def_texもサポートする【ASPS0118】.

6719

6720 【TOPPERS/FMPカーネルにおける規定】

6721

6722 FMPカーネルでは,DEF_TEXのみをサポートする【FMPS0111】.

6723

6724 【TOPPERS/HRP2カーネルにおける規定】

6725

6726 HRP2カーネルでは,DEF_TEXのみをサポートする【HRPS0111】.

6727

6728 【μITRON4.0仕様との関係】

6729

6730 texrtnのデータ型をTEXRTNに変更した.

6731

6732 def_texによって,定義済みのタスク例外処理ルーチンを再定義しようとした場

6733 合に,E_OBJエラーとすることにした.

6734 ----------------------------------------------------------------------

6735 ras_tex タスク例外処理の要求〔T〕【NGKI1404】

6736 iras_tex タスク例外処理の要求〔I〕【NGKI1405】

6737

6738 【C言語API】

6739 ER ercd = ras_tex(ID tskid, TEXPTN rasptn)

6740 ER ercd = iras_tex(ID tskid, TEXPTN rasptn)

6741

6742 【パラメータ】

6743 ID tskid 対象タスクのID番号

6744 TEXPTN rasptn 要求するタスク例外処理のタスク例外要因

6745

6746 【リターンパラメータ】

6747 ER ercd 正常終了(E_OK)またはエラーコード

6748

6749 【エラーコード】

6750 E_CTX コンテキストエラー

Page 136: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

136

6751 ・非タスクコンテキストからの呼出し(ras_texの場合)【NGKI1406】

6752 ・タスクコンテキストからの呼出し(iras_texの場合)【NGKI1407】

6753 ・CPUロック状態からの呼出し【NGKI1408】

6754 E_ID 不正ID番号

6755 ・tskidが有効範囲外【NGKI1409】

6756 E_PAR パラメータエラー

6757 ・rasptnが0【NGKI1410】

6758 E_NOEXS オブジェクト未登録

6759 ・対象タスクが未登録〔D〕【NGKI1411】

6760 E_OACV オブジェクトアクセス違反

6761 ・対象タスクに対する通常操作2が許可されていない(ras_tex

6762 の場合)〔P〕【NGKI1412】

6763 E_OBJ オブジェクト状態エラー

6764 ・対象タスクが休止状態【NGKI1413】

6765 ・対象タスクに対してタスク例外処理ルーチンが定義されてい

6766 ない【NGKI1414】

6767

6768 【機能】

6769

6770 tskidで指定したタスク(対象タスク)に対して,rasptnで指定したタスク例外

6771 要因のタスク例外処理を要求する.対象タスクの保留例外要因が,それまでの

6772 値とrasptnで指定した値のビット毎論理和(C言語の"¦")に更新される

6773 【NGKI1415】.

6774

6775 ras_texにおいてtskidにTSK_SELF(=0)を指定すると,自タスクが対象タスク

6776 となる【NGKI1416】.

6777 ----------------------------------------------------------------------

6778 dis_tex タスク例外処理の禁止〔T〕【NGKI1417】

6779

6780 【C言語API】

6781 ER ercd = dis_tex()

6782

6783 【パラメータ】

6784 なし

6785

6786 【リターンパラメータ】

6787 ER ercd 正常終了(E_OK)またはエラーコード

6788

6789 【エラーコード】

6790 E_CTX コンテキストエラー

6791 ・非タスクコンテキストからの呼出し【NGKI1419】

6792 ・CPUロック状態からの呼出し【NGKI1420】

6793 E_OBJ オブジェクト状態エラー

6794 ・自タスクに対してタスク例外処理ルーチンが定義されていな

6795 い【NGKI1421】

6796

6797 【機能】

6798

6799 自タスクのタスク例外処理禁止フラグをセットする【NGKI1422】.すなわち,

6800 自タスクをタスク例外処理禁止状態に遷移させる.

Page 137: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

137

6801 ----------------------------------------------------------------------

6802 ena_tex タスク例外処理の許可〔T〕【NGKI1423】

6803

6804 【C言語API】

6805 ER ercd = ena_tex()

6806

6807 【パラメータ】

6808 なし

6809

6810 【リターンパラメータ】

6811 ER ercd 正常終了(E_OK)またはエラーコード

6812

6813 【エラーコード】

6814 E_CTX コンテキストエラー

6815 ・非タスクコンテキストからの呼出し【NGKI1424】

6816 ・CPUロック状態からの呼出し【NGKI1425】

6817 E_OBJ オブジェクト状態エラー

6818 ・自タスクに対してタスク例外処理ルーチンが定義されていな

6819 い【NGKI1426】

6820

6821 【機能】

6822

6823 自タスクのタスク例外処理禁止フラグをクリアする【NGKI1427】.すなわち,

6824 自タスクをタスク例外処理許可状態に遷移させる.

6825

6826 【補足説明】

6827

6828 タスク例外処理ルーチン中でena_texを呼び出すことにより,タスク例外処理ルー

6829 チンの多重起動を行うことができる.ただし,多重起動の最大段数を制限する

6830 のは,アプリケーションの責任である.

6831 ----------------------------------------------------------------------

6832 sns_tex タスク例外処理禁止状態の参照〔TI〕【NGKI1428】

6833

6834 【C言語API】

6835 bool_t stat e = sns_tex()

6836

6837 【パラメータ】

6838 なし

6839

6840 【リターンパラメータ】

6841 bool_t state タスク例外処理禁止状態

6842

6843 【機能】

6844

6845 実行状態のタスクのタスク例外処理禁止フラグを参照する.具体的な振舞いは

6846 以下の通り.

6847

6848 実行状態のタスクが,タスク例外処理禁止状態の場合にtrue,タスク例外処理

6849 許可状態の場合にfalseが返る【NGKI1429】.sns_texを非タスクコンテキスト

6850 から呼び出した場合で,実行状態のタスクがない場合には,trueが返る

Page 138: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

138

6851 【NGKI1430】.

6852

6853 マルチプロセッサ対応カーネルにおいては,サービスコールを呼び出した処理

6854 単位を実行しているプロセッサにおいて実行状態のタスクのタスク例外処理禁

6855 止フラグを参照する【NGKI1431】.

6856

6857 【補足説明】

6858

6859 sns_texをタスクコンテキストから呼び出した場合,実行状態のタスクは自タス

6860 クに一致する.

6861 ----------------------------------------------------------------------

6862 ref_tex タスク例外処理の状態参照〔T〕【NGKI1432】

6863

6864 【C言語API】

6865 ER ercd = ref_tex(ID tskid, T_RTEX *pk_rtex)

6866

6867 【パラメータ】

6868 ID tskid 対象タスクのID番号

6869 T_RTEX * pk_rtex タスク例外処理の現在状態を入れるパケットへ

6870 のポインタ

6871

6872 【リターンパラメータ】

6873 ER ercd 正常終了(E_OK)またはエラーコード

6874

6875 *タスク例外処理の現在状態(パケットの内容)

6876 STAT texstat タスク例外処理の状態

6877 TEXPTN pndptn タスクの保留例外要因

6878

6879 【エラーコード】

6880 E_CTX コンテキストエラー

6881 ・非タスクコンテキストからの呼出し【NGKI1433】

6882 ・CPUロック状態からの呼出し【NGKI1434】

6883 E_ID 不正ID番号

6884 ・tskidが有効範囲外【NGKI1435】

6885 E_NOEXS オブジェクト未登録

6886 ・対象タスクが未登録〔D〕【NGKI1436】

6887 E_OACV オブジェクトアクセス違反

6888 ・対象タスクに対する参照操作が許可されていない〔P〕【NGKI1437】

6889 E_MACV メモリアクセス違反

6890 ・pk_rtexが指すメモリ領域への書込みアクセスが許可されて

6891 いない〔P〕【NGKI1438】

6892 E_OBJ オブジェクト状態エラー

6893 ・対象タスクが休止状態【NGKI1439】

6894 ・対象タスクに対してタスク例外処理ルーチンが定義されてい

6895 ない【NGKI1440】

6896

6897 【機能】

6898

6899 tskidで指定したタスク(対象タスク)のタスク例外処理に関する現在状態を参

6900 照する.参照した現在状態は,pk_rtexで指定したパケットに返される

Page 139: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

139

6901 【NGKI1441】.

6902

6903 texstatには,対象タスクの現在のタスク例外処理禁止フラグを表す次のいずれ

6904 かの値が返される【NGKI1442】.

6905

6906 TTEX_ENA 0x01U タスク例外処理許可状態

6907 TTEX_DIS 0x02U タスク例外処理禁止状態

6908

6909 pndptnには,対象タスクの現在の保留例外要因が返される【NGKI1443】.

6910

6911 tskidにTSK_SELF(=0)を指定すると,自タスクが対象タスクとなる

6912 【NGKI1444】.

6913 ----------------------------------------------------------------------

6914

6915 4.4 同期・通信機能

6916

6917 【TOPPERS/SSPカーネルにおける規定】

6918

6919 SSPカーネルでは,同期・通信機能をサポートしない【SSPS0127】.

6920

6921 【μITRON4.0仕様との関係】

6922

6923 この仕様では,ランデブ機能はサポートしていない.今後の検討により,ラン

6924 デブ機能をサポートすることに変更する可能性もある.

6925

6926 4.4.1 セマフォ

6927

6928 セマフォは,資源の数を表す0以上の整数値を取るカウンタ(資源数)を介して,

6929 排他制御やイベント通知を行うための同期・通信オブジェクトである.セマフォ

6930 の資源数から1を減ずることを資源の獲得,資源数に1を加えることを資源の返

6931 却と呼ぶ.セマフォは,セマフォIDと呼ぶID番号によって識別する【NGKI1445】.

6932

6933 各セマフォが持つ情報は次の通り【NGKI1446】.

6934

6935 ・セマフォ属性

6936 ・資源数(の現在値)

6937 ・待ち行列(セマフォの資源獲得待ち状態のタスクのキュー)

6938 ・初期資源数

6939 ・最大資源数

6940 ・アクセス許可ベクタ(保護機能対応カーネルの場合)

6941 ・属する保護ドメイン(保護機能対応カーネルの場合)

6942 ・属するクラス(マルチプロセッサ対応カーネルの場合)

6943

6944 待ち行列は,セマフォの資源が獲得できるまで待っている状態(セマフォの資

6945 源獲得待ち状態)のタスクが,資源を獲得できる順序でつながれているキュー

6946 である.

6947

6948 セマフォの初期資源数は,セマフォを生成または再初期化した際の,資源数の

6949 初期値である.また,セマフォの最大資源数は,資源数が取りうる最大値であ

6950 る.資源数が最大資源数に一致している時に資源を返却しようとすると,

Page 140: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

140

6951 E_QOVRエラーとなる【NGKI1447】.

6952

6953 セマフォ属性には,次の属性を指定することができる【NGKI1448】.

6954

6955 TA_TPRI 0x01U 待ち行列をタスクの優先度順にする

6956

6957 TA_TPRIを指定しない場合,待ち行列はFIFO順になる【NGKI1449】.

6958

6959 セマフォ機能に関連するカーネル構成マクロは次の通り.

6960

6961 TMAX_MAXSEM セマフォの最大資源数の最大値(=UINT_MAX)【NGKI1450】

6962

6963 TNUM_SEMID 登録できるセマフォの数(動的生成対応でないカーネル

6964 では,静的APIによって登録されたセマフォの数に一致)

6965 【NGKI1451】

6966

6967 【μITRON4.0仕様との関係】

6968

6969 TNUM_SEMIDは,μITRON4.0仕様に規定されていないカーネル構成マクロである.

6970 ----------------------------------------------------------------------

6971 CRE_SEM セマフォの生成〔S〕【NGKI1452】

6972 acre_sem セマフォの生成〔TD〕【NGKI1453】

6973

6974 【静的API】

6975 CRE_SEM(ID semid, { ATR sematr, uint_t isemcnt, uint_t maxsem })

6976

6977 【C言語API】

6978 ER_ID semid = acre_sem(const T_CSEM *pk_csem)

6979

6980 【パラメータ】

6981 ID semid 生成するセマフォのID番号(CRE_SEMの場合)

6982 T_CSEM * pk_csem セマフォの生成情報を入れたパケットへのポイ

6983 ンタ(静的APIを除く)

6984

6985 *セマフォの生成情報(パケットの内容)

6986 ATR sematr セマフォ属性

6987 uint_t isemcnt セマフォの初期資源数

6988 uint_t maxsem セマフォの最大資源数

6989

6990 【リターンパラメータ】

6991 ER_ID semid 生成されたセマフォのID番号(正の値)または

6992 エラーコード

6993

6994 【エラーコード】

6995 E_CTX コンテキストエラー

6996 ・非タスクコンテキストからの呼出し〔s〕【NGKI1454】

6997 ・CPUロック状態からの呼出し〔s〕【NGKI1455】

6998 E_RSATR 予約属性

6999 ・sematrが無効【NGKI1456】

7000 ・属する保護ドメインの指定が有効範囲外〔sP〕【NGKI1457】

Page 141: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

141

7001 ・属するクラスの指定が有効範囲外〔sM〕【NGKI1458】

7002 ・クラスの囲みの中に記述されていない〔SM〕【NGKI1459】

7003 E_PAR パラメータエラー

7004 ・maxsemが有効範囲(1以上TMAX_MAXSEM以下)外【NGKI1468】

7005 ・isemcntが有効範囲(0以上maxsem以下)外【NGKI1466】

7006 E_OACV オブジェクトアクセス違反

7007 ・システム状態に対する管理操作が許可されていない〔sP〕

7008 【NGKI1460】

7009 E_MACV メモリアクセス違反

7010 ・pk_csemが指すメモリ領域への読出しアクセスが許可されて

7011 いない〔sP〕【NGKI1461】

7012 E_NOID ID番号不足

7013 ・割り付けられるセマフォIDがない〔sD〕【NGKI1462】

7014 E_OBJ オブジェクト状態エラー

7015 ・semidで指定したセマフォが登録済み(CRE_SEMの場合)

7016 【NGKI1463】

7017

7018 【機能】

7019

7020 各パラメータで指定したセマフォ生成情報に従って,セマフォを生成する.生

7021 成されたセマフォの資源数は初期資源数に,待ち行列は空の状態に初期化され

7022 る【NGKI1464】.

7023

7024 静的APIにおいては,semidはオブジェクト識別名,sematr,isemcnt,maxsemは

7025 整数定数式パラメータである【NGKI1465】.

7026

7027 【TOPPERS/ASPカーネルにおける規定】

7028

7029 ASPカーネルでは,CRE_SEMのみをサポートする【ASPS0119】.ただし,動的生

7030 成機能拡張パッケージでは,acre_semもサポートする【ASPS0120】.

7031

7032 【TOPPERS/FMPカーネルにおける規定】

7033

7034 FMPカーネルでは,CRE_SEMのみをサポートする【FMPS0112】.

7035

7036 【TOPPERS/HRP2カーネルにおける規定】

7037

7038 HRP2カーネルでは,CRE_SEMのみをサポートする【HRPS0112】.

7039 ----------------------------------------------------------------------

7040 AID_SEM 割付け可能なセマフォIDの数の指定〔SD〕【NGKI1469】

7041

7042 【静的API】

7043 AID_SEM(uint_t nosem)

7044

7045 【パラメータ】

7046 uint_t n osem 割付け可能なセマフォIDの数

7047

7048 【エラーコード】

7049 E_RSATR 予約属性

7050 ・クラスの囲みの中に記述されていない〔M〕【NGKI1470】

Page 142: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

142

7051 E_PAR パラメータエラー

7052 ・nosemが負の値【NGKI3277】

7053

7054 【機能】

7055

7056 nosemで指定した数のセマフォIDを,セマフォを生成するサービスコールによっ

7057 て割付け可能なセマフォIDとして確保する【NGKI1471】.

7058

7059 nosemは整数定数式パラメータである【NGKI1472】.

7060 ----------------------------------------------------------------------

7061 SAC_SEM セマフォのアクセス許可ベクタの設定〔SP〕【NGKI1473】

7062 sac_sem セマフォのアクセス許可ベクタの設定〔TPD〕【NGKI1474】

7063

7064 【静的API】

7065 SAC_SEM(ID semid, { ACPTN acptn1, ACPTN acptn2,

7066 ACPTN acptn3, ACPTN acptn4 })

7067

7068 【C言語API】

7069 ER ercd = sac_sem(ID semid, const ACVCT *p_acvct)

7070

7071 【パラメータ】

7072 ID semid 対象セマフォのID番号

7073 ACVCT * p_acvct アクセス許可ベクタを入れたパケットへのポ

7074 インタ(静的APIを除く)

7075

7076 *アクセス許可ベクタ(パケットの内容)

7077 ACPTN acptn1 通常操作1のアクセス許可パターン

7078 ACPTN acptn2 通常操作2のアクセス許可パターン

7079 ACPTN acptn3 管理操作のアクセス許可パターン

7080 ACPTN acptn4 参照操作のアクセス許可パターン

7081

7082 【リターンパラメータ】

7083 ER ercd 正常終了(E_OK)またはエラーコード

7084

7085 【エラーコード】

7086 E_CTX コンテキストエラー

7087 ・非タスクコンテキストからの呼出し〔s〕【NGKI1475】

7088 ・CPUロック状態からの呼出し〔s〕【NGKI1476】

7089 E_ID 不正ID番号

7090 ・semidが有効範囲外〔s〕【NGKI1477】

7091 E_RSATR 予約属性

7092 ・対象セマフォが属する保護ドメインの囲みの中に記述され

7093 ていない〔S〕【NGKI1478】

7094 ・対象セマフォが属するクラスの囲みの中に記述されていな

7095 い〔SM〕【NGKI1479】

7096 E_NOEXS オブジェクト未登録

7097 ・対象セマフォが未登録【NGKI1480】

7098 E_OACV オブジェクトアクセス違反

7099 ・対象セマフォに対する管理操作が許可されていない〔s〕

7100 【NGKI1481】

Page 143: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

143

7101 E_MACV メモリアクセス違反

7102 ・p_acvctが指すメモリ領域への読出しアクセスが許可されて

7103 いない〔s〕【NGKI1482】

7104 E_OBJ オブジェクト状態エラー

7105 ・対象セマフォは静的APIで生成された〔s〕【NGKI1483】

7106 ・対象セマフォに対してアクセス許可ベクタが設定済み〔S〕

7107 【NGKI1484】

7108

7109 【機能】

7110

7111 semidで指定したセマフォ(対象セマフォ)のアクセス許可ベクタ(4つのアク

7112 セス許可パターンの組)を,各パラメータで指定した値に設定する

7113 【NGKI1485】.

7114

7115 静的APIにおいては,semidはオブジェクト識別名,acptn1~acptn4は整数定数

7116 式パラメータである【NGKI1486】.

7117

7118 【TOPPERS/ASPカーネルにおける規定】

7119

7120 ASPカーネルでは,SAC_SEM,sac_semをサポートしない【ASPS0121】.

7121

7122 【TOPPERS/FMPカーネルにおける規定】

7123

7124 FMPカーネルでは,SAC_SEM,sac_semをサポートしない【FMPS0113】.

7125

7126 【TOPPERS/HRP2カーネルにおける規定】

7127

7128 HRP2カーネルでは,SAC_SEMのみをサポートする【HRPS0113】.

7129 ----------------------------------------------------------------------

7130 del_sem セマフォの削除〔TD〕【NGKI1487】

7131

7132 【C言語API】

7133 ER ercd = del_sem(ID semid)

7134

7135 【パラメータ】

7136 ID semi d 対象セマフォのID番号

7137

7138 【リターンパラメータ】

7139 ER ercd 正常終了(E_OK)またはエラーコード

7140

7141 【エラーコード】

7142 E_CTX コンテキストエラー

7143 ・非タスクコンテキストからの呼出し【NGKI1488】

7144 ・CPUロック状態からの呼出し【NGKI1489】

7145 E_ID 不正ID番号

7146 ・semidが有効範囲外【NGKI1490】

7147 E_NOEXS オブジェクト未登録

7148 ・対象セマフォが未登録【NGKI1491】

7149 E_OACV オブジェクトアクセス違反

7150 ・対象セマフォに対する管理操作が許可されていない〔P〕

Page 144: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

144

7151 【NGKI1492】

7152 E_OBJ オブジェクト状態エラー

7153 ・対象セマフォは静的APIで生成された【NGKI1493】

7154

7155 【機能】

7156

7157 semidで指定したセマフォ(対象セマフォ)を削除する.具体的な振舞いは以下

7158 の通り.

7159

7160 対象セマフォの登録が解除され,そのセマフォIDが未使用の状態に戻される

7161 【NGKI1494】.また,対象セマフォの待ち行列につながれたタスクは,待ち行

7162 列の先頭のタスクから順に待ち解除される【NGKI1495】.待ち解除されたタス

7163 クには,待ち状態となったサービスコールからE_DLTエラーが返る【NGKI1496】.

7164

7165 【使用上の注意】

7166

7167 del_semにより複数のタスクが待ち解除される場合,サービスコールの処理時間

7168 およびカーネル内での割込み禁止時間が,待ち解除されるタスクの数に比例し

7169 て長くなる.特に,多くのタスクが待ち解除される場合,カーネル内での割込

7170 み禁止時間が長くなるため,注意が必要である.

7171

7172 【TOPPERS/ASPカーネルにおける規定】

7173

7174 ASPカーネルでは,del_semをサポートしない【ASPS0122】.ただし,動的生成

7175 機能拡張パッケージでは,del_semをサポートする【ASPS0123】.

7176

7177 【TOPPERS/FMPカーネルにおける規定】

7178

7179 FMPカーネルでは,del_semをサポートしない【FMPS0114】.

7180

7181 【TOPPERS/HRP2カーネルにおける規定】

7182

7183 HRP2カーネルでは,del_semをサポートしない【HRPS0114】.

7184 ----------------------------------------------------------------------

7185 sig_sem セマフォの資源の返却〔T〕【NGKI1497】

7186 isig_sem セマフォの資源の返却〔I〕【NGKI1498】

7187

7188 【C言語API】

7189 ER ercd = sig_sem(ID semid)

7190 ER ercd = isig_sem(ID semid)

7191

7192 【パラメータ】

7193 ID semid 対象セマフォのID番号

7194

7195 【リターンパラメータ】

7196 ER ercd 正常終了(E_OK)またはエラーコード

7197

7198 【エラーコード】

7199 E_CTX コンテキストエラー

7200 ・非タスクコンテキストからの呼出し(sig_semの場合)【NGKI1499】

Page 145: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

145

7201 ・タスクコンテキストからの呼出し(isig_semの場合)【NGKI1500】

7202 ・CPUロック状態からの呼出し【NGKI1501】

7203 E_ID 不正ID番号

7204 ・semidが有効範囲外【NGKI1502】

7205 E_NOEXS オブジェクト未登録

7206 ・対象セマフォが未登録〔D〕【NGKI1503】

7207 E_OACV オブジェクトアクセス違反

7208 ・対象セマフォに対する通常操作1が許可されていない(sig_sem

7209 の場合)〔P〕【NGKI1504】

7210 E_QOVR キューイングオーバフロー

7211 ・条件については機能の項を参照

7212

7213 【機能】

7214

7215 semidで指定したセマフォ(対象セマフォ)に資源を返却する.具体的な振舞い

7216 は以下の通り.

7217

7218 対象セマフォの待ち行列にタスクが存在する場合には,待ち行列の先頭のタス

7219 クが待ち解除される【NGKI1505】.この時,待ち解除されたタスクが資源を獲

7220 得したことになるため,対象セマフォの資源数は変化しない【NGKI1506】.待

7221 ち解除されたタスクには,待ち状態となったサービスコールからE_OKが返る

7222 【NGKI1507】.

7223

7224 待ち行列にタスクが存在しない場合には,対象セマフォの資源数に1が加えられ

7225 る【NGKI1508】.資源数に1を加えるとそのセマフォの最大資源数を越える場合

7226 には,E_QOVRエラーとなる【NGKI1509】.

7227 ----------------------------------------------------------------------

7228 wai_sem セマフォの資源の獲得〔T〕【NGKI1510】

7229 pol_sem セマフォの資源の獲得(ポーリング)〔T〕【NGKI1511】

7230 twai_sem セマフォの資源の獲得(タイムアウト付き)〔T〕【NGKI1512】

7231

7232 【C言語API】

7233 ER ercd = wai_sem(ID semid)

7234 ER ercd = pol_sem(ID semid)

7235 ER ercd = twai_sem(ID semid, TMO tmout)

7236

7237 【パラメータ】

7238 ID semid 対象セマフォのID番号

7239 TMO tmout タイムアウト時間(twai_semの場合)

7240

7241 【リターンパラメータ】

7242 ER ercd 正常終了(E_OK)またはエラーコード

7243

7244 【エラーコード】

7245 E_CTX コンテキストエラー

7246 ・非タスクコンテキストからの呼出し【NGKI1513】

7247 ・CPUロック状態からの呼出し【NGKI1514】

7248 ・ディスパッチ保留状態からの呼出し(pol_semを除く)【NGKI1515】

7249 E_NOSPT 未サポート機能

7250 ・制約タスクからの呼出し(pol_semを除く)【NGKI1516】

Page 146: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

146

7251 E_ID 不正ID番号

7252 ・semidが有効範囲外【NGKI1517】

7253 E_PAR パラメータエラー

7254 ・tmoutが無効(twai_semの場合)【NGKI1518】

7255 E_NOEXS オブジェクト未登録

7256 ・対象セマフォが未登録〔D〕【NGKI1519】

7257 E_OACV オブジェクトアクセス違反

7258 ・対象セマフォに対する通常操作2が許可されていない〔P〕

7259 【NGKI1520】

7260 E_TMOUT ポーリング失敗またはタイムアウト(wai_semを除く)【NGKI1521】

7261 E_RLWAI 待ち禁止状態または待ち状態の強制解除(pol_semを除く)

7262 【NGKI1522】

7263 E_DLT 待ちオブジェクトの削除または再初期化(pol_semを除く)

7264 【NGKI1523】

7265

7266 【機能】

7267

7268 semidで指定したセマフォ(対象セマフォ)から資源を獲得する.具体的な振舞

7269 いは以下の通り.

7270

7271 対象セマフォの資源数が1以上の場合には,資源数から1が減ぜられる

7272 【NGKI1524】.資源数が0の場合には,自タスクはセマフォの資源獲得待ち状態

7273 となり,対象セマフォの待ち行列につながれる【NGKI1525】.

7274 ----------------------------------------------------------------------

7275 ini_sem セマフォの再初期化〔T〕【NGKI1526】

7276

7277 【C言語API】

7278 ER ercd = ini_sem(ID semid)

7279

7280 【パラメータ】

7281 ID semid 対象セマフォのID番号

7282

7283 【リターンパラメータ】

7284 ER ercd 正常終了(E_OK)またはエラーコード

7285

7286 【エラーコード】

7287 E_CTX コンテキストエラー

7288 ・非タスクコンテキストからの呼出し【NGKI1527】

7289 ・CPUロック状態からの呼出し【NGKI1528】

7290 E_ID 不正ID番号

7291 ・semidが有効範囲外【NGKI1529】

7292 E_NOEXS オブジェクト未登録

7293 ・対象セマフォが未登録〔D〕【NGKI1530】

7294 E_OACV オブジェクトアクセス違反

7295 ・対象セマフォに対する管理操作が許可されていない〔P〕

7296 【NGKI1531】

7297

7298 【機能】

7299

7300 semidで指定したセマフォ(対象セマフォ)を再初期化する.具体的な振舞いは

Page 147: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

147

7301 以下の通り.

7302

7303 対象セマフォの資源数は,初期資源数に初期化される【NGKI1532】.また,対

7304 象セマフォの待ち行列につながれたタスクは,待ち行列の先頭のタスクから順

7305 に待ち解除される【NGKI1533】.待ち解除されたタスクには,待ち状態となっ

7306 たサービスコールからE_DLTエラーが返る【NGKI1534】.

7307

7308 【使用上の注意】

7309

7310 ini_semにより複数のタスクが待ち解除される場合,サービスコールの処理時間

7311 およびカーネル内での割込み禁止時間が,待ち解除されるタスクの数に比例し

7312 て長くなる.特に,多くのタスクが待ち解除される場合,カーネル内での割込

7313 み禁止時間が長くなるため,注意が必要である.

7314

7315 セマフォを再初期化した場合に,アプリケーションとの整合性を保つのは,ア

7316 プリケーションの責任である.

7317

7318 【μITRON4.0仕様との関係】

7319

7320 μITRON4.0仕様に定義されていないサービスコールである.

7321 ----------------------------------------------------------------------

7322 ref_sem セマフォの状態参照〔T〕【NGKI1535】

7323

7324 【C言語API】

7325 ER ercd = ref_sem(ID semid, T_RSEM *pk_rsem)

7326

7327 【パラメータ】

7328 ID semid 対象セマフォのID番号

7329 T_RSEM * pk_rsem セマフォの現在状態を入れるパケットへのポイ

7330 ンタ

7331

7332 【リターンパラメータ】

7333 ER ercd 正常終了(E_OK)またはエラーコード

7334

7335 *セマフォの現在状態(パケットの内容)

7336 ID wtskid セマフォの待ち行列の先頭のタスクのID番号

7337 uint_t semcnt セマフォの資源数

7338

7339 【エラーコード】

7340 E_CTX コンテキストエラー

7341 ・非タスクコンテキストからの呼出し【NGKI1536】

7342 ・CPUロック状態からの呼出し【NGKI1537】

7343 E_ID 不正ID番号

7344 ・semidが有効範囲外【NGKI1538】

7345 E_NOEXS オブジェクト未登録

7346 ・対象セマフォが未登録〔D〕【NGKI1539】

7347 E_OACV オブジェクトアクセス違反

7348 ・対象セマフォに対する参照操作が許可されていない〔P〕

7349 【NGKI1540】

7350 E_MACV メモリアクセス違反

Page 148: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

148

7351 ・pk_rsemが指すメモリ領域への書込みアクセスが許可されて

7352 いない〔P〕【NGKI1541】

7353

7354 【機能】

7355

7356 semidで指定したセマフォ(対象セマフォ)の現在状態を参照する.参照した現

7357 在状態は,pk_rsemで指定したパケットに返される【NGKI1542】.

7358

7359 対象セマフォの待ち行列にタスクが存在しない場合,wtskidにはTSK_NONE(=

7360 0)が返る【NGKI1543】.

7361

7362 【使用上の注意】

7363

7364 ref_semはデバッグ時向けの機能であり,その他の目的に使用することは推奨し

7365 ない.これは,ref_semを呼び出し,対象セマフォの現在状態を参照した直後に

7366 割込みが発生した場合,ref_semから戻ってきた時には対象セマフォの状態が変

7367 化している可能性があるためである.

7368 ----------------------------------------------------------------------

7369

7370 4.4.2 イベントフラグ

7371

7372 イベントフラグは,イベントの発生の有無を表すビットの集合(ビットパター

7373 ン)を介して,イベント通知を行うための同期・通信オブジェクトである.イ

7374 ベントが発生している状態を1,発生していない状態を0とし,ビットパターン

7375 により複数のイベントの発生の有無を表す【NGKI1544】.イベントフラグは,

7376 イベントフラグIDと呼ぶID番号によって識別する【NGKI1545】.

7377

7378 1つまたは複数のビットをセットする1にする(セットする)ことを,イベント

7379 フラグをセットするといい,0にする(クリアする)ことを,イベントフラグを

7380 クリアするという.イベントフラグによりイベントを通知する側のタスクは,

7381 イベントフラグをセットまたはクリアすることで,イベントの発生を通知する.

7382

7383 イベントフラグによりイベントの通知を受ける側のタスクは,待ちビットパター

7384 ンと待ちモードにより,どのビットがセットされるのを待つかを指定する.待

7385 ちモードにTWF_ORW(=0x01U)を指定した場合,待ちビットパターンに含まれ

7386 るいずれかのビットがセットされるのを待つ【NGKI1546】.待ちモードに

7387 TWF_ANDW(=0x02U)を指定した場合,待ちビットパターンに含まれるすべての

7388 ビットがセットされるのを待つ【NGKI1547】.この条件を,イベントフラグの

7389 待ち解除の条件と呼ぶ.

7390

7391 各イベントフラグが持つ情報は次の通り【NGKI1548】.

7392

7393 ・イベントフラグ属性

7394 ・ビットパターン(の現在値)

7395 ・待ち行列(イベントフラグ待ち状態のタスクのキュー)

7396 ・初期ビットパターン

7397 ・アクセス許可ベクタ(保護機能対応カーネルの場合)

7398 ・属する保護ドメイン(保護機能対応カーネルの場合)

7399 ・属するクラス(マルチプロセッサ対応カーネルの場合)

7400

Page 149: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

149

7401 待ち行列は,イベントフラグが指定した待ち解除の条件を満たすまで待ってい

7402 る状態(イベントフラグ待ち状態)のタスクがつながれているキューである.

7403 待ち行列につながれたタスクの待ち解除は,待ち解除の条件を満たした中で,

7404 待ち行列の前方につながれたものから順に行われる(〔NGKI0216〕に該当)

7405 【NGKI1549】.

7406

7407 イベントフラグの初期ビットパターンは,イベントフラグを生成または再初期

7408 化した際の,ビットパターンの初期値である.

7409

7410 イベントフラグ属性には,次の属性を指定することができる【NGKI1550】.

7411

7412 TA_TPRI 0x01U 待ち行列をタスクの優先度順にする

7413 TA_WMUL 0x02U 複数のタスクが待つのを許す

7414 TA_CLR 0x04U タスクの待ち解除時にイベントフラグをクリアする

7415

7416 TA_TPRIを指定しない場合,待ち行列はFIFO順になる【NGKI1551】.TA_WMULを

7417 指定しない場合,1つのイベントフラグに複数のタスクが待つことを禁止する

7418 【NGKI1552】.

7419

7420 TA_CLRを指定した場合,タスクの待ち解除時に,イベントフラグのビットパター

7421 ンを0にクリアする【NGKI1553】.TA_CLRを指定しない場合,タスクの待ち解除

7422 時にイベントフラグをクリアしない【NGKI1554】.

7423

7424 イベントフラグ機能に用いるデータ型は次の通り.

7425

7426 FLGPTN イベントフラグのビットパターン(符号無し整数,uint_tに

7427 定義)【NGKI1555】

7428

7429 イベントフラグ機能に関連するカーネル構成マクロは次の通り.

7430

7431 TBIT_FLGPTN イベントフラグのビット数(FLGPTNの有効ビット数)

7432 【NGKI1556】

7433

7434 TNUM_FLGID 登録できるイベントフラグの数(動的生成対応でないカー

7435 ネルでは,静的APIによって登録されたイベントフラグの

7436 数に一致)【NGKI1557】

7437

7438 【TOPPERS/ASPカーネルにおける規定】

7439

7440 ASPカーネルでは,イベントフラグのビット数(TBIT_FLGPTN)は16以上である

7441 【ASPS0124】.

7442

7443 【TOPPERS/FMPカーネルにおける規定】

7444

7445 FMPカーネルでは,イベントフラグのビット数(TBIT_FLGPTN)は16以上である

7446 【FMPS0115】.

7447

7448 【TOPPERS/HRP2カーネルにおける規定】

7449

7450 HRP2カーネルでは,イベントフラグのビット数(TBIT_FLGPTN)は16以上である

Page 150: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

150

7451 【HRPS0115】.

7452

7453 【μITRON4.0仕様との関係】

7454

7455 TNUM_FLGIDは,μITRON4.0仕様に規定されていないカーネル構成マクロである.

7456 ----------------------------------------------------------------------

7457 CRE_FLG イベントフラグの生成〔S〕【NGKI1558】

7458 acre_flg イベントフラグの生成〔TD〕【NGKI1559】

7459

7460 【静的API】

7461 CRE_FLG(ID flgid, { ATR flgatr, FLGPTN iflgptn })

7462

7463 【C言語API】

7464 ER_ID flgid = acre_flg(const T_CFLG *pk_cflg)

7465

7466 【パラメータ】

7467 ID flgid 生成するイベントフラグのID番号(CRE_FLGの

7468 場合)

7469 T_CFLG * pk_cflg イベントフラグの生成情報を入れたパケットへ

7470 のポインタ(静的APIを除く)

7471

7472 *イベントフラグの生成情報(パケットの内容)

7473 ATR flgatr イベントフラグ属性

7474 FLGPTN iflgptn イベントフラグの初期ビットパターン

7475

7476 【リターンパラメータ】

7477 ER_ID flgid 生成されたイベントフラグのID番号(正の値)

7478 またはエラーコード

7479

7480 【エラーコード】

7481 E_CTX コンテキストエラー

7482 ・非タスクコンテキストからの呼出し〔s〕【NGKI1560】

7483 ・CPUロック状態からの呼出し〔s〕【NGKI1561】

7484 E_RSATR 予約属性

7485 ・flgatrが無効【NGKI1562】

7486 ・属する保護ドメインの指定が有効範囲外〔sP〕【NGKI1563】

7487 ・属するクラスの指定が有効範囲外〔sM〕【NGKI1564】

7488 ・クラスの囲みの中に記述されていない〔SM〕【NGKI1565】

7489 E_PAR パラメータエラー

7490 ・iflgptnがFLGPTNに格納できない〔S〕【NGKI3275】

7491 E_OACV オブジェクトアクセス違反

7492 ・システム状態に対する管理操作が許可されていない〔sP〕

7493 【NGKI1566】

7494 E_MACV メモリアクセス違反

7495 ・pk_cflgが指すメモリ領域への読出しアクセスが許可されて

7496 いない〔sP〕【NGKI1567】

7497 E_NOID ID番号不足

7498 ・割り付けられるイベントフラグIDがない〔sD〕【NGKI1568】

7499 E_OBJ オブジェクト状態エラー

7500 ・flgidで指定したイベントフラグが登録済み(CRE_FLGの場合)

Page 151: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

151

7501 【NGKI1569】

7502

7503 【機能】

7504

7505 各パラメータで指定したイベントフラグ生成情報に従って,イベントフラグを

7506 生成する.生成されたイベントフラグのビットパターンは初期ビットパターン

7507 に,待ち行列は空の状態に初期化される【NGKI1570】.

7508

7509 静的APIにおいては,flgidはオブジェクト識別名,flgatrとiflgptnは整数定数

7510 式パラメータである【NGKI1571】.

7511

7512 【TOPPERS/ASPカーネルにおける規定】

7513

7514 ASPカーネルでは,CRE_FLGのみをサポートする【ASPS0125】.ただし,動的生

7515 成機能拡張パッケージでは,acre_flgもサポートする【ASPS0126】.

7516

7517 【TOPPERS/FMPカーネルにおける規定】

7518

7519 FMPカーネルでは,CRE_FLGのみをサポートする【FMPS0116】.

7520

7521 【TOPPERS/HRP2カーネルにおける規定】

7522

7523 HRP2カーネルでは,CRE_FLGのみをサポートする【HRPS0116】.

7524 ----------------------------------------------------------------------

7525 AID_FLG 割付け可能なイベントフラグIDの数の指定〔SD〕【NGKI1572】

7526

7527 【静的API】

7528 AID_FLG(uint_t noflg)

7529

7530 【パラメータ】

7531 uint_t noflg 割付け可能なイベントフラグIDの数

7532

7533 【エラーコード】

7534 E_RSATR 予約属性

7535 ・クラスの囲みの中に記述されていない〔M〕【NGKI1573】

7536 E_PAR パラメータエラー

7537 ・noflgが負の値【NGKI3278】

7538

7539 【機能】

7540

7541 noflgで指定した数のイベントフラグIDを,イベントフラグを生成するサービス

7542 コールによって割付け可能なイベントフラグIDとして確保する【NGKI1574】.

7543

7544 noflgは整数定数式パラメータである【NGKI1575】.

7545 ----------------------------------------------------------------------

7546 SAC_FLG イベントフラグのアクセス許可ベクタの設定〔SP〕【NGKI1576】

7547 sac_flg イベントフラグのアクセス許可ベクタの設定〔TPD〕【NGKI1577】

7548

7549 【静的API】

7550 SAC_FLG(ID flgid, { ACPTN acptn1, ACPTN acptn2,

Page 152: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

152

7551 ACPTN acptn3, ACPTN acptn4 })

7552

7553 【C言語API】

7554 ER ercd = sac_flg(ID flgid, const ACVCT *p_acvct)

7555

7556 【パラメータ】

7557 ID flgid 対象イベントフラグのID番号

7558 ACVCT * p_acvct アクセス許可ベクタを入れたパケットへのポ

7559 インタ(静的APIを除く)

7560

7561 *アクセス許可ベクタ(パケットの内容)

7562 ACPTN acptn 1 通常操作1のアクセス許可パターン

7563 ACPTN acptn2 通常操作2のアクセス許可パターン

7564 ACPTN acptn3 管理操作のアクセス許可パターン

7565 ACPTN acptn4 参照操作のアクセス許可パターン

7566

7567 【リターンパラメータ】

7568 ER ercd 正常終了(E_OK)またはエラーコード

7569

7570 【エラーコード】

7571 E_CTX コンテキストエラー

7572 ・非タスクコンテキストからの呼出し〔s〕【NGKI1578】

7573 ・CPUロック状態からの呼出し〔s〕【NGKI1579】

7574 E_ID 不正ID番号

7575 ・flgidが有効範囲外〔s〕【NGKI1580】

7576 E_RSATR 予約属性

7577 ・対象イベントフラグが属する保護ドメインの囲みの中に記

7578 述されていない〔S〕【NGKI1581】

7579 ・対象イベントフラグが属するクラスの囲みの中に記述され

7580 ていない〔SM〕【NGKI1582】

7581 E_NOEXS オブジェクト未登録

7582 ・対象イベントフラグが未登録【NGKI1583】

7583 E_OACV オブジェクトアクセス違反

7584 ・対象イベントフラグに対する管理操作が許可されていない〔s〕

7585 【NGKI1584】

7586 E_MACV メモリアクセス違反

7587 ・p_acvctが指すメモリ領域への読出しアクセスが許可されて

7588 いない〔s〕【NGKI1585】

7589 E_OBJ オブジェクト状態エラー

7590 ・対象イベントフラグは静的APIで生成された〔s〕【NGKI1586】

7591 ・対象イベントフラグに対してアクセス許可ベクタが設定済

7592 み〔S〕【NGKI1587】

7593

7594 【機能】

7595

7596 flgidで指定したイベントフラグ(対象イベントフラグ)のアクセス許可ベクタ

7597 (4つのアクセス許可パターンの組)を,各パラメータで指定した値に設定する

7598 【NGKI1588】.

7599

7600 静的APIにおいては,flgidはオブジェクト識別名,acptn1~acptn4は整数定数

Page 153: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

153

7601 式パラメータである【NGKI1589】.

7602

7603 【TOPPERS/ASPカーネルにおける規定】

7604

7605 ASPカーネルでは,SAC_FLG,sac_flgをサポートしない【ASPS0127】.

7606

7607 【TOPPERS/FMPカーネルにおける規定】

7608

7609 FMPカーネルでは,SAC_FLG,sac_flgをサポートしない【FMPS0117】.

7610

7611 【TOPPERS/HRP2カーネルにおける規定】

7612

7613 HRP2カーネルでは,SAC_FLGのみをサポートする【HRPS0117】.

7614 ----------------------------------------------------------------------

7615 del_flg イベントフラグの削除〔TD〕【NGKI1590】

7616

7617 【C言語API】

7618 ER ercd = del_flg(ID flgid)

7619

7620 【パラメータ】

7621 ID flgid 対象イベントフラグのID番号

7622

7623 【リターンパラメータ】

7624 ER e rcd 正常終了(E_OK)またはエラーコード

7625

7626 【エラーコード】

7627 E_CTX コンテキストエラー

7628 ・非タスクコンテキストからの呼出し【NGKI1591】

7629 ・CPUロック状態からの呼出し【NGKI1592】

7630 E_ID 不正ID番号

7631 ・flgidが有効範囲外【NGKI1593】

7632 E_NOEXS オブジェクト未登録

7633 ・対象イベントフラグが未登録【NGKI1594】

7634 E_OACV オブジェクトアクセス違反

7635 ・対象イベントフラグに対する管理操作が許可されていない〔P〕

7636 【NGKI1595】

7637 E_OBJ オブジェクト状態エラー

7638 ・対象イベントフラグは静的APIで生成された【NGKI1596】

7639

7640 【機能】

7641

7642 flgidで指定したイベントフラグ(対象イベントフラグ)を削除する.具体的な

7643 振舞いは以下の通り.

7644

7645 対象イベントフラグの登録が解除され,そのイベントフラグIDが未使用の状態

7646 に戻される【NGKI1597】.また,対象イベントフラグの待ち行列につながれた

7647 タスクは,待ち行列の先頭のタスクから順に待ち解除される【NGKI1598】.待

7648 ち解除されたタスクには,待ち状態となったサービスコールからE_DLTエラーが

7649 返る【NGKI1599】.

7650

Page 154: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

154

7651 【使用上の注意】

7652

7653 del_flgにより複数のタスクが待ち解除される場合,サービスコールの処理時間

7654 およびカーネル内での割込み禁止時間が,待ち解除されるタスクの数に比例し

7655 て長くなる.特に,多くのタスクが待ち解除される場合,カーネル内での割込

7656 み禁止時間が長くなるため,注意が必要である.

7657

7658 【TOPPERS/ASPカーネルにおける規定】

7659

7660 ASPカーネルでは,del_flgをサポートしない【ASPS0128】.ただし,動的生成

7661 機能拡張パッケージでは,del_flgをサポートする【ASPS0129】.

7662

7663 【TOPPERS/FMPカーネルにおける規定】

7664

7665 FMPカーネルでは,del_flgをサポートしない【FMPS0118】.

7666

7667 【TOPPERS/HRP2カーネルにおける規定】

7668

7669 HRP2カーネルでは,del_flgをサポートしない【HRPS0118】.

7670 ----------------------------------------------------------------------

7671 set_flg イベントフラグのセット〔T〕【NGKI1600】

7672 iset_flg イベントフラグのセット〔I〕【NGKI1601】

7673

7674 【C言語API】

7675 ER ercd = set_flg(ID flgid, FLGPTN setptn)

7676 ER ercd = iset_flg(ID flgid, FLGPTN setptn)

7677

7678 【パラメータ】

7679 ID flgid 対象イベントフラグのID番号

7680 FLGPTN setptn セットするビットパターン

7681

7682 【リターンパラメータ】

7683 ER ercd 正常終了(E_OK)またはエラーコード

7684

7685 【エラーコード】

7686 E_CTX コンテキストエラー

7687 ・非タスクコンテキストからの呼出し(set_flgの場合)【NGKI1602】

7688 ・タスクコンテキストからの呼出し(iset_flgの場合)【NGKI1603】

7689 ・CPUロック状態からの呼出し【NGKI1604】

7690 E_ID 不正ID番号

7691 ・flgidが有効範囲外【NGKI1605】

7692 E_NOEXS オブジェクト未登録

7693 ・対象イベントフラグが未登録〔D〕【NGKI1606】

7694 E_OACV オブジェクトアクセス違反

7695 ・対象イベントフラグに対する通常操作1が許可されていない

7696 (set_flgの場合)〔P〕【NGKI1607】

7697

7698 【機能】

7699

7700 flgidで指定したイベントフラグ(対象イベントフラグ)のsetptnで指定したビッ

Page 155: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

155

7701 トをセットする.具体的な振舞いは以下の通り.

7702

7703 対象イベントフラグのビットパターンは,それまでの値とsetptnで指定した値

7704 のビット毎論理和(C言語の"¦")に更新される【NGKI1608】.対象イベントフ

7705 ラグの待ち行列にタスクが存在する場合には,待ち解除の条件を満たしたタス

7706 クが,待ち行列の前方につながれたものから順に待ち解除される【NGKI1609】.

7707 待ち解除されたタスクには,待ち状態となったサービスコールからE_OKが返る

7708 【NGKI1610】.

7709

7710 ただし,対象イベントフラグがTA_CLR属性である場合には,待ち解除の条件を

7711 満たしたタスクを1つ待ち解除した時点で,対象イベントフラグのビットパター

7712 ンが0にクリアされるため,他のタスクが待ち解除されることはない.

7713

7714 【使用上の注意】

7715

7716 対象イベントフラグが,TA_WMUL属性であり,TA_CLR属性でない場合,set_flg

7717 またはiset_flgにより複数のタスクが待ち解除される場合がある.この場合,

7718 サービスコールの処理時間およびカーネル内での割込み禁止時間が,待ち解除

7719 されるタスクの数に比例して長くなる.特に,多くのタスクが待ち解除される

7720 場合,カーネル内での割込み禁止時間が長くなるため,注意が必要である.

7721 ----------------------------------------------------------------------

7722 clr_flg イベントフラグのクリア〔T〕【NGKI1611】

7723

7724 【C言語API】

7725 ER ercd = clr_flg(ID flgid, FLGPTN clrptn)

7726

7727 【パラメータ】

7728 ID flgid 対象イベントフラグのID番号

7729 FLGPTN clrptn クリアするビットパターン(クリアしないビッ

7730 トを1,クリアするビットを0とする)

7731

7732 【リターンパラメータ】

7733 ER ercd 正常終了(E_OK)またはエラーコード

7734

7735 【エラーコード】

7736 E_CTX コンテキストエラー

7737 ・非タスクコンテキストからの呼出し【NGKI1612】

7738 ・CPUロック状態からの呼出し【NGKI1613】

7739 E_ID 不正ID番号

7740 ・flgidが有効範囲外【NGKI1614】

7741 E_NOEXS オブジェクト未登録

7742 ・対象イベントフラグが未登録〔D〕【NGKI1615】

7743 E_OACV オブジェクトアクセス違反

7744 ・対象イベントフラグに対する通常操作1が許可されていない〔P〕

7745 【NGKI1616】

7746

7747 【機能】

7748

7749 flgidで指定したイベントフラグ(対象イベントフラグ)のclrptnで指定したビッ

7750 トをクリアする.対象イベントフラグのビットパターンは,それまでの値と

Page 156: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

156

7751 clrptnで指定した値のビット毎論理積(C言語の"&")に更新される

7752 【NGKI1617】.

7753 ----------------------------------------------------------------------

7754 wai_flg イベントフラグ待ち〔T〕【NGKI1618】

7755 pol_flg イベントフラグ待ち(ポーリング)〔T〕【NGKI1619】

7756 twai_flg イベントフラグ待ち(タイムアウト付き)〔T〕【NGKI1620】

7757

7758 【C言語API】

7759 ER ercd = wai_flg(ID flgid, FLGPTN waiptn, MODE wfmode, FLGPTN *p_flgptn)

7760 ER ercd = pol_flg(ID flgid, FLGPTN waiptn, MODE wfmode, FLGPTN *p_flgptn)

7761 ER ercd = twai_flg(ID flgid, FLGPTN waiptn,

7762 MODE wfmode, FLGPTN *p_flgptn, TMO tmout)

7763

7764 【パラメータ】

7765 ID flgid 対象イベントフラグのID番号

7766 FLGPTN waiptn 待ちビットパターン

7767 MODE wfmode 待ちモード

7768 FLGPTN * p_flgptn 待ち解除時のビットパターンを入れるメモリ領

7769 域へのポインタ

7770 TMO tmout タイムアウト時間(twai_flgの場合)

7771

7772 【リターンパラメータ】

7773 ER ercd 正常終了(E_OK)またはエラーコード

7774 FLGPTN flgptn 待ち解除時のビットパターン

7775

7776 【エラーコード】

7777 E_CTX コンテキストエラー

7778 ・非タスクコンテキストからの呼出し【NGKI1621】

7779 ・CPUロック状態からの呼出し【NGKI1622】

7780 ・ディスパッチ保留状態からの呼出し(pol_flgを除く)【NGKI1623】

7781 E_NOSPT 未サポート機能

7782 ・制約タスクからの呼出し(pol_flgを除く)【NGKI1624】

7783 E_ID 不正ID番号

7784 ・flgidが有効範囲外【NGKI1625】

7785 E_PAR パラメータエラー

7786 ・waiptnが0【NGKI1626】

7787 ・wfmodeが無効(TWF_ORWまたはTWF_ANDWでない)【NGKI1627】

7788 ・tmoutが無効(twai_flgの場合)【NGKI1628】

7789 E_NOEXS オブジェクト未登録

7790 ・対象イベントフラグが未登録〔D〕【NGKI1629】

7791 E_OACV オブジェクトアクセス違反

7792 ・対象イベントフラグに対する通常操作2が許可されていない〔P〕

7793 【NGKI1630】

7794 E_MACV メモリアクセス違反

7795 ・p_flgptnが指すメモリ領域への書込みアクセスが許可され

7796 ていない〔P〕【NGKI1631】

7797 E_ILUSE サービスコール不正使用

7798 ・TA_WMUL属性でないイベントフラグで待ちタスクあり【NGKI1632】

7799 E_TMOUT ポーリング失敗またはタイムアウト(wai_flgを除く)【NGKI1633】

7800 E_RLWAI 待ち禁止状態または待ち状態の強制解除(pol_flgを除く)

Page 157: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

157

7801 【NGKI1634】

7802 E_DLT 待ちオブジェクトの削除または再初期化(pol_flgを除く)

7803 【NGKI1635】

7804

7805 【機能】

7806

7807 flgidで指定したイベントフラグ(対象イベントフラグ)が,waiptnとwfmodeで

7808 指定した待ち解除の条件を満たすのを待つ.具体的な振舞いは以下の通り.

7809

7810 対象イベントフラグが,waiptnとwfmodeで指定した待ち解除の条件を満たして

7811 いる場合には,対象イベントフラグのビットパターンの現在値がp_flgptnが指

7812 すメモリ領域に返される【NGKI1636】.対象イベントフラグがTA_CLR属性であ

7813 る場合には,対象イベントフラグのビットパターンが0にクリアされる

7814 【NGKI1637】.

7815

7816 待ち解除の条件を満たしていない場合には,自タスクはイベントフラグ待ち状

7817 態となり,対象イベントフラグの待ち行列につながれる【NGKI1638】.

7818 ----------------------------------------------------------------------

7819 ini_flg イベントフラグの再初期化〔T〕【NGKI1639】

7820

7821 【C言語API】

7822 ER ercd = ini_flg(ID fl gid)

7823

7824 【パラメータ】

7825 ID flgid 対象イベントフラグのID番号

7826

7827 【リターンパラメータ】

7828 ER ercd 正常終了(E_OK)またはエラーコード

7829

7830 【エラーコード】

7831 E_CTX コンテキストエラー

7832 ・非タスクコンテキストからの呼出し【NGKI1640】

7833 ・CPUロック状態からの呼出し【NGKI1641】

7834 E_ID 不正ID番号

7835 ・flgidが有効範囲外【NGKI1642】

7836 E_NOEXS オブジェクト未登録

7837 ・対象イベントフラグが未登録〔D〕【NGKI1643】

7838 E_OACV オブジェクトアクセス違反

7839 ・対象イベントフラグに対する管理操作が許可されていない〔P〕

7840 【NGKI1644】

7841

7842 【機能】

7843

7844 flgidで指定したイベントフラグ(対象イベントフラグ)を再初期化する.具体

7845 的な振舞いは以下の通り.

7846

7847 対象イベントフラグのビットパターンは,初期ビットパターンに初期化される

7848 【NGKI1645】.また,対象イベントフラグの待ち行列につながれたタスクは,

7849 待ち行列の先頭のタスクから順に待ち解除される【NGKI1646】.待ち解除され

7850 たタスクには,待ち状態となったサービスコールからE_DLTエラーが返る

Page 158: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

158

7851 【NGKI1647】.

7852

7853 【使用上の注意】

7854

7855 ini_flgにより複数のタスクが待ち解除される場合,サービスコールの処理時間

7856 およびカーネル内での割込み禁止時間が,待ち解除されるタスクの数に比例し

7857 て長くなる.特に,多くのタスクが待ち解除される場合,カーネル内での割込

7858 み禁止時間が長くなるため,注意が必要である.

7859

7860 イベントフラグを再初期化した場合に,アプリケーションとの整合性を保つの

7861 は,アプリケーションの責任である.

7862

7863 【μITRON4.0仕様との関係】

7864

7865 μITRON4.0仕様に定義されていないサービスコールである.

7866 ----------------------------------------------------------------------

7867 ref_flg イベントフラグの状態参照〔T〕【NGKI1648】

7868

7869 【C言語API】

7870 ER ercd = ref_flg(ID flgid, T_RFLG *pk_rflg)

7871

7872 【パラメータ】

7873 ID flgid 対象イベントフラグのID番号

7874 T_RFLG * pk_rflg イベントフラグの現在状態を入れるパケットへ

7875 のポインタ

7876

7877 【リターンパラメータ】

7878 ER ercd 正常終了(E_OK)またはエラーコード

7879

7880 *イベントフラグの現在状態(パケットの内容)

7881 ID wtskid イベントフラグの待ち行列の先頭のタスクのID

7882 番号

7883 uint_t flgptn イベントフラグのビットパターン

7884

7885 【エラーコード】

7886 E_CTX コンテキストエラー

7887 ・非タスクコンテキストからの呼出し【NGKI1649】

7888 ・CPUロック状態からの呼出し【NGKI1650】

7889 E_ID 不正ID番号

7890 ・flgidが有効範囲外【NGKI1651】

7891 E_NOEXS オブジェクト未登録

7892 ・対象イベントフラグが未登録〔D〕【NGKI1652】

7893 E_OACV オブジェクトアクセス違反

7894 ・対象イベントフラグに対する参照操作が許可されていない

7895 〔P〕【NGKI1653】

7896 E_MACV メモリアクセス違反

7897 ・pk_rflgが指すメモリ領域への書込みアクセスが許可されて

7898 いない〔P〕【NGKI1654】

7899

7900 【機能】

Page 159: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

159

7901

7902 flgidで指定したイベントフラグ(対象イベントフラグ)の現在状態を参照する.

7903 参照した現在状態は,pk_rflgで指定したパケットに返される【NGKI1655】.

7904

7905 対象イベントフラグの待ち行列にタスクが存在しない場合,wtskidには

7906 TSK_NONE(=0)が返る【NGKI1656】.

7907

7908 【使用上の注意】

7909

7910 ref_flgはデバッグ時向けの機能であり,その他の目的に使用することは推奨し

7911 ない.これは,ref_flgを呼び出し,対象イベントフラグの現在状態を参照した

7912 直後に割込みが発生した場合,ref_flgから戻ってきた時には対象イベントフラ

7913 グの状態が変化している可能性があるためである.

7914 ----------------------------------------------------------------------

7915

7916 4.4.3 データキュー

7917

7918 データキューは,1ワードのデータをメッセージとして,FIFO順で送受信するた

7919 めの同期・通信オブジェクトである.より大きいサイズのメッセージを送受信

7920 したい場合には,メッセージを置いたメモリ領域へのポインタを1ワードのデー

7921 タとして送受信する方法がある.データキューは,データキューIDと呼ぶID番

7922 号によって識別する【NGKI1657】.

7923

7924 各データキューが持つ情報は次の通り【NGKI1658】.

7925

7926 ・データキュー属性

7927 ・データキュー管理領域

7928 ・送信待ち行列(データキューへの送信待ち状態のタスクのキュー)

7929 ・受信待ち行列(データキューからの受信待ち状態のタスクのキュー)

7930 ・アクセス許可ベクタ(保護機能対応カーネルの場合)

7931 ・属する保護ドメイン(保護機能対応カーネルの場合)

7932 ・属するクラス(マルチプロセッサ対応カーネルの場合)

7933

7934 データキュー管理領域は,データキューに送信されたデータを,送信された順

7935 に格納しておくためのメモリ領域である.データキュー生成時に,データキュー

7936 管理領域に格納できるデータ数を0とすることで,データキュー管理領域のサイ

7937 ズを0とすることができる【NGKI1659】.

7938

7939 保護機能対応カーネルにおいて,データキュー管理領域は,カーネルの用いる

7940 オブジェクト管理領域として扱われる【NGKI1660】.

7941

7942 送信待ち行列は,データキューに対してデータが送信できるまで待っている状

7943 態(データキューへの送信待ち状態)のタスクが,データを送信できる順序で

7944 つながれているキューである.また,受信待ち行列は,データキューからデー

7945 タが受信できるまで待っている状態(データキューからの受信待ち状態)のタ

7946 スクが,データを受信できる順序でつながれているキューである.

7947

7948 データキュー属性には,次の属性を指定することができる【NGKI1661】.

7949

7950 TA_TPRI 0x01U 送信待ち行列をタスクの優先度順にする

Page 160: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

160

7951

7952 TA_TPRIを指定しない場合,送信待ち行列はFIFO順になる【NGKI1662】.受信待

7953 ち行列は,FIFO順に固定されている【NGKI1663】.

7954

7955 データキュー機能に関連するカーネル構成マクロは次の通り.

7956

7957 TNUM_DTQID 登録できるデータキューの数(動的生成対応でないカー

7958 ネルでは,静的APIによって登録されたデータキューの数

7959 に一致)【NGKI1664】

7960

7961 【μITRON4.0仕様との関係】

7962

7963 TNUM_DTQIDは,μITRON4.0仕様に規定されていないカーネル構成マクロである.

7964 ----------------------------------------------------------------------

7965 CRE_DTQ データキューの生成〔S〕【NGKI1665】

7966 acre_dtq データキューの生成〔TD〕【NGKI1666】

7967

7968 【静的API】

7969 CRE_DTQ(ID dtqid, { ATR dtqatr, uint_t dtqcnt, void *dtqmb })

7970

7971 【C言語API】

7972 ER_ID dtqid = acre_dtq(const T_CDTQ *pk_cdtq)

7973

7974 【パラメータ】

7975 ID dtqid 生成するデータキューのID番号(CRE_DTQの場合)

7976 T_CDTQ * pk_cdtq データキューの生成情報を入れたパケットへの

7977 ポインタ(静的APIを除く)

7978

7979 *データキューの生成情報(パケットの内容)

7980 ATR dtqatr データキュー属性

7981 uint_t dtqcnt データキュー管理領域に格納できるデータ数

7982 void * dtqmb データキュー管理領域の先頭番地

7983

7984 【リターンパラメータ】

7985 ER_ID dtqid 生成されたデータキューのID番号(正の値)ま

7986 たはエラーコード

7987

7988 【エラーコード】

7989 E_CTX コンテキストエラー

7990 ・非タスクコンテキストからの呼出し〔s〕【NGKI1667】

7991 ・CPUロック状態からの呼出し〔s〕【NGKI1668】

7992 E_RSATR 予約属性

7993 ・dtqatrが無効【NGKI1669】

7994 ・属する保護ドメインの指定が有効範囲外〔sP〕【NGKI1670】

7995 ・属するクラスの指定が有効範囲外〔sM〕【NGKI1671】

7996 ・クラスの囲みの中に記述されていない〔SM〕【NGKI1672】

7997 E_NOSPT 未サポート機能

7998 ・条件については各カーネルにおける規定の項を参照

7999 E_PAR パラメータエラー

8000 ・dtqcntが負の値〔S〕【NGKI3288】

Page 161: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

161

8001 ・その他の条件については機能の項を参照

8002 E_OACV オブジェクトアクセス違反

8003 ・システム状態に対する管理操作が許可されていない〔sP〕

8004 【NGKI1673】

8005 E_MACV メモリアクセス違反

8006 ・pk_cdtqが指すメモリ領域への読出しアクセスが許可されて

8007 いない〔sP〕【NGKI1674】

8008 E_NOID ID番号不足

8009 ・割り付けられるデータキューIDがない〔sD〕【NGKI1675】

8010 E_NOMEM メモリ不足

8011 ・データキュー管理領域が確保できない【NGKI1676】

8012 E_OBJ オブジェクト状態エラー

8013 ・dtqidで指定したデータキューが登録済み(CRE_DTQの場合)

8014 【NGKI1677】

8015 ・その他の条件については機能の項を参照

8016

8017 【機能】

8018

8019 各パラメータで指定したデータキュー生成情報に従って,データキューを生成

8020 する.dtqcntとdtqmbからデータキュー管理領域が設定され,格納されているデー

8021 タがない状態に初期化される【NGKI1678】.また,送信待ち行列と受信待ち行

8022 列は,空の状態に初期化される【NGKI1679】.

8023

8024 静的APIにおいては,dtqidはオブジェクト識別名,dtqatrとdtqcntは整数定数

8025 式パラメータ,dtqmbは一般定数式パラメータである【NGKI1680】.コンフィギュ

8026 レータは,静的APIのメモリ不足(E_NOMEM)エラーを検出することができない

8027 【NGKI1681】.

8028

8029 dtqmbをNULLとした場合,dtqcntで指定した数のデータを格納できるデータキュー

8030 管理領域が,コンフィギュレータまたはカーネルにより確保される【NGKI1682】.

8031

8032 〔dtqmbにNULL以外を指定した場合〕

8033

8034 dtqmbにNULL以外を指定した場合,dtqmbを先頭番地とするデータキュー管理領

8035 域は,アプリケーションで確保しておく必要がある【NGKI1683】.データキュー

8036 管理領域をアプリケーションで確保するために,次のマクロを用意している

8037 【NGKI1684】.

8038

8039 TSZ_DTQMB(dtqcnt) dtqcnt で指定した数のデータを格納できるデータ

8040 キュー管理領域のサイズ(バイト数)

8041 TCNT_DTQ MB(dtqcnt) dtqcntで指定した数のデータを格納できるデータ

8042 キュー管理領域を確保するために必要なMB_T型の配

8043 列の要素数

8044

8045 これらを用いてデータキュー管理領域を確保する方法は次の通り【NGKI1685】.

8046

8047 MB_T <データキュー管理領域の変数名>[TCNT_DTQMB(dtqcnt)];

8048

8049 この時,dtqmbには<データキュー管理領域の変数名>を指定する【NGKI1686】.

8050

Page 162: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

162

8051 この方法に従わず,dtqmbにターゲット定義の制約に合致しない先頭番地を指定

8052 した時には,E_PARエラーとなる【NGKI1687】.また,保護機能対応カーネルに

8053 おいて,dtqmbで指定したデータキュー管理領域がカーネル専用のメモリオブジェ

8054 クトに含まれない場合,E_OBJエラーとなる【NGKI1688】.

8055

8056 【TOPPERS/ASPカーネルにおける規定】

8057

8058 ASPカーネルでは,CRE_DTQのみをサポートする【ASPS0130】.また,dtqmbには

8059 NULLのみを指定することができる.NULL以外を指定した場合には,E_NOSPTエラー

8060 となる【ASPS0132】.ただし,動的生成機能拡張パッケージでは,acre_dtqも

8061 サポートする【ASPS0133】.acre_dtqに対しては,dtqmbにNULL以外を指定でき

8062 ないという制限はない【ASPS0134】.

8063

8064 【TOPPERS/FMPカーネルにおける規定】

8065

8066 FMPカーネルでは,CRE_DTQのみをサポートする【FMPS0119】.また,dtqmbには

8067 NULLのみを指定することができる.NULL以外を指定した場合には,E_NOSPTエラー

8068 となる【FMPS0121】.

8069

8070 【TOPPERS/HRP2カーネルにおける規定】

8071

8072 HRP2カーネルでは,CRE_DTQのみをサポートする【HRPS0119】.また,dtqmbに

8073 はNULLのみを指定することができる.NULL以外を指定した場合には,E_NOSPTエ

8074 ラーとなる【HRPS0121】.

8075

8076 【μITRON4.0仕様との関係】

8077

8078 μITRON4.0/PX仕様にあわせて,データキュー生成情報の最後のパラメータを,

8079 dtq(データキュー領域の先頭番地)から,dtqmb(データキュー管理領域の先

8080 頭番地)に改名した.また,TSZ_DTQをTSZ_DTQMBに改名した.

8081

8082 TCNT_DTQMBを新設し,データキュー管理領域をアプリケーションで確保する方

8083 法を規定した.

8084 ----------------------------------------------------------------------

8085 AID_DTQ 割付け可能なデータキューIDの数の指定〔SD〕【NGKI1689】

8086

8087 【静的API】

8088 AID_DTQ (uint_t nodtq)

8089

8090 【パラメータ】

8091 uint_t nodtq 割付け可能なデータキューIDの数

8092

8093 【エラーコード】

8094 E_RSATR 予約属性

8095 ・クラスの囲みの中に記述されていない〔M〕【NGKI1690】

8096 E_PAR パラメータエラー

8097 ・nodtqが負の値【NGKI3279】

8098

8099 【機能】

8100

Page 163: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

163

8101 nodtqで指定した数のデータキューIDを,データキューを生成するサービスコー

8102 ルによって割付け可能なデータキューIDとして確保する【NGKI1691】.

8103

8104 nodtqは整数定数式パラメータである【NGKI1692】.

8105 ----------------------------------------------------------------------

8106 SAC_DTQ データキューのアクセス許可ベクタの設定〔SP〕【NGKI1693】

8107 sac_dtq データキューのアクセス許可ベクタの設定〔TPD〕【NGKI1694】

8108

8109 【静的API】

8110 SAC_DTQ(ID dtqid, { ACPTN acptn1, ACPTN acptn2,

8111 ACPTN acptn3, ACPTN acptn4 })

8112

8113 【C言語API】

8114 ER ercd = sac_dtq(ID dtqid, const ACVCT *p_acvct)

8115

8116 【パラメータ】

8117 ID dtqid 対象データキューのID番号

8118 ACVCT * p_acvct アクセス許可ベクタを入れたパケットへのポ

8119 インタ(静的APIを除く)

8120

8121 *アクセス許可ベクタ(パケットの内容)

8122 ACPTN acptn1 通常操作1のアクセス許可パターン

8123 ACPTN acptn2 通常操作2のアクセス許可パターン

8124 ACPTN acptn3 管理操作のアクセス許可パターン

8125 ACPTN acptn4 参照操作のアクセス許可パターン

8126

8127 【リターンパラメータ】

8128 ER ercd 正常終了(E_OK)またはエラーコード

8129

8130 【エラーコード】

8131 E_CTX コンテキストエラー

8132 ・非タスクコンテキストからの呼出し〔s〕【NGKI1695】

8133 ・CPUロック状態からの呼出し〔s〕【NGKI1696】

8134 E_ID 不正ID番号

8135 ・dtqidが有効範囲外〔s〕【NGKI1697】

8136 E_RSATR 予約属性

8137 ・対象データキューが属する保護ドメインの囲みの中に記述

8138 されていない〔S〕【NGKI1698】

8139 ・対象データキューが属するクラスの囲みの中に記述されて

8140 いない〔SM〕【NGKI1699】

8141 E_NOEXS オブジェクト未登録

8142 ・対象データキューが未登録【NGKI1700】

8143 E_OACV オブジェクトアクセス違反

8144 ・対象データキューに対する管理操作が許可されていない〔s〕

8145 【NGKI1701】

8146 E_MACV メモリアクセス違反

8147 ・p_acvctが指すメモリ領域への読出しアクセスが許可されて

8148 いない〔s〕【NGKI1702】

8149 E_OBJ オブジェクト状態エラー

8150 ・対象データキューは静的APIで生成された〔s〕【NGKI1703】

Page 164: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

164

8151 ・対象データキューに対してアクセス許可ベクタが設定済み〔S〕

8152 【NGKI1704】

8153

8154 【機能】

8155

8156 dtqidで指定したデータキュー(対象データキュー)のアクセス許可ベクタ(4

8157 つのアクセス許可パターンの組)を,各パラメータで指定した値に設定する

8158 【NGKI1705】.

8159

8160 静的APIにおいては,dtqidはオブジェクト識別名,acptn1~acptn4は整数定数

8161 式パラメータである【NGKI1706】.

8162

8163 【TOPPERS/ASPカーネルにおける規定】

8164

8165 ASPカーネルでは,SAC_DTQ,sac_dtqをサポートしない【ASPS0135】.

8166

8167 【TOPPERS/FMPカーネルにおける規定】

8168

8169 FMPカーネルでは,SAC_DTQ,sac_dtqをサポートしない【FMPS0122】.

8170

8171 【TOPPERS/HRP2カーネルにおける規定】

8172

8173 HRP2カーネルでは,SAC_DTQのみをサポートする【HRPS0122】.

8174 ----------------------------------------------------------------------

8175 del_dtq データキューの削除〔TD〕【NGKI1707】

8176

8177 【C言語API】

8178 ER ercd = del_dtq(ID dtqid)

8179

8180 【パラメータ】

8181 ID dtqid 対象データキューのID番号

8182

8183 【リターンパラメータ】

8184 ER ercd 正常終了(E_OK)またはエラーコード

8185

8186 【エラーコード】

8187 E_CTX コンテキストエラー

8188 ・非タスクコンテキストからの呼出し【NGKI1708】

8189 ・CPUロック状態からの呼出し【NGKI1709】

8190 E_ID 不正ID番号

8191 ・dtqidが有効範囲外【NGKI1710】

8192 E_NOEXS オブジェクト未登録

8193 ・対象データキューが未登録【NGKI1711】

8194 E_OACV オブジェクトアクセス違反

8195 ・対象データキューに対する管理操作が許可されていない〔P〕

8196 【NGKI1712】

8197 E_OBJ オブジェクト状態エラー

8198 ・対象データキューは静的APIで生成された【NGKI1713】

8199

8200 【機能】

Page 165: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

165

8201

8202 dtqidで指定したデータキュー(対象データキュー)を削除する.具体的な振舞

8203 いは以下の通り.

8204

8205 対象データキューの登録が解除され,そのデータキューIDが未使用の状態に戻

8206 される【NGKI1714】.また,対象データキューの送信待ち行列と受信待ち行列

8207 につながれたタスクは,それぞれの待ち行列の先頭のタスクから順に待ち解除

8208 される【NGKI1715】.待ち解除されたタスクには,待ち状態となったサービス

8209 コールからE_DLTエラーが返る【NGKI1716】.

8210

8211 データキューの生成時に,データキュー管理領域がカーネルによって確保され

8212 た場合は,そのメモリ領域が解放される【NGKI1717】.

8213

8214 【補足説明】

8215

8216 送信待ち行列と受信待ち行列の両方にタスクがつながれていることはないため,

8217 別の待ち行列で待っていたタスクの間の待ち解除の順序は,規定する必要がな

8218 い.

8219

8220 【使用上の注意】

8221

8222 del_dtqにより複数のタスクが待ち解除される場合,サービスコールの処理時間

8223 およびカーネル内での割込み禁止時間が,待ち解除されるタスクの数に比例し

8224 て長くなる.特に,多くのタスクが待ち解除される場合,カーネル内での割込

8225 み禁止時間が長くなるため,注意が必要である.

8226

8227 【TOPPERS/ASPカーネルにおける規定】

8228

8229 ASPカーネルでは,del_dtqをサポートしない【ASPS0136】.ただし,動的生成

8230 機能拡張パッケージでは,del_dtqをサポートする【ASPS0137】.

8231

8232 【TOPPERS/FMPカーネルにおける規定】

8233

8234 FMPカーネルでは,del_dtqをサポートしない【FMPS0123】.

8235

8236 【TOPPERS/HRP2カーネルにおける規定】

8237

8238 HRP2カーネルでは,del_dtqをサポートしない【HRPS0123】.

8239 ----------------------------------------------------------------------

8240 snd_dtq データキューへの送信〔T〕【NGKI1718】

8241 psnd_dtq データキューへの送信(ポーリング)〔T〕【NGKI1719】

8242 ipsnd_dtq データキューへの送信(ポーリング)〔I〕【NGKI1720】

8243 tsnd_dtq データキューへの送信(タイムアウト付き)〔T〕【NGKI1721】

8244

8245 【C言語API】

8246 ER ercd = snd_dtq(ID dtqid, intptr_t data)

8247 ER ercd = psnd_dtq(ID dtqid, intptr_t data)

8248 ER ercd = ipsnd_dtq(ID dtqid, intptr_t data)

8249 ER ercd = tsnd_dtq(ID dtqid, intptr_t data, TMO tmout)

8250

Page 166: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

166

8251 【パラメータ】

8252 ID dtqid 対象データキューのID番号

8253 intptr_t data 送信データ

8254 TMO tmout タイムアウト時間(tsnd_dtqの場合)

8255

8256 【リターンパラメータ】

8257 ER ercd 正常終了(E_OK)またはエラーコード

8258

8259 【エラーコード】

8260 E_CTX コンテキストエラー

8261 ・非タスクコンテキストからの呼出し(ipsnd_dtqを除く)

8262 【NGKI1722】

8263 ・タスクコンテキストからの呼出し(ipsnd_dtqの場合)

8264 【NGKI1723】

8265 ・CPUロック状態からの呼出し【NGKI1724】

8266 ・ディスパッチ保留状態からの呼出し(snd_dtqとtsnd_dtqの

8267 場合)【NGKI1725】

8268 E_NOSPT 未サポート機能

8269 ・制約タスクからの呼出し(snd_dtqとtsnd_dtqの場合)【NGKI1726】

8270 E_ID 不正ID番号

8271 ・dtqidが有効範囲外【NGKI1727】

8272 E_PAR パラメータエラー

8273 ・tmoutが無効(tsnd_dtqの場合)【NGKI1728】

8274 E_NOEXS オブジェクト未登録

8275 ・対象データキューが未登録〔D〕【NGKI1729】

8276 E_OACV オブジェクトアクセス違反

8277 ・対象データキューに対する通常操作1が許可されていない

8278 (ipsnd_dtqを除く)〔P〕【NGKI1730】

8279 E_TMOUT ポーリング失敗またはタイムアウト(snd_dtqを除く)【NGKI1731】

8280 E_RLWAI 待ち禁止状態または待ち状態の強制解除(snd_dtqとtsnd_dtq

8281 の場合)【NGKI1732】

8282 E_DLT 待ちオブジェクトの削除または再初期化(snd_dtqとtsnd_dtq

8283 の場合)【NGKI1733】

8284

8285 【機能】

8286

8287 dtqidで指定したデータキュー(対象データキュー)に,dataで指定したデータ

8288 を送信する.具体的な振舞いは以下の通り.

8289

8290 対象データキューの受信待ち行列にタスクが存在する場合には,受信待ち行列

8291 の先頭のタスクが,dataで指定したデータを受信し,待ち解除される

8292 【NGKI1734】.待ち解除されたタスクには,待ち状態となったサービスコール

8293 からE_OKが返る【NGKI1735】.

8294

8295 対象データキューの受信待ち行列にタスクが存在せず,データキュー管理領域

8296 にデータを格納するスペースがある場合には,dataで指定したデータが,FIFO

8297 順でデータキュー管理領域に格納される【NGKI1736】.

8298

8299 対象データキューの受信待ち行列にタスクが存在せず,データキュー管理領域

8300 にデータを格納するスペースがない場合には,自タスクはデータキューへの送

Page 167: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

167

8301 信待ち状態となり,対象データキューの送信待ち行列につながれる

8302 【NGKI1737】.

8303 ----------------------------------------------------------------------

8304 fsnd_dtq データキューへの強制送信〔T〕【NGKI1738】

8305 ifsnd_dtq データキューへの強制送信〔I〕【NGKI1739】

8306

8307 【C言語API】

8308 ER ercd = fsnd_dtq(ID dtqid, intptr_t data)

8309 ER ercd = ifsnd_dtq(ID dtqid, intptr_t data)

8310

8311 【パラメータ】

8312 ID dtqid 対象データキューのID番号

8313 intptr_t data 送信データ

8314

8315 【リターンパラメータ】

8316 ER ercd 正常終了(E_OK)またはエラーコード

8317

8318 【エラーコード】

8319 E_CTX コンテキストエラー

8320 ・非タスクコンテキストからの呼出し(fsnd_dtqの場合)【NGKI1740】

8321 ・タスクコンテキストからの呼出し(ifsnd_dtqの場合)【NGKI1741】

8322 ・CPUロック状態からの呼出し【NGKI1742】

8323 E_ID 不正ID番号

8324 ・dtqidが有効範囲外【NGKI1743】

8325 E_NOEXS オブジェクト未登録

8326 ・対象データキューが未登録〔D〕【NGKI1744】

8327 E_OACV オブジェクトアクセス違反

8328 ・対象データキューに対する通常操作1が許可されていない

8329 (fsnd_dtqの場合)〔P〕【NGKI1745】

8330 E_ILUSE サービスコール不正使用

8331 ・対象データキューのデータキュー管理領域のサイズが0【NGKI1746】

8332

8333 【機能】

8334

8335 dtqidで指定したデータキュー(対象データキュー)に,dataで指定したデータ

8336 を強制送信する.具体的な振舞いは以下の通り.

8337

8338 対象データキューの受信待ち行列にタスクが存在する場合には,受信待ち行列

8339 の先頭のタスクが,dataで指定したデータを受信し,待ち解除される

8340 【NGKI1747】.待ち解除されたタスクには,待ち状態となったサービスコール

8341 からE_OKが返る【NGKI1748】.

8342

8343 対象データキューの受信待ち行列にタスクが存在せず,データキュー管理領域

8344 にデータを格納するスペースがある場合には,dataで指定したデータが,FIFO

8345 順でデータキュー管理領域に格納される【NGKI1749】.

8346

8347 対象データキューの受信待ち行列にタスクが存在せず,データキュー管理領域

8348 にデータを格納するスペースがない場合には,データキュー管理領域の先頭に

8349 格納されたデータを削除し,空いたスペースを用いて,dataで指定したデータ

8350 が,FIFO順でデータキュー管理領域に格納される【NGKI1750】.

Page 168: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

168

8351 ----------------------------------------------------------------------

8352 rcv_dtq データキューからの受信〔T〕【NGKI1751】

8353 prcv_dtq データキューからの受信(ポーリング)〔T〕【NGKI1752】

8354 trcv_dtq データキューからの受信(タイムアウト付き)〔T〕【NGKI1753】

8355

8356 【C言語API】

8357 ER ercd = rcv_dtq(ID dtqid, intptr_t *p_data)

8358 ER ercd = prcv_dtq(ID dtqid, intptr_t *p_data)

8359 ER ercd = trcv_dtq(ID dtqid, intptr_t *p_data, TMO tmout)

8360

8361 【パラメータ】

8362 ID dtqid 対象データキューのID番号

8363 intptr_t * p_data 受信データを入れるメモリ領域へのポインタ

8364 TMO tmout タイムアウト時間(trcv_dtqの場合)

8365

8366 【リターンパラメータ】

8367 ER ercd 正常終了(E_OK)またはエラーコード

8368 intptr_t data 受信データ

8369

8370 【エラーコード】

8371 E_CTX コンテキストエラー

8372 ・非タスクコンテキストからの呼出し【NGKI1754】

8373 ・CPUロック状態からの呼出し【NGKI1755】

8374 ・ディスパッチ保留状態からの呼出し(prcv_dtqを除く)

8375 【NGKI1756】

8376 E_NOSPT 未サポート機能

8377 ・制約タスクからの呼出し(prcv_dtqを除く)【NGKI1757】

8378 E_ID 不正ID番号

8379 ・dtqidが有効範囲外【NGKI1758】

8380 E_PAR パラメータエラー

8381 ・tmoutが無効(trcv_dtqの場合)【NGKI1759】

8382 E_NOEXS オブジェクト未登録

8383 ・対象データキューが未登録〔D〕【NGKI1760】

8384 E_OACV オブジェクトアクセス違反

8385 ・対象データキューに対する通常操作2が許可されていない〔P〕

8386 【NGKI1761】

8387 E_MACV メモリアクセス違反

8388 ・p_dataが指すメモリ領域への書込みアクセスが許可されて

8389 いない〔P〕【NGKI1762】

8390 E_TMOUT ポーリング失敗またはタイムアウト(rcv_dtqを除く)【NGKI1763】

8391 E_RLWAI 待ち禁止状態または待ち状態の強制解除(prcv_dtqを除く)

8392 【NGKI1764】

8393 E_DLT 待ちオブジェクトの削除または再初期化(prcv_dtqを除く)

8394 【NGKI1765】

8395

8396 【機能】

8397

8398 dtqidで指定したデータキュー(対象データキュー)からデータを受信する.デー

8399 タの受信に成功した場合,受信したデータはp_dataが指すメモリ領域に返され

8400 る【NGKI3421】.具体的な振舞いは以下の通り.

Page 169: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

169

8401

8402 対象データキューのデータキュー管理領域にデータが格納されている場合には,

8403 データキュー管理領域の先頭に格納されたデータを受信する【NGKI1766】.ま

8404 た,送信待ち行列にタスクが存在する場合には,送信待ち行列の先頭のタスク

8405 の送信データが,FIFO順でデータキュー管理領域に格納され,そのタスクは待

8406 ち解除される【NGKI1767】.待ち解除されたタスクには,待ち状態となったサー

8407 ビスコールからE_OKが返る【NGKI1768】.

8408

8409 対象データキューのデータキュー管理領域にデータが格納されておらず,送信

8410 待ち行列にタスクが存在する場合には,送信待ち行列の先頭のタスクの送信デー

8411 タを受信する【NGKI1769】.送信待ち行列の先頭のタスクは,待ち解除される

8412 【NGKI3422】.待ち解除されたタスクには,待ち状態となったサービスコール

8413 からE_OKが返る【NGKI1770】.

8414

8415 対象データキューのデータキュー管理領域にデータが格納されておらず,送信

8416 待ち行列にタスクが存在しない場合には,自タスクはデータキューからの受信

8417 待ち状態となり,対象データキューの受信待ち行列につながれる【NGKI1771】.

8418 ----------------------------------------------------------------------

8419 ini_dtq データキューの再初期化〔T〕【NGKI1772】

8420

8421 【C言語API】

8422 ER ercd = ini_dtq(ID dtqid)

8423

8424 【パラメータ】

8425 ID d tqid 対象データキューのID番号

8426

8427 【リターンパラメータ】

8428 ER ercd 正常終了(E_OK)またはエラーコード

8429

8430 【エラーコード】

8431 E_CTX コンテキストエラー

8432 ・非タスクコンテキストからの呼出し【NGKI1773】

8433 ・CPUロック状態からの呼出し【NGKI1774】

8434 E_ID 不正ID番号

8435 ・dtqidが有効範囲外【NGKI1775】

8436 E_NOEXS オブジェクト未登録

8437 ・対象データキューが未登録〔D〕【NGKI1776】

8438 E_OACV オブジェクトアクセス違反

8439 ・対象データキューに対する管理操作が許可されていない〔P〕

8440 【NGKI1777】

8441

8442 【機能】

8443

8444 dtqidで指定したデータキュー(対象データキュー)を再初期化する.具体的な

8445 振舞いは以下の通り.

8446

8447 対象データキューのデータキュー管理領域は,格納されているデータがない状

8448 態に初期化される【NGKI1778】.また,対象データキューの送信待ち行列と受

8449 信待ち行列につながれたタスクは,それぞれの待ち行列の先頭のタスクから順

8450 に待ち解除される【NGKI1779】.待ち解除されたタスクには,待ち状態となっ

Page 170: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

170

8451 たサービスコールからE_DLTエラーが返る【NGKI1780】.

8452

8453 【補足説明】

8454

8455 送信待ち行列と受信待ち行列の両方にタスクがつながれていることはないため,

8456 別の待ち行列で待っていたタスクの間の待ち解除の順序は,規定する必要がな

8457 い.

8458

8459 【使用上の注意】

8460

8461 ini_dtqにより複数のタスクが待ち解除される場合,サービスコールの処理時間

8462 およびカーネル内での割込み禁止時間が,待ち解除されるタスクの数に比例し

8463 て長くなる.特に,多くのタスクが待ち解除される場合,カーネル内での割込

8464 み禁止時間が長くなるため,注意が必要である.

8465

8466 データキューを再初期化した場合に,アプリケーションとの整合性を保つのは,

8467 アプリケーションの責任である.

8468

8469 【μITRON4.0仕様との関係】

8470

8471 μITRON4.0仕様に定義されていないサービスコールである.

8472 ----------------------------------------------------------------------

8473 ref_dtq データキューの状態参照〔T〕【NGKI1781】

8474

8475 【C言語API】

8476 ER ercd = ref_dtq(ID dtqid, T_RDTQ *pk_rdtq)

8477

8478 【パラメータ】

8479 ID dtqid 対象データキューのID番号

8480 T_RDTQ * pk_rdtq データキューの現在状態を入れるパケットへの

8481 ポインタ

8482

8483 【リターンパラメータ】

8484 ER ercd 正常終了(E_OK)またはエラーコード

8485

8486 *データキューの現在状態(パケットの内容)

8487 ID stskid データキューの送信待ち行列の先頭のタスクの

8488 ID 番号

8489 ID rtskid データキューの受信待ち行列の先頭のタスクの

8490 ID 番号

8491 uint_t sdtqcnt データキュー管理領域に格納されているデータ

8492 の数

8493

8494 【エラーコード】

8495 E_CTX コンテキストエラー

8496 ・非タスクコンテキストからの呼出し【NGKI1782】

8497 ・CPUロック状態からの呼出し【NGKI1783】

8498 E_ID 不正ID番号

8499 ・dtqidが有効範囲外【NGKI1784】

8500 E_NOEXS オブジェクト未登録

Page 171: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

171

8501 ・対象データキューが未登録〔D〕【NGKI1785】

8502 E_OACV オブジェクトアクセス違反

8503 ・対象データキューに対する参照操作が許可されていない〔P〕

8504 【NGKI1786】

8505 E_MACV メモリアクセス違反

8506 ・pk_rdtqが指すメモリ領域への書込みアクセスが許可されて

8507 いない〔P〕【NGKI1787】

8508

8509 【機能】

8510

8511 dtqidで指定したデータキュー(対象データキュー)の現在状態を参照する.参

8512 照した現在状態は,pk_rdtqで指定したパケットに返される【NGKI1788】.

8513

8514 対象データキューの送信待ち行列にタスクが存在しない場合,stskidには

8515 TSK_NONE(=0)が返る【NGKI1789】.また,受信待ち行列にタスクが存在しな

8516 い場合,rtskidにはTSK_NONE(=0)が返る【NGKI1790】.

8517

8518 【使用上の注意】

8519

8520 ref_dtqはデバッグ時向けの機能であり,その他の目的に使用することは推奨し

8521 ない.これは,ref_dtqを呼び出し,対象データキューの現在状態を参照した直

8522 後に割込みが発生した場合,ref_dtqから戻ってきた時には対象データキューの

8523 状態が変化している可能性があるためである.

8524 ----------------------------------------------------------------------

8525

8526 4.4.4 優先度データキュー

8527

8528 優先度データキューは,1ワードのデータをメッセージとして,データの優先度

8529 順で送受信するための同期・通信カーネルオブジェクトである.より大きいサ

8530 イズのメッセージを送受信したい場合には,メッセージを置いたメモリ領域へ

8531 のポインタを1ワードのデータとして送受信する方法がある.優先度データキュー

8532 は,優先度データキューIDと呼ぶID番号によって識別する【NGKI1791】.

8533

8534 各優先度データキューが持つ情報は次の通り【NGKI1792】.

8535

8536 ・優先度データキュー属性

8537 ・優先度データキュー管理領域

8538 ・送信待ち行列(優先度データキューへの送信待ち状態のタスクのキュー)

8539 ・受信待ち行列(優先度データキューからの受信待ち状態のタスクのキュー)

8540 ・送信できるデータ優先度の最大値

8541 ・アクセス許可ベクタ(保護機能対応カーネルの場合)

8542 ・属する保護ドメイン(保護機能対応カーネルの場合)

8543 ・属するクラス(マルチプロセッサ対応カーネルの場合)

8544

8545 優先度データキュー管理領域は,優先度データキューに送信されたデータを,

8546 データの優先度順に格納しておくためのメモリ領域である.優先度データキュー

8547 生成時に,優先度データキュー管理領域に格納できるデータ数を0とすることで,

8548 優先度データキュー管理領域のサイズを0とすることができる【NGKI1793】.

8549

8550 保護機能対応カーネルにおいて,優先度データキュー管理領域は,カーネルの

Page 172: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

172

8551 用いるオブジェクト管理領域として扱われる【NGKI1794】.

8552

8553 送信待ち行列は,優先度データキューに対してデータが送信できるまで待って

8554 いる状態(優先度データキューへの送信待ち状態)のタスクが,データを送信

8555 できる順序でつながれているキューである.また,受信待ち行列は,優先度デー

8556 タキューからデータが受信できるまで待っている状態(優先度データキューか

8557 らの受信待ち状態)のタスクが,データを受信できる順序でつながれている

8558 キューである.

8559

8560 優先度データキュー属性には,次の属性を指定することができる【NGKI1795】.

8561

8562 TA_TPRI 0x01U 送信待ち行列をタスクの優先度順にする

8563

8564 TA_TPRIを指定しない場合,送信待ち行列はFIFO順になる【NGKI1796】.受信待

8565 ち行列は,FIFO順に固定されている【NGKI1797】.

8566

8567 優先度データキュー機能に関連するカーネル構成マクロは次の通り.

8568

8569 TMIN_DPRI データ優先度の最小値(=1) 【NGKI1798】

8570 TMAX_DPRI データ優先度の最大値

8571

8572 TNUM_PDQID 登録できる優先度データキューの数(動的生成対応でな

8573 いカーネルでは,静的APIによって登録された優先度デー

8574 タキューの数に一致)【NGKI1799】

8575

8576 【TOPPERS/ASPカーネルにおける規定】

8577

8578 ASPカーネルでは,データ優先度の最大値(TMAX_DPRI)は16に固定されている

8579 【ASPS0138】.ただし,タスク優先度拡張パッケージでは,TMAX_DPRIを256に

8580 拡張する【ASPS0139】.

8581

8582 【TOPPERS/FMPカーネルにおける規定】

8583

8584 FMPカーネルでは,データ優先度の最大値(TMAX_DPRI)は16に固定されている

8585 【FMPS0124】.

8586

8587 【TOPPERS/HRP2カーネルにおける規定】

8588

8589 HRP2カーネルでは,データ優先度の最大値(TMAX_DPRI)は16に固定されている

8590 【HRPS0124】.

8591

8592 【使用上の注意】

8593

8594 データの優先度が使われるのは,データが優先度データキュー管理領域に格納

8595 される場合のみであり,データを送信するタスクが送信待ち行列につながれて

8596 いる間には使われない.そのため,送信待ち行列につながれているタスクが,

8597 優先度データキュー管理領域に格納されているデータよりも高い優先度のデー

8598 タを送信しようとしている場合でも,最初に送信されるのは,優先度データ

8599 キュー管理領域に格納されているデータである.また,TA_TPRI属性の優先度デー

8600 タキューにおいても,送信待ち行列はタスクの優先度順となり,タスクが送信

Page 173: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

173

8601 しようとしているデータの優先度順となるわけではない.

8602

8603 【μITRON4.0仕様との関係】

8604

8605 μITRON4.0仕様に規定されていない機能である.

8606 ----------------------------------------------------------------------

8607 CRE_PDQ 優先度データキューの生成〔S〕【NGKI1800】

8608 acre_pdq 優先度データキューの生成〔TD〕【NGKI1801】

8609

8610 【静的API】

8611 CRE_PDQ(ID pdqid, { ATR pdqatr, uint_t pdqcnt, PRI maxdpri, void *pdqmb })

8612

8613 【C言語API】

8614 ER_ID pdqid = acre_pdq(const T_CPDQ *pk_cpdq)

8615

8616 【パラメータ】

8617 ID pdqid 生成する優先度データキューのID番号(CRE_PDQ

8618 の場合)

8619 T_CPDQ * pk_cpdq 優先度データキューの生成情報を入れたパケッ

8620 トへのポインタ(静的APIを除く)

8621

8622 *優先度データキューの生成情報(パケットの内容)

8623 ATR pdqatr 優先度データキュー属性

8624 uint_t pdqcnt 優先度データキュー管理領域に格納できるデー

8625 タ数

8626 PRI maxdpri 優先度データキューに送信できるデータ優先度

8627 の最大値

8628 void * pdqmb 優先度データキュー管理領域の先頭番地

8629

8630 【リターンパラメータ】

8631 ER_ID pdqid 生成された優先度データキューのID番号(正の

8632 値)またはエラーコード

8633

8634 【エラーコード】

8635 E_CTX コンテキストエラー

8636 ・非タスクコンテキストからの呼出し〔s〕【NGKI1802】

8637 ・CPUロック状態からの呼出し〔s〕【NGKI1803】

8638 E_RSATR 予約属性

8639 ・pdqatrが無効【NGKI1804】

8640 ・属する保護ドメインの指定が有効範囲外〔sP〕【NGKI1805】

8641 ・属するクラスの指定が有効範囲外〔sM〕【NGKI1806】

8642 ・クラスの囲みの中に記述されていない〔SM〕【NGKI1807】

8643 E_NOSPT 未サポート機能

8644 ・条件については各カーネルにおける規定の項を参照

8645 E_PAR パラメータエラー

8646 ・pdqcntが負の値〔S〕【NGKI3289】

8647 ・maxdpriがTMIN_DPRIより小さい,またはTMAX_DPRIより大き

8648 い【NGKI1819】

8649 ・その他の条件については機能の項を参照

8650 E_OACV オブジェクトアクセス違反

Page 174: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

174

8651 ・システム状態に対する管理操作が許可されていない〔sP〕

8652 【NGKI1808】

8653 E_MACV メモリアクセス違反

8654 ・pk_cpdqが指すメモリ領域への読出しアクセスが許可されて

8655 いない〔sP〕【NGKI1809】

8656 E_NOID ID番号不足

8657 ・割り付けられる優先度データキューIDがない〔sD〕【NGKI1810】

8658 E_NOMEM メモリ不足

8659 ・優先度データキュー管理領域が確保できない【NGKI1811】

8660 E_OBJ オブジェクト状態エラー

8661 ・pdqidで指定した優先度データキューが登録済み(CRE_PDQ

8662 の場合)【NGKI1812】

8663 ・その他の条件については機能の項を参照

8664

8665 【機能】

8666

8667 各パラメータで指定した優先度データキュー生成情報に従って,優先度データ

8668 キューを生成する.pdqcntとpdqmbから優先度データキュー管理領域が設定され,

8669 格納されているデータがない状態に初期化される【NGKI1813】.また,送信待

8670 ち行列と受信待ち行列は,空の状態に初期化される【NGKI1814】.

8671

8672 静的APIにおいては,pdqidはオブジェクト識別名,pdqatr,pdqcnt,maxdpriは

8673 整数定数式パラメータ,pdqmbは一般定数式パラメータである【NGKI1815】.コ

8674 ンフィギュレータは,静的APIのメモリ不足(E_NOMEM)エラーを検出すること

8675 ができない【NGKI1816】.

8676

8677 pdqmbをNULLとした場合,pdqcntで指定した数のデータを格納できる優先度デー

8678 タキュー管理領域が,コンフィギュレータまたはカーネルにより確保される

8679 【NGKI1817】.

8680

8681 〔pdqmbにNULL以外を指定した場合〕

8682

8683 pdqmbにNULL以外を指定した場合,pdqmbを先頭番地とする優先度データキュー

8684 管理領域は,アプリケーションで確保しておく必要がある【NGKI1820】.優先

8685 度データキュー管理領域をアプリケーションで確保するために,次のマクロを

8686 用意している【NGKI1821】.

8687

8688 TSZ_PDQMB(pdqcnt) pdqcnt で指定した数のデータを格納できる優先度デー

8689 タキュー管理領域のサイズ(バイト数)

8690 TCNT_PDQMB(pdqcnt) pdqcnt で指定した数のデータを格納できる優先度デー

8691 タキュー管理領域を確保するために必要なMB_T型の

8692 配列の要素数

8693

8694 これらを用いて優先度データキュー管理領域を確保する方法は次の通り

8695 【NGKI1822】.

8696

8697 MB_T <優先度データキュー管理領域の変数名>[TCNT_PDQMB(pdqcnt)];

8698

8699 この時,pdqmbには<優先度データキュー管理領域の変数名>を指定する

8700 【NGKI1823】.

Page 175: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

175

8701

8702 この方法に従わず,pdqmbにターゲット定義の制約に合致しない先頭番地を指定

8703 した時には,E_PARエラーとなる【NGKI1824】.また,保護機能対応カーネルに

8704 いて,pdqmbで指定した優先度データキュー管理領域がカーネル専用のメモリ

8705 オブジェクトに含まれない場合,E_OBJエラーとなる【NGKI1825】.

8706

8707 【TOPPERS/ASPカーネルにおける規定】

8708

8709 ASPカーネルでは,CRE_PDQのみをサポートする【ASPS0140】.また,pdqmbには

8710 NULLのみを指定することができる.NULL以外を指定した場合には,E_NOSPTエラー

8711 となる【ASPS0142】.ただし,動的生成機能拡張パッケージでは,acre_pdqも

8712 サポートする【ASPS0143】.acre_pdqに対しては,pdqmbにNULL以外を指定でき

8713 ないという制限はない【ASPS0144】.

8714

8715 【TOPPERS/FMPカーネルにおける規定】

8716

8717 FMPカーネルでは,CRE_PDQのみをサポートする【FMPS0125】.また,pdqmbには

8718 NULLのみを指定することができる.NULL以外を指定した場合には,E_NOSPTエラー

8719 となる【FMPS0127】.

8720

8721 【TOPPERS/HRP2カーネルにおける規定】

8722

8723 HRP2カーネルでは,CRE_PDQのみをサポートする【HRPS0125】.また,pdqmbに

8724 はNULLのみを指定することができる.NULL以外を指定した場合には,E_NOSPTエ

8725 ラーとなる【HRPS0127】.

8726 ----------------------------------------------------------------------

8727 AID_PDQ 割付け可能な優先度データキューIDの数の指定〔SD〕【NGKI1826】

8728

8729 【静的API】

8730 AID_PDQ(uint_t nopdq)

8731

8732 【パラメータ】

8733 uint_t nopdq 割付け可能な優先度データキューIDの数

8734

8735 【エラーコード】

8736 E_RSATR 予約属性

8737 ・クラスの囲みの中に記述されていない〔M〕【NGKI1827】

8738 E_PAR パラメータエラー

8739 ・nopdqが負の値【NGKI3280】

8740

8741 【機能】

8742

8743 nopdqで指定した数の優先度データキューIDを,優先度データキューを生成する

8744 サービスコールによって割付け可能な優先度データキューIDとして確保する

8745 【NGKI1828】.

8746

8747 nopdqは整数定数式パラメータである【NGKI1829】.

8748 ----------------------------------------------------------------------

8749 SAC_PDQ 優先度データキューのアクセス許可ベクタの設定〔SP〕【NGKI1830】

8750 sac_pdq 優先度データキューのアクセス許可ベクタの設定〔TPD〕【NGKI1831】

Page 176: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

176

8751

8752 【静的API】

8753 SAC_PDQ(ID pdqid, { ACPTN acptn1, ACPTN acptn2,

8754 ACPTN acptn3, ACPTN acptn4 })

8755

8756 【C言語API】

8757 ER ercd = sac_pdq(ID pdqid, const ACVCT *p_acvct)

8758

8759 【パラメータ】

8760 ID pdqid 対象優先度データキューのID番号

8761 ACVCT * p_acvct アクセス許可ベクタを入れたパケットへのポ

8762 インタ(静的APIを除く)

8763

8764 *アクセス許可ベクタ(パケットの内容)

8765 ACPTN acptn1 通常操作1のアクセス許可パターン

8766 ACPTN acptn2 通常操作2のアクセス許可パターン

8767 ACPTN acptn3 管理操作のアクセス許可パターン

8768 ACPTN acptn4 参照操作のアクセス許可パターン

8769

8770 【リターンパラメータ】

8771 ER ercd 正常終了(E_OK)またはエラーコード

8772

8773 【エラーコード】

8774 E_CTX コンテキストエラー

8775 ・非タスクコンテキストからの呼出し〔s〕【NGKI1832】

8776 ・CPUロック状態からの呼出し〔s〕【NGKI1833】

8777 E_ID 不正ID番号

8778 ・pdqidが有効範囲外〔s〕【NGKI1834】

8779 E_RSATR 予約属性

8780 ・対象優先度データキューが属する保護ドメインの囲みの中

8781 に記述されていない〔S〕【NGKI1835】

8782 ・対象優先度データキューが属するクラスの囲みの中に記述

8783 されていない〔SM〕【NGKI1836】

8784 E_NOEXS オブジェクト未登録

8785 ・対象優先度データキューが未登録【NGKI1837】

8786 E_OACV オブジェクトアクセス違反

8787 ・対象優先度データキューに対する管理操作が許可されてい

8788 ない〔s〕【NGKI1838】

8789 E_MACV メモリアクセス違反

8790 ・p_acvctが指すメモリ領域への読出しアクセスが許可されて

8791 いない〔s〕【NGKI1839】

8792 E_OBJ オブジェクト状態エラー

8793 ・対象優先度データキューは静的APIで生成された〔s〕【NGKI1840】

8794 ・対象優先度データキューに対してアクセス許可ベクタが設

8795 定済み〔S〕【NGKI1841】

8796

8797 【機能】

8798

8799 pdqidで指定した優先度データキュー(対象優先度データキュー)のアクセス許

8800 可ベクタ(4つのアクセス許可パターンの組)を,各パラメータで指定した値に

Page 177: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

177

8801 設定する【NGKI1842】.

8802

8803 静的APIにおいては,pdqidはオブジェクト識別名,acptn1~acptn4は整数定数

8804 式パラメータである【NGKI1843】.

8805

8806 【TOPPERS/ASPカーネルにおける規定】

8807

8808 ASPカーネルでは,SAC_PDQ,sac_pdqをサポートしない【ASPS0145】.

8809

8810 【TOPPERS/FMPカーネルにおける規定】

8811

8812 FMPカーネルでは,SAC_PDQ,sac_pdqをサポートしない【FMPS0128】.

8813

8814 【TOPPERS/HRP2カーネルにおける規定】

8815

8816 HRP2カーネルでは,SAC_PDQのみをサポートする【HRPS0128】.

8817 ----------------------------------------------------------------------

8818 del_pdq 優先度データキューの削除〔TD〕【NGKI1844】

8819

8820 【C言語API】

8821 ER ercd = del_pdq(ID pdqid)

8822

8823 【パラメータ】

8824 ID pdqid 対象優先度データキューのID番号

8825

8826 【リターンパラメータ】

8827 ER ercd 正常終了(E_OK)またはエラーコード

8828

8829 【エラーコード】

8830 E_CTX コンテキストエラー

8831 ・非タスクコンテキストからの呼出し【NGKI1845】

8832 ・CPUロック状態からの呼出し【NGKI1846】

8833 E_ID 不正ID番号

8834 ・pdqidが有効範囲外【NGKI1847】

8835 E_NOEXS オブジェクト未登録

8836 ・対象優先度データキューが未登録【NGKI1848】

8837 E_OACV オブジェクトアクセス違反

8838 ・対象優先度データキューに対する管理操作が許可されてい

8839 ない〔P〕【NGKI1849】

8840 E_OBJ オブジェクト状態エラー

8841 ・対象優先度データキューは静的APIで生成された【NGKI1850】

8842

8843 【機能】

8844

8845 pdqidで指定した優先度データキュー(対象優先度データキュー)を削除する.

8846 具体的な振舞いは以下の通り.

8847

8848 対象優先度データキューの登録が解除され,その優先度データキューIDが未使

8849 用の状態に戻される【NGKI1851】.また,対象優先度データキューの送信待ち

8850 行列と受信待ち行列につながれたタスクは,それぞれの待ち行列の先頭のタス

Page 178: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

178

8851 クから順に待ち解除される【NGKI1852】.待ち解除されたタスクには,待ち状

8852 態となったサービスコールからE_DLTエラーが返る【NGKI1853】.

8853

8854 優先度データキューの生成時に,優先度データキュー管理領域がカーネルによっ

8855 て確保された場合は,そのメモリ領域が解放される【NGKI1854】.

8856

8857 【補足説明】

8858

8859 送信待ち行列と受信待ち行列の両方にタスクがつながれていることはないため,

8860 別の待ち行列で待っていたタスクの間の待ち解除の順序は,規定する必要がな

8861 い.

8862

8863 【使用上の注意】

8864

8865 del_pdqにより複数のタスクが待ち解除される場合,サービスコールの処理時間

8866 およびカーネル内での割込み禁止時間が,待ち解除されるタスクの数に比例し

8867 て長くなる.特に,多くのタスクが待ち解除される場合,カーネル内での割込

8868 み禁止時間が長くなるため,注意が必要である.

8869

8870 【TOPPERS/ASPカーネルにおける規定】

8871

8872 ASPカーネルでは,del_pdqをサポートしない【ASPS0146】.ただし,動的生成

8873 機能拡張パッケージでは,del_pdqをサポートする【ASPS0147】.

8874

8875 【TOPPERS/FMPカーネルにおける規定】

8876

8877 FMPカーネルでは,del_pdqをサポートしない【FMPS0129】.

8878

8879 【TOPPERS/HRP2カーネルにおける規定】

8880

8881 HRP2カーネルでは,del_pdqをサポートしない【HRPS0129】.

8882 ----------------------------------------------------------------------

8883 snd_pdq 優先度データキューへの送信〔T〕【NGKI1855】

8884 psnd_pdq 優先度データキューへの送信(ポーリング)〔T〕【NGKI1856】

8885 ipsnd_pdq 優先度データキューへの送信(ポーリング)〔I〕【NGKI1857】

8886 tsnd_pdq 優先度データキューへの送信(タイムアウト付き)〔T〕【NGKI1858】

8887

8888 【C言語API】

8889 ER ercd = snd_pdq(ID pdqid, intptr_t data, PRI datapri)

8890 ER ercd = psnd_pdq(ID pdqid, intptr_t data, PRI datapri)

8891 ER ercd = ipsnd_pdq(ID pdqid, intptr_t data, PRI datapri)

8892 ER ercd = tsnd_pdq(ID pdqid, intptr_t data, PRI datapri, TMO tmout)

8893

8894 【パラメータ】

8895 ID pdqid 対象優先度データキューのID番号

8896 intptr_t data 送信データ

8897 PRI datapri 送信データの優先度

8898 TMO tmout タイムアウト時間(tsnd_pdqの場合)

8899

8900 【リターンパラメータ】

Page 179: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

179

8901 ER ercd 正常終了(E_OK)またはエラーコード

8902

8903 【エラーコード】

8904 E_CTX コンテキストエラー

8905 ・非タスクコンテキストからの呼出し(ipsnd_pdqを除く)

8906 【NGKI1859】

8907 ・タスクコンテキストからの呼出し(ipsnd_pdqの場合)【NGKI1860】

8908 ・CPUロック状態からの呼出し【NGKI1861】

8909 ・ディスパッチ保留状態からの呼出し(snd_pdqとtsnd_pdqの

8910 場合)【NGKI1862】

8911 E_NOSPT 未サポート機能

8912 ・制約タスクからの呼出し(snd_pdqとtsnd_pdqの場合)【NGKI1863】

8913 E_ID 不正ID番号

8914 ・pdqidが有効範囲外【NGKI1864】

8915 E_PAR パラメータエラー

8916 ・tmoutが無効(tsnd_pdqの場合)【NGKI1865】

8917 ・その他の条件については機能の項を参照

8918 E_NOEXS オブジェクト未登録

8919 ・対象優先度データキューが未登録〔D〕【NGKI1866】

8920 E_OACV オブジェクトアクセス違反

8921 ・対象優先度データキューに対する通常操作1が許可されてい

8922 ない(ipsnd_pdqを除く)〔P〕【NGKI1867】

8923 E_TMOUT ポーリング失敗またはタイムアウト(snd_pdqを除く)【NGKI1868】

8924 E_RLWAI 待ち禁止状態または待ち状態の強制解除(snd_pdqとtsnd_pdq

8925 の場合)【NGKI1869】

8926 E_DLT 待ちオブジェクトの削除または再初期化(snd_pdqとtsnd_pdq

8927 の場合)【NGKI1870】

8928

8929 【機能】

8930

8931 pdqidで指定した優先度データキュー(対象優先度データキュー)に,dataで指

8932 定したデータを,datapriで指定した優先度で送信する.具体的な振舞いは以下

8933 の通り.

8934

8935 対象優先度データキューの受信待ち行列にタスクが存在する場合には,受信待

8936 ち行列の先頭のタスクが,dataで指定したデータを受信し,待ち解除される

8937 【NGKI1871】.待ち解除されたタスクには,待ち状態となったサービスコール

8938 からE_OKが返る【NGKI1872】.

8939

8940 対象優先度データキューの受信待ち行列にタスクが存在せず,優先度データ

8941 キュー管理領域にデータを格納するスペースがある場合には,dataで指定した

8942 データが,datapriで指定したデータの優先度順で優先度データキュー管理領域

8943 に格納される【NGKI1873】.

8944

8945 対象優先度データキューの受信待ち行列にタスクが存在せず,優先度データ

8946 キュー管理領域にデータを格納するスペースがない場合には,自タスクは優先

8947 度データキューへの送信待ち状態となり,対象優先度データキューの送信待ち

8948 行列につながれる【NGKI1874】.

8949

8950 datapriは,TMIN_DPRI以上で,対象データキューに送信できるデータ優先度の

Page 180: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

180

8951 最大値以下でなければならない.そうでない場合には,E_PARエラーとなる

8952 【NGKI1876】.

8953 ----------------------------------------------------------------------

8954 rcv_pdq 優先度データキューからの受信〔T〕【NGKI1877】

8955 prcv_pdq 優先度データキューからの受信(ポーリング)〔T〕【NGKI1878】

8956 trcv_pdq 優先度データキューからの受信(タイムアウト付き)〔T〕【NGKI1879】

8957

8958 【C言語API】

8959 ER ercd = rcv_pdq(ID pdqid, intptr_t *p_data, PRI *p_datapri)

8960 ER ercd = prcv_pdq(ID pdqid, intptr_t *p_data, PRI *p_datapri)

8961 ER ercd = trcv_pdq(ID pdqid, intptr_t *p_data, PRI *p_datapri, TMO tmout)

8962

8963 【パラメータ】

8964 ID pdqid 対象優先度データキューのID番号

8965 intptr_t * p_data 受信データを入れるメモリ領域へのポインタ

8966 PRI * p_datapri 受信データの優先度を入れるメモリ領域へのポ

8967 インタ

8968 TMO tmout タイムアウト時間(trcv_pdqの場合)

8969

8970 【リターンパラメータ】

8971 ER ercd 正常終了(E_OK)またはエラーコード

8972 intptr_t data 受信データ

8973 PRI datapri 受信データの優先度

8974

8975 【エラーコード】

8976 E_CTX コンテキストエラー

8977 ・非タスクコンテキストからの呼出し【NGKI1880】

8978 ・CPUロック状態からの呼出し【NGKI1881】

8979 ・ディスパッチ保留状態からの呼出し(prcv_pdqを除く)【NGKI1882】

8980 E_NOSPT 未サポート機能

8981 ・制約タスクからの呼出し(prcv_pdqを除く)【NGKI1883】

8982 E_ID 不正ID番号

8983 ・pdqidが有効範囲外【NGKI1884】

8984 E_PAR パラメータエラー

8985 ・tmoutが無効(trcv_pdqの場合)【NGKI1885】

8986 E_NOEXS オブジェクト未登録

8987 ・対象優先度データキューが未登録〔D〕【NGKI1886】

8988 E_OACV オブジェクトアクセス違反

8989 ・対象優先度データキューに対する通常操作2が許可されてい

8990 ない〔P〕【NGKI1887】

8991 E_MACV メモリアクセス違反

8992 ・p_dataが指すメモリ領域への書込みアクセスが許可されて

8993 いない〔P〕【NGKI1888】

8994 ・p_datapriが指すメモリ領域への書込みアクセスが許可され

8995 ていない〔P〕【NGKI1889】

8996 E_TMOUT ポーリング失敗またはタイムアウト(rcv_pdqを除く)【NGKI1890】

8997 E_RLWAI 待ち禁止状態または待ち状態の強制解除(prcv_pdqを除く)

8998 【NGKI1891】

8999 E_DLT 待ちオブジェクトの削除または再初期化(prcv_pdqを除く)

9000 【NGKI1892】

Page 181: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

181

9001

9002 【機能】

9003

9004 pdqidで指定した優先度データキュー(対象優先度データキュー)からデータを

9005 受信する.データの受信に成功した場合,受信したデータはp_dataが指すメモ

9006 リ領域に,その優先度はp_datapriが指すメモリ領域に返される【NGKI1894】.

9007 具体的な振舞いは以下の通り.

9008

9009 対象優先度データキューの優先度データキュー管理領域にデータが格納されて

9010 いる場合には,優先度データキュー管理領域の先頭に格納されたデータを受信

9011 する【NGKI1893】.また,送信待ち行列にタスクが存在する場合には,送信待

9012 ち行列の先頭のタスクの送信データが,データの優先度順で優先度データキュー

9013 管理領域に格納され,そのタスクは待ち解除される【NGKI1895】.待ち解除さ

9014 れたタスクには,待ち状態となったサービスコールからE_OKが返る

9015 【NGKI1896】.

9016

9017 対象優先度データキューの優先度データキュー管理領域にデータが格納されて

9018 おらず,送信待ち行列にタスクが存在する場合には,送信待ち行列の先頭のタ

9019 スクの送信データを受信する【NGKI1897】.送信待ち行列の先頭のタスクは,

9020 待ち解除される【NGKI1899】.待ち解除されたタスクには,待ち状態となった

9021 サービスコールからE_OKが返る【NGKI1900】.

9022

9023 対象優先度データキューの優先度データキュー管理領域にデータが格納されて

9024 おらず,送信待ち行列にタスクが存在しない場合には,自タスクは優先度デー

9025 タキューからの受信待ち状態となり,対象優先度データキューの受信待ち行列

9026 につながれる【NGKI1901】.

9027 ----------------------------------------------------------------------

9028 ini_pdq 優先度データキューの再初期化〔T〕【NGKI1902】

9029

9030 【C言語API】

9031 ER ercd = ini_pdq(ID pdqid)

9032

9033 【パラメータ】

9034 ID pdqid 対象優先度データキューのID番号

9035

9036 【リターンパラメータ】

9037 ER ercd 正常終了(E_OK)またはエラーコード

9038

9039 【エラーコード】

9040 E_CTX コンテキストエラー

9041 ・非タスクコンテキストからの呼出し【NGKI1903】

9042 ・CPUロック状態からの呼出し【NGKI1904】

9043 E_ID 不正ID番号

9044 ・pdqidが有効範囲外【NGKI1905】

9045 E_NOEXS オブジェクト未登録

9046 ・対象優先度データキューが未登録〔D〕【NGKI1906】

9047 E_OACV オブジェクトアクセス違反

9048 ・対象優先度データキューに対する管理操作が許可されてい

9049 ない〔P〕【NGKI1907】

9050

Page 182: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

182

9051 【機能】

9052

9053 pdqidで指定した優先度データキュー(対象優先度データキュー)を再初期化す

9054 る.具体的な振舞いは以下の通り.

9055

9056 対象優先度データキューの優先度データキュー管理領域は,格納されているデー

9057 タがない状態に初期化される【NGKI1908】.また,対象優先度データキューの

9058 送信待ち行列と受信待ち行列につながれたタスクは,それぞれの待ち行列の先

9059 頭のタスクから順に待ち解除される【NGKI1909】.待ち解除されたタスクには,

9060 待ち状態となったサービスコールからE_DLTエラーが返る【NGKI1910】.

9061

9062 【補足説明】

9063

9064 送信待ち行列と受信待ち行列の両方にタスクがつながれていることはないため,

9065 別の待ち行列で待っていたタスクの間の待ち解除の順序は,規定する必要がな

9066 い.

9067

9068 【使用上の注意】

9069

9070 ini_pdqにより複数のタスクが待ち解除される場合,サービスコールの処理時間

9071 およびカーネル内での割込み禁止時間が,待ち解除されるタスクの数に比例し

9072 て長くなる.特に,多くのタスクが待ち解除される場合,カーネル内での割込

9073 み禁止時間が長くなるため,注意が必要である.

9074

9075 優先度データキューを再初期化した場合に,アプリケーションとの整合性を保

9076 つのは,アプリケーションの責任である.

9077 ----------------------------------------------------------------------

9078 ref_pdq 優先度データキューの状態参照〔T〕【NGKI1911】

9079

9080 【C言語API】

9081 ER ercd = ref_pdq(ID pdqid, T_RPDQ *pk_rpdq)

9082

9083 【パラメータ】

9084 ID pdqid 対象優先度データキューのID番号

9085 T_RPDQ * pk_rpdq 優先度データキューの現在状態を入れるパケッ

9086 トへのポインタ

9087

9088 【リターンパラメータ】

9089 ER ercd 正常終了(E_OK)またはエラーコード

9090

9091 *優先度データキューの現在状態(パケットの内容)

9092 ID stskid 優先度データキューの送信待ち行列の先頭のタ

9093 スクのID番号

9094 ID rtskid 優先度データキューの受信待ち行列の先頭のタ

9095 スクのID番号

9096 uint_t spdqcnt 優先度データキュー管理領域に格納されている

9097 データの数

9098

9099 【エラーコード】

9100 E_CTX コンテキストエラー

Page 183: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

183

9101 ・非タスクコンテキストからの呼出し【NGKI1912】

9102 ・CPUロック状態からの呼出し【NGKI1913】

9103 E_ID 不正ID番号

9104 ・pdqidが有効範囲外【NGKI1914】

9105 E_NOEXS オブジェクト未登録

9106 ・対象優先度データキューが未登録〔D〕【NGKI1915】

9107 E_OACV オブジェクトアクセス違反

9108 ・対象優先度データキューに対する参照操作が許可されてい

9109 ない〔P〕【NGKI1916】

9110 E_MACV メモリアクセス違反

9111 ・pk_rpdqが指すメモリ領域への書込みアクセスが許可されて

9112 いない〔P〕【NGKI1917】

9113

9114 【機能】

9115

9116 pdqidで指定した優先度データキュー(対象優先度データキュー)の現在状態を

9117 参照する.参照した現在状態は,pk_rpdqで指定したパケットに返される

9118 【NGKI1918】.

9119

9120 対象優先度データキューの送信待ち行列にタスクが存在しない場合,stskidに

9121 はTSK_NONE(=0)が返る【NGKI1919】.また,受信待ち行列にタスクが存在し

9122 ない場合,rtskidにはTSK_NONE(=0)が返る【NGKI1920】.

9123

9124 【使用上の注意】

9125

9126 ref_pdqはデバッグ時向けの機能であり,その他の目的に使用することは推奨し

9127 ない.これは,ref_pdqを呼び出し,対象優先度データキューの現在状態を参照

9128 した直後に割込みが発生した場合,ref_pdqから戻ってきた時には対象優先度デー

9129 タキューの状態が変化している可能性があるためである.

9130 ----------------------------------------------------------------------

9131

9132 4.4.5 メールボックス

9133

9134 メールボックスは,共有メモリ上に置いたメッセージを,FIFO順またはメッセー

9135 ジの優先度順で送受信するための同期・通信オブジェクトである.メールボッ

9136 クスは,メールボックスIDと呼ぶID番号によって識別する【NGKI1921】.

9137

9138 各メールボックスが持つ情報は次の通り【NGKI1922】.

9139

9140 ・メールボックス属性

9141 ・メッセージキュー

9142 ・待ち行列(メールボックスからの受信待ち状態のタスクのキュー)

9143 ・送信できるメッセージ優先度の最大値

9144 ・優先度別のメッセージキューヘッダ領域

9145 ・属するクラス(マルチプロセッサ対応カーネルの場合)

9146

9147 メッセージキューは,メールボックスに送信されたメッセージを,FIFO順また

9148 はメッセージの優先度順につないでおくためのキューである.

9149

9150 待ち行列は,メールボックスからメッセージが受信できるまで待っている状態

Page 184: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

184

9151 (メールボックスからの受信待ち状態)のタスクが,メッセージを受信できる

9152 順序でつながれているキューである.

9153

9154 メールボックス属性には,次の属性を指定することができる【NGKI1923】.

9155

9156 TA_TPRI 0x01U 待ち行列をタスクの優先度順にする

9157 TA_MPRI 0x02U メッセージキューをメッセージの優先度順にする

9158

9159 TA_TPRIを指定しない場合,待ち行列はFIFO順になる【NGKI1924】.TA_MPRIを

9160 指定しない場合,メッセージキューはFIFO順になる【NGKI1925】.

9161

9162 優先度別のメッセージキューヘッダ領域は,TA_MPRI属性のメールボックスに対

9163 して,メッセージキューを優先度別に設ける場合に使用する領域である.

9164

9165 カーネルは,メールボックスに送信されたメッセージをメッセージキューにつ

9166 なぐために,メッセージの先頭のメモリ領域を使用する【NGKI1926】.そのた

9167 めアプリケーションは,メールボックスに送信するメッセージの先頭に,カー

9168 ネルが利用するためのメッセージヘッダを置かなければならない【NGKI1927】.

9169 メッセージヘッダのデータ型として,メールボックス属性にTA_MPRIが指定され

9170 ているか否かにより,以下のいずれかを用いる【NGKI1928】.

9171

9172 T_MSG TA_MPRI 属性でないメールボックス用のメッセージヘッダ

9173 T_MSG_PRI TA_MPRI 属性のメールボックス用のメッセージヘッダ

9174

9175 メッセージヘッダの領域は,メッセージがメッセージキューにつながれている

9176 間(すなわち,メールボックスに送信してから受信するまでの間),カーネル

9177 によって使用される【NGKI1929】.そのため,メッセージキューにつながれて

9178 いるメッセージのメッセージヘッダの領域をアプリケーションが書き換えた場

9179 合や,メッセージキューにつながれているメッセージを再度メールボックスに

9180 送信した場合の動作は保証されない【NGKI1930】.

9181

9182 TA_MPRI属性のメールボックスにメッセージを送信する場合,アプリケーション

9183 は,メッセージの優先度を,T_MSG_PRI型のメッセージヘッダ中のmsgpriフィー

9184 ルドに設定する【NGKI1931】.

9185

9186 保護機能対応カーネルでは,メールボックス機能はサポートしない【NGKI1932】.

9187

9188 メールボックス機能に関連するカーネル構成マクロは次の通り.

9189

9190 TMIN_MPRI メッセージ優先度の最小値(=1) 【NGKI1933】

9191 TMAX_MPRI メッセージ優先度の最大値

9192

9193 TNUM_MBXID 登録できるメールボックスの数(動的生成対応でないカー

9194 ネルでは,静的APIによって登録されたメールボックスの

9195 数に一致)【NGKI1934】

9196

9197 【補足説明】

9198

9199 TOPPERS新世代カーネルの現時点の実装では,優先度別のメッセージキューヘッ

9200 ダ領域は用いていない.

Page 185: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

185

9201

9202 【使用上の注意】

9203

9204 メールボックス機能は,μITRON4.0仕様との互換性のために残した機能であり,

9205 保護機能対応カーネルではサポートしないため,使用することは推奨しない.

9206 メールボックス機能は,ほとんどの場合に,データキュー機能または優先度デー

9207 タキュー機能を用いて,メッセージを置いたメモリ領域へのポインタを送受信

9208 する方法で置き換えることができる.

9209

9210 【TOPPERS/ASPカーネルにおける規定】

9211

9212 ASPカーネルでは,メールボックス機能をサポートする【ASPS0147】.メッセー

9213 ジ優先度の最大値(TMAX_MPRI)は16に固定されている【ASPS0148】.ただし,

9214 タスク優先度拡張パッケージでは,TMAX_MPRIを256に拡張する【ASPS0149】.

9215

9216 【TOPPERS/FMPカーネルにおける規定】

9217

9218 FMPカーネルでは,メールボックス機能をサポートする【FMPS0130】.メッセー

9219 ジ優先度の最大値(TMAX_MPRI)は16に固定されている【FMPS0131】.

9220

9221 【TOPPERS/HRP2カーネルにおける規定】

9222

9223 HRP2カーネルでは,メールボックス機能をサポートしない【HRPS0130】.

9224

9225 【μITRON4.0仕様との関係】

9226

9227 TNUM_MBXIDは,μITRON4.0仕様に規定されていないカーネル構成マクロである.

9228 ----------------------------------------------------------------------

9229 CRE_MBX メールボックスの生成〔Sp〕【NGKI1935】

9230 acre_mbx メールボックスの生成〔TpD〕【NGKI1936】

9231

9232 【静的API】

9233 CRE_MBX(ID mbxid, { ATR mbxatr, PRI maxmpri, void *mprihd })

9234

9235 【C言語API】

9236 ER_ID mbxid = acre_mbx(const T_CMBX *pk_cmbx)

9237

9238 【パラメータ】

9239 ID mbxid 生成するメールボックスのID番号(CRE_MBXの場

9240 合)

9241 T_CMBX * pk_cmbx メールボックスの生成情報を入れたパケットへ

9242 のポインタ(静的APIを除く)

9243

9244 *メールボックスの生成情報(パケットの内容)

9245 ATR mbxatr メールボックス属性

9246 PRI maxmpri 優先度メールボックスに送信できるメッセージ

9247 優先度の最大値

9248 void * mprihd 優先度別のメッセージキューヘッダ領域の先頭

9249 番地

9250

Page 186: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

186

9251 【リターンパラメータ】

9252 ER_ID mbxid 生成されたメールボックスのID番号(正の値)

9253 またはエラーコード

9254

9255 【エラーコード】

9256 E_CTX コンテキストエラー

9257 ・非タスクコンテキストからの呼出し〔s〕【NGKI1937】

9258 ・CPUロック状態からの呼出し〔s〕【NGKI1938】

9259 E_RSATR 予約属性

9260 ・mbxatrが無効【NGKI1939】

9261 ・属するクラスの指定が有効範囲外〔sM〕【NGKI1940】

9262 ・クラスの囲みの中に記述されていない〔SM〕【NGKI1941】

9263 E_NOSPT 未サポート機能

9264 ・条件については各カーネルにおける規定の項を参照

9265 E_PAR パラメータエラー

9266 ・maxmpriがTMIN_MPRIより小さい,またはTMAX_MPRIより大き

9267 い【NGKI1951】

9268 E_NOID ID番号不足

9269 ・割り付けられるメールボックスIDがない〔sD〕【NGKI1942】

9270 E_NOMEM メモリ不足

9271 ・優先度別のメッセージキューヘッダ領域が確保できない

9272 【NGKI1943】

9273 E_OBJ オブジェクト状態エラー

9274 ・mbxidで指定したメールボックスが登録済み(CRE_MBXの場

9275 合)【NGKI1944】

9276

9277 【機能】

9278

9279 各パラメータで指定したメールボックス生成情報に従って,メールボックスを

9280 生成する.メッセージキューはつながれているメッセージがない状態に初期化

9281 され,mprihdとmaxmpriから優先度別のメッセージキューヘッダ領域が設定され

9282 る【NGKI1945】.また,待ち行列は空の状態に初期化される【NGKI1946】.

9283

9284 静的APIにおいては,mbxidはオブジェクト識別名,mbxatrとmaxmpriは整数定数

9285 式パラメータ,mprihdは一般定数式パラメータである【NGKI1947】.コンフィ

9286 ギュレータは,静的APIのメモリ不足(E_NOMEM)エラーを検出することができ

9287 ない【NGKI1948】.

9288

9289 mprihdをNULLとした場合,maxmpriの指定に合致したサイズの優先度別のメッセー

9290 ジキューヘッダ領域が,コンフィギュレータまたはカーネルにより確保される

9291 【NGKI1949】.

9292

9293 【未決定事項】

9294

9295 mprihdにNULL以外を指定した場合の扱いについては,この仕様では規定してい

9296 ない.

9297

9298 【TOPPERS/ASPカーネルにおける規定】

9299

9300 ASPカーネルでは,CRE_MBXのみをサポートする【ASPS0150】.また,優先度別

Page 187: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

187

9301 のメッセージキューヘッダ領域は使用しておらず,mprihdにはNULLのみを指定

9302 することができる.NULL以外を指定した場合には,E_NOSPTエラーとなる

9303 【ASPS0152】.ただし,動的生成機能拡張パッケージでは,acre_mbxもサポー

9304 トする【ASPS0153】.acre_mbxに対しても,mprihdにはNULLのみを指定するこ

9305 とができる【ASPS0154】.優先度別のメッセージキューヘッダ領域を使用しな

9306 いため,E_NOMEMが返ることはない【ASPS0155】.

9307

9308 【TOPPERS/FMPカーネルにおける規定】

9309

9310 FMPカーネルでは,CRE_MBXのみをサポートする【FMPS0132】.また,優先度別

9311 のメッセージキューヘッダ領域は使用しておらず,mprihdにはNULLのみを指定

9312 することができる.NULL以外を指定した場合には,E_NOSPTエラーとなる

9313 【FMPS0134】.優先度別のメッセージキューヘッダ領域を使用しないため,

9314 E_NOMEMが返ることはない【FMPS0135】.

9315 ----------------------------------------------------------------------

9316 AID_MBX 割付け可能なメールボックスIDの数の指定〔SpD〕【NGKI1952】

9317

9318 【静的API】

9319 AID_MBX(uint_t nombx)

9320

9321 【パラメータ】

9322 uint_t n ombx 割付け可能なメールボックスIDの数

9323

9324 【エラーコード】

9325 E_RSATR 予約属性

9326 ・クラスの囲みの中に記述されていない〔M〕【NGKI1953】

9327 E_PAR パラメータエラー

9328 ・nombxが負の値【NGKI3281】

9329

9330 【機能】

9331

9332 nombxで指定した数のメールボックスIDを,メールボックスを生成するサービス

9333 コールによって割付け可能なメールボックスIDとして確保する【NGKI1954】.

9334

9335 nombxは整数定数式パラメータである【NGKI1955】.

9336 ----------------------------------------------------------------------

9337 del_mbx メールボックスの削除〔TpD〕【NGKI1956】

9338

9339 【C言語API】

9340 ER ercd = del_mbx(ID mbxid)

9341

9342 【パラメータ】

9343 ID mbxid 対象メールボックスのID番号

9344

9345 【リターンパラメータ】

9346 ER ercd 正常終了(E_OK)またはエラーコード

9347

9348 【エラーコード】

9349 E_CTX コンテキストエラー

9350 ・非タスクコンテキストからの呼出し【NGKI1957】

Page 188: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

188

9351 ・CPUロック状態からの呼出し【NGKI1958】

9352 E_ID 不正ID番号

9353 ・mbxidが有効範囲外【NGKI1959】

9354 E_NOEXS オブジェクト未登録

9355 ・対象メールボックスが未登録【NGKI1960】

9356 E_OBJ オブジェクト状態エラー

9357 ・対象メールボックスは静的APIで生成された【NGKI1961】

9358

9359 【機能】

9360

9361 mbxidで指定したメールボックス(対象メールボックス)を削除する.具体的な

9362 振舞いは以下の通り.

9363

9364 対象メールボックスの登録が解除され,そのメールボックスIDが未使用の状態

9365 に戻される【NGKI1962】.また,対象メールボックスの待ち行列につながれた

9366 タスクは,待ち行列の先頭のタスクから順に待ち解除される【NGKI1963】.待

9367 ち解除されたタスクには,待ち状態となったサービスコールからE_DLTエラーが

9368 返る【NGKI1964】.

9369

9370 メールボックスの生成時に,優先度別のメッセージキューヘッダ領域がカーネ

9371 ルによって確保された場合は,そのメモリ領域が解放される【NGKI1965】.

9372

9373 【使用上の注意】

9374

9375 del_mbxにより複数のタスクが待ち解除される場合,サービスコールの処理時間

9376 およびカーネル内での割込み禁止時間が,待ち解除されるタスクの数に比例し

9377 て長くなる.特に,多くのタスクが待ち解除される場合,カーネル内での割込

9378 み禁止時間が長くなるため,注意が必要である.

9379

9380 【TOPPERS/ASPカーネルにおける規定】

9381

9382 ASPカーネルでは,del_mbxをサポートしない【ASPS0156】.ただし,動的生成

9383 機能拡張パッケージでは,del_mbxをサポートする【ASPS0157】.

9384

9385 【TOPPERS/FMPカーネルにおける規定】

9386

9387 FMPカーネルでは,del_mbxをサポートしない【FMPS0136】.

9388 ----------------------------------------------------------------------

9389 snd_mbx メールボックスへの送信〔Tp〕【NGKI1966】

9390

9391 【C言語API】

9392 ER ercd = snd_mbx(ID mbxid, T_MSG *pk_msg)

9393

9394 【パラメータ】

9395 ID mbxid 対象メールボックスのID番号

9396 T_MSG *pk_msg 送信メッセージの先頭番地

9397

9398 【リターンパラメータ】

9399 ER ercd 正常終了(E_OK)またはエラーコード

9400

Page 189: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

189

9401 【エラーコード】

9402 E_CTX コンテキストエラー

9403 ・非タスクコンテキストからの呼出し【NGKI1967】

9404 ・CPUロック状態からの呼出し【NGKI1968】

9405 E_ID 不正ID番号

9406 ・mbxidが有効範囲外【NGKI1969】

9407 E_PAR パラメータエラー

9408 ・条件については機能の項を参照

9409 E_NOEXS オブジェクト未登録

9410 ・対象メールボックスが未登録〔D〕【NGKI1970】

9411

9412 【機能】

9413

9414 mbxidで指定したメールボックス(対象メールボックス)に,pk_msgで指定した

9415 メッセージを送信する.具体的な振舞いは以下の通り.

9416

9417 対象メールボックスの待ち行列にタスクが存在する場合には,待ち行列の先頭

9418 のタスクが,pk_msgで指定したメッセージを受信し,待ち解除される

9419 【NGKI1971】.待ち解除されたタスクには,待ち状態となったサービスコール

9420 からE_OKが返る【NGKI1972】.

9421

9422 対象メールボックスの待ち行列にタスクが存在しない場合には,pk_msgで指定

9423 したメッセージが,メールボックス属性のTA_MPRI指定の有無によって指定され

9424 る順序で,メッセージキューにつながれる【NGKI1973】.

9425

9426 対象メールボックスがTA_MPRI属性である場合には,pk_msgで指定したメッセー

9427 ジの先頭のメッセージヘッダ中のmsgpriフィールドの値が,TMIN_MPRI以上で,

9428 対象メールボックスに送信できるメッセージ優先度の最大値以下でなければな

9429 らない.そうでない場合には,E_PARエラーとなる【NGKI1975】.

9430 ----------------------------------------------------------------------

9431 rcv_mbx メールボックスからの受信〔Tp〕【NGKI1976】

9432 prcv_mbx メールボックスからの受信(ポーリング)〔Tp〕【NGKI1977】

9433 trcv_mbx メールボックスからの受信(タイムアウト付き)〔Tp〕【NGKI1978】

9434

9435 【C言語API】

9436 ER ercd = rcv_mbx(ID mb xid, T_MSG **ppk_msg)

9437 ER ercd = prcv_mbx(ID mbxid, T_MSG **ppk_msg)

9438 ER ercd = trcv_mbx(ID mbxid, T_MSG **ppk_msg, TMO tmout)

9439

9440 【パラメータ】

9441 ID mbxid 対象メールボックスのID番号

9442 T_MSG * * ppk_msg 受信メッセージの先頭番地を入れるメモリ領域

9443 へのポインタ

9444 TMO tmout タイムアウト時間(trcv_mbxの場合)

9445

9446 【リターンパラメータ】

9447 ER ercd 正常終了(E_OK)またはエラーコード

9448 T_MSG * ppk_msg 受信メッセージの先頭番地

9449

9450 【エラーコード】

Page 190: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

190

9451 E_CTX コンテキストエラー

9452 ・非タスクコンテキストからの呼出し【NGKI1979】

9453 ・CPUロック状態からの呼出し【NGKI1980】

9454 ・ディスパッチ保留状態からの呼出し(prcv_mbxを除く)【NGKI1981】

9455 E_NOSPT 未サポート機能

9456 ・制約タスクからの呼出し(prcv_mbxを除く)【NGKI1982】

9457 E_ID 不正ID番号

9458 ・mbxidが有効範囲外【NGKI1983】

9459 E_PAR パラメータエラー

9460 ・tmoutが無効(trcv_mbxの場合)【NGKI1984】

9461 E_NOEXS オブジェクト未登録

9462 ・対象メールボックスが未登録〔D〕【NGKI1985】

9463 E_TMOUT ポーリング失敗またはタイムアウト(rcv_mbxを除く)【NGKI1986】

9464 E_RLWAI 待ち禁止状態または待ち状態の強制解除(prcv_mbxを除く)

9465 【NGKI1987】

9466 E_DLT 待ちオブジェクトの削除または再初期化(prcv_mbxを除く)

9467 【NGKI1988】

9468

9469 【機能】

9470

9471 mbxidで指定したメールボックス(対象メールボックス)からメッセージを受信

9472 する.受信したメッセージの先頭番地は,ppk_msgで指定したメモリ領域に返さ

9473 れる.具体的な振舞いは以下の通り.

9474

9475 対象メールボックスのメッセージキューにメッセージがつながれている場合に

9476 は,メッセージキューの先頭につながれたメッセージが取り出され,ppk_msgで

9477 指定したメモリ領域に返される【NGKI1989】.

9478

9479 対象メールボックスのメッセージキューにメッセージがつながれていない場合

9480 には,自タスクはメールボックスからの受信待ち状態となり,対象メールボッ

9481 クスの待ち行列につながれる【NGKI1990】.

9482 ----------------------------------------------------------------------

9483 ini_mbx メールボックスの再初期化〔Tp〕【NGKI1991】

9484

9485 【C言語API】

9486 ER ercd = ini_mbx(ID mbxid)

9487

9488 【パラメータ】

9489 ID mbxid 対象メールボックスのID番号

9490

9491 【リターンパラメータ】

9492 ER ercd 正常終了(E_OK)またはエラーコード

9493

9494 【エラーコード】

9495 E_CTX コンテキストエラー

9496 ・非タスクコンテキストからの呼出し【NGKI1992】

9497 ・CPUロック状態からの呼出し【NGKI1993】

9498 E_ID 不正ID番号

9499 ・mbxidが有効範囲外【NGKI1994】

9500 E_NOEXS オブジェクト未登録

Page 191: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

191

9501 ・対象メールボックスが未登録〔D〕【NGKI1995】

9502

9503 【機能】

9504

9505 mbxidで指定したメールボックス(対象メールボックス)を再初期化する.具体

9506 的な振舞いは以下の通り.

9507

9508 対象メールボックスのメールボックス管理領域は,メッセージキューはつなが

9509 れているメッセージがない状態に初期化される【NGKI1996】.また,対象メー

9510 ルボックスの待ち行列につながれたタスクは,待ち行列の先頭のタスクから順

9511 に待ち解除される【NGKI1997】.待ち解除されたタスクには,待ち状態となっ

9512 たサービスコールからE_DLTエラーが返る【NGKI1998】.

9513

9514 【使用上の注意】

9515

9516 ini_mbxにより複数のタスクが待ち解除される場合,サービスコールの処理時間

9517 およびカーネル内での割込み禁止時間が,待ち解除されるタスクの数に比例し

9518 て長くなる.特に,多くのタスクが待ち解除される場合,カーネル内での割込

9519 み禁止時間が長くなるため,注意が必要である.

9520

9521 メールボックスを再初期化した場合に,アプリケーションとの整合性を保つのは,

9522 アプリケーションの責任である.

9523

9524 【μITRON4.0仕様との関係】

9525

9526 μITRON4.0仕様に定義されていないサービスコールである.

9527 ----------------------------------------------------------------------

9528 ref_mbx メールボックスの状態参照〔Tp〕【NGKI1999】

9529

9530 【C言語API】

9531 ER ercd = ref_mbx(ID mbxid, T_RMBX *pk_rmbx)

9532

9533 【パラメータ】

9534 ID mbxid 対象メールボックスのID番号

9535 T_RMBX * pk_rmbx メールボックスの現在状態を入れるパケットへ

9536 のポインタ

9537

9538 【リターンパラメータ】

9539 ER ercd 正常終了(E_OK)またはエラーコード

9540

9541 *メールボックスの現在状態(パケットの内容)

9542 ID wtskid メールボックスの待ち行列の先頭のタスクのID

9543 番号

9544 T_MSG * pk_msg メッセージキューの先頭につながれたメッセー

9545 ジの先頭番地

9546

9547 【エラーコード】

9548 E_CTX コンテキストエラー

9549 ・非タスクコンテキストからの呼出し【NGKI2000】

9550 ・CPUロック状態からの呼出し【NGKI2001】

Page 192: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

192

9551 E_ID 不正ID番号

9552 ・mbxidが有効範囲外【NGKI2002】

9553 E_NOEXS オブジェクト未登録

9554 ・対象メールボックスが未登録〔D〕【NGKI2003】

9555

9556 【機能】

9557

9558 mbxidで指定したメールボックス(対象メールボックス)の現在状態を参照する.

9559 参照した現在状態は,pk_rmbxで指定したパケットに返される【NGKI2004】.

9560

9561 対象メールボックスの待ち行列にタスクが存在しない場合,wtskidには

9562 TSK_NONE(=0)が返る【NGKI2005】.また,メッセージキューにメッセージが

9563 つながれていない場合,pk_msgにはNULLが返る【NGKI2006】.

9564

9565 【使用上の注意】

9566

9567 ref_mbxはデバッグ時向けの機能であり,その他の目的に使用することは推奨し

9568 ない.これは,ref_mbxを呼び出し,対象メールボックスの現在状態を参照した

9569 直後に割込みが発生した場合,ref_mbxから戻ってきた時には対象メールボック

9570 スの状態が変化している可能性があるためである.

9571 ----------------------------------------------------------------------

9572

9573 4.4.6 ミューテックス

9574

9575 ミューテックスは,タスク間の排他制御を行うための同期・通信オブジェクト

9576 である.タスクは,排他制御区間に入る時にミューテックスをロックし,排他

9577 制御区間を出る時にロック解除する.ミューテックスは,ミューテックスIDと

9578 呼ぶID番号によって識別する【NGKI2007】.

9579

9580 ミューテックスは,排他制御に伴う優先度逆転の時間を最小限に抑えるための

9581 優先度上限プロトコル(priority ceiling protocol)をサポートする.ミュー

9582 テックス属性により優先度上限ミューテックスであると指定することで,その

9583 ミューテックスの操作時に,優先度上限プロトコルに従った現在優先度の制御

9584 が行われる.

9585

9586 各ミューテックスが持つ情報は次の通り【NGKI2008】.

9587

9588 ・ミューテックス属性

9589 ・ロック状態(ロックされている状態とロック解除されている状態)

9590 ・ミューテックスをロックしているタスク

9591 ・待ち行列(ミューテックスのロック待ち状態のタスクのキュー)

9592 ・上限優先度(優先度上限ミューテックスの場合)

9593 ・アクセス許可ベクタ(保護機能対応カーネルの場合)

9594 ・属する保護ドメイン(保護機能対応カーネルの場合)

9595 ・属するクラス(マルチプロセッサ対応カーネルの場合)

9596

9597 待ち行列は,ミューテックスをロックできるまで待っている状態(ミューテッ

9598 クスのロック待ち状態)のタスクが,ミューテックスをロックできる順序でつ

9599 ながれているキューである.

9600

Page 193: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

193

9601 上限優先度は,優先度上限ミューテックスに対してのみ有効で,ミューテック

9602 スの生成時に,そのミューテックスをロックする可能性のあるタスクのベース

9603 優先度の中で最も高い優先度(または,それより高い優先度)に設定する

9604 【NGKI2009】.

9605

9606 ミューテックス属性には,次の属性を指定することができる【NGKI2010】.

9607

9608 TA_TPRI 0x01U 待ち行列をタスクの優先度順にする

9609 TA_CEILI NG 0x03U 優先度上限ミューテックスとする.待ち行列をタス

9610 クの優先度順にする

9611

9612 TA_TPRI,TA_CEILINGのいずれも指定しない場合,待ち行列はFIFO順になる

9613 【NGKI2011】.

9614

9615 ミューテックス機能に関連して,各タスクが持つ情報は次の通り【NGKI2012】.

9616

9617 ・ロックしているミューテックスのリスト

9618

9619 ロックしているミューテックスのリストは,タスクの起動時に空に初期化され

9620 る【NGKI2013】.

9621

9622 タスクの現在優先度は,そのタスクのベース優先度と,そのタスクがロックし

9623 ている優先度上限ミューテックスの優先度上限の中で,最も高い優先度に設定

9624 される【NGKI2014】.

9625

9626 ミューテックス機能によりタスクの現在優先度が変化する場合には,次の処理

9627 が行われる.現在優先度を変化させるサービスコールの前後とも,当該タスク

9628 が実行できる状態である場合には,同じ優先度のタスクの中で最高優先順位と

9629 なる【NGKI2015】.そのサービスコールにより,当該タスクが実行できる状態

9630 に遷移する場合には,同じ優先度のタスクの中で最低優先順位となる

9631 【NGKI2016】.そのサービスコールの後で,当該タスクが待ち状態で,タスク

9632 の優先度順の待ち行列につながれている場合には,当該タスクの変更後の現在

9633 優先度に従って,その待ち行列中での順序が変更される【NGKI2017】.待ち行

9634 列中に同じ現在優先度のタスクがある場合には,当該タスクの順序はそれらの

9635 中で最後になる【NGKI2018】.

9636

9637 ミューテックス機能に関連して,タスクの終了時に行うべき処理として,タス

9638 クがロックしているミューテックスのロック解除がある.タスクの終了時にロッ

9639 クしているミューテックスが残っている場合,それらのミューテックスは,ロッ

9640 クしたのと逆の順序でロック解除される【NGKI2019】.

9641

9642 ミューテックス機能に関連するカーネル構成マクロは次の通り.

9643

9644 TNUM_MTXID 登録できるミューテックスの数(動的生成対応でないカー

9645 ネルでは,静的APIによって登録されたミューテックスの

9646 数に一致)【NGKI2020】

9647

9648 【使用上の注意】

9649

9650 優先度上限プロトコルには,(a) 優先度の低いタスクの排他制御区間に最大1回

Page 194: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

194

9651 しかブロックされない,(b) タスクの実行が開始された以降は優先度の低いタ

9652 スクにブロックされないという利点があるが,これは,タスク間の同期に優先

9653 度上限ミューテックスのみを用い,他の方法でタスクのスケジューリングに関

9654 与しない場合に得られる利点である.

9655

9656 これらの利点を得るためには,タスクの優先順位の回転やディスパッチの禁止

9657 を行ってはならないことに加えて,優先度上限ミューテックスをロックしたタ

9658 スクを待ち状態にしてはならない.特に,優先度上限ミューテックスに対して,

9659 タスクがロック待ち状態になる状況に注意が必要である(優先度上限プロトコ

9660 ルでは,タスクがミューテックスのロック待ち状態になることはない).

9661

9662 例えば,着目するタスクAと,タスクAよりベース優先度の低いタスクBとタスク

9663 C,タスクAよりも高い上限優先度を持った優先度上限ミューテックスがある場

9664 合を考える.タスクAがミューテックスをロックし,タスクBとタスクCがミュー

9665 テックスを待っている状況で,タスクAがミューテックスをロック解除すると,

9666 タスクBがミューテックスをロックして優先度が上がり,タスクBに切り換わる.

9667 さらにタスクBがミューテックスをロック解除すると,タスクCがミューテック

9668 スをロックして優先度が上がり,タスクCに切り換わる.タスクAが実行される

9669 のは,タスクCがミューテックスをロック解除した後である.この例では,タス

9670 クAが実行開始後に,タスクBとタスクCの排他制御区間にブロックされることに

9671 なる.

9672

9673 優先度上限ミューテックスに対してタスクがロック待ち状態になる状況を回避

9674 するためには,優先度上限ミューテックスをロックする場合に,待ち状態にな

9675 らないploc_mtxを用いるのが安全である.

9676

9677 【補足説明】

9678

9679 この仕様で優先度上限プロトコルと呼んでいる方式は,オリジナルのpriority

9680 ceiling protocolとは異なるものである.この仕様の方式は,OSEK/VDX OS仕様

9681 でもpriority ceiling protocolと呼ばれているが,学術論文や他のOSでは,

9682 immediate ceiling priority protocol ,priority protection protocol,

9683 priority ceiling emulation ,highest locker protocolなどと呼ばれている.

9684

9685 【TOPPERS/ASPカーネルにおける規定】

9686

9687 ASPカーネルでは,ミューテックス機能をサポートしない【ASPS0158】.ただし,

9688 ミューテックス機能拡張パッケージを用いると,ミューテックス機能を追加す

9689 ることができる【ASPS0159】.

9690

9691 【TOPPERS/FMPカーネルにおける規定】

9692

9693 FMPカーネルでは,ミューテックス機能をサポートしない【FMPS0137】.

9694

9695 【TOPPERS/HRP2カーネルにおける規定】

9696

9697 HRP2カーネルでは,ミューテックス機能をサポートする【HRPS0131】.

9698

9699 【未決定事項】

9700

Page 195: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

195

9701 マルチプロセッサにおいては,タスク間の同期に優先度上限ミューテックスの

9702 みを用い,他の方法でタスクのスケジューリングに関与しない場合でも,優先

9703 度上限ミューテックスに対してタスクがロック待ち状態になる.マルチプロセッ

9704 サ対応カーネルにおける優先度上限ミューテックスの扱いについては,今後の

9705 課題である.

9706

9707 【μITRON4.0仕様との関係】

9708

9709 μITRON4.0仕様の厳密な優先度制御規則を採用し,簡略化した優先度制御規則

9710 はサポートしていない.また,μITRON4.0仕様でサポートしている優先度継承

9711 プロトコル(priority inheritance protocol)は,現時点ではサポートしてい

9712 ない.

9713

9714 ミューテックス機能によりタスクの現在優先度が変化する場合の振舞いは,

9715 μITRON4.0仕様では実装依存となっているが,この仕様では規定している.

9716

9717 TNUM_MTXIDは,μITRON4.0仕様に規定されていないカーネル構成マクロであ

9718 る.

9719 ----------------------------------------------------------------------

9720 CRE_MTX ミューテックスの生成〔S〕【NGKI2021】

9721 acre_mtx ミューテックスの生成〔TD〕【NGKI2022】

9722

9723 【静的API】

9724 CRE_MTX(ID mtxid, { ATR mtxatr, PRI ceilpri })

9725

9726 【C言語API】

9727 ER_ID mtxid = acre_mtx(const T_CMTX *pk_cmtx)

9728

9729 【パラメータ】

9730 ID mtxid 生成するミューテックスのID番号(CRE_MTXの

9731 場合)

9732 T_CMTX * pk_cmtx ミューテックスの生成情報を入れたパケット

9733 へのポインタ(静的APIを除く)

9734

9735 *ミューテックスの生成情報(パケットの内容)

9736 ATR mtxatr ミューテックス属性

9737 PRI ceilpri ミューテックスの上限優先度

9738

9739 【リターンパラメータ】

9740 ER_ID mtxid 生成されたミューテックスのID番号(正の値)

9741 またはエラーコード

9742

9743 【エラーコード】

9744 E_CTX コンテキストエラー

9745 ・非タスクコンテキストからの呼出し〔s〕【NGKI2023】

9746 ・CPUロック状態からの呼出し〔s〕【NGKI2024】

9747 E_RSATR 予約属性

9748 ・mtxatrが無効【NGKI2025】

9749 ・属する保護ドメインの指定が有効範囲外〔sP〕【NGKI2026】

9750 ・属するクラスの指定が有効範囲外〔sM〕【NGKI2027】

Page 196: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

196

9751 ・クラスの囲みの中に記述されていない〔SM〕【NGKI2028】

9752 E_PAR パラメータエラー

9753 ・条件については機能の項を参照

9754 E_OACV オブジェクトアクセス違反

9755 ・システム状態に対する管理操作が許可されていない〔sP〕

9756 【NGKI2029】

9757 E_MACV メモリアクセス違反

9758 ・pk_cmtxが指すメモリ領域への読出しアクセスが許可されて

9759 いない〔sP〕【NGKI2030】

9760 E_NOID ID番号不足

9761 ・割り付けられるミューテックスIDがない〔sD〕【NGKI2031】

9762 E_OBJ オブジェクト状態エラー

9763 ・mtxidで指定したセマフォが登録済み(CRE_MTXの場合)【NGKI2032】

9764

9765 【機能】

9766

9767 各パラメータで指定したミューテックス生成情報に従って,ミューテックスを

9768 生成する.生成されたミューテックスのロック状態はロックされていない状態

9769 に,待ち行列は空の状態に初期化される【NGKI2033】.

9770

9771 静的APIにおいては,mtxidはオブジェクト識別名,mtxatrとceilpriは整数定数

9772 式パラメータである【NGKI2034】.優先度上限ミューテックス以外の場合には,

9773 ceilpriの指定を省略することができる【NGKI2035】.

9774

9775 優先度上限ミューテックスを生成する場合,ceilpriは,TMIN_TPRI以上,

9776 TMAX_TPRI以下でなければならない.そうでない場合には,E_PARエラーとなる

9777 【NGKI2037】.

9778

9779 【TOPPERS/ASPカーネルにおける規定】

9780

9781 ASPカーネルのミューテックス機能拡張パッケージでは,CRE_MTXのみをサポー

9782 トする【ASPS0160】.

9783

9784 【TOPPERS/HRP2カーネルにおける規定】

9785

9786 HRP2カーネルでは,CRE_MTXのみをサポートする【HRPS0132】.

9787 ----------------------------------------------------------------------

9788 AID_MTX 割付け可能なミューテックスIDの数の指定〔SD〕【NGKI2038】

9789

9790 【静的API】

9791 AID_MTX(uint_t nomtx)

9792

9793 【パラメータ】

9794 uint_t nomtx 割付け可能なミューテックスIDの数

9795

9796 【エラーコード】

9797 E_RSATR 予約属性

9798 ・クラスの囲みの中に記述されていない〔M〕【NGKI2039】

9799 E_PAR パラメータエラー

9800 ・nomtxが負の値【NGKI3282】

Page 197: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

197

9801

9802 【機能】

9803

9804 nomtxで指定した数のミューテックスIDを,ミューテックスを生成するサービス

9805 コールによって割付け可能なミューテックスIDとして確保する【NGKI2040】.

9806

9807 nomtxは整数定数式パラメータである【NGKI2041】.

9808 ----------------------------------------------------------------------

9809 SAC_MTX ミューテックスのアクセス許可ベクタの設定〔SP〕【NGKI2042】

9810 sac_mtx ミューテックスのアクセス許可ベクタの設定〔TPD〕【NGKI2043】

9811

9812 【静的API】

9813 SAC_MTX(ID mtxid, { ACPTN acptn1, ACPTN acptn2,

9814 ACPTN acptn3, ACPTN acptn4 })

9815

9816 【C言語API】

9817 ER ercd = sac_mtx(ID mtxid, const ACVCT *p_acvct)

9818

9819 【パラメータ】

9820 ID mtxid 対象ミューテックスのID番号

9821 ACVCT * p_acvct アクセス許可ベクタを入れたパケットへのポ

9822 インタ(静的APIを除く)

9823

9824 *アクセス許可ベクタ(パケットの内容)

9825 ACPTN acptn1 通常操作1のアクセス許可パターン

9826 ACPTN acptn2 通常操作2のアクセス許可パターン

9827 ACPTN acptn3 管理操作のアクセス許可パターン

9828 ACPTN acptn4 参照操作のアクセス許可パターン

9829

9830 【リターンパラメータ】

9831 ER ercd 正常終了(E_OK)またはエラーコード

9832

9833 【エラーコード】

9834 E_CTX コンテキストエラー

9835 ・非タスクコンテキストからの呼出し〔s〕【NGKI2044】

9836 ・CPUロック状態からの呼出し〔s〕【NGKI2045】

9837 E_ID 不正ID番号

9838 ・mtxidが有効範囲外〔s〕【NGKI2046】

9839 E_RSATR 予約属性

9840 ・対象ミューテックスが属する保護ドメインの囲みの中に記

9841 述されていない〔S〕【NGKI2047】

9842 ・対象ミューテックスが属するクラスの囲みの中に記述され

9843 ていない〔SM〕【NGKI2048】

9844 E_NOEXS オブジェクト未登録

9845 ・対象ミューテックスが未登録【NGKI2049】

9846 E_OACV オブジェクトアクセス違反

9847 ・対象ミューテックスに対する管理操作が許可されていない〔s〕

9848 【NGKI2050】

9849 E_MACV メモリアクセス違反

9850 ・p_acvctが指すメモリ領域への読出しアクセスが許可されて

Page 198: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

198

9851 いない〔s〕【NGKI2051】

9852 E_OBJ オブジェクト状態エラー

9853 ・対象ミューテックスは静的APIで生成された〔s〕【NGKI2052】

9854 ・対象ミューテックスに対してアクセス許可ベクタが設定済

9855 み〔S〕【NGKI2053】

9856

9857 【機能】

9858

9859 mtxidで指定したミューテックス(対象ミューテックス)のアクセス許可ベクタ

9860 (4つのアクセス許可パターンの組)を,各パラメータで指定した値に設定する

9861 【NGKI2054】.

9862

9863 静的APIにおいては,mtxidはオブジェクト識別名,acptn1~acptn4は整数定数

9864 式パラメータである【NGKI2055】.

9865

9866 【TOPPERS/ASPカーネルにおける規定】

9867

9868 ASPカーネルのミューテックス機能拡張パッケージでは,SAC_MTX,sac_mtxをサ

9869 ポートしない【ASPS0161】.

9870

9871 【TOPPERS/HRP2カーネルにおける規定】

9872

9873 HRP2カーネルでは,SAC_MTXのみをサポートする【HRPS0133】.

9874 ----------------------------------------------------------------------

9875 del_mtx ミューテックスの削除〔TD〕【NGKI2056】

9876

9877 【C言語API】

9878 ER ercd = del_mtx(ID mtxid)

9879

9880 【パラメータ】

9881 ID mtxid 対象ミューテックスのID番号

9882

9883 【リターンパラメータ】

9884 ER ercd 正常終了(E_OK)またはエラーコード

9885

9886 【エラーコード】

9887 E_CTX コンテキストエラー

9888 ・非タスクコンテキストからの呼出し【NGKI2057】

9889 ・CPUロック状態からの呼出し【NGKI2058】

9890 E_ID 不正ID番号

9891 ・mtxidが有効範囲外【NGKI2059】

9892 E_NOEXS オブジェクト未登録

9893 ・対象ミューテックスが未登録【NGKI2060】

9894 E_OACV オブジェクトアクセス違反

9895 ・対象ミューテックスに対する管理操作が許可されていない〔P〕

9896 【NGKI2061】

9897 E_OBJ オブジェクト状態エラー

9898 ・対象ミューテックスは静的APIで生成された【NGKI2062】

9899

9900 【機能】

Page 199: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

199

9901

9902 mtxidで指定したミューテックス(対象ミューテックス)を削除する.具体的な

9903 振舞いは以下の通り.

9904

9905 対象ミューテックスの登録が解除され,そのミューテックスIDが未使用の状態

9906 に戻される【NGKI2063】.対象ミューテックスをロックしているタスクがある

9907 場合には,そのタスクがロックしているミューテックスのリストから対象ミュー

9908 テックスが削除され,必要な場合にはそのタスクの現在優先度が変更される

9909 【NGKI2064】.また,対象ミューテックスの待ち行列につながれたタスクは,

9910 待ち行列の先頭のタスクから順に待ち解除される【NGKI2065】.待ち解除され

9911 たタスクには,待ち状態となったサービスコールからE_DLTエラーが返る

9912 【NGKI2066】.

9913

9914 【使用上の注意】

9915

9916 対象ミューテックスをロックしているタスクには,ミューテックスが削除され

9917 たことが通知されず,そのミューテックスをロック解除する時点でエラーとな

9918 る.これが不都合な場合には,ミューテックスをロックした状態で,ミューテッ

9919 クスを削除すればよい.

9920

9921 del_mtxにより複数のタスクが待ち解除される場合,サービスコールの処理時間

9922 およびカーネル内での割込み禁止時間が,待ち解除されるタスクの数に比例し

9923 て長くなる.特に,多くのタスクが待ち解除される場合,カーネル内での割込

9924 み禁止時間が長くなるため,注意が必要である.

9925

9926 【TOPPERS/ASPカーネルにおける規定】

9927

9928 ASPカーネルのミューテックス機能拡張パッケージでは,del_mtxをサポートし

9929 ない【ASPS0162】.

9930

9931 【TOPPERS/HRP2カーネルにおける規定】

9932

9933 HRP2カーネルでは,del_mtxをサポートしない【HRPS0134】.

9934 ----------------------------------------------------------------------

9935 loc_mtx ミューテックスのロック〔T〕【NGKI2067】

9936 ploc_mtx ミューテックスのロック(ポーリング)〔T〕【NGKI2068】

9937 tloc_mtx ミューテックスのロック(タイムアウト付き)〔T〕【NGKI2069】

9938

9939 【C言語API】

9940 ER ercd = loc_mtx(ID mtxid)

9941 ER ercd = ploc_mtx(ID mtxid)

9942 ER ercd = tloc_mtx(ID mtxid, TMO tmout)

9943

9944 【パラメータ】

9945 ID mtxid 対象ミューテックスのID番号

9946 TMO tmout タイムアウト時間(twai_mtxの場合)

9947

9948 【リターンパラメータ】

9949 ER ercd 正常終了(E_OK)またはエラーコード

9950

Page 200: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

200

9951 【エラーコード】

9952 E_CTX コンテキストエラー

9953 ・非タスクコンテキストからの呼出し【NGKI2070】

9954 ・CPUロック状態からの呼出し【NGKI2071】

9955 ・ディスパッチ保留状態からの呼出し(ploc_mtxを除く)【NGKI2072】

9956 E_NOSPT 未サポート機能

9957 ・制約タスクからの呼出し(ploc_mtxを除く)【NGKI2073】

9958 E_ID 不正ID番号

9959 ・mtxidが有効範囲外【NGKI2074】

9960 E_PAR パラメータエラー

9961 ・tmoutが無効(tloc_mtxの場合)【NGKI2075】

9962 E_NOEXS オブジェクト未登録

9963 ・対象ミューテックスが未登録〔D〕【NGKI2076】

9964 E_OACV オブジェクトアクセス違反

9965 ・対象ミューテックスに対する通常操作1が許可されていない〔P〕

9966 【NGKI2077】

9967 E_ILUSE サービスコール不正使用

9968 ・条件については機能の項を参照

9969 E_TMOUT ポーリング失敗またはタイムアウト(loc_mtxを除く)【NGKI2078】

9970 E_RLWAI 待ち禁止状態または待ち状態の強制解除(ploc_mtxを除く)

9971 【NGKI2079】

9972 E_DLT 待ちオブジェクトの削除または再初期化(ploc_mtxを除く)

9973 【NGKI2080】

9974

9975 【機能】

9976

9977 mtxidで指定したミューテックス(対象ミューテックス)をロックする.具体的

9978 な振舞いは以下の通り.

9979

9980 対象ミューテックスがロックされていない場合には,自タスクによってロック

9981 されている状態になる【NGKI2081】.自タスクがロックしているミューテック

9982 スのリストに対象ミューテックスが追加され,必要な場合には自タスクの現在

9983 優先度が変更される【NGKI2082】.

9984

9985 対象ミューテックスが自タスク以外のタスクによってロックされている場合に

9986 は,自タスクはミューテックスのロック待ち状態となり,対象ミューテックス

9987 の待ち行列につながれる【NGKI2083】.

9988

9989 対象ミューテックスが自タスクによってロックされている場合には,E_ILUSEエ

9990 ラーとなる【NGKI2084】.また,対象ミューテックスが優先度上限ミューテッ

9991 クスで,その上限優先度より自タスクのベース優先度が高い場合にも,

9992 E_ILUSEエラーとなる【NGKI2085】.

9993 ----------------------------------------------------------------------

9994 unl_mtx ミューテックスのロック解除〔T〕【NGKI2086】

9995

9996 【C言語API】

9997 ER ercd = unl_mtx(ID mtxid)

9998

9999 【パラメータ】

10000 ID mt xid 対象ミューテックスのID番号

Page 201: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

201

10001

10002 【リターンパラメータ】

10003 ER ercd 正常終了(E_OK)またはエラーコード

10004

10005 【エラーコード】

10006 E_CTX コンテキストエラー

10007 ・非タスクコンテキストからの呼出し【NGKI2087】

10008 ・CPUロック状態からの呼出し【NGKI2088】

10009 E_ID 不正ID番号

10010 ・mtxidが有効範囲外【NGKI2089】

10011 E_NOEXS オブジェクト未登録

10012 ・対象ミューテックスが未登録〔D〕【NGKI2090】

10013 E_OACV オブジェクトアクセス違反

10014 ・対象ミューテックスに対する通常操作1が許可されていない〔P〕

10015 【NGKI3273】

10016 E_ILUSE サービスコール不正使用

10017 ・条件については機能の項を参照

10018

10019 【機能】

10020

10021 mtxidで指定したミューテックス(対象ミューテックス)をロック解除する.具

10022 体的な振舞いは以下の通り.

10023

10024 まず,自タスクがロックしているミューテックスのリストから対象ミューテッ

10025 クスが削除され,必要な場合には自タスクの現在優先度が変更される

10026 【NGKI2091】.

10027

10028 対象ミューテックスの待ち行列にタスクが存在する場合には,待ち行列の先頭

10029 のタスクが待ち解除される【NGKI2092】.対象ミューテックスは,待ち解除さ

10030 れたタスクによってロックされている状態になる【NGKI2093】.待ち解除され

10031 たタスクがロックしているミューテックスのリストに対象ミューテックスが追

10032 加され,必要な場合にはそのタスクの現在優先度が変更される【NGKI2094】.

10033 待ち解除されたタスクには,待ち状態となったサービスコールからE_OKが返る

10034 【NGKI2095】.

10035

10036 待ち行列にタスクが存在しない場合には,対象ミューテックスはロックされて

10037 いない状態になる【NGKI2096】.

10038

10039 対象ミューテックスが自タスクによってロックされていない場合には,

10040 E_ILUSEエラーとなる【NGKI2097】.

10041 ----------------------------------------------------------------------

10042 ini_mtx ミューテックスの再初期化〔T〕【NGKI2098】

10043

10044 【C言語API】

10045 ER ercd = ini_mtx(ID mtxid)

10046

10047 【パラメータ】

10048 ID mtxid 対象ミューテックスのID番号

10049

10050 【リターンパラメータ】

Page 202: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

202

10051 ER ercd 正常終了(E_OK)またはエラーコード

10052

10053 【エラーコード】

10054 E_CTX コンテキストエラー

10055 ・非タスクコンテキストからの呼出し【NGKI2099】

10056 ・CPUロック状態からの呼出し【NGKI2100】

10057 E_ID 不正ID番号

10058 ・mtxidが有効範囲外【NGKI2101】

10059 E_NOEXS オブジェクト未登録

10060 ・対象ミューテックスが未登録〔D〕【NGKI2102】

10061 E_OACV オブジェクトアクセス違反

10062 ・対象ミューテックスに対する管理操作が許可されていない〔P〕

10063 【NGKI2103】

10064

10065 【機能】

10066

10067 mtxidで指定したミューテックス(対象ミューテックス)を再初期化する.具体

10068 的な振舞いは以下の通り.

10069

10070 対象ミューテックスのロック状態は,ロックされていない状態に初期化される

10071 【NGKI2104】.対象ミューテックスをロックしているタスクがある場合には,

10072 そのタスクがロックしているミューテックスのリストから対象ミューテックス

10073 が削除され,必要な場合にはそのタスクの現在優先度が変更される

10074 【NGKI2105】.また,対象ミューテックスの待ち行列につながれたタスクは,

10075 待ち行列の先頭のタスクから順に待ち解除される【NGKI2106】.待ち解除され

10076 たタスクには,待ち状態となったサービスコールからE_DLTエラーが返る

10077 【NGKI2107】.

10078

10079 【使用上の注意】

10080

10081 対象ミューテックスをロックしているタスクには,ミューテックスが再初期化

10082 されたことが通知されず,そのミューテックスをロック解除する時点でエラー

10083 となる.これが不都合な場合には,ミューテックスをロックした状態で,ミュー

10084 テックスを再初期化すればよい.

10085

10086 ini_mtxにより複数のタスクが待ち解除される場合,サービスコールの処理時間

10087 およびカーネル内での割込み禁止時間が,待ち解除されるタスクの数に比例し

10088 て長くなる.特に,多くのタスクが待ち解除される場合,カーネル内での割込

10089 み禁止時間が長くなるため,注意が必要である.

10090

10091 ミューテックスを再初期化した場合に,アプリケーションとの整合性を保つの

10092 は,アプリケーションの責任である.

10093

10094 【μITRON4.0仕様との関係】

10095

10096 μITRON4.0仕様に定義されていないサービスコールである.

10097 ----------------------------------------------------------------------

10098 ref_mtx ミューテックスの状態参照〔T〕【NGKI2108】

10099

10100 【C言語API】

Page 203: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

203

10101 ER ercd = ref_mtx(ID mtxid, T_RMTX *pk_rmtx)

10102

10103 【パラメータ】

10104 ID mtxid 対象ミューテックスのID番号

10105 T_RMTX * pk_rmtx ミューテックスの現在状態を入れるパケットへ

10106 のポインタ

10107

10108 【リターンパラメータ】

10109 ER ercd 正常終了(E_OK)またはエラーコード

10110

10111 *ミューテックスの現在状態(パケットの内容)

10112 ID htskid ミューテックスをロックしているタスクのID番号

10113 ID wtskid ミューテックスの待ち行列の先頭のタスクのID

10114 番号

10115

10116 【エラーコード】

10117 E_CTX コンテキストエラー

10118 ・非タスクコンテキストからの呼出し【NGKI2109】

10119 ・CPUロック状態からの呼出し【NGKI2110】

10120 E_ID 不正ID番号

10121 ・mtxidが有効範囲外【NGKI2111】

10122 E_NOEXS オブジェクト未登録

10123 ・対象ミューテックスが未登録〔D〕【NGKI2112】

10124 E_OACV オブジェクトアクセス違反

10125 ・対象ミューテックスに対する参照操作が許可されていない〔P〕

10126 【NGKI2113】

10127 E_MACV メモリアクセス違反

10128 ・pk_rmtxが指すメモリ領域への書込みアクセスが許可されて

10129 いない〔P〕【NGKI2114】

10130

10131 【機能】

10132

10133 mtxidで指定したミューテックス(対象ミューテックス)の現在状態を参照する.

10134 参照した現在状態は,pk_rmtxで指定したパケットに返される.

10135

10136 対象ミューテックスがロックされていない場合,htskidにはTSK_NONE(=0)が

10137 返る【NGKI2115】.

10138

10139 対象ミューテックスの待ち行列にタスクが存在しない場合,wtskidには

10140 TSK_NONE(=0)が返る【NGKI2116】.

10141

10142 【使用上の注意】

10143

10144 ref_mtxはデバッグ時向けの機能であり,その他の目的に使用することは推奨し

10145 ない.これは,ref_mtxを呼び出し,対象ミューテックスの現在状態を参照した

10146 直後に割込みが発生した場合,ref_mtxから戻ってきた時には対象ミューテック

10147 スの状態が変化している可能性があるためである.

10148 ----------------------------------------------------------------------

10149

10150 4.4.7 メッセージバッファ

Page 204: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

204

10151

10152 メッセージバッファは,指定した長さのバイト列をメッセージとして,FIFO順

10153 で送受信するための同期・通信オブジェクトである.メッセージバッファは,

10154 メッセージバッファIDと呼ぶID番号によって識別する【NGKI3291】.

10155

10156 各メッセージバッファが持つ情報は次の通り【NGKI3292】.

10157

10158 ・メッセージバッファ属性

10159 ・最大メッセージサイズ

10160 ・メッセージバッファ管理領域

10161 ・送信待ち行列(メッセージバッファへの送信待ち状態のタスクのキュー)

10162 ・受信待ち行列(メッセージバッファからの受信待ち状態のタスクのキュー)

10163 ・アクセス許可ベクタ(保護機能対応カーネルの場合)

10164 ・属する保護ドメイン(保護機能対応カーネルの場合)

10165 ・属するクラス(マルチプロセッサ対応カーネルの場合)

10166

10167 メッセージバッファ管理領域は,メッセージバッファに送信されたメッセージ

10168 を,送信された順に格納しておくためのメモリ領域である.メッセージバッファ

10169 生成時の指定により,メッセージバッファ管理領域のサイズを0とすることがで

10170 きる【NGKI3293】.

10171

10172 保護機能対応カーネルにおいて,メッセージバッファ管理領域は,カーネルの

10173 用いるオブジェクト管理領域として扱われる【NGKI3294】.

10174

10175 送信待ち行列は,メッセージバッファに対してメッセージが送信できるまで待っ

10176 ている状態(メッセージバッファへの送信待ち状態)のタスクが,メッセージ

10177 を送信できる順序でつながれているキューである.また,受信待ち行列は,メッ

10178 セージバッファからメッセージが受信できるまで待っている状態(メッセージ

10179 バッファからの受信待ち状態)のタスクが,メッセージを受信できる順序でつ

10180 ながれているキューである.

10181

10182 メッセージバッファ属性には,次の属性を指定することができる【NGKI3295】.

10183

10184 TA_TPRI 0x01U 送信待ち行列をタスクの優先度順にする

10185

10186 TA_TPRIを指定しない場合,送信待ち行列はFIFO順になる【NGKI3296】.受信待

10187 ち行列は,FIFO順に固定されている【NGKI3297】.

10188

10189 メッセージバッファ機能に関連するカーネル構成マクロは次の通り.

10190

10191 TNUM_MBFID 登録できるメッセージバッファの数(動的生成対応でな

10192 いカーネルでは,静的APIによって登録されたメッセー

10193 ジバッファの数に一致)【NGKI3298】

10194

10195 【TOPPERS/ASPカーネルにおける規定】

10196

10197 ASPカーネルでは,メッセージバッファ機能をサポートしない【ASPS0202】.た

10198 だし,メッセージバッファ機能拡張パッケージを用いると,メッセージバッファ

10199 機能を追加することができる【ASPS0203】.

10200

Page 205: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

205

10201 【TOPPERS/FMPカーネルにおける規定】

10202

10203 FMPカーネルでは,メッセージバッファ機能をサポートしない【FMPS0167】.

10204

10205 【TOPPERS/HRP2カーネルにおける規定】

10206

10207 HRP2カーネルでは,メッセージバッファ機能をサポートしない【HRPS0168】.

10208 ただし,メッセージバッファ機能拡張パッケージを用いると,メッセージバッ

10209 ファ機能を追加することができる【HRPS0169】.

10210

10211 【μITRON4.0仕様との関係】

10212

10213 TNUM_MBFIDは,μITRON4.0仕様に規定されていないカーネル構成マクロである.

10214 ----------------------------------------------------------------------

10215 CRE_MBF メッセージバッファの生成〔S〕【NGKI3299】

10216 acre_mbf メッセージバッファの生成〔TD〕【NGKI3300】

10217

10218 【静的API】

10219 CRE_MBF(ID mbfid, { ATR mbfatr, uint_t maxmsz, SIZE mbfsz , void *mbfmb })

10220

10221 【C言語API】

10222 ER_ID mbfid = acre_mbf(const T_CMBF *pk_cmbf)

10223

10224 【パラメータ】

10225 ID mbfid 生成するメッセージバッファのID番号(CRE_MBF

10226 の場合)

10227 T_CMBF * pk_cmbf メッセージバッファの生成情報を入れたパケッ

10228 トへのポインタ(静的APIを除く)

10229

10230 *メッセージバッファの生成情報(パケットの内容)

10231 ATR mbfatr メッセージバッファ属性

10232 uint_t maxmsz メッセージバッファの最大メッセージサイズ(バ

10233 イト数)

10234 SIZE mbfsz メッセージバッファ管理領域のサイズ(バイト数)

10235 void * mbfmb メッセージバッファ管理領域の先頭番地

10236

10237 【リターンパラメータ】

10238 ER_ID mbfid 生成されたメッセージバッファのID番号(正の

10239 値)またはエラーコード

10240

10241 【エラーコード】

10242 E_CTX コンテキストエラー

10243 ・非タスクコンテキストからの呼出し〔s〕【NGKI3301】

10244 ・CPUロック状態からの呼出し〔s〕【NGKI3302】

10245 E_RSATR 予約属性

10246 ・mbfatrが無効【NGKI3303】

10247 ・属する保護ドメインの指定が有効範囲外〔sP〕【NGKI3304】

10248 ・属するクラスの指定が有効範囲外〔sM〕【NGKI3305】

10249 ・クラスの囲みの中に記述されていない〔SM〕【NGKI3306】

10250 E_NOSPT 未サポート機能

Page 206: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

206

10251 ・条件については各カーネルにおける規定の項を参照

10252 E_PAR パラメータエラー

10253 ・maxmszが0以下【NGKI3307】

10254 ・mbfszが負の値〔S〕【NGKI3308】

10255 ・その他の条件については機能の項を参照

10256 E_OACV オブジェクトアクセス違反

10257 ・システム状態に対する管理操作が許可されていない〔sP〕

10258 【NGKI3309】

10259 E_MACV メモリアクセス違反

10260 ・pk_cmbfが指すメモリ領域への読出しアクセスが許可されて

10261 いない〔sP〕【NGKI3310】

10262 E_NOID ID番号不足

10263 ・割り付けられるメッセージバッファIDがない〔sD〕【NGKI3311】

10264 E_NOMEM メモリ不足

10265 ・メッセージバッファ管理領域が確保できない【NGKI3312】

10266 E_OBJ オブジェクト状態エラー

10267 ・mbfidで指定したメッセージバッファが登録済み(CRE_MBF

10268 の場合)【NGKI3313】

10269 ・その他の条件については機能の項を参照

10270

10271 【機能】

10272

10273 各パラメータで指定したメッセージバッファ生成情報に従って,メッセージバッ

10274 ファを生成する.mbfszとmbfmbからメッセージバッファ管理領域が設定され,

10275 格納されているメッセージがない状態に初期化される【NGKI3314】.また,送

10276 信待ち行列と受信待ち行列は,空の状態に初期化される【NGKI3315】.

10277

10278 静的APIにおいては,mbfidはオブジェクト識別名,mbfatr,maxmsz,mbfszは整

10279 数定数式パラメータ,mbfmbは一般定数式パラメータである【NGKI3316】.コン

10280 フィギュレータは,静的APIのメモリ不足(E_NOMEM)エラーを検出することが

10281 できない【NGKI3317】.

10282

10283 mbfmbをNULLとした場合,mbfszで指定したサイズのメッセージバッファ管理領

10284 域が,コンフィギュレータまたはカーネルにより確保される【NGKI3318】.

10285 mbfszにターゲット定義の制約に合致しないサイズを指定した時には,ターゲッ

10286 ト定義の制約に合致するように大きい方に丸めたサイズで確保される

10287 【NGKI3319】.

10288

10289 〔mbfmbにNULL以外を指定した場合〕

10290

10291 mbfmbにNULL以外を指定した場合,mbfmbとmbfszで指定したメッセージバッファ

10292 管理領域は,アプリケーションで確保しておく必要がある【NGKI3320】.メッ

10293 セージバッファ管理領域をアプリケーションで確保するために,次のマクロを

10294 用意している【NGKI3321】.

10295

10296 TSZ_MBFMB(msgcnt, msgsz) msgsz で指定したサイズのメッセージを,

10297 msgcnt で指定した数だけ格納できるメッセー

10298 ジバッファ管理領域のサイズ(バイト数)

10299 TCNT_MBFMB( msgcnt, msgsz) msgszで指定したサイズのメッセージを,

10300 msgcnt で指定した数だけ格納できるメッセー

Page 207: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

207

10301 ジバッファ管理領域を確保するために必要

10302 なMB_T型の配列の要素数

10303

10304 これらを用いてメッセージバッファ管理領域を確保する方法は次の通り

10305 【NGKI3322】.

10306

10307 MB_T <メッセージバッファ管理領域の変数名>[TCNT_MBFMB(msgcnt, msgsz)];

10308

10309 この時,mbfszにはTSZ_MBFMB(msgcnt, msgsz)を,mbfmbには<メッセージバッファ

10310 管理領域の変数名>を指定する【NGKI3323】.

10311

10312 この方法に従わず,mbfmbとmbfszにターゲット定義の制約に合致しない先頭番

10313 地やサイズを指定した時には,E_PARエラーとなる【NGKI3324】.また,保護機

10314 能対応カーネルにおいて,mbfmbとmbfszで指定したメッセージバッファ管理領

10315 域がカーネル専用のメモリオブジェクトに含まれない場合,E_OBJエラーとなる

10316 【NGKI3325】.

10317

10318 なお,TSZ_MBFMBは,mbfmbにNULLを指定した場合にも,メッセージバッファ管

10319 理領域のサイズを決めるために用いることができる.

10320

10321 【TOPPERS/ASPカーネルにおける規定】

10322

10323 ASPカーネルのメッセージバッファ機能拡張パッケージでは,CRE_MBFのみをサ

10324 ポートする【ASPS0204】.また,mbfmbにはNULLのみを指定することができる.

10325 NULL以外を指定した場合には,E_NOSPTエラーとなる【ASPS0205】.

10326

10327 【TOPPERS/HRP2カーネルにおける規定】

10328

10329 HRP2カーネルのメッセージバッファ機能拡張パッケージでは,CRE_MBFのみをサ

10330 ポートする【HRPS0170】.また,mbfmbにはNULLのみを指定することができる.

10331 NULL以外を指定した場合には,E_NOSPTエラーとなる【HRPS0171】.

10332

10333 【μITRON4.0仕様との関係】

10334

10335 μITRON4.0/PX仕様にあわせて,メッセージバッファ生成情報の最後のパラメー

10336 タを,mbf(メッセージバッファ領域の先頭番地)から,mbfmb(メッセージバッ

10337 ファ管理領域の先頭番地)に改名した.また,TSZ_MBFをTSZ_MBFMBに改名した.

10338

10339 TCNT_MBFMBを新設し,メッセージバッファ管理領域をアプリケーションで確保

10340 する方法を規定した.

10341 ----------------------------------------------------------------------

10342 AID_MBF 割付け可能なメッセージバッファIDの数の指定〔SD〕【NGKI3326】

10343

10344 【静的API】

10345 AID_MBF(uint_t nombf)

10346

10347 【パラメータ】

10348 uint_t nombf 割付け可能なメッセージバッファIDの数

10349

10350 【エラーコード】

Page 208: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

208

10351 E_RSATR 予約属性

10352 ・クラスの囲みの中に記述されていない〔M〕【NGKI3327】

10353 E_PAR パラメータエラー

10354 ・nombfが負の値【NGKI3328】

10355

10356 【機能】

10357

10358 nombfで指定した数のメッセージバッファIDを,メッセージバッファを生成する

10359 サービスコールによって割付け可能なメッセージバッファIDとして確保する

10360 【NGKI3329】.

10361

10362 nombfは整数定数式パラメータである【NGKI3330】.

10363 ----------------------------------------------------------------------

10364 SAC_MBF メッセージバッファのアクセス許可ベクタの設定〔SP〕【NGKI3331】

10365 sac_mbf メッセージバッファのアクセス許可ベクタの設定〔TPD〕【NGKI3332】

10366

10367 【静的API】

10368 SAC_MBF(ID mbfid, { ACPTN acptn1, ACPTN acptn2,

10369 ACPTN acptn3, ACPTN acptn4 })

10370

10371 【C言語API】

10372 ER ercd = sac_mbf(ID mbfid, const ACVCT *p_acvct)

10373

10374 【パラメータ】

10375 ID mbfid 対象メッセージバッファのID番号

10376 ACVCT * p_acvct アクセス許可ベクタを入れたパケットへのポ

10377 インタ(静的APIを除く)

10378

10379 *アクセス許可ベクタ(パケットの内容)

10380 ACPTN acptn1 通常操作1のアクセス許可パターン

10381 ACPTN acptn2 通常操作2のアクセス許可パターン

10382 ACPTN acptn3 管理操作のアクセス許可パターン

10383 ACPTN acptn4 参照操作のアクセス許可パターン

10384

10385 【リターンパラメータ】

10386 ER ercd 正常終了(E_OK)またはエラーコード

10387

10388 【エラーコード】

10389 E_CTX コンテキストエラー

10390 ・非タスクコンテキストからの呼出し〔s〕【NGKI3333】

10391 ・CPUロック状態からの呼出し〔s〕【NGKI3334】

10392 E_ID 不正ID番号

10393 ・mbfidが有効範囲外〔s〕【NGKI3335】

10394 E_RSATR 予約属性

10395 ・対象メッセージバッファが属する保護ドメインの囲みの中

10396 に記述されていない〔S〕【NGKI3336】

10397 ・対象メッセージバッファが属するクラスの囲みの中に記述

10398 されていない〔SM〕【NGKI3337】

10399 E_NOEXS オブジェクト未登録

10400 ・対象メッセージバッファが未登録【NGKI3338】

Page 209: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

209

10401 E_OACV オブジェクトアクセス違反

10402 ・対象メッセージバッファに対する管理操作が許可されてい

10403 ない〔s〕【NGKI3339】

10404 E_MACV メモリアクセス違反

10405 ・p_acvctが指すメモリ領域への読出しアクセスが許可されて

10406 いない〔s〕【NGKI3340】

10407 E_OBJ オブジェクト状態エラー

10408 ・対象メッセージバッファは静的APIで生成された〔s〕【NGKI3341】

10409 ・対象メッセージバッファに対してアクセス許可ベクタが設

10410 定済み〔S〕【NGKI3342】

10411

10412 【機能】

10413

10414 mbfidで指定したメッセージバッファ(対象メッセージバッファ)のアクセス許

10415 可ベクタ(4つのアクセス許可パターンの組)を,各パラメータで指定した値に

10416 設定する【NGKI3343】.

10417

10418 静的APIにおいては,mbfidはオブジェクト識別名,acptn1~acptn4は整数定数

10419 式パラメータである【NGKI3344】.

10420

10421 【TOPPERS/ASPカーネルにおける規定】

10422

10423 ASPカーネルのメッセージバッファ機能拡張パッケージでは,SAC_MBF,

10424 sac_mbfをサポートしない【ASPS0206】.

10425

10426 【TOPPERS/HRP2カーネルにおける規定】

10427

10428 HRP2カーネルのメッセージバッファ機能拡張パッケージでは,SAC_MBFのみをサ

10429 ポートする【HRPS0172】.

10430 ----------------------------------------------------------------------

10431 del_mbf メッセージバッファの削除〔TD〕【NGKI3345】

10432

10433 【C言語API】

10434 ER ercd = del_mbf(ID mbfid)

10435

10436 【パラメータ】

10437 ID mbfid 対象メッセージバッファのID番号

10438

10439 【リターンパラメータ】

10440 ER ercd 正常終了(E_OK)またはエラーコード

10441

10442 【エラーコード】

10443 E_CTX コンテキストエラー

10444 ・非タスクコンテキストからの呼出し【NGKI3346】

10445 ・CPUロック状態からの呼出し【NGKI3347】

10446 E_ID 不正ID番号

10447 ・mbfidが有効範囲外【NGKI3348】

10448 E_NOEXS オブジェクト未登録

10449 ・対象メッセージバッファが未登録【NGKI3349】

10450 E_OACV オブジェクトアクセス違反

Page 210: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

210

10451 ・対象メッセージバッファに対する管理操作が許可されてい

10452 ない〔P〕【NGKI3350】

10453 E_OBJ オブジェクト状態エラー

10454 ・対象メッセージバッファは静的APIで生成された【NGKI3351】

10455

10456 【機能】

10457

10458 mbfidで指定したメッセージバッファ(対象メッセージバッファ)を削除する.

10459 具体的な振舞いは以下の通り.

10460

10461 対象メッセージバッファの登録が解除され,そのメッセージバッファIDが未使

10462 用の状態に戻される【NGKI3352】.また,対象メッセージバッファの送信待ち

10463 行列と受信待ち行列につながれたタスクは,それぞれの待ち行列の先頭のタス

10464 クから順に待ち解除される【NGKI3353】.待ち解除されたタスクには,待ち状

10465 態となったサービスコールからE_DLTエラーが返る【NGKI3354】.

10466

10467 メッセージバッファの生成時に,メッセージバッファ管理領域がカーネルによっ

10468 て確保された場合は,そのメモリ領域が解放される【NGKI3355】.

10469

10470 【補足説明】

10471

10472 送信待ち行列と受信待ち行列の両方にタスクがつながれていることはないため,

10473 別の待ち行列で待っていたタスクの間の待ち解除の順序は,規定する必要がな

10474 い.

10475

10476 【使用上の注意】

10477

10478 del_mbfにより複数のタスクが待ち解除される場合,サービスコールの処理時間

10479 およびカーネル内での割込み禁止時間が,待ち解除されるタスクの数に比例し

10480 て長くなる.特に,多くのタスクが待ち解除される場合,カーネル内での割込

10481 み禁止時間が長くなるため,注意が必要である.

10482

10483 【TOPPERS/ASPカーネルにおける規定】

10484

10485 ASPカーネルのメッセージバッファ機能拡張パッケージでは,del_mbfをサポー

10486 トしない【ASPS0207】.

10487

10488 【TOPPERS/HRP2カーネルにおける規定】

10489

10490 HRP2カーネルのメッセージバッファ機能拡張パッケージでは,del_mbfをサポー

10491 トしない【HRPS0173】.

10492 ----------------------------------------------------------------------

10493 snd_mbf メッセージバッファへの送信〔T〕【NGKI3356】

10494 psnd_mbf メッセージバッファへの送信(ポーリング)〔T〕【NGKI3357】

10495 tsnd_mbf メッセージバッファへの送信(タイムアウト付き)〔T〕【NGKI3358】

10496

10497 【C言語API】

10498 ER ercd = snd_mbf(ID mbfid, const void *msg, uint_t msgsz)

10499 ER ercd = psnd_mbf(ID mbfid, const void *msg, uint_t msgsz)

10500 ER ercd = tsnd_mbf(ID mbfid, const void *msg, uint _t msgsz, TMO tmout)

Page 211: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

211

10501

10502 【パラメータ】

10503 ID mbfid 対象メッセージバッファのID番号

10504 void * msg 送信メッセージの先頭番地

10505 uint_t msgsz 送信メッセージのサイズ(バイト数)

10506 TMO tmout タイムアウト時間(tsnd_mbfの場合)

10507

10508 【リターンパラメータ】

10509 ER ercd 正常終了(E_OK)またはエラーコード

10510

10511 【エラーコード】

10512 E_CTX コンテキストエラー

10513 ・非タスクコンテキストからの呼出し【NGKI3359】

10514 ・CPUロック状態からの呼出し【NGKI3360】

10515 ・ディスパッチ保留状態からの呼出し(psnd_mbfを除く)

10516 【NGKI3361】

10517 E_NOSPT 未サポート機能

10518 ・制約タスクからの呼出し(psnd_mbfを除く)【NGKI3362】

10519 E_ID 不正ID番号

10520 ・mbfidが有効範囲外【NGKI3363】

10521 E_PAR パラメータエラー

10522 ・msgszが有効範囲(0より大きく対象メッセージバッファの

10523 最大メッセージサイズ以下)外【NGKI3364】

10524 ・tmoutが無効(tsnd_mbfの場合)【NGKI3365】

10525 E_NOEXS オブジェクト未登録

10526 ・対象メッセージバッファが未登録〔D〕【NGKI3366】

10527 E_OACV オブジェクトアクセス違反

10528 ・対象メッセージバッファに対する通常操作1が許可されて

10529 いない〔P〕【NGKI3367】

10530 E_MACV メモリアクセス違反

10531 ・msgとmsgszが指すメモリ領域への読出しアクセスが許可さ

10532 れていない〔P〕【NGKI3368】

10533 E_TMOUT ポーリング失敗またはタイムアウト(snd_mbfを除く)【NGKI3369】

10534 E_RLWAI 待ち禁止状態または待ち状態の強制解除(psnd_mbfを除く)

10535 【NGKI3370】

10536 E_DLT 待ちオブジェクトの削除または再初期化(psnd_mbfを除く)

10537 【NGKI3371】

10538

10539 【機能】

10540

10541 mbfidで指定したメッセージバッファ(対象メッセージバッファ)に,msgと

10542 msgszで指定したメッセージ(送信メッセージ)を送信する.具体的な振舞いは

10543 以下の通り.

10544

10545 対象メッセージバッファの受信待ち行列にタスクが存在する場合には,受信待

10546 ち行列の先頭のタスクが,送信メッセージを受信し,待ち解除される

10547 【NGKI3372】.待ち解除されたタスクには,待ち状態となったサービスコール

10548 から,受信したメッセージのサイズが返る【NGKI3373】.

10549

10550 対象メッセージバッファの受信待ち行列にタスクが存在しない場合で,送信待

Page 212: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

212

10551 ち行列に自タスクより優先してメッセージを送信できるタスクが存在せず,メッ

10552 セージバッファ管理領域に送信メッセージを格納するスペースがある場合には,

10553 送信メッセージが,FIFO順でメッセージバッファ管理領域に格納される

10554 【NGKI3374】.ここで,送信待ち行列に自タスクより優先してメッセージを送

10555 信できるタスクが存在するとは,送信待ち行列がFIFO順の場合には送信待ち行

10556 列に何らかのタスクが存在すること,タスクの優先度順の場合には自タスクと

10557 優先度が同じかより高いタスクが存在することを意味する.

10558

10559 対象メッセージバッファの受信待ち行列にタスクが存在しない場合で,送信待

10560 ち行列に自タスクより優先してメッセージを送信できるタスクが存在するか,

10561 メッセージバッファ管理領域に送信メッセージを格納するスペースがない場合

10562 には,自タスクはメッセージバッファへの送信待ち状態となり,対象メッセー

10563 ジバッファの送信待ち行列につながれる【NGKI3375】.

10564

10565 メッセージバッファの送信待ち行列の先頭につながれているタスクが,

10566 ter_tskにより強制終了した場合や,rel_wai/irel_waiやタイムアウトにより

10567 待ち解除された場合,新たに送信待ち行列の先頭になったタスクの送信メッセー

10568 ジを,メッセージバッファ管理領域に格納できる可能性がある.そのため,こ

10569 れらの場合には,メッセージバッファからの受信によりメッセージバッファ管

10570 理領域に空きができた時の処理[NGKI3393][NGKI3394][NGKI3395]と同じ

10571 処理が行われる【NGKI3419】.さらに,送信待ち行列がタスクの優先度順の時

10572 には,chg_priやミューテックスの操作によりタスクの優先度が変化し,送信待

10573 ち行列の先頭につながれているタスクが変わった場合にも,同じ処理が行われ

10574 る【NGKI3420】.

10575

10576 【使用上の注意】

10577

10578 送信待ち行列の先頭につながれているタスクの強制終了,待ち解除,優先度変

10579 更に伴う処理で,送信待ち行列につながれていたタスクが複数待ち解除される

10580 場合がある.この時,サービスコールの処理時間およびカーネル内での割込み

10581 禁止時間が,待ち解除されるタスクの数に比例して長くなる.特に,多くのタ

10582 スクが待ち解除される場合,カーネル内での割込み禁止時間が長くなるため,

10583 注意が必要である.

10584 ----------------------------------------------------------------------

10585 rcv_mbf メッセージバッファからの受信〔T〕【NGKI3376】

10586 prcv_mbf メッセージバッファからの受信(ポーリング)〔T〕【NGKI3377】

10587 trcv_mbf メッセージバッファからの受信(タイムアウト付き)〔T〕【NGKI3378】

10588

10589 【C言語API】

10590 ER_UINT msgsz = rcv_mbf(ID mbfid, void *msg)

10591 ER_UINT msgsz = prcv_mbf(ID mbfid, void *msg)

10592 ER_UINT msgsz = trcv_mbf(ID mbfid, void *msg, TMO tmout)

10593

10594 【パラメータ】

10595 ID mbfid 対象メッセージバッファのID番号

10596 void * msg 受信メッセージを入れるメモリ領域の先頭番地

10597 TMO tmout タイムアウト時間(trcv_mbfの場合)

10598

10599 【リターンパラメータ】

10600 ER_UINT msgsz 受信メッセージサイズ(正の値)またはエラー

Page 213: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

213

10601 コード

10602

10603 【エラーコード】

10604 E_CTX コンテキストエラー

10605 ・非タスクコンテキストからの呼出し【NGKI3379】

10606 ・CPUロック状態からの呼出し【NGKI3380】

10607 ・ディスパッチ保留状態からの呼出し(prcv_mbfを除く)

10608 【NGKI3381】

10609 E_NOSPT 未サポート機能

10610 ・制約タスクからの呼出し(prcv_mbfを除く)【NGKI3382】

10611 E_ID 不正ID番号

10612 ・mbfidが有効範囲外【NGKI3383】

10613 E_PAR パラメータエラー

10614 ・tmoutが無効(trcv_mbfの場合)【NGKI3384】

10615 E_NOEXS オブジェクト未登録

10616 ・対象メッセージバッファが未登録〔D〕【NGKI3385】

10617 E_OACV オブジェクトアクセス違反

10618 ・対象メッセージバッファに対する通常操作2が許可されてい

10619 ない〔P〕【NGKI3386】

10620 E_MACV メモリアクセス違反

10621 ・msgを先頭番地とし,対象メッセージバッファの最大メッセー

10622 ジサイズ分のメモリ領域への書込みアクセスが許可されて

10623 いない〔P〕【NGKI3387】

10624 E_TMOUT ポーリング失敗またはタイムアウト(rcv_mbfを除く)【NGKI3388】

10625 E_RLWAI 待ち禁止状態または待ち状態の強制解除(prcv_mbfを除く)

10626 【NGKI3389】

10627 E_DLT 待ちオブジェクトの削除または再初期化(prcv_mbfを除く)

10628 【NGKI3390】

10629

10630 【機能】

10631

10632 mbfidで指定したメッセージバッファ(対象メッセージバッファ)からメッセー

10633 ジを受信する.メッセージの受信に成功した場合,受信したメッセージはmsgを

10634 先頭番地とするメモリ領域に格納され,そのサイズはサービスコールの返値と

10635 して返される【NGKI3391】.具体的な振舞いは以下の通り.

10636

10637 対象メッセージバッファのメッセージバッファ管理領域にメッセージが格納さ

10638 れている場合には,メッセージバッファ管理領域の先頭に格納されたメッセー

10639 ジを受信する【NGKI3392】.また,送信待ち行列にタスクが存在し,メッセー

10640 ジバッファ管理領域に送信待ち行列の先頭のタスクの送信メッセージを格納す

10641 るスペースがある場合には,送信メッセージがFIFO順でデータキュー管理領域

10642 に格納され,そのタスクは待ち解除される【NGKI3393】.待ち解除されたタス

10643 クには,待ち状態となったサービスコールからE_OKが返る【NGKI3394】.この

10644 処理を,送信待ち行列にタスクが存在しなくなるか,メッセージバッファ管理

10645 領域に送信待ち行列の先頭のタスクの送信メッセージを格納するスペースがな

10646 くなるまで繰り返す【NGKI3395】.

10647

10648 対象メッセージバッファのメッセージバッファ管理領域にメッセージが格納さ

10649 れておらず,送信待ち行列にタスクが存在する場合には,送信待ち行列の先頭

10650 のタスクの送信メッセージを受信する【NGKI3396】.送信待ち行列の先頭のタ

Page 214: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

214

10651 スクは,待ち解除される【NGKI3397】.待ち解除されたタスクには,待ち状態

10652 となったサービスコールからE_OKが返る【NGKI3398】.

10653

10654 対象メッセージバッファのメッセージバッファ管理領域にメッセージが格納さ

10655 れておらず,送信待ち行列にタスクが存在しない場合には,自タスクはメッセー

10656 ジバッファからの受信待ち状態となり,対象メッセージバッファの受信待ち行

10657 列につながれる【NGKI3399】.

10658

10659 【使用上の注意】

10660

10661 メッセージバッファ管理領域に格納されたメッセージを受信した結果,送信待

10662 ち行列につながれていたタスクが複数待ち解除される場合がある.この時,サー

10663 ビスコールの処理時間およびカーネル内での割込み禁止時間が,待ち解除され

10664 るタスクの数に比例して長くなる.特に,多くのタスクが待ち解除される場合,

10665 カーネル内での割込み禁止時間が長くなるため,注意が必要である.

10666 ----------------------------------------------------------------------

10667 ini_mbf メッセージバッファの再初期化〔T〕【NGKI3400】

10668

10669 【C言語API】

10670 ER ercd = ini_mbf(ID mbfid)

10671

10672 【パラメータ】

10673 ID mbfid 対象メッセージバッファのID番号

10674

10675 【リターンパラメータ】

10676 ER ercd 正常終了(E_OK)またはエラーコード

10677

10678 【エラーコード】

10679 E_CTX コンテキストエラー

10680 ・非タスクコンテキストからの呼出し【NGKI3401】

10681 ・CPUロック状態からの呼出し【NGKI3402】

10682 E_ID 不正ID番号

10683 ・mbfidが有効範囲外【NGKI3403】

10684 E_NOEXS オブジェクト未登録

10685 ・対象メッセージバッファが未登録〔D〕【NGKI3404】

10686 E_OACV オブジェクトアクセス違反

10687 ・対象メッセージバッファに対する管理操作が許可されてい

10688 ない〔P〕【NGKI3405】

10689

10690 【機能】

10691

10692 mbfidで指定したメッセージバッファ(対象メッセージバッファ)を再初期化す

10693 る.具体的な振舞いは以下の通り.

10694

10695 対象メッセージバッファのメッセージバッファ管理領域は,格納されているメッ

10696 セージがない状態に初期化される【NGKI3406】.また,対象メッセージバッファ

10697 の送信待ち行列と受信待ち行列につながれたタスクは,それぞれの待ち行列の

10698 先頭のタスクから順に待ち解除される【NGKI3407】.待ち解除されたタスクに

10699 は,待ち状態となったサービスコールからE_DLTエラーが返る【NGKI3408】.

10700

Page 215: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

215

10701 【補足説明】

10702

10703 送信待ち行列と受信待ち行列の両方にタスクがつながれていることはないため,

10704 別の待ち行列で待っていたタスクの間の待ち解除の順序は,規定する必要がな

10705 い.

10706

10707 【使用上の注意】

10708

10709 ini_mbfにより複数のタスクが待ち解除される場合,サービスコールの処理時間

10710 およびカーネル内での割込み禁止時間が,待ち解除されるタスクの数に比例し

10711 て長くなる.特に,多くのタスクが待ち解除される場合,カーネル内での割込

10712 み禁止時間が長くなるため,注意が必要である.

10713

10714 メッセージバッファを再初期化した場合に,アプリケーションとの整合性を保

10715 つのは,アプリケーションの責任である.

10716

10717 【μITRON4.0仕様との関係】

10718

10719 μITRON4.0仕様に定義されていないサービスコールである.

10720 ----------------------------------------------------------------------

10721 ref_mbf メッセージバッファの状態参照〔T〕【NGKI3409】

10722

10723 【C言語API】

10724 ER ercd = ref_mbf(ID mbfid, T_RMBF *pk_rmbf)

10725

10726 【パラメータ】

10727 ID mbfid 対象メッセージバッファのID番号

10728 T_RMBF * pk_rmbf メッセージバッファの現在状態を入れるパケッ

10729 トへのポインタ

10730

10731 【リターンパラメータ】

10732 ER ercd 正常終了(E_OK)またはエラーコード

10733

10734 *メッセージバッファの現在状態(パケットの内容)

10735 ID stskid メッセージバッファの送信待ち行列の先頭のタ

10736 スクのID番号

10737 ID rtskid メッセージバッファの受信待ち行列の先頭のタ

10738 スクのID番号

10739 uint_t smbfcnt メッセージバッファ管理領域に格納されている

10740 メッセージの数

10741 SIZE fmbfsz メッセージバッファ管理領域中の空き領域のサ

10742 イズ

10743

10744 【エラーコード】

10745 E_CTX コンテキストエラー

10746 ・非タスクコンテキストからの呼出し【NGKI3410】

10747 ・CPUロック状態からの呼出し【NGKI3411】

10748 E_ID 不正ID番号

10749 ・mbfidが有効範囲外【NGKI3412】

10750 E_NOEXS オブジェクト未登録

Page 216: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

216

10751 ・対象メッセージバッファが未登録〔D〕【NGKI3413】

10752 E_OACV オブジェクトアクセス違反

10753 ・対象メッセージバッファに対する参照操作が許可されてい

10754 ない〔P〕【NGKI3414】

10755 E_MACV メモリアクセス違反

10756 ・pk_rmbfが指すメモリ領域への書込みアクセスが許可されて

10757 いない〔P〕【NGKI3415】

10758

10759 【機能】

10760

10761 mbfidで指定したメッセージバッファ(対象メッセージバッファ)の現在状態を

10762 参照する.参照した現在状態は,pk_rmbfで指定したパケットに返される

10763 【NGKI3416】.

10764

10765 対象メッセージバッファの送信待ち行列にタスクが存在しない場合,stskidには

10766 TSK_NONE(=0)が返る【NGKI3417】.また,受信待ち行列にタスクが存在しな

10767 い場合,rtskidにはTSK_NONE(=0)が返る【NGKI3418】.

10768

10769 【使用上の注意】

10770

10771 ref_mbfはデバッグ時向けの機能であり,その他の目的に使用することは推奨し

10772 ない.これは,ref_mbfを呼び出し,対象メッセージバッファの現在状態を参照

10773 した直後に割込みが発生した場合,ref_mbfから戻ってきた時には対象メッセー

10774 ジバッファの状態が変化している可能性があるためである.

10775 ----------------------------------------------------------------------

10776

10777 4.4.8 スピンロック

10778

10779 スピンロックは,マルチプロセッサ対応カーネルにおいて,割込みのマスクと

10780 プロセッサ間ロックの取得により,排他制御を行うための同期・通信オブジェ

10781 クトである.スピンロックは,スピンロックIDと呼ぶID番号によって識別する

10782 【NGKI2117】.

10783

10784 プロセッサ間ロックを取得している間は,CPUロック状態にすることですべての

10785 カーネル管理の割込みがマスクされ,ディスパッチが保留される【NGKI2118】.

10786 ロックが他のプロセッサに取得されている場合には,ロックが取得できるまで

10787 ループによって待つ【NGKI2119】.ロックの取得を待つ間は,CPUロック解除状

10788 態であり,割込みはマスクされない【NGKI2120】.プロセッサ間ロックを取得

10789 し,CPUロック状態に遷移することを,スピンロックを取得するという.また,

10790 プロセッサ間ロックを返却し,CPUロック状態を解除することを,スピンロック

10791 を返却するという.

10792

10793 タスクが取得したスピンロックを返却せずに終了した場合や,タスク例外処理

10794 ルーチン,割込みハンドラ,割込みサービスルーチン,タイムイベントハンド

10795 ラが取得したスピンロックを返却せずにリターンした場合には,カーネルによっ

10796 てスピンロックが返却される【NGKI2121】.また,スピンロックを取得してい

10797 ない状態で発生したCPU例外によって呼び出されたCPU例外ハンドラが,取得し

10798 たスピンロックを返却せずにリターンした場合には,カーネルによってスピン

10799 ロックが返却される【NGKI2122】.一方,拡張サービスコールからのリターン

10800 では,スピンロックは返却されない【NGKI2123】.

Page 217: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

217

10801

10802 各スピンロックが持つ情報は次の通り【NGKI2124】.

10803

10804 ・スピンロック属性

10805 ・ロック状態(取得されている状態と取得されていない状態)

10806 ・アクセス許可ベクタ(保護機能対応カーネルの場合)

10807 ・属する保護ドメイン(保護機能対応カーネルの場合)

10808 ・属するクラス

10809

10810 スピンロック属性に指定できる属性はない【NGKI2125】.そのためスピンロッ

10811 ク属性には,TA_NULLを指定しなければならない【NGKI2126】.

10812

10813 スピンロック機能に関連するカーネル構成マクロは次の通り.

10814

10815 TNUM_SPNID 登録できるスピンロックの数(動的生成対応でないカー

10816 ネルでは,静的APIによって登録されたスピンロックの数

10817 に一致)【NGKI2127】

10818

10819 【補足説明】

10820

10821 CPUロック状態では,スピンロックを取得するサービスコールを呼び出すことが

10822 できないため,スピンロックを取得しているプロセッサが,さらにスピンロッ

10823 クを取得することはできない.そのため,1つの処理単位が,複数のスピンロッ

10824 クを取得した状態になることはできない.

10825

10826 スピンロックを取得した状態でCPU例外が発生した場合,起動されるCPU例外ハ

10827 ンドラはカーネル管理外のCPU例外ハンドラであり(xsns_dpn,xsns_xpnとも

10828 trueを返す),CPU例外ハンドラ中でiunl_spnを呼び出してスピンロックを返却

10829 しようとした場合の動作は保証されない.保証されないにも関わらずiunl_spn

10830 を呼び出した場合には,CPU例外ハンドラからのリターン時に元の状態に戻らな

10831 い.これは,CPUロック状態の扱いと一貫していないため,注意が必要である.

10832

10833 【TOPPERS/ASPカーネルにおける規定】

10834

10835 ASPカーネルでは,スピンロック機能をサポートしない【ASPS0163】.

10836

10837 【TOPPERS/FMPカーネルにおける規定】

10838

10839 FMPカーネルでは,スピンロック機能をサポートする【FMPS0138】.

10840

10841 【TOPPERS/HRP2カーネルにおける規定】

10842

10843 HRP2カーネルでは,スピンロック機能をサポートしない【HRPS0135】.

10844

10845 【μITRON4.0仕様との関係】

10846

10847 スピンロック機能は,μITRON4.0仕様に定義されていない機能である.

10848 ----------------------------------------------------------------------

10849 CRE_SPN スピンロックの生成〔SM〕【NGKI2128】

10850 acre_spn スピンロックの生成〔TMD〕【NGKI2129】

Page 218: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

218

10851

10852 【静的API】

10853 CRE_SPN(ID spnid, { ATR spnatr })

10854

10855 【C言語API】

10856 ER_ID spnid = acre_spn(const T_CSPN *pk_cspn)

10857

10858 【パラメータ】

10859 ID spnid 生成するスピンロックのID番号(CRE_SPNの場合)

10860 T_CSPN * pk_cspn スピンロックの生成情報を入れたパケットへの

10861 ポインタ(静的APIを除く)

10862

10863 *スピンロックの生成情報(パケットの内容)

10864 ATR spnatr スピンロック属性

10865

10866 【リターンパラメータ】

10867 ER_ID spnid 生成されたスピンロックのID番号(正の値)ま

10868 たはエラーコード

10869

10870 【エラーコード】

10871 E_CTX コンテキストエラー

10872 ・非タスクコンテキストからの呼出し〔s〕【NGKI2130】

10873 ・CPUロック状態からの呼出し〔s〕【NGKI2131】

10874 E_RSATR 予約属性

10875 ・spnatrが無効【NGKI2132】

10876 ・属する保護ドメインの指定が有効範囲外〔sP〕【NGKI2133】

10877 ・属するクラスの指定が有効範囲外〔s〕【NGKI2134】

10878 ・クラスの囲みの中に記述されていない〔S〕【NGKI2135】

10879 E_OACV オブジェクトアクセス違反

10880 ・システム状態に対する管理操作が許可されていない〔sP〕

10881 【NGKI2136】

10882 E_MACV メモリアクセス違反

10883 ・pk_cspnが指すメモリ領域への読出しアクセスが許可されて

10884 いない〔sP〕【NGKI2137】

10885 E_NOID ID番号不足

10886 ・割り付けられるスピンロックIDがない〔sD〕【NGKI2138】

10887 E_NORES 資源不足

10888 ・条件については機能の項を参照

10889 E_OBJ オブジェクト状態エラー

10890 ・spnidで指定したスピンロックが登録済み(CRE_SPNの場合)

10891 【NGKI2139】

10892

10893 【機能】

10894

10895 各パラメータで指定したスピンロック生成情報に従って,スピンロックを生成

10896 する.生成されたスピンロックのロック状態は,取得されていない状態に初期

10897 化される【NGKI2140】.

10898

10899 静的APIにおいては,spnidはオブジェクト識別名,spnatrは整数定数式パラメー

10900 タである【NGKI2141】.

Page 219: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

219

10901

10902 スピンロックをハードウェアによって実現している場合には,ターゲット定義

10903 で,生成できるスピンロックの数に上限がある【NGKI2142】.この上限を超え

10904 てスピンロックを生成しようとした場合には,E_NORESエラーとなる

10905 【NGKI2143】.

10906

10907 【補足説明】

10908

10909 スピンロックを動的に生成する場合に,生成できるスピンロックの数の上限は

10910 AID_SPNによってチェックされるため,acre_spnでE_NORESエラーが返ることは

10911 ない.

10912

10913 【TOPPERS/FMPカーネルにおける規定】

10914

10915 FMPカーネルでは,CRE_SPNのみをサポートする【FMPS0139】.

10916 ----------------------------------------------------------------------

10917 AID_SPN 割付け可能なスピンロックIDの数の指定〔SMD〕【NGKI2144】

10918

10919 【静的API】

10920 AID_SPN(uint_t nospn)

10921

10922 【パラメータ】

10923 uint_t nospn 割付け可能なスピンロックIDの数

10924

10925 【エラーコード】

10926 E_RSATR 予約属性

10927 ・クラスの囲みの中に記述されていない【NGKI2145】

10928 E_PAR パラメータエラー

10929 ・nospnが負の値【NGKI3283】

10930

10931 【機能】

10932

10933 nospnで指定した数のスピンロックIDを,スピンロックを生成するサービスコー

10934 ルによって割付け可能なスピンロックIDとして確保する【NGKI2146】.

10935

10936 nospnは整数定数式パラメータである【NGKI2147】.

10937 ----------------------------------------------------------------------

10938 SAC_SPN スピンロックのアクセス許可ベクタの設定〔SPM〕【NGKI2148】

10939 sac_spn スピンロックのアクセス許可ベクタの設定〔TPMD〕【NGKI2149】

10940

10941 【静的API】

10942 SAC_SPN(ID spnid, { ACPTN acptn1, ACPTN acptn2,

10943 ACPTN acptn3, ACPTN acptn4 })

10944

10945 【C言語API】

10946 ER ercd = s ac_spn(ID spnid, const ACVCT *p_acvct)

10947

10948 【パラメータ】

10949 ID spnid 対象スピンロックのID番号

10950 ACVCT * p_acvct アクセス許可ベクタを入れたパケットへのポ

Page 220: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

220

10951 インタ(静的APIを除く)

10952

10953 *アクセス許可ベクタ(パケットの内容)

10954 ACPTN acptn1 通常操作1のアクセス許可パターン

10955 ACPTN acptn2 通常操作2のアクセス許可パターン

10956 ACPTN acptn3 管理操作のアクセス許可パターン

10957 ACPTN acptn4 参照操作のアクセス許可パターン

10958

10959 【リターンパラメータ】

10960 ER ercd 正常終了(E_OK)またはエラーコード

10961

10962 【エラーコード】

10963 E_CTX コンテキストエラー

10964 ・非タスクコンテキストからの呼出し〔s〕【NGKI2150】

10965 ・CPUロック状態からの呼出し〔s〕【NGKI2151】

10966 E_ID 不正ID番号

10967 ・spnidが有効範囲外〔s〕【NGKI2152】

10968 E_RSATR 予約属性

10969 ・対象スピンロックが属する保護ドメインの囲みの中に記述

10970 されていない〔S〕【NGKI2153】

10971 ・対象スピンロックが属するクラスの囲みの中に記述されて

10972 いない〔S〕【NGKI2154】

10973 E_NOEXS オブジェクト未登録

10974 ・対象スピンロックが未登録【NGKI2155】

10975 E_OACV オブジェクトアクセス違反

10976 ・対象スピンロックに対する管理操作が許可されていない〔s〕

10977 【NGKI2156】

10978 E_MACV メモリアクセス違反

10979 ・p_acvctが指すメモリ領域への読出しアクセスが許可されて

10980 いない〔s〕【NGKI2157】

10981 E_OBJ オブジェクト状態エラー

10982 ・対象スピンロックは静的APIで生成された〔s〕【NGKI2158】

10983 ・対象スピンロックに対してアクセス許可ベクタが設定済み〔S〕

10984 【NGKI2159】

10985

10986 【機能】

10987

10988 spnidで指定したスピンロック(対象スピンロック)のアクセス許可ベクタ(4

10989 つのアクセス許可パターンの組)を,各パラメータで指定した値に設定する

10990 【NGKI2160】.

10991

10992 静的APIにおいては,spnidはオブジェクト識別名,acptn1~acptn4は整数定数

10993 式パラメータである【NGKI2161】.

10994

10995 【TOPPERS/FMPカーネルにおける規定】

10996

10997 FMPカーネルでは,SAC_SPN,sac_spnをサポートしない【FMPS0140】.

10998 ----------------------------------------------------------------------

10999 del_spn スピンロックの削除〔TMD〕【NGKI2162】

11000

Page 221: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

221

11001 【C言語API】

11002 ER ercd = del_spn(ID spnid)

11003

11004 【パラメータ】

11005 ID spnid 対象スピンロックのID番号

11006

11007 【リターンパラメータ】

11008 ER ercd 正常終了(E_OK)またはエラーコード

11009

11010 【エラーコード】

11011 E_CTX コンテキストエラー

11012 ・非タスクコンテキストからの呼出し【NGKI2163】

11013 ・CPUロック状態からの呼出し【NGKI2164】

11014 E_ID 不正ID番号

11015 ・spnidが有効範囲外【NGKI2165】

11016 E_NOEXS オブジェクト未登録

11017 ・対象スピンロックが未登録【NGKI2166】

11018 E_OACV オブジェクトアクセス違反

11019 ・対象スピンロックに対する管理操作が許可されていない〔P〕

11020 【NGKI2167】

11021 E_OBJ オブジェクト状態エラー

11022 ・対象スピンロックは静的APIで生成された【NGKI2168】

11023

11024 【機能】

11025

11026 spnidで指定したスピンロック(対象スピンロック)を削除する.具体的な振舞

11027 いは以下の通り.

11028

11029 対象スピンロックの登録が解除され,そのスピンロックIDが未使用の状態に戻

11030 される【NGKI2169】.

11031

11032 【TOPPERS/FMPカーネルにおける規定】

11033

11034 FMPカーネルでは,del_spnをサポートしない【FMPS0141】.

11035

11036 【未決定事項】

11037

11038 対象スピンロックが取得されている状態の場合の振舞いは,今後の課題である.

11039 ----------------------------------------------------------------------

11040 loc_spn スピンロックの取得〔TM〕【NGKI2170】

11041 iloc_spn スピンロックの取得〔IM〕【NGKI2171】

11042

11043 【C言語API】

11044 ER ercd = loc_spn(ID spnid)

11045 ER ercd = iloc_spn(ID spnid)

11046

11047 【パラメータ】

11048 ID spnid 対象スピンロックのID番号

11049

11050 【リターンパラメータ】

Page 222: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

222

11051 ER ercd 正常終了(E_OK)またはエラーコード

11052

11053 【エラーコード】

11054 E_CTX コンテキストエラー

11055 ・非タスクコンテキストからの呼出し(loc_spnの場合)【NGKI2172】

11056 ・タスクコンテキストからの呼出し(iloc_spnの場合)【NGKI2173】

11057 ・CPUロック状態からの呼出し【NGKI2174】

11058 E_ID 不正ID番号

11059 ・spnidが有効範囲外【NGKI2175】

11060 E_NOEXS オブジェクト未登録

11061 ・対象スピンロックが未登録〔D〕【NGKI2176】

11062 E_OACV オブジェクトアクセス違反

11063 ・対象スピンロックに対する通常操作1が許可されていない

11064 (loc_spnの場合)〔P〕【NGKI2177】

11065

11066 【機能】

11067

11068 spnidで指定したスピンロック(対象スピンロック)を取得する.具体的な振舞

11069 いは以下の通り.

11070

11071 対象スピンロックが取得されていない状態である場合には,プロセッサ間ロッ

11072 クの取得を試みる【NGKI2178】.ロックが他のプロセッサによって取得されて

11073 いる状態である場合や,他のプロセッサがロックの取得に成功した場合には,

11074 ロックが返却されるまでループによって待ち,返却されたらロックの取得を試

11075 みる【NGKI2179】.これを,ロックの取得に成功するまで繰り返す

11076 【NGKI2180】.

11077

11078 ロックの取得に成功した場合には,スピンロックは取得されている状態になる

11079 【NGKI2181】.また,CPUロックフラグをセットしてCPUロック状態へ遷移し,

11080 サービスコールからリターンする【NGKI2182】.

11081

11082 なお,複数のプロセッサがロックの取得を待っている時に,どのプロセッサが

11083 最初にロックを取得できるかは,現時点ではターゲット定義とする【NGKI2183】.

11084

11085 【補足説明】

11086

11087 対象スピンロックが,loc_spn/iloc_spnを呼び出したプロセッサによって取得

11088 されている状態である場合には,スピンロックの取得によりCPUロック状態になっ

11089 ているため,loc_spn/iloc_spnはE_CTXエラーとなる.

11090

11091 プロセッサがロックを取得できる順序を,現時点ではターゲット定義としたが,

11092 リアルタイム性保証のためには,(ロックの取得待ちの間に割込みが発生しな

11093 い限りは)loc_spn/iloc_spnを呼び出した順序でロックを取得できるとするの

11094 が望ましい.ただし,ターゲットハードウェアの制限で,そのような実装がで

11095 きるとは限らないため,現時点ではターゲット定義としている.

11096 ----------------------------------------------------------------------

11097 try_spn スピンロックの取得(ポーリング)〔TM〕【NGKI2184】

11098 itry_spn スピンロックの取得(ポーリング)〔IM〕【NGKI2185】

11099

11100 【C言語API】

Page 223: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

223

11101 ER ercd = try_spn(ID spnid)

11102 ER ercd = itry_spn(ID spnid)

11103

11104 【パラメータ】

11105 ID spnid 対象スピンロックのID番号

11106

11107 【リターンパラメータ】

11108 ER e rcd 正常終了(E_OK)またはエラーコード

11109

11110 【エラーコード】

11111 E_CTX コンテキストエラー

11112 ・非タスクコンテキストからの呼出し(try_spnの場合)【NGKI2186】

11113 ・タスクコンテキストからの呼出し(itry_spnの場合)【NGKI2187】

11114 ・CPUロック状態からの呼出し【NGKI2188】

11115 E_ID 不正ID番号

11116 ・spnidが有効範囲外【NGKI2189】

11117 E_NOEXS オブジェクト未登録

11118 ・対象スピンロックが未登録〔D〕【NGKI2190】

11119 E_OACV オブジェクトアクセス違反

11120 ・対象スピンロックに対する通常操作1が許可されていない

11121 (try_spnの場合)〔P〕【NGKI2191】

11122 E_OBJ オブジェクト状態エラー

11123 ・条件については機能の項を参照

11124

11125 【機能】

11126

11127 spnidで指定したスピンロック(対象スピンロック)の取得を試みる.具体的な

11128 振舞いは以下の通り.

11129

11130 対象スピンロックが取得されていない状態である場合には,プロセッサ間ロッ

11131 クの取得を試みる【NGKI2192】.ロックの取得に成功した場合には,スピンロッ

11132 クは取得されている状態になる【NGKI2193】.また,CPUロックフラグをセット

11133 してCPUロック状態へ遷移し,サービスコールからリターンする【NGKI2194】.

11134

11135 対象スピンロックが他のプロセッサによって取得されている状態である場合や,

11136 ロックの取得に失敗した場合(他のプロセッサがロックの取得に成功した場合)

11137 には,E_OBJエラーとする【NGKI2195】.

11138

11139 【使用上の注意】

11140

11141 try_spn/itry_spnを,ロックの取得に成功するまで繰り返し呼び出すことによ

11142 りスピンロックを取得する方法は,loc_spn/iloc_spnによりスピンロックを取

11143 得する方法と,プロセッサがロックを取得できる順序が異なる可能性ある.

11144 ----------------------------------------------------------------------

11145 unl_spn スピンロックの返却〔TM〕【NGKI2196】

11146 iunl_spn スピンロックの返却〔IM〕【NGKI2197】

11147

11148 【C言語API】

11149 ER ercd = unl_spn(ID spnid)

11150 ER ercd = iunl_spn(ID spnid)

Page 224: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

224

11151

11152 【パラメータ】

11153 ID spnid 対象スピンロックのID番号

11154

11155 【リターンパラメータ】

11156 ER ercd 正常終了(E_OK)またはエラーコード

11157

11158 【エラーコード】

11159 E_CTX コンテキストエラー

11160 ・非タスクコンテキストからの呼出し(unl_spnの場合)【NGKI2198】

11161 ・タスクコンテキストからの呼出し(iunl_spnの場合)【NGKI2199】

11162 E_ID 不正ID番号

11163 ・spnidが有効範囲外【NGKI2200】

11164 E_NOEXS オブジェクト未登録

11165 ・対象スピンロックが未登録〔D〕【NGKI2201】

11166 E_OACV オブジェクトアクセス違反

11167 ・対象スピンロックに対する通常操作1が許可されていない

11168 (unl_spnの場合)〔P〕【NGKI2202】

11169 E_ILUSE サービスコール不正使用

11170 ・条件については機能の項を参照

11171

11172 【機能】

11173

11174 spnidで指定したスピンロック(対象スピンロック)を返却する.具体的な振舞

11175 いは以下の通り.

11176

11177 対象スピンロックが,unl_spn/iunl_spnを呼び出したプロセッサによって取得

11178 されている状態である場合には,ロックを返却し,スピンロックを取得されて

11179 いない状態とする【NGKI2203】.また,CPUロックフラグをクリアし,CPUロッ

11180 ク解除状態へ遷移する【NGKI2204】.

11181

11182 対象スピンロックが,取得されていない状態である場合や,他のプロセッサに

11183 よって取得されている状態である場合には,E_ILUSEエラーとなる【NGKI2205】.

11184 ----------------------------------------------------------------------

11185 ref_spn スピンロックの状態参照〔TM〕【NGKI2206】

11186

11187 【C言語API】

11188 ER ercd = ref_spn(ID spnid, T_RSPN *pk _rspn)

11189

11190 【パラメータ】

11191 ID spnid 対象スピンロックのID番号

11192 T_RSPN * pk_rspn スピンロックの現在状態を入れるパケットへの

11193 ポインタ

11194

11195 【リターンパラメータ】

11196 ER ercd 正常終了(E_OK)またはエラーコード

11197

11198 *スピンロックの現在状態(パケットの内容)

11199 STAT spnstat ロック状態

11200

Page 225: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

225

11201 【エラーコード】

11202 E_CTX コンテキストエラー

11203 ・非タスクコンテキストからの呼出し【NGKI2207】

11204 ・CPUロック状態からの呼出し【NGKI2208】

11205 E_ID 不正ID番号

11206 ・spnidが有効範囲外【NGKI2209】

11207 E_NOEXS オブジェクト未登録

11208 ・対象スピンロックが未登録〔D〕【NGKI2210】

11209 E_OACV オブジェクトアクセス違反

11210 ・対象スピンロックに対する参照操作が許可されていない〔P〕

11211 【NGKI2211】

11212 E_MACV メモリアクセス違反

11213 ・pk_rspnが指すメモリ領域への書込みアクセスが許可されて

11214 いない)〔P〕【NGKI2212】

11215

11216 【機能】

11217

11218 spnidで指定したスピンロック(対象スピンロック)の現在状態を参照する.参

11219 照した現在状態は,pk_rspnで指定したパケットに返される【NGKI2213】.

11220

11221 spnstatには,対象スピンロックの現在のロック状態を表す次のいずれかの値が

11222 返される【NGKI2214】.

11223

11224 TSPN_UNL 0x01U 取得されていない状態

11225 TSPN_LOC 0x02U 取得されている状態

11226

11227 【使用上の注意】

11228

11229 ref_spnはデバッグ時向けの機能であり,その他の目的に使用することは推奨し

11230 ない.これは,ref_spnを呼び出し,対象スピンロックの現在状態を参照した直

11231 後に割込みが発生した場合,ref_spnから戻ってきた時には対象スピンロックの

11232 状態が変化している可能性があるためである.

11233 ----------------------------------------------------------------------

11234

11235 4.5 メモリプール管理機能

11236

11237 【TOPPERS/SSPカーネルにおける規定】

11238

11239 SSPカーネルでは,メモリプール管理機能をサポートしない【SSPS0128】.

11240

11241 【μITRON4.0仕様との関係】

11242

11243 この仕様では,可変長メモリプール機能はサポートしないこととした.

11244

11245 【仕様決定の理由】

11246

11247 可変長メモリプール機能をサポートしないこととしたのは,メモリ割付けの処

11248 理時間とフラグメンテーションの発生を考えると,最適なメモリ管理アルゴリ

11249 ズムはアプリケーション依存となるため,カーネル内で実現するより,ライブ

11250 ラリとして実現する方が適切と考えたためである.

Page 226: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

226

11251

11252 4.5.1 固定長メモリプール

11253

11254 固定長メモリプールは,生成時に決めたサイズのメモリブロック(固定長メモ

11255 リブロック)を動的に獲得・返却するための同期・通信オブジェクトである.

11256 固定長メモリプールは,固定長メモリプールIDと呼ぶID番号で識別する

11257 【NGKI2215】.

11258

11259 各固定長メモリプールが持つ情報は次の通り【NGKI2216】.

11260

11261 ・固定長メモリプール属性

11262 ・待ち行列(固定長メモリブロックの獲得待ち状態のタスクのキュー)

11263 ・固定長メモリプール領域

11264 ・固定長メモリプール管理領域

11265 ・アクセス許可ベクタ(保護機能対応カーネルの場合)

11266 ・属する保護ドメイン(保護機能対応カーネルの場合)

11267 ・属するクラス(マルチプロセッサ対応カーネルの場合)

11268

11269 待ち行列は,固定長メモリブロックが獲得できるまで待っている状態(固定長

11270 メモリブロックの獲得待ち状態)のタスクが,固定長メモリブロックを獲得で

11271 きる順序でつながれているキューである.

11272

11273 固定長メモリプール領域は,その中から固定長メモリブロックを割り付けるた

11274 めのメモリ領域である.

11275

11276 固定長メモリプール管理領域は,固定長メモリプール領域中の割当て済みの固

11277 定長メモリブロックと未割当てのメモリ領域に関する情報を格納しておくため

11278 のメモリ領域である.

11279

11280 保護機能対応カーネルにおいて,固定長メモリプール管理領域は,カーネルの

11281 用いるオブジェクト管理領域として扱われる【NGKI2217】.

11282

11283 固定長メモリプール属性には,次の属性を指定することができる【NGKI2218】.

11284

11285 TA_TPRI 0x01U 待ち行列をタスクの優先度順にする

11286

11287 TA_TPRIを指定しない場合,待ち行列はFIFO順になる【NGKI2219】.

11288

11289 固定長メモリプール機能に関連するカーネル構成マクロは次の通り.

11290

11291 TNUM_MPFID 登録できる固定長メモリプールの数(動的生成対応でない

11292 カーネルでは,静的APIによって登録された固定長メモリ

11293 プールの数に一致)【NGKI2220】

11294

11295 【μITRON4.0仕様との関係】

11296

11297 固定長メモリプール領域として確保すべき領域のサイズを返すカーネル構成マ

11298 クロ(TSZ_MPF)は廃止した.これは,固定長メモリプール領域をアプリケーショ

11299 ンで確保する方法を定めた結果,そのサイズは(blkcnt * ROUND_MPF_T(blksz))

11300 で求めることができるようになったためである.

Page 227: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

227

11301

11302 TNUM_MPFIDは,μITRON4.0仕様に規定されていないカーネル構成マクロである.

11303 ----------------------------------------------------------------------

11304 CRE_MPF 固定長メモリプールの生成〔S〕【NGKI2221】

11305 acre_mpf 固定長メモリプールの生成〔TD〕【NGKI2222】

11306

11307 【静的API】

11308 CRE_MPF(ID mpfid, { ATR mpfatr, uint_t blkcnt, uint_t blksz,

11309 MPF_T *mpf, void * mpfmb })

11310

11311 【C言語API】

11312 ER_ID mpfid = acre_mpf(const T_CMPF *pk_cmpf)

11313

11314 【パラメータ】

11315 ID mpfid 生成する固定長メモリプールのID番号(CRE_MPF

11316 の場合)

11317 T_CMPF * pk_cmpf 固定長メモリプールの生成情報を入れたパケッ

11318 トへのポインタ(静的APIを除く)

11319

11320 *固定長メモリプールの生成情報(パケットの内容)

11321 ATR mpfatr 固定長メモリプール属性

11322 uint_t blkcnt 獲得できる固定長メモリブロックの数

11323 uint_t blksz 固定長メモリブロックのサイズ(バイト数)

11324 MPF_T * mpf 固定長メモリプール領域の先頭番地

11325 void * mpfmb 固定長メモリプール管理領域の先頭番地

11326

11327 【リターンパラメータ】

11328 ER_ID mpfid 生成された固定長メモリプールのID番号(正の

11329 値)またはエラーコード

11330

11331 【エラーコード】

11332 E_CTX コンテキストエラー

11333 ・非タスクコンテキストからの呼出し〔s〕【NGKI2223】

11334 ・CPUロック状態からの呼出し〔s〕【NGKI2224】

11335 E_RSATR 予約属性

11336 ・mpfatrが無効【NGKI2225】

11337 ・属する保護ドメインの指定が有効範囲外〔sP〕【NGKI2226】

11338 ・属するクラスの指定が有効範囲外〔sM〕【NGKI2227】

11339 ・クラスの囲みの中に記述されていない〔SM〕【NGKI2228】

11340 E_NOSPT 未サポート機能

11341 ・条件については各カーネルにおける規定の項を参照

11342 E_PAR パラメータエラー

11343 ・blkcntが0以下【NGKI2229】

11344 ・blkszが0以下【NGKI2230】

11345 ・その他の条件については機能の項を参照

11346 E_OACV オブジェクトアクセス違反

11347 ・システム状態に対する管理操作が許可されていない〔sP〕

11348 【NGKI2231】

11349 E_MACV メモリアクセス違反

11350 ・pk_cmpfが指すメモリ領域への読出しアクセスが許可されて

Page 228: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

228

11351 いない〔sP〕【NGKI2232】

11352 E_NOID ID番号不足

11353 ・割り付けられる固定長メモリプールIDがない〔sD〕【NGKI2233】

11354 E_NOMEM メモリ不足

11355 ・固定長メモリプール領域が確保できない【NGKI2234】

11356 ・固定長メモリプール管理領域が確保できない【NGKI2235】

11357 E_OBJ オブジェクト状態エラー

11358 ・mpfidで指定した固定長メモリプールが登録済み(CRE_MPF

11359 の場合)【NGKI2236】

11360 ・その他の条件については機能の項を参照

11361

11362 【機能】

11363

11364 各パラメータで指定した固定長メモリプール生成情報に従って,固定長メモリ

11365 プールを生成する.mpf,blkcnt,blkszから固定長メモリプール領域が,

11366 mpfmbとblkcntから固定長メモリプール管理領域がそれぞれ設定され,メモリプー

11367 ル領域全体が未割当ての状態に初期化される【NGKI2237】.また,待ち行列は

11368 空の状態に初期化される【NGKI2238】.

11369

11370 静的APIにおいては,mpfidはオブジェクト識別名,mpfatr,blkcnt,blkszは整

11371 数定数式パラメータ,mpfとmpfmbは一般定数式パラメータである【NGKI2239】.

11372 コンフィギュレータは,静的APIのメモリ不足(E_NOMEM)エラーを検出するこ

11373 とができない【NGKI2240】.

11374

11375 mpfをNULLとした場合,blkcntとblkszから決まるサイズの固定長メモリプール

11376 領域が,コンフィギュレータまたはカーネルにより確保される【NGKI2241】.

11377

11378 保護機能対応カーネルでは,コンフィギュレータまたはカーネルにより確保さ

11379 れる固定長メモリプール領域は,固定長メモリプールと同じ保護ドメインに属

11380 し,固定長メモリプールと同じアクセス許可ベクタを持ったメモリオブジェク

11381 ト中に確保される【NGKI2242】.

11382

11383 mpfmbをNULLとした場合,blkcntから決まるサイズの固定長メモリプール管理領

11384 域が,コンフィギュレータまたはカーネルにより確保される【NGKI2243】.

11385

11386 〔mpfにNULL以外を指定した場合〕

11387

11388 mpfにNULL以外を指定した場合,mpfを先頭番地とする固定長メモリプール領域

11389 は,アプリケーションで確保しておく必要がある【NGKI2244】.固定長メモリ

11390 プール領域をアプリケーションで確保するために,次のデータ型とマクロを用

11391 意している【NGKI2245】.

11392

11393 MPF_T 固定長メモリプール領域を確保するためのデータ型

11394

11395 COUNT_MPF_T(blksz) 固定長メモリブロックのサイズがblkszの固定長メモ

11396 リプール領域を確保するために,固定長メモリブロッ

11397 ク1つあたりに必要なMPF_T型の配列の要素数

11398 ROUND_MPF_T(blksz) 要素数COUNT_MPF_T(blksz)のMPF_T型の配列のサイズ

11399 (blkszを,MPF_T型のサイズの倍数になるように大き

11400 い方に丸めた値)

Page 229: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

229

11401

11402 これらを用いて固定長メモリプール領域を確保する方法は次の通り【NGKI2246】.

11403

11404 MPF_T <固定長メモリプール領域の変数名>[(blkcnt) * COUNT_MPF_T(blksz)];

11405

11406 この時,mpfには<固定長メモリプール領域の変数名>を指定する【NGKI2247】.

11407

11408 これ以外の方法で固定長メモリプール領域を確保する場合には,上記の配列と

11409 同じサイズのメモリ領域を確保しなければならない【NGKI2248】.また,その

11410 先頭番地がターゲット定義の制約に合致していなければならない.mpfにターゲッ

11411 ト定義の制約に合致しない先頭番地を指定した時には,E_PARエラーとなる

11412 【NGKI2249】.

11413

11414 保護機能対応カーネルでは,アプリケーションで確保する固定長メモリプール

11415 領域は,カーネルに登録されたメモリオブジェクトに含まれていなければなら

11416 ない.指定した固定長メモリプール領域が,カーネルに登録されたメモリオブ

11417 ジェクトに含まれていない場合,E_OBJエラーとなる【NGKI2251】.

11418

11419 〔mpfmbにNULL以外を指定した場合〕

11420

11421 mpfmbにNULL以外を指定した場合,mpfmbを先頭番地とする固定長メモリプール

11422 管理領域は,アプリケーションで確保しておく必要がある【NGKI2252】.固定

11423 長メモリプール管理領域をアプリケーションで確保するために,次のマクロを

11424 用意している【NGKI2253】.

11425

11426 TSZ_MPFMB(blkcnt) blkcnt で指定した数の固定長メモリブロックを管理

11427 することができる固定長メモリプール管理領域のサ

11428 イズ(バイト数)

11429 TCNT_MPFMB(blkcnt) blkcnt で指定した数の固定長メモリブロックを管理

11430 することができる固定長メモリプール管理領域を確

11431 保するために必要なMB_T型の配列の要素数

11432

11433 これらを用いて固定長メモリプール管理領域を確保する方法は次の通り

11434 【NGKI2254】.

11435

11436 MB_T <固定長メモリプール管理領域の変数名>[TCNT_MPFMB(blkcnt)];

11437

11438 この時,mpfmbには<固定長メモリプール管理領域の変数名>を指定する

11439 【NGKI2255】.

11440

11441 この方法に従わず,mpfmbにターゲット定義の制約に合致しない先頭番地を指定

11442 した時には,E_PARエラーとなる【NGKI2256】.また,保護機能対応カーネルに

11443 おいて,mpfmbで指定した固定長メモリプール管理領域がカーネル専用のメモリ

11444 オブジェクトに含まれない場合,E_OBJエラーとなる【NGKI2257】.

11445

11446 【補足説明】

11447

11448 保護機能対応カーネルにおいて,固定長メモリプール領域をアプリケーション

11449 で確保する場合には,固定長メモリプール領域が属する保護ドメインとアクセ

11450 ス権の設定は変更されない.これらを適切に設定することは,アプリケーショ

Page 230: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

230

11451 ンの責任である.

11452

11453 【TOPPERS/ASPカーネルにおける規定】

11454

11455 ASPカーネルでは,CRE_MPFのみをサポートする【ASPS0164】.また,mpfmbには

11456 NULLのみを指定することができる.NULL以外を指定した場合には,E_NOSPTエラー

11457 となる【ASPS0166】.ただし,動的生成機能拡張パッケージでは,acre_mpfも

11458 サポートする【ASPS0167】.acre_mpfに対しては,mpfmbにNULL以外を指定でき

11459 ないという制限はない【ASPS0168】.

11460

11461 【TOPPERS/FMPカーネルにおける規定】

11462

11463 FMPカーネルでは,CRE_MPFのみをサポートする【FMPS0142】.また,mpfmbには

11464 NULLのみを指定することができる.NULL以外を指定した場合には,E_NOSPTエラー

11465 となる【FMPS0144】.

11466

11467 【TOPPERS/HRP2カーネルにおける規定】

11468

11469 HRP2カーネルでは,CRE_MPFのみをサポートする【HRPS0136】.また,mpfmbに

11470 はNULLのみを指定することができる.NULL以外を指定した場合には,E_NOSPTエ

11471 ラーとなる【HRPS0138】.

11472

11473 【μITRON4.0仕様との関係】

11474

11475 mpfのデータ型をMPF_T *に変更した.COUNT_MPF_TとROUND_MPF_Tを新設し,固

11476 定長メモリプール領域をアプリケーションで確保する方法を規定した.また,

11477 μITRON4.0/PX仕様にあわせて,固定長メモリプール生成情報に,mpfmbを追加

11478 した.

11479

11480 【μITRON4.0/PX仕様との関係】

11481

11482 TCNT_MPFMBを新設し,固定長メモリプール管理領域をアプリケーションで確保

11483 する方法を規定した.

11484 ----------------------------------------------------------------------

11485 AID_MPF 割付け可能な固定長メモリプールIDの数の指定〔SD〕【NGKI2258】

11486

11487 【静的API】

11488 AID_MPF(uint_t nompf)

11489

11490 【パラメータ】

11491 uint_t nompf 割付け可能な固定長メモリプールIDの数

11492

11493 【エラーコード】

11494 E_RSATR 予約属性

11495 ・クラスの囲みの中に記述されていない〔M〕【NGKI2259】

11496 E_PAR パラメータエラー

11497 ・nompfが負の値【NGKI3284】

11498

11499 【機能】

11500

Page 231: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

231

11501 nompfで指定した数の固定長メモリプールIDを,固定長メモリプールを生成する

11502 サービスコールによって割付け可能な固定長メモリプールIDとして確保する

11503 【NGKI2260】.

11504

11505 nompfは整数定数式パラメータである【NGKI2261】.

11506 ----------------------------------------------------------------------

11507 SAC_MPF 固定長メモリプールのアクセス許可ベクタの設定〔SP〕【NGKI2262】

11508 sac_mpf 固定長メモリプールのアクセス許可ベクタの設定〔TPD〕【NGKI2263】

11509

11510 【静的API】

11511 SAC_MPF(ID mpfid, { ACPTN acptn1, ACPTN a cptn2,

11512 ACPTN acptn3, ACPTN acptn4 })

11513

11514 【C言語API】

11515 ER ercd = sac_mpf(ID mpfid, const ACVCT *p_acvct)

11516

11517 【パラメータ】

11518 ID mpfid 対象固定長メモリプールのID番号

11519 ACVCT * p_acvct アクセス許可ベクタを入れたパケットへのポ

11520 インタ(静的APIを除く)

11521

11522 *アクセス許可ベクタ(パケットの内容)

11523 ACPTN acptn1 通常操作1のアクセス許可パターン

11524 ACPTN acptn2 通常操作2のアクセス許可パターン

11525 ACPTN acptn3 管理操作のアクセス許可パターン

11526 ACPTN acptn4 参照操作のアクセス許可パターン

11527

11528 【リターンパラメータ】

11529 ER ercd 正常終了(E_OK)またはエラーコード

11530

11531 【エラーコード】

11532 E_CTX コンテキストエラー

11533 ・非タスクコンテキストからの呼出し〔s〕【NGKI2264】

11534 ・CPUロック状態からの呼出し〔s〕【NGKI2265】

11535 E_ID 不正ID番号

11536 ・mpfidが有効範囲外〔s〕【NGKI2266】

11537 E_RSATR 予約属性

11538 ・対象固定長メモリプールが属する保護ドメインの囲みの中

11539 に記述されていない〔S〕【NGKI2267】

11540 ・対象固定長メモリプールが属するクラスの囲みの中に記述

11541 されていない〔SM〕【NGKI2268】

11542 E_NOEXS オブジェクト未登録

11543 ・対象固定長メモリプールが未登録【NGKI2269】

11544 E_OACV オブジェクトアクセス違反

11545 ・対象固定長メモリプールに対する管理操作が許可されてい

11546 ない〔s〕【NGKI2270】

11547 E_MACV メモリアクセス違反

11548 ・p_acvctが指すメモリ領域への読出しアクセスが許可されて

11549 いない〔s〕【NGKI2271】

11550 E_OBJ オブジェクト状態エラー

Page 232: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

232

11551 ・対象固定長メモリプールは静的APIで生成された〔s〕【NGKI2272】

11552 ・対象固定長メモリプールに対してアクセス許可ベクタが設

11553 定済み〔S〕【NGKI2273】

11554

11555 【機能】

11556

11557 mpfidで指定した固定長メモリプール(対象固定長メモリプール)のアクセス許

11558 可ベクタ(4つのアクセス許可パターンの組)を,各パラメータで指定した値に

11559 設定する【NGKI2274】.対象固定長メモリプールの固定長メモリプール領域が

11560 コンフィギュレータまたはカーネルにより確保されたものである場合には,固

11561 定長メモリプール領域のアクセス許可ベクタも,各パラメータで指定した値に

11562 設定する【NGKI2275】.

11563

11564 静的APIにおいては,mpfidはオブジェクト識別名,acptn1~acptn4は整数定数

11565 式パラメータである【NGKI2276】.

11566

11567 【TOPPERS/ASPカーネルにおける規定】

11568

11569 ASPカーネルでは,SAC_MPF,sac_mpfをサポートしない【ASPS0169】.

11570

11571 【TOPPERS/FMPカーネルにおける規定】

11572

11573 FMPカーネルでは,SAC_MPF,sac_mpfをサポートしない【FMPS0145】.

11574

11575 【TOPPERS/HRP2カーネルにおける規定】

11576

11577 HRP2カーネルでは,SAC_MPFのみをサポートする【HRPS0139】.

11578 ----------------------------------------------------------------------

11579 del_mpf 固定長メモリプールの削除〔TD〕【NGKI2277】

11580

11581 【C言語API】

11582 ER ercd = del_mpf(ID mpfid)

11583

11584 【パラメータ】

11585 ID mpfid 対象固定長メモリプールのID番号

11586

11587 【リターンパラメータ】

11588 ER ercd 正常終了(E_OK)またはエラーコード

11589

11590 【エラーコード】

11591 E_CTX コンテキストエラー

11592 ・非タスクコンテキストからの呼出し【NGKI2278】

11593 ・CPUロック状態からの呼出し【NGKI2279】

11594 E_ID 不正ID番号

11595 ・mpfidが有効範囲外【NGKI2280】

11596 E_NOEXS オブジェクト未登録

11597 ・対象固定長メモリプールが未登録【NGKI2281】

11598 E_OACV オブジェクトアクセス違反

11599 ・対象固定長メモリプールに対する管理操作が許可されてい

11600 ない〔P〕【NGKI2282】

Page 233: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

233

11601 E_OBJ オブジェクト状態エラー

11602 ・対象固定長メモリプールは静的APIで生成された【NGKI2283】

11603

11604 【機能】

11605

11606 mpfidで指定した固定長メモリプール(対象固定長メモリプール)を削除する.

11607 具体的な振舞いは以下の通り.

11608

11609 対象固定長メモリプールの登録が解除され,その固定長メモリプールIDが未使

11610 用の状態に戻される【NGKI2284】.また,対象固定長メモリプールの待ち行列

11611 につながれたタスクは,待ち行列の先頭のタスクから順に待ち解除される

11612 【NGKI2285】.待ち解除されたタスクには,待ち状態となったサービスコール

11613 からE_DLTエラーが返る【NGKI2286】.

11614

11615 【使用上の注意】

11616

11617 del_mpfにより複数のタスクが待ち解除される場合,サービスコールの処理時間

11618 およびカーネル内での割込み禁止時間が,待ち解除されるタスクの数に比例し

11619 て長くなる.特に,多くのタスクが待ち解除される場合,カーネル内での割込

11620 み禁止時間が長くなるため,注意が必要である.

11621

11622 【TOPPERS/ASPカーネルにおける規定】

11623

11624 ASPカーネルでは,del_mpfをサポートしない【ASPS0170】.ただし,動的生成

11625 機能拡張パッケージでは,del_mpfをサポートする【ASPS0171】.

11626

11627 【TOPPERS/FMPカーネルにおける規定】

11628

11629 FMPカーネルでは,del_mpfをサポートしない【FMPS0146】.

11630

11631 【TOPPERS/HRP2カーネルにおける規定】

11632

11633 HRP2カーネルでは,del_mpfをサポートしない【HRPS0140】.

11634 ----------------------------------------------------------------------

11635 get_mpf 固定長メモリブロックの獲得〔T〕【NGKI2287】

11636 pget_mpf 固定長メモリブロックの獲得(ポーリング)〔T〕【NGKI2288】

11637 tget_mpf 固定長メモリブロックの獲得(タイムアウト付き)〔T〕【NGKI2289】

11638

11639 【C言語API】

11640 ER ercd = get_mpf(ID mpfid, void **p_blk)

11641 ER ercd = pget_mpf(ID mpfid, void **p_blk)

11642 ER ercd = tget_mpf(ID mpfid, void **p_blk, TMO tmout)

11643

11644 【パラメータ】

11645 ID mpfid 対象固定長メモリプールのID番号

11646 void ** p_blk 獲得した固定長メモリブロックの先頭番地を入

11647 れるメモリ領域へのポインタ

11648 TMO tmout タイムアウト時間(twai_mpfの場合)

11649

11650 【リターンパラメータ】

Page 234: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

234

11651 ER ercd 正常終了(E_OK)またはエラーコード

11652 void * blk 獲得した固定長メモリブロックの先頭番地

11653

11654 【エラーコード】

11655 E_CTX コンテキストエラー

11656 ・非タスクコンテキストからの呼出し【NGKI2290】

11657 ・CPUロック状態からの呼出し【NGKI2291】

11658 ・ディスパッチ保留状態からの呼出し(pget_mpfを除く)

11659 【NGKI2292】

11660 E_NOSPT 未サポート機能

11661 ・制約タスクからの呼出し(pget_mpfを除く)【NGKI2293】

11662 E_ID 不正ID番号

11663 ・mpfidが有効範囲外【NGKI2294】

11664 E_PAR パラメータエラー

11665 ・tmoutが無効(tget_mpfの場合)【NGKI2295】

11666 E_NOEXS オブジェクト未登録

11667 ・対象固定長メモリプールが未登録〔D〕【NGKI2296】

11668 E_OACV オブジェクトアクセス違反

11669 ・対象固定長メモリプールに対する通常操作1が許可されてい

11670 ない〔P〕【NGKI2297】

11671 E_MACV メモリアクセス違反

11672 ・p_blkが指すメモリ領域への書込みアクセスが許可されてい

11673 ない)〔P〕【NGKI2298】

11674 E_TMOUT ポーリング失敗またはタイムアウト(get_mpfを除く)【NGKI2299】

11675 E_RLWAI 待ち禁止状態または待ち状態の強制解除(pget_mpfを除く)

11676 【NGKI2300】

11677 E_DLT 待ちオブジェクトの削除または再初期化(pget_mpfを除く)

11678 【NGKI2301】

11679

11680 【機能】

11681

11682 mpfidで指定した固定長メモリプール(対象固定長メモリプール)から固定長メ

11683 モリブロックを獲得し,その先頭番地をp_blkが指すメモリ領域に返す.具体的

11684 な振舞いは以下の通り.

11685

11686 対象固定長メモリプールの固定長メモリプール領域の中に,固定長メモリブロッ

11687 クを割り付けることのできる未割当てのメモリ領域がある場合には,固定長メ

11688 モリブロックが1つ割り付けられ,その先頭番地がblkに返される【NGKI2302】.

11689

11690 未割当てのメモリ領域がない場合には,自タスクは固定長メモリプールの獲得

11691 待ち状態となり,対象固定長メモリプールの待ち行列につながれる【NGKI2303】.

11692 ----------------------------------------------------------------------

11693 rel_mpf 固定長メモリブロックの返却〔T〕【NGKI2304】

11694

11695 【C言語API】

11696 ER ercd = rel_mpf(ID mpfid, void *blk)

11697

11698 【パラメータ】

11699 ID mpfid 対象固定長メモリプールのID番号

11700 void * blk 返却する固定長メモリブロックの先頭番地

Page 235: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

235

11701

11702 【リターンパラメータ】

11703 ER ercd 正常終了(E_OK)またはエラーコード

11704

11705 【エラーコード】

11706 E_CTX コンテキストエラー

11707 ・非タスクコンテキストからの呼出し【NGKI2305】

11708 ・CPUロック状態からの呼出し【NGKI2306】

11709 E_ID 不正ID番号

11710 ・mpfidが有効範囲外【NGKI2307】

11711 E_PAR パラメータエラー

11712 ・条件については機能の項を参照

11713 E_NOEXS オブジェクト未登録

11714 ・対象固定長メモリプールが未登録〔D〕【NGKI2308】

11715 E_OACV オブジェクトアクセス違反

11716 ・対象固定長メモリプールに対する通常操作2が許可されてい

11717 ない〔P〕【NGKI2309】

11718

11719 【機能】

11720

11721 mpfidで指定した固定長メモリプール(対象固定長メモリプール)に,blkで指

11722 定した固定長メモリブロックを返却する.具体的な振舞いは以下の通り.

11723

11724 対象固定長メモリプールの待ち行列にタスクが存在する場合には,待ち行列の

11725 先頭のタスクが,blkで指定した固定長メモリブロックを獲得し,待ち解除され

11726 る【NGKI2310】.待ち解除されたタスクには,待ち状態となったサービスコー

11727 ルからE_OKが返る【NGKI2311】.

11728

11729 待ち行列にタスクが存在しない場合には,blkで指定した固定長メモリブロック

11730 は,対象固定長メモリプールのメモリプール領域に返却される【NGKI2312】.

11731

11732 blkが,対象固定長メモリプールから獲得した固定長メモリブロックの先頭番地

11733 でない場合には,E_PARエラーとなる【NGKI2313】.

11734 ----------------------------------------------------------------------

11735 ini_mpf 固定長メモリプールの再初期化〔T〕【NGKI2314】

11736

11737 【C言語API】

11738 ER ercd = ini_mpf(ID mpfid)

11739

11740 【パラメータ】

11741 ID mpfid 対象固定長メモリプールのID番号

11742

11743 【リターンパラメータ】

11744 ER ercd 正常終了(E_OK)またはエラーコード

11745

11746 【エラーコード】

11747 E_CTX コンテキストエラー

11748 ・非タスクコンテキストからの呼出し【NGKI2315】

11749 ・CPUロック状態からの呼出し【NGKI2316】

11750 E_ID 不正ID番号

Page 236: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

236

11751 ・mpfidが有効範囲外【NGKI2317】

11752 E_NOEXS オブジェクト未登録

11753 ・対象固定長メモリプールが未登録〔D〕【NGKI2318】

11754 E_OACV オブジェクトアクセス違反

11755 ・対象固定長メモリプールに対する管理操作が許可されてい

11756 ない〔P〕【NGKI2319】

11757

11758 【機能】

11759

11760 mpfidで指定した固定長メモリプール(対象固定長メモリプール)を再初期化す

11761 る.具体的な振舞いは以下の通り.

11762

11763 対象固定長メモリプールのメモリプール領域全体が未割当ての状態に初期化さ

11764 れる【NGKI2320】.また,対象固定長メモリプールの待ち行列につながれたタ

11765 スクは,待ち行列の先頭のタスクから順に待ち解除される【NGKI2321】.待ち

11766 解除されたタスクには,待ち状態となったサービスコールからE_DLTエラーが返

11767 る【NGKI2322】.

11768

11769 【使用上の注意】

11770

11771 ini_mpfにより複数のタスクが待ち解除される場合,サービスコールの処理時間

11772 およびカーネル内での割込み禁止時間が,待ち解除されるタスクの数に比例し

11773 て長くなる.特に,多くのタスクが待ち解除される場合,カーネル内での割込

11774 み禁止時間が長くなるため,注意が必要である.

11775

11776 固定長メモリプールを再初期化した場合に,アプリケーションとの整合性を保

11777 つのは,アプリケーションの責任である.

11778

11779 【μITRON4.0仕様との関係】

11780

11781 μITRON4.0仕様に定義されていないサービスコールである.

11782 ----------------------------------------------------------------------

11783 ref_mpf 固定長メモリプールの状態参照〔T〕【NGKI2323】

11784

11785 【C言語API】

11786 ER ercd = ref_mpf(ID mpfid, T_RMPF *pk_rmpf)

11787

11788 【パラメータ】

11789 ID mpfid 対象固定長メモリプールのID番号

11790 T_RMPF * pk_rmpf 固定長メモリプールの現在状態を入れるパケッ

11791 トへのポインタ

11792

11793 【リターンパラメータ】

11794 ER ercd 正常終了(E_OK)またはエラーコード

11795

11796 *固定長メモリプールの現在状態(パケットの内容)

11797 ID wtskid 固定長メモリプールの待ち行列の先頭のタスク

11798 のID番号

11799 uint_t fblkcnt 固定長メモリプール領域の空きメモリ領域に割

11800 り付けることができる固定長メモリブロックの

Page 237: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

237

11801 数

11802

11803 【エラーコード】

11804 E_CTX コンテキストエラー

11805 ・非タスクコンテキストからの呼出し【NGKI2324】

11806 ・CPUロック状態からの呼出し【NGKI2325】

11807 E_ID 不正ID番号

11808 ・mpfidが有効範囲外【NGKI2326】

11809 E_NOEXS オブジェクト未登録

11810 ・対象固定長メモリプールが未登録〔D〕【NGKI2327】

11811 E_OACV オブジェクトアクセス違反

11812 ・対象固定長メモリプールに対する参照操作が許可されてい

11813 ない〔P〕【NGKI2328】

11814 E_MACV メモリアクセス違反

11815 ・pk_rmpfが指すメモリ領域への書込みアクセスが許可されて

11816 いない)〔P〕【NGKI2329】

11817

11818 【機能】

11819

11820 mpfidで指定した固定長メモリプール(対象固定長メモリプール)の現在状態を

11821 参照する.参照した現在状態は,pk_rmpfで指定したパケットに返される

11822 【NGKI2330】.

11823

11824 対象固定長メモリプールの待ち行列にタスクが存在しない場合,wtskidには

11825 TSK_NONE(=0)が返る【NGKI2331】.

11826

11827 【使用上の注意】

11828

11829 ref_mpfはデバッグ時向けの機能であり,その他の目的に使用することは推奨し

11830 ない.これは,ref_mpfを呼び出し,対象固定長メモリプールの現在状態を参照

11831 した直後に割込みが発生した場合,ref_mpfから戻ってきた時には対象固定長メ

11832 モリプールの状態が変化している可能性があるためである.

11833 ----------------------------------------------------------------------

11834

11835 4.6 時間管理機能

11836

11837 4.6.1 システム時刻管理

11838

11839 システム時刻は,カーネルによって管理され,タイムアウト処理,タスクの遅

11840 延,周期ハンドラの起動,アラームハンドラの起動に使用される時刻を管理す

11841 るカーネルオブジェクトである.システム時刻は,符号無しの整数型である

11842 SYSTIM型で表され,単位はミリ秒である【NGKI2332】.

11843

11844 システム時刻は,カーネルの初期化時に0に初期化される【NGKI2333】.タイム

11845 ティックを通知するためのタイマ割込みが発生する毎にカーネルによって更新

11846 され,SYSTIM型で表せる最大値(ULONG_MAX)を超えると0に戻される

11847 【NGKI2334】.タイムティックの周期は,ターゲット定義である【NGKI2335】.

11848 また,システム時刻の精度はターゲットに依存する【NGKI2336】.

11849

11850 マルチプロセッサ対応でないカーネルと,マルチプロセッサ対応カーネルでグ

Page 238: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

238

11851 ローバルタイマ方式を用いている場合には,システム時刻は,システムに1つの

11852 み存在する【NGKI2337】.マルチプロセッサ対応カーネルでローカルタイマ方

11853 式を用いている場合には,システム時刻は,プロセッサ毎に存在する

11854 【NGKI2338】.ローカルタイマ方式とグローバルタイマ方式については,

11855 「2.3.4 マルチプロセッサ対応」の節を参照すること.

11856

11857 マルチプロセッサ対応カーネルでローカルタイマ方式を用いている場合には,

11858 タイムアウト処理とタスクの遅延処理には,待ち解除されるタスクが割り付け

11859 られているプロセッサのシステム時刻が用いられる【NGKI2339】.また,周期

11860 ハンドラとアラームハンドラの起動には,それが割り付けられているプロセッ

11861 サのシステム時刻が用いられる【NGKI2340】.これらの処理単位がマイグレー

11862 ションする場合には,用いられるシステム時刻も変更される【NGKI2341】.こ

11863 の場合にも,イベントの処理が行われるのは,基準時刻から相対時間によって

11864 指定した以上の時間が経過した後となるという規則は維持される【NGKI2342】.

11865

11866 1回のタイムティックの発生により,複数のイベントの処理を行うべき状況になっ

11867 た場合,それらの処理の間の処理順序は規定されない【NGKI2343】.

11868

11869 性能評価用システム時刻は,性能評価に使用することを目的とした,システム

11870 時刻よりも精度の高い時刻である.性能評価用システム時刻は,符号無しの整

11871 数型であるSYSUTM型で表され,単位はマイクロ秒である【NGKI2344】.ただし,

11872 実際の精度はターゲットに依存する【NGKI2345】.

11873

11874 マルチプロセッサ対応カーネルにおける性能評価用システム時刻の扱いは,ター

11875 ゲット定義とする【NGKI2346】.

11876

11877 システム時刻管理機能に関連するカーネル構成マクロは次の通り.

11878

11879 TIC_NUME タイムティックの周期(単位はミリ秒)の分子 【NGKI2347】

11880 TIC_DENO タイムティックの周期(単位はミリ秒)の分母

11881

11882 TOPPERS_SUPPORT_GET_UTM get_utm がサポートされている【NGKI2348】

11883

11884 【TOPPERS/SSPカーネルにおける規定】

11885

11886 SSPカーネルでは,時間管理機能をサポートしない【SSPS0129】.

11887

11888 【使用上の注意】

11889

11890 タイムティックを通知するためのタイマ割込みが長時間マスクされた場合(タ

11891 イマ割込みより優先して実行される割込み処理が長時間続けて実行された場合

11892 を含む)や,シミュレーション環境においてシミュレータのプロセスが長時間

11893 スケジュールされなかった場合には,システム時刻が正しく更新されない可能

11894 性があるため,注意が必要である.

11895

11896 【μITRON4.0仕様との関係】

11897

11898 システム時刻を設定するサービスコール(set_tim)を廃止した.また,タイム

11899 ティックを供給する機能は,カーネル内に実現することとし,そのためのサー

11900 ビスコール(isig_tim)は廃止した.

Page 239: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

239

11901

11902 【μITRON4.0/PX仕様との関係】

11903

11904 システム時刻のアクセス許可ベクタは廃止し,システム状態のアクセス許可ベ

11905 クタで代替することとした.そのため,システム時刻のアクセス許可ベクタを

11906 設定する静的API(SAC_TIM)は廃止した.

11907 ----------------------------------------------------------------------

11908 get_tim システム時刻の参照〔T〕【NGKI2349】

11909

11910 【C言語API】

11911 ER ercd = get_tim(SYSTIM *p_systim)

11912

11913 【パラメータ】

11914 SYSTIM * p_systim システム時刻を入れるメモリ領域へのポインタ

11915

11916 【リターンパラメータ】

11917 ER ercd 正常終了(E_OK)またはエラーコード

11918 SYSTIM systim システム時刻の現在値

11919

11920 【エラーコード】

11921 E_CTX コンテキストエラー

11922 ・非タスクコンテキストからの呼出し【NGKI2350】

11923 ・CPUロック状態からの呼出し【NGKI2351】

11924 E_OACV オブジェクトアクセス違反

11925 ・システム状態に対する参照操作が許可されていない〔P〕

11926 【NGKI2352】

11927 E_MACV メモリアクセス違反

11928 ・p_systimが指すメモリ領域への書込みアクセスが許可され

11929 ていない)〔P〕【NGKI2353】

11930

11931 【機能】

11932

11933 システム時刻の現在値を参照する.参照したシステム時刻は,p_systimが指す

11934 メモリ領域に返される【NGKI2354】.

11935

11936 マルチプロセッサ対応カーネルでローカルタイマ方式を用いている場合には,

11937 自タスクが割り付けられているプロセッサのシステム時刻の現在値を参照する

11938 【NGKI2355】.

11939

11940 【補足説明】

11941

11942 マルチプロセッサ対応カーネルでローカルタイマ方式を用いている場合に,他

11943 のプロセッサのシステム時刻の現在値を参照する機能は用意していない.

11944 ----------------------------------------------------------------------

11945 get_utm 性能評価用システム時刻の参照〔TI〕【NGKI2356】

11946

11947 【C言語API】

11948 ER ercd = get_utm(SYSUTM *p_sysutm)

11949

11950 【パラメータ】

Page 240: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

240

11951 SYSUTM * p_sysutm 性能評価用システム時刻を入れるメモリ領域へ

11952 のポインタ

11953

11954 【リターンパラメータ】

11955 ER ercd 正常終了(E_OK)またはエラーコード

11956 SYSUTM sysutm 性能評価用システム時刻の現在値

11957

11958 【エラーコード】

11959 E_NOSPT 未サポート機能

11960 ・条件については機能の項を参照

11961 E_MACV メモリアクセス違反

11962 ・p_sysutmが指すメモリ領域へ書込みアクセスが許可されて

11963 いない)〔P〕【NGKI2357】

11964

11965 【機能】

11966

11967 性能評価用システム時刻の現在値を参照する.参照した性能評価用システム時

11968 刻は,p_sysutmが指すメモリ領域に返される【NGKI2358】.

11969

11970 get_utmは,任意の状態から呼び出すことができる【NGKI2359】.タスクコンテ

11971 キストからも非タスクコンテキストからも呼び出すことができるし,CPUロック

11972 状態であっても呼び出すことができる.

11973

11974 ターゲット定義で,get_utmがサポートされていない場合がある【NGKI2360】.

11975 get_utmがサポートされている場合には,TOPPERS_SUPPORT_GET_UTMがマクロ定

11976 義される【NGKI2361】.サポートされていない場合にget_utmを呼び出すと,

11977 E_NOSPTエラーが返るか,リンク時にエラーとなる【NGKI2362】.

11978

11979 【使用方法】

11980

11981 get_utmを使用してプログラムの処理時間を計測する場合には,次の手順を取る.

11982 処理時間を計測したいプログラムの実行直前と実行直後に,get_utmを用いて性

11983 能評価用システム時刻を読み出す.その差を求めることで,対象プログラムの

11984 処理時間に,get_utm自身の処理時間を加えたものが得られる.

11985

11986 マルチプロセッサ対応カーネルにおいては,異なるプロセッサで読み出した性

11987 能評価用システム時刻の差を求めることで,処理時間が正しく計測できるとは

11988 限らない.

11989

11990 【使用上の注意】

11991

11992 get_utmは性能評価のための機能であり,その他の目的に使用することは推奨し

11993 ない.

11994

11995 get_utmは,任意の状態から呼び出すことができるように,全割込みロック状態

11996 を用いて実装されている.そのため,get_utmを用いると,カーネル管理外の割

11997 込みの応答性が低下する.

11998

11999 システム時刻が正しく更新されない状況では,get_utmは誤った性能評価用シス

12000 テム時刻を返す可能性がある.システム時刻の更新が確実に行われることを保

Page 241: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

241

12001 証できない場合には,get_utmが誤った性能評価用システム時刻を返す可能性を

12002 考慮に入れて使用しなければならない.

12003

12004 【μITRON4.0仕様との関係】

12005

12006 μITRON4.0仕様に定義されていないサービスコールである.

12007 ----------------------------------------------------------------------

12008

12009 4.6.2 周期ハンドラ

12010

12011 周期ハンドラは,指定した周期で起動されるタイムイベントハンドラである.

12012 周期ハンドラは,周期ハンドラIDと呼ぶID番号によって識別する【NGKI2363】.

12013

12014 各周期ハンドラが持つ情報は次の通り【NGKI2364】.

12015

12016 ・周期ハンドラ属性

12017 ・周期ハンドラの動作状態

12018 ・次に周期ハンドラを起動する時刻

12019 ・拡張情報

12020 ・周期ハンドラの先頭番地

12021 ・起動周期

12022 ・起動位相

12023 ・アクセス許可ベクタ(保護機能対応カーネルの場合)

12024 ・属する保護ドメイン(保護機能対応カーネルの場合)

12025 ・属するクラス(マルチプロセッサ対応カーネルの場合)

12026

12027 周期ハンドラの起動時刻は,後述する基準時刻から,以下の式で求められる相

12028 対時間後である【NGKI2365】.

12029

12030 起動位相+起動周期×(n-1) n=1,2,…

12031

12032 周期ハンドラの動作状態は,動作している状態と動作していない状態のいずれ

12033 かをとる【NGKI2366】.周期ハンドラを動作している状態にすることを動作開

12034 始,動作していない状態にすることを動作停止という.

12035

12036 周期ハンドラが動作している状態の場合には,周期ハンドラを起動する時刻に

12037 なると,周期ハンドラの起動処理が行われる【NGKI2367】.具体的には,拡張

12038 情報をパラメータとして,周期ハンドラが呼び出される【NGKI2368】.

12039

12040 保護機能対応カーネルにおいて,周期ハンドラが属することのできる保護ドメ

12041 インは,カーネルドメインに限られる【NGKI2369】.

12042

12043 周期ハンドラ属性には,次の属性を指定することができる【NGKI2370】.

12044

12045 TA_STA 0x02U 周期ハンドラの生成時に周期ハンドラを動作開始する

12046 TA_PHS 0x04U 周期ハンドラを生成した時刻を基準時刻とする

12047

12048 TA_STAを指定しない場合,周期ハンドラの生成直後には,周期ハンドラは動作

12049 していない状態となる【NGKI2371】.

12050

Page 242: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

242

12051 TA_PHSを指定しない場合には,周期ハンドラを動作開始した時刻が,周期ハン

12052 ドラを起動する時刻の基準時刻となる【NGKI2372】.TA_PHSを指定した場合に

12053 は,周期ハンドラを生成した時刻(静的APIで生成した場合にはカーネルの起動

12054 時刻)が,基準時刻となる【NGKI2373】.

12055

12056 次に周期ハンドラを起動する時刻は,周期ハンドラが動作している状態でのみ

12057 有効で,必要に応じて,カーネルの起動時,周期ハンドラの動作開始時,周期

12058 ハンドラの起動処理時に設定される【NGKI2374】.

12059

12060 マルチプロセッサ対応カーネルでグローバルタイマ方式を用いている場合には,

12061 周期ハンドラは,システム時刻管理プロセッサのみが割付け可能プロセッサで

12062 あるクラスにのみ属することができる【NGKI2375】.すなわち,周期ハンドラ

12063 は,システム時刻管理プロセッサによって実行される.

12064

12065 C言語による周期ハンドラの記述形式は次の通り【NGKI2376】.

12066

12067 void cyclic_handler(intptr_t exinf)

12068 {

12069 周期ハンドラ本体

12070 }

12071

12072 exinfには,周期ハンドラの拡張情報が渡される【NGKI2377】.

12073

12074 周期ハンドラ機能に関連するカーネル構成マクロは次の通り.

12075

12076 TNUM_CYCID 登録できる周期ハンドラの数(動的生成対応でないカー

12077 ネルでは,静的APIによって登録された周期ハンドラの数

12078 に一致)【NGKI2378】

12079

12080 【TOPPERS/ASPカーネルにおける規定】

12081

12082 ASPカーネルでは,TA_PHS属性の周期ハンドラをサポートしない【ASPS0172】.

12083

12084 【TOPPERS/FMPカーネルにおける規定】

12085

12086 FMPカーネルでは,TA_PHS属性の周期ハンドラをサポートしない【FMPS0147】.

12087

12088 【TOPPERS/HRP2カーネルにおける規定】

12089

12090 HRP2カーネルでは,TA_PHS属性の周期ハンドラをサポートしない【HRPS0141】.

12091

12092 【μITRON4.0仕様との関係】

12093

12094 TNUM_CYCIDは,μITRON4.0仕様に規定されていないカーネル構成マクロである.

12095 ----------------------------------------------------------------------

12096 CRE_CYC 周期ハンドラの生成〔S〕【NGKI2379】

12097 acre_cyc 周期ハンドラの生成〔TD〕【NGKI2380】

12098

12099 【静的API】

12100 CRE_CYC(ID cycid, { ATR cycatr, intptr_t exinf, CYCHDR cychdr,

Page 243: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

243

12101 RELTIM cyctim, RELTIM cycphs })

12102

12103 【C言語API】

12104 ER_ID cycid = acre_cyc(const T_CCYC *pk_ccyc)

12105

12106 【パラメータ】

12107 ID cycid 生成する周期ハンドラのID番号(CRE_CYCの場合)

12108 T_CCYC * pk_ccyc 周期ハンドラの生成情報を入れたパケットへの

12109 ポインタ(静的APIを除く)

12110

12111 *周期ハンドラの生成情報(パケットの内容)

12112 ATR cycatr 周期ハンドラ属性

12113 intptr_t exinf 周期ハンドラの拡張情報

12114 CYCHDR c ychdr 周期ハンドラの先頭番地

12115 RELTIM cyctim 周期ハンドラの起動周期

12116 RELTIM cycphs 周期ハンドラの起動位相

12117

12118 【リターンパラメータ】

12119 ER_ID cycid 生成された周期ハンドラのID番号(正の値)また

12120 はエラーコード

12121

12122 【エラーコード】

12123 E_CTX コンテキストエラー

12124 ・非タスクコンテキストからの呼出し〔s〕【NGKI2381】

12125 ・CPUロック状態からの呼出し〔s〕【NGKI2382】

12126 E_RSATR 予約属性

12127 ・cycatrが無効【NGKI2383】

12128 ・属する保護ドメインの指定が有効範囲外またはカーネルド

12129 メイン以外〔sP〕【NGKI2384】

12130 ・カーネルドメインの囲みの中に記述されていない〔SP〕

12131 【NGKI2385】

12132 ・属するクラスの指定が有効範囲外〔sM〕【NGKI2386】

12133 ・クラスの囲みの中に記述されていない〔SM〕【NGKI2387】

12134 ・その他の条件については機能の項を参照

12135 E_PAR パラメータエラー

12136 ・cychdrがプログラムの先頭番地として正しくない【NGKI2388】

12137 ・cyctimが有効範囲(0より大きくTMAX_RELTIM以下)外【NGKI2397】

12138 ・cycphsが有効範囲(0以上TMAX_RELTIM以下)外【NGKI2399】

12139 E_OACV オブジェクトアクセス違反

12140 ・システム状態に対する管理操作が許可されていない〔sP〕

12141 【NGKI2389】

12142 E_MACV メモリアクセス違反

12143 ・pk_ccycが指すメモリ領域への読出しアクセスが許可されて

12144 いない〔sP〕【NGKI2390】

12145 E_NOID ID番号不足

12146 ・割り付けられる周期ハンドラIDがない〔sD〕【NGKI2391】

12147 E_OBJ オブジェクト状態エラー

12148 ・cycidで指定した周期ハンドラが登録済み(CRE_CYCの場合)

12149 【NGKI2392】

12150

Page 244: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

244

12151 【機能】

12152

12153 各パラメータで指定した周期ハンドラ生成情報に従って,周期ハンドラを生成

12154 する.具体的な振舞いは以下の通り.

12155

12156 cycatrにTA_STAを指定した場合,対象周期ハンドラは動作している状態となる

12157 【NGKI2393】.次に周期ハンドラを起動する時刻は,サービスコールを呼び出

12158 した時刻(静的APIの場合はカーネルの起動時刻)から,cycphsで指定した相対

12159 時間後に設定される【NGKI2394】.cycphsにcyctimより大きい値を指定しても

12160 よい【NGKI2400】.

12161

12162 cycatrにTA_STAを指定しない場合,対象周期ハンドラは動作していない状態に

12163 初期化される【NGKI2395】.

12164

12165 静的APIにおいては,cycidはオブジェクト識別名,cycatr,cyctim,cycphsは

12166 整数定数式パラメータ,exinfとcychdrは一般定数式パラメータである

12167 【NGKI2396】.

12168

12169 マルチプロセッサ対応カーネルでグローバルタイマ方式を用いている場合で,

12170 生成する周期ハンドラの属するクラスの割付け可能プロセッサが,システム時

12171 刻管理プロセッサのみでない場合には,E_RSATRエラーとなる【NGKI2401】.

12172

12173 【補足説明】

12174

12175 静的APIにおいて,cycatrにTA_STAを,cycphsに0を指定した場合,周期ハンド

12176 ラが最初に呼び出されるのは,カーネル起動後最初のタイムティックになる.

12177 cycphsに1を指定した場合も同じ振舞いとなるため,静的APIでcycatrにTA_STA

12178 が指定されている場合には,cycphsに0を指定することは推奨されず,コンフィ

12179 ギュレータが警告メッセージを出力する.

12180

12181 【TOPPERS/ASPカーネルにおける規定】

12182

12183 ASPカーネルでは,CRE_CYCのみをサポートする【ASPS0173】.ただし,TA_PHS

12184 属性の周期ハンドラはサポートしない【ASPS0174】.動的生成機能拡張パッケー

12185 ジでは,acre_cycもサポートする【ASPS0175】.

12186

12187 【TOPPERS/FMPカーネルにおける規定】

12188

12189 FMPカーネルでは,CRE_CYCのみをサポートする【FMPS0148】.ただし,TA_PHS

12190 属性の周期ハンドラはサポートしない【FMPS0149】.

12191

12192 【TOPPERS/HRP2カーネルにおける規定】

12193

12194 HRP2カーネルでは,CRE_CYCのみをサポートする【HRPS0142】.ただし,

12195 TA_PHS属性の周期ハンドラはサポートしない【HRPS0143】.

12196

12197 【μITRON4.0仕様との関係】

12198

12199 cychdrのデータ型をCYCHDRに変更した.また,cycphsにcyctimより大きい値を

12200 指定した場合の振舞いと,静的APIでcycphsに0を指定した場合の振舞いを規定

Page 245: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

245

12201 した.

12202 ----------------------------------------------------------------------

12203 AID_CYC 割付け可能な周期ハンドラIDの数の指定〔SD〕【NGKI2402】

12204

12205 【静的API】

12206 AID_CYC(uint_t nocyc)

12207

12208 【パラメータ】

12209 uint_t nocyc 割付け可能な周期ハンドラIDの数

12210

12211 【エラーコード】

12212 E_RSATR 予約属性

12213 ・カーネルドメインの囲みの中に記述されていない〔P〕【NGKI2403】

12214 ・クラスの囲みの中に記述されていない〔M〕【NGKI2404】

12215 ・その他の条件については機能の項を参照

12216 E_PAR パラメータエラー

12217 ・nocycが負の値【NGKI3285】

12218

12219 【機能】

12220

12221 nocycで指定した数の周期ハンドラIDを,周期ハンドラを生成するサービスコー

12222 ルによって割付け可能な周期ハンドラIDとして確保する【NGKI2405】.

12223

12224 nocycは整数定数式パラメータである【NGKI2406】.

12225

12226 マルチプロセッサ対応カーネルでグローバルタイマ方式を用いている場合で,

12227 AID_CYCが属するクラスの割付け可能プロセッサが,システム時刻管理プロセッ

12228 サのみでない場合には,E_RSATRエラーとなる【NGKI2407】.

12229 ----------------------------------------------------------------------

12230 SAC_CYC 周期ハンドラのアクセス許可ベクタの設定〔SP〕【NGKI2408】

12231 sac_cyc 周期ハンドラのアクセス許可ベクタの設定〔TPD〕【NGKI2409】

12232

12233 【静的API】

12234 SAC_CYC(ID cycid, { ACPTN acptn1 , ACPTN acptn2,

12235 ACPTN acptn3, ACPTN acptn4 })

12236

12237 【C言語API】

12238 ER ercd = sac_cyc(ID cycid, const ACVCT *p_acvct)

12239

12240 【パラメータ】

12241 ID cycid 対象周期ハンドラのID番号

12242 ACVCT * p_acvct アクセス許可ベクタを入れたパケットへのポ

12243 インタ(静的APIを除く)

12244

12245 *アクセス許可ベクタ(パケットの内容)

12246 ACPTN acptn1 通常操作1のアクセス許可パターン

12247 ACPTN acptn2 通常操作2のアクセス許可パターン

12248 ACPTN acptn3 管理操作のアクセス許可パターン

12249 ACPTN acptn4 参照操作のアクセス許可パターン

12250

Page 246: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

246

12251 【リターンパラメータ】

12252 ER ercd 正常終了(E_OK)またはエラーコード

12253

12254 【エラーコード】

12255 E_CTX コンテキストエラー

12256 ・非タスクコンテキストからの呼出し〔s〕【NGKI2410】

12257 ・CPUロック状態からの呼出し〔s〕【NGKI2411】

12258 E_ID 不正ID番号

12259 ・cycidが有効範囲外〔s〕【NGKI2412】

12260 E_RSATR 予約属性

12261 ・対象周期ハンドラが属する保護ドメインの囲みの中に記述

12262 されていない〔S〕【NGKI2413】

12263 ・対象周期ハンドラが属するクラスの囲みの中に記述されて

12264 いない〔SM〕【NGKI2414】

12265 E_NOEXS オブジェクト未登録

12266 ・対象周期ハンドラが未登録【NGKI2415】

12267 E_OACV オブジェクトアクセス違反

12268 ・対象周期ハンドラに対する管理操作が許可されていない〔s〕

12269 【NGKI2416】

12270 E_MACV メモリアクセス違反

12271 ・p_acvctが指すメモリ領域への読出しアクセスが許可されて

12272 いない〔s〕【NGKI2417】

12273 E_OBJ オブジェクト状態エラー

12274 ・対象周期ハンドラは静的APIで生成された〔s〕【NGKI2418】

12275 ・対象周期ハンドラに対してアクセス許可ベクタが設定済み

12276 〔S〕【NGKI2419】

12277

12278 【機能】

12279

12280 cycidで指定した周期ハンドラ(対象周期ハンドラ)のアクセス許可ベクタ(4

12281 つのアクセス許可パターンの組)を,各パラメータで指定した値に設定する

12282 【NGKI2420】.

12283

12284 静的APIにおいては,cycidはオブジェクト識別名,acptn1~acptn4は整数定数

12285 式パラメータである【NGKI2421】.

12286

12287 【TOPPERS/ASPカーネルにおける規定】

12288

12289 ASPカーネルでは,SAC_CYC,sac_cycをサポートしない【ASPS0176】.

12290

12291 【TOPPERS/FMPカーネルにおける規定】

12292

12293 FMPカーネルでは,SAC_CYC,sac_cycをサポートしない【FMPS0150】.

12294

12295 【TOPPERS/HRP2カーネルにおける規定】

12296

12297 HRP2カーネルでは,SAC_CYCのみをサポートする【HRPS0144】.

12298 ----------------------------------------------------------------------

12299 del_cyc 周期ハンドラの削除〔TD〕【NGKI2422】

12300

Page 247: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

247

12301 【C言語API】

12302 ER ercd = del_cyc(ID cycid)

12303

12304 【パラメータ】

12305 ID cycid 対象周期ハンドラのID番号

12306

12307 【リターンパラメータ】

12308 ER ercd 正常終了(E_OK)またはエラーコード

12309

12310 【エラーコード】

12311 E_CTX コンテキストエラー

12312 ・非タスクコンテキストからの呼出し【NGKI2423】

12313 ・CPUロック状態からの呼出し【NGKI2424】

12314 E_ID 不正ID番号

12315 ・cycidが有効範囲外【NGKI2425】

12316 E_NOEXS オブジェクト未登録

12317 ・対象周期ハンドラが未登録【NGKI2426】

12318 E_OACV オブジェクトアクセス違反

12319 ・対象周期ハンドラに対する管理操作が許可されていない〔P〕

12320 【NGKI2427】

12321 E_OBJ オブジェクト状態エラー

12322 ・対象周期ハンドラは静的APIで生成された【NGKI2428】

12323

12324 【機能】

12325

12326 cycidで指定した周期ハンドラ(対象周期ハンドラ)を削除する.具体的な振舞

12327 いは以下の通り.

12328

12329 対象周期ハンドラの登録が解除され,その周期ハンドラIDが未使用の状態に戻

12330 される【NGKI2429】.対象周期ハンドラが動作している状態であった場合には,

12331 動作していない状態にされた後に,登録が解除される【NGKI2430】.

12332

12333 【TOPPERS/ASPカーネルにおける規定】

12334

12335 ASPカーネルでは,del_cycをサポートしない【ASPS0177】.ただし,動的生成

12336 機能拡張パッケージでは,del_cycをサポートする【ASPS0178】.

12337

12338 【TOPPERS/FMPカーネルにおける規定】

12339

12340 FMPカーネルでは,del_cycをサポートしない【FMPS0151】.

12341

12342 【TOPPERS/HRP2カーネルにおける規定】

12343

12344 HRP2カーネルでは,del_cycをサポートしない【HRPS0145】.

12345 ----------------------------------------------------------------------

12346 sta_cyc 周期ハンドラの動作開始〔T〕【NGKI2431】

12347

12348 【C言語API】

12349 ER ercd = sta_cyc(ID cycid)

12350

Page 248: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

248

12351 【パラメータ】

12352 ID cycid 対象周期ハンドラのID番号

12353

12354 【リターンパラメータ】

12355 ER ercd 正常終了(E_OK)またはエラーコード

12356

12357 【エラーコード】

12358 E_CTX コンテキストエラー

12359 ・非タスクコンテキストからの呼出し【NGKI2432】

12360 ・CPUロック状態からの呼出し【NGKI2433】

12361 E_ID 不正ID番号

12362 ・cycidが有効範囲外【NGKI2434】

12363 E_NOEXS オブジェクト未登録

12364 ・対象周期ハンドラが未登録〔D〕【NGKI2435】

12365 E_OACV オブジェクトアクセス違反

12366 ・対象周期ハンドラに対する通常操作1が許可されていない〔P〕

12367 【NGKI2436】

12368

12369 【機能】

12370

12371 cycidで指定した周期ハンドラ(対象周期ハンドラ)を動作開始する.具体的な

12372 振舞いは以下の通り.

12373

12374 対象周期ハンドラが動作していない状態であれば,対象周期ハンドラは動作し

12375 ている状態となる【NGKI2437】.次に周期ハンドラを起動する時刻は,

12376 sta_cycを呼び出して以降の最初の起動時刻に設定される【NGKI2438】.

12377

12378 対象周期ハンドラが動作している状態であれば,次に周期ハンドラを起動する

12379 時刻の再設定のみが行われる【NGKI2439】.

12380

12381 【補足説明】

12382

12383 TA_PHS属性でない周期ハンドラの場合,次に周期ハンドラを起動する時刻は,

12384 sta_cycを呼び出してから,対象周期ハンドラの起動位相で指定した相対時間後

12385 に設定される.

12386

12387 対象周期ハンドラがTA_PHS属性で,動作している状態であれば,次に周期ハン

12388 ドラを起動する時刻は変化しない.

12389

12390 【μITRON4.0仕様との関係】

12391

12392 TA_PHS属性でない周期ハンドラにおいて,sta_cycを呼び出した後,最初に周期

12393 ハンドラが起動される時刻を変更した.μITRON4.0仕様では,sta_cycを呼び出

12394 してから周期ハンドラの起動周期で指定した相対時間後となっているが,この

12395 仕様では,起動位相で指定した相対時間後とした.

12396 ----------------------------------------------------------------------

12397 msta_cyc 割付けプロセッサ指定での周期ハンドラの動作開始〔TM〕【NGKI2440】

12398

12399 【C言語API】

12400 ER ercd = msta_cyc(ID cycid, ID prcid)

Page 249: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

249

12401

12402 【パラメータ】

12403 ID cycid 対象周期ハンドラのID番号

12404 ID prcid 周期ハンドラの割付け対象のプロセッサのID番号

12405

12406 【リターンパラメータ】

12407 ER ercd 正常終了(E_OK)またはエラーコード

12408

12409 【エラーコード】

12410 E_CTX コンテキストエラー

12411 ・非タスクコンテキストからの呼出し【NGKI2441】

12412 ・CPUロック状態からの呼出し【NGKI2442】

12413 E_NOSPT 未サポート機能

12414 ・条件については機能の項を参照

12415 E_ID 不正ID番号

12416 ・cycidが有効範囲外【NGKI2443】

12417 ・prcidが有効範囲外【NGKI2444】

12418 E_PAR パラメータエラー

12419 ・条件については機能の項を参照

12420 E_NOEXS オブジェクト未登録

12421 ・対象周期ハンドラが未登録〔D〕【NGKI2445】

12422 E_OACV オブジェクトアクセス違反

12423 ・対象周期ハンドラに対する通常操作1が許可されていない〔P〕

12424 【NGKI2446】

12425

12426 【機能】

12427

12428 prcidで指定したプロセッサを割付けプロセッサとして,cycidで指定した周期

12429 ハンドラ(対象周期ハンドラ)を動作開始する.具体的な振舞いは以下の通り.

12430

12431 対象周期ハンドラが動作していない状態であれば,対象周期ハンドラの割付け

12432 プロセッサがprcidで指定したプロセッサに変更された後,対象周期ハンドラは

12433 動作している状態となる【NGKI2447】.次に周期ハンドラを起動する時刻は,

12434 msta_cycを呼び出して以降の最初の起動時刻に設定される【NGKI2448】.

12435

12436 対象周期ハンドラが動作している状態であれば,対象周期ハンドラの割付けプ

12437 ロセッサがprcidで指定したプロセッサに変更された後,次に周期ハンドラを起

12438 動する時刻の再設定が行われる【NGKI2449】.

12439

12440 対象周期ハンドラが実行中である場合には,割付けプロセッサを変更しても,

12441 実行中の周期ハンドラを実行するプロセッサは変更されない【NGKI2450】.対

12442 象周期ハンドラが変更後の割付けプロセッサで実行されるのは,次に起動され

12443 る時からである【NGKI2451】.

12444

12445 対象周期ハンドラの属するクラスの割付け可能プロセッサが,prcidで指定した

12446 プロセッサを含んでいない場合には,E_PARエラーとなる【NGKI2452】.

12447

12448 prcidにTPRC_INI(=0)を指定すると,対象周期ハンドラの割付けプロセッサ

12449 を,それが属するクラスの初期割付けプロセッサとする【NGKI2453】.

12450

Page 250: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

250

12451 グローバルタイマ方式を用いている場合,msta_cycはE_NOSPTを返す

12452 【NGKI2454】.

12453

12454 【補足説明】

12455

12456 TA_PHS属性でない周期ハンドラの場合,次に周期ハンドラを起動する時刻は,

12457 msta_cycを呼び出してから,対象周期ハンドラの起動位相で指定した相対時間

12458 後に設定される.

12459

12460 【使用上の注意】

12461

12462 msta_cycで実行中の周期ハンドラの割付けプロセッサを変更した場合,同じ周

12463 期ハンドラが異なるプロセッサで同時に実行される可能性がある.特に,対象

12464 周期ハンドラの起動位相が0の場合に,注意が必要である.

12465

12466 【μITRON4.0仕様との関係】

12467

12468 μITRON4.0仕様に定義されていないサービスコールである.

12469 ----------------------------------------------------------------------

12470 stp_cyc 周期ハンドラの動作停止〔T〕【NGKI2455】

12471

12472 【C言語API】

12473 ER ercd = stp_cyc(ID cycid)

12474

12475 【パラメータ】

12476 ID cycid 対象周期ハンドラのID番号

12477

12478 【リターンパラメータ】

12479 ER ercd 正常終了(E_OK)またはエラーコード

12480

12481 【エラーコード】

12482 E_CTX コンテキストエラー

12483 ・非タスクコンテキストからの呼出し【NGKI2456】

12484 ・CPUロック状態からの呼出し【NGKI2457】

12485 E_ID 不正ID番号

12486 ・cycidが有効範囲外【NGKI2458】

12487 E_NOEXS オブジェクト未登録

12488 ・対象周期ハンドラが未登録〔D〕【NGKI2459】

12489 E_OACV オブジェクトアクセス違反

12490 ・対象周期ハンドラに対する通常操作2が許可されていない〔P〕

12491 【NGKI2460】

12492

12493 【機能】

12494

12495 cycidで指定した周期ハンドラ(対象周期ハンドラ)を動作停止する.具体的な

12496 振舞いは以下の通り.

12497

12498 対象周期ハンドラが動作している状態であれば,動作していない状態になる

12499 【NGKI2461】.対象周期ハンドラが動作していない状態であれば,何も行われ

12500 ずに正常終了する【NGKI2462】.

Page 251: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

251

12501 ----------------------------------------------------------------------

12502 ref_cyc 周期ハンドラの状態参照〔T〕【NGKI2463】

12503

12504 【C言語API】

12505 ER ercd = ref_cyc(ID cycid, T_RCYC *pk_rcyc)

12506

12507 【パラメータ】

12508 ID cycid 対象周期ハンドラのID番号

12509 T_RCYC * pk_rcyc 周期ハンドラの現在状態を入れるパケットへの

12510 ポインタ

12511

12512 【リターンパラメータ】

12513 ER ercd 正常終了(E_OK)またはエラーコード

12514

12515 *周期ハンドラの現在状態(パケットの内容)

12516 STAT cycstat 周期ハンドラの動作状態

12517 RELTIM lefttim 次に周期ハンドラを起動する時刻までの相対時間

12518 ID prcid 周期ハンドラの割付けプロセッサのID(マルチプ

12519 ロセッサ対応カーネルの場合)

12520

12521 【エラーコード】

12522 E_CTX コンテキストエラー

12523 ・非タスクコンテキストからの呼出し【NGKI2464】

12524 ・CPUロック状態からの呼出し【NGKI2465】

12525 E_ID 不正ID番号

12526 ・cycidが有効範囲外【NGKI2466】

12527 E_NOEXS オブジェクト未登録

12528 ・対象周期ハンドラが未登録〔D〕【NGKI2467】

12529 E_OACV オブジェクトアクセス違反

12530 ・対象周期ハンドラに対する参照操作が許可されていない〔P〕

12531 【NGKI2468】

12532 E_MACV メモリアクセス違反

12533 ・pk_rcycが指すメモリ領域への書込みアクセスが許可されて

12534 いない)〔P〕【NGKI2469】

12535

12536 【機能】

12537

12538 cycidで指定した周期ハンドラ(対象周期ハンドラ)の現在状態を参照する.参

12539 照した現在状態は,pk_rcycで指定したパケットに返される【NGKI2470】.

12540

12541 cycstatには,対象周期ハンドラの現在の動作状態を表す次のいずれかの値が返

12542 される【NGKI2471】.

12543

12544 TCYC_STP 0x01U 周期ハンドラが動作していない状態

12545 TCYC_STA 0x02U 周期ハンドラが動作している状態

12546

12547 対象周期ハンドラが動作している状態である場合には,lefttimに,次に周期ハ

12548 ンドラ起動する時刻までの相対時間が返される【NGKI2472】.対象周期ハンド

12549 ラが動作していない状態である場合には,lefttimの値は保証されない

12550 【NGKI2473】.

Page 252: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

252

12551

12552 マルチプロセッサ対応カーネルでは,prcidに,対象周期ハンドラの割付けプロ

12553 セッサのID番号が返される【NGKI2474】.

12554

12555 【使用上の注意】

12556

12557 ref_cycはデバッグ時向けの機能であり,その他の目的に使用することは推奨し

12558 ない.これは,ref_cycを呼び出し,対象周期ハンドラの現在状態を参照した直

12559 後に割込みが発生した場合,ref_cycから戻ってきた時には対象周期ハンドラの

12560 状態が変化している可能性があるためである.

12561

12562 【μITRON4.0仕様との関係】

12563

12564 TCYC_STPとTCYC_STAを値を変更した.

12565 ----------------------------------------------------------------------

12566

12567 4.6.3 アラームハンドラ

12568

12569 アラームハンドラは,指定した相対時間後に起動されるタイムイベントハンド

12570 ラである.アラームハンドラは,アラームハンドラIDと呼ぶID番号によって識

12571 別する【NGKI2475】.

12572

12573 各アラームハンドラが持つ情報は次の通り【NGKI2476】.

12574

12575 ・アラームハンドラ属性

12576 ・アラームハンドラの動作状態

12577 ・アラームハンドラを起動する時刻

12578 ・拡張情報

12579 ・アラームハンドラの先頭番地

12580 ・アクセス許可ベクタ(保護機能対応カーネルの場合)

12581 ・属する保護ドメイン(保護機能対応カーネルの場合)

12582 ・属するクラス(マルチプロセッサ対応カーネルの場合)

12583

12584 アラームハンドラの動作状態は,動作している状態と動作していない状態のい

12585 ずれかをとる【NGKI2477】.アラームハンドラを動作している状態にすること

12586 を動作開始,動作していない状態にすることを動作停止という.

12587

12588 アラームハンドラを起動する時刻は,アラームハンドラを動作開始する時に設

12589 定される【NGKI2478】.

12590

12591 アラームハンドラが動作している状態の場合には,アラームハンドラを起動す

12592 る時刻になると,アラームハンドラの起動処理が行われる【NGKI2479】.具体

12593 的には,まず,アラームハンドラが動作していない状態にされる【NGKI2480】.

12594 その後に,拡張情報をパラメータとして,アラームハンドラが呼び出される

12595 【NGKI2481】.

12596

12597 保護機能対応カーネルにおいて,アラームハンドラが属することのできる保護

12598 ドメインは,カーネルドメインに限られる【NGKI2482】.

12599

12600 マルチプロセッサ対応カーネルでグローバルタイマ方式を用いている場合には,

Page 253: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

253

12601 アラームハンドラは,割付け可能プロセッサがシステム時刻管理プロセッサの

12602 みであるクラスにのみ属することができる【NGKI2483】.すなわち,アラーム

12603 ハンドラは,システム時刻管理プロセッサによって実行される.

12604

12605 C言語によるアラームハンドラの記述形式は次の通り【NGKI2484】.

12606

12607 void alarm_handler(intptr_t exinf)

12608 {

12609 アラームハンドラ本体

12610 }

12611

12612 exinfには,アラームハンドラの拡張情報が渡される【NGKI2485】.

12613

12614 アラームハンドラ機能に関連するカーネル構成マクロは次の通り.

12615

12616 TNUM_ALMID 登録できるアラームハンドラの数(動的生成対応でない

12617 カーネルでは,静的APIによって登録されたアラームハン

12618 ドラの数に一致)【NGKI2486】

12619

12620 【μITRON4.0仕様との関係】

12621

12622 TNUM_ALMIDは,μITRON4.0仕様に規定されていないカーネル構成マクロである.

12623 ----------------------------------------------------------------------

12624 CRE_ALM アラームハンドラの生成〔S〕【NGKI2487】

12625 acre_alm アラームハンドラの生成〔TD〕【NGKI2488】

12626

12627 【静的API】

12628 CRE_ALM(ID almid, { ATR almatr, intptr_t exinf, ALMHDR almhdr })

12629

12630 【C言語API】

12631 ER_ID almid = acre_alm(const T_CALM *pk _calm)

12632

12633 【パラメータ】

12634 ID almid 生成するアラームハンドラのID番号(CRE_ALM

12635 の場合)

12636 T_CALM * pk_calm アラームハンドラの生成情報を入れたパケット

12637 へのポインタ(静的APIを除く)

12638

12639 *アラームハンドラの生成情報(パケットの内容)

12640 ATR almatr アラームハンドラ属性

12641 intptr_t exinf アラームハンドラの拡張情報

12642 ALMHDR almhdr アラームハンドラの先頭番地

12643

12644 【リターンパラメータ】

12645 ER_ID almid 生成されたアラームハンドラのID番号(正の値)

12646 またはエラーコード

12647

12648 【エラーコード】

12649 E_CTX コンテキストエラー

12650 ・非タスクコンテキストからの呼出し〔s〕【NGKI2489】

Page 254: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

254

12651 ・CPUロック状態からの呼出し〔s〕【NGKI2490】

12652 E_RSATR 予約属性

12653 ・almatrが無効【NGKI2491】

12654 ・属する保護ドメインの指定が有効範囲外またはカーネルド

12655 メイン以外〔sP〕【NGKI2492】

12656 ・カーネルドメインの囲みの中に記述されていない〔SP〕

12657 【NGKI2493】

12658 ・属するクラスの指定が有効範囲外〔sM〕【NGKI2494】

12659 ・クラスの囲みの中に記述されていない〔SM〕【NGKI2495】

12660 ・その他の条件については機能の項を参照

12661 E_PAR パラメータエラー

12662 ・almhdrがプログラムの先頭番地として正しくない【NGKI2496】

12663 E_OACV オブジェクトアクセス違反

12664 ・システム状態に対する管理操作が許可されていない〔sP〕

12665 【NGKI2497】

12666 E_MACV メモリアクセス違反

12667 ・pk_calmが指すメモリ領域への読出しアクセスが許可されて

12668 いない〔sP〕【NGKI2498】

12669 E_NOID ID番号不足

12670 ・割り付けられるアラームハンドラIDがない〔sD〕【NGKI2499】

12671 E_OBJ オブジェクト状態エラー

12672 ・almidで指定したアラームハンドラが登録済み(CRE_ALMの

12673 場合)【NGKI2500】

12674

12675 【機能】

12676

12677 各パラメータで指定したアラームハンドラ生成情報に従って,アラームハンド

12678 ラを生成する.対象アラームハンドラは,動作していない状態に初期化される

12679 【NGKI2501】.

12680

12681 静的APIにおいては,almidはオブジェクト識別名,almatrは整数定数式パラメー

12682 タ,exinfとalmhdrは一般定数式パラメータである【NGKI2502】.

12683

12684 マルチプロセッサ対応カーネルでグローバルタイマ方式を用いている場合で,

12685 生成するアラームハンドラの属するクラスの割付け可能プロセッサが,システ

12686 ム時刻管理プロセッサのみでない場合には,E_RSATRエラーとなる【NGKI2503】.

12687

12688 【TOPPERS/ASPカーネルにおける規定】

12689

12690 ASPカーネルでは,CRE_ALMのみをサポートする【ASPS0179】.ただし,動的生

12691 成機能拡張パッケージでは,acre_almもサポートする【ASPS0180】.

12692

12693 【TOPPERS/FMPカーネルにおける規定】

12694

12695 FMPカーネルでは,CRE_ALMのみをサポートする【FMPS0152】.

12696

12697 【TOPPERS/HRP2カーネルにおける規定】

12698

12699 HRP2カーネルでは,CRE_ALMのみをサポートする【HRPS0146】.

12700

Page 255: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

255

12701 【μITRON4.0仕様との関係】

12702

12703 almhdrのデータ型をALMHDRに変更した.

12704 ----------------------------------------------------------------------

12705 AID_ALM 割付け可能なアラームハンドラIDの数の指定〔SD〕【NGKI2504】

12706

12707 【静的API】

12708 AID_ALM(uint_t noalm)

12709

12710 【パラメータ】

12711 uint_t noalm 割付け可能なアラームハンドラIDの数

12712

12713 【エラーコード】

12714 E_RSATR 予約属性

12715 ・カーネルドメインの囲みの中に記述されていない〔P〕【NGKI2505】

12716 ・クラスの囲みの中に記述されていない〔M〕【NGKI2506】

12717 ・その他の条件については機能の項を参照

12718 E_PAR パラメータエラー

12719 ・noalmが負の値【NGKI3286】

12720

12721 【機能】

12722

12723 noalmで指定した数のアラームハンドラIDを,アラームハンドラを生成するサー

12724 ビスコールによって割付け可能なアラームハンドラIDとして確保する

12725 【NGKI2507】.

12726

12727 noalmは整数定数式パラメータである【NGKI2508】.

12728

12729 マルチプロセッサ対応カーネルでグローバルタイマ方式を用いている場合で,

12730 AID_ALMが属するクラスの割付け可能プロセッサが,システム時刻管理プロセッ

12731 サのみでない場合には,E_RSATRエラーとなる【NGKI2509】.

12732 ----------------------------------------------------------------------

12733 SAC_ALM アラームハンドラのアクセス許可ベクタの設定〔SP〕【NGKI2510】

12734 sac_alm アラームハンドラのアクセス許可ベクタの設定〔TPD〕【NGKI2511】

12735

12736 【静的API】

12737 SAC_ALM(ID almid, { ACPTN acptn1, ACPTN acptn2,

12738 ACPTN acptn3, ACPTN acptn4 })

12739

12740 【C言語API】

12741 ER ercd = sac_alm(ID almid, const ACVCT *p_acvct)

12742

12743 【パラメータ】

12744 ID almid 対象アラームハンドラのID番号

12745 ACVCT * p_acvct アクセス許可ベクタを入れたパケットへのポ

12746 インタ(静的APIを除く)

12747

12748 *アクセス許可ベクタ(パケットの内容)

12749 ACPTN acptn1 通常操作1のアクセス許可パターン

12750 ACPTN acptn2 通常操作2のアクセス許可パターン

Page 256: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

256

12751 ACPTN acptn3 管理操作のアクセス許可パターン

12752 ACPTN acptn4 参照操作のアクセス許可パターン

12753

12754 【リターンパラメータ】

12755 ER ercd 正常終了(E_OK)またはエラーコード

12756

12757 【エラーコード】

12758 E_CTX コンテキストエラー

12759 ・非タスクコンテキストからの呼出し〔s〕【NGKI2512】

12760 ・CPUロック状態からの呼出し〔s〕【NGKI2513】

12761 E_ID 不正ID番号

12762 ・almidが有効範囲外〔s〕【NGKI2514】

12763 E_RSATR 予約属性

12764 ・対象アラームハンドラが属する保護ドメインの囲みの中に

12765 記述されていない〔S〕【NGKI2515】

12766 ・対象アラームハンドラが属するクラスの囲みの中に記述さ

12767 れていない〔SM〕【NGKI2516】

12768 E_NOEXS オブジェクト未登録

12769 ・対象アラームハンドラが未登録【NGKI2517】

12770 E_OACV オブジェクトアクセス違反

12771 ・対象アラームハンドラに対する管理操作が許可されていな

12772 い〔s〕【NGKI2518】

12773 E_MACV メモリアクセス違反

12774 ・p_acvctが指すメモリ領域への読出しアクセスが許可されて

12775 いない〔s〕【NGKI2519】

12776 E_OBJ オブジェクト状態エラー

12777 ・対象アラームハンドラは静的APIで生成された〔s〕【NGKI2520】

12778 ・対象アラームハンドラに対してアクセス許可ベクタが設定

12779 済み〔S〕【NGKI2521】

12780

12781 【機能】

12782

12783 almidで指定したアラームハンドラ(対象アラームハンドラ)のアクセス許可ベ

12784 クタ(4つのアクセス許可パターンの組)を,各パラメータで指定した値に設定

12785 する【NGKI2522】.

12786

12787 静的APIにおいては,almidはオブジェクト識別名,acptn1~acptn4は整数定数

12788 式パラメータである【NGKI2523】.

12789

12790 【TOPPERS/ASPカーネルにおける規定】

12791

12792 ASPカーネルでは,SAC_ALM,sac_almをサポートしない【ASPS0181】.

12793

12794 【TOPPERS/FMPカーネルにおける規定】

12795

12796 FMPカーネルでは,SAC_ALM,sac_almをサポートしない【FMPS0153】.

12797

12798 【TOPPERS/HRP2カーネルにおける規定】

12799

12800 HRP2カーネルでは,SAC_ALMのみをサポートする【HRPS0147】.

Page 257: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

257

12801 ----------------------------------------------------------------------

12802 del_alm アラームハンドラの削除〔TD〕【NGKI2524】

12803

12804 【C言語API】

12805 ER ercd = del_alm(ID almid)

12806

12807 【パラメータ】

12808 ID almid 対象アラームハンドラのID番号

12809

12810 【リターンパラメータ】

12811 ER ercd 正常終了(E_OK)またはエラーコード

12812

12813 【エラーコード】

12814 E_CTX コンテキストエラー

12815 ・非タスクコンテキストからの呼出し【NGKI2525】

12816 ・CPUロック状態からの呼出し【NGKI2526】

12817 E_ID 不正ID番号

12818 ・almidが有効範囲外【NGKI2527】

12819 E_NOEXS オブジェクト未登録

12820 ・対象アラームハンドラが未登録【NGKI2528】

12821 E_OACV オブジェクトアクセス違反

12822 ・対象アラームハンドラに対する管理操作が許可されていな

12823 い〔P〕【NGKI2529】

12824 E_OBJ オブジェクト状態エラー

12825 ・対象アラームハンドラは静的APIで生成された【NGKI2530】

12826

12827 【機能】

12828

12829 almidで指定したアラームハンドラ(対象アラームハンドラ)を削除する.具体

12830 的な振舞いは以下の通り.

12831

12832 対象アラームハンドラの登録が解除され,そのアラームハンドラIDが未使用の

12833 状態に戻される【NGKI2531】.対象アラームハンドラが動作している状態であっ

12834 た場合には,登録解除の前に,アラームハンドラが動作していない状態となる

12835 【NGKI2532】.

12836

12837 【TOPPERS/ASPカーネルにおける規定】

12838

12839 ASPカーネルでは,del_almをサポートしない【ASPS0182】.ただし,動的生成

12840 機能拡張パッケージでは,del_almをサポートする【ASPS0183】.

12841

12842 【TOPPERS/FMPカーネルにおける規定】

12843

12844 FMPカーネルでは,del_almをサポートしない【FMPS0154】.

12845

12846 【TOPPERS/HRP2カーネルにおける規定】

12847

12848 HRP2カーネルでは,del_almをサポートしない【HRPS0148】.

12849 ----------------------------------------------------------------------

12850 sta_alm アラームハンドラの動作開始〔T〕【NGKI2533】

Page 258: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

258

12851 ista_alm アラームハンドラの動作開始〔I〕【NGKI2534】

12852

12853 【C言語API】

12854 ER ercd = sta_alm(ID almid, RELTIM almtim)

12855 ER ercd = ista_alm(ID almid, RELTIM almtim)

12856

12857 【パラメータ】

12858 ID almid 対象アラームハンドラのID番号

12859 RELTIM almtim アラームハンドラの起動時刻(相対時間)

12860

12861 【リターンパラメータ】

12862 ER ercd 正常終了(E_OK)またはエラーコード

12863

12864 【エラーコード】

12865 E_CTX コンテキストエラー

12866 ・非タスクコンテキストからの呼出し(sta_almの場合)【NGKI2535】

12867 ・タスクコンテキストからの呼出し(ista_almの場合)【NGKI2536】

12868 ・CPUロック状態からの呼出し

12869 E_ID 不正ID番号

12870 ・almidが有効範囲外【NGKI2537】

12871 E_PAR パラメータエラー

12872 ・almtimがTMAX_RELTIMより大きい【NGKI2538】

12873 E_NOEXS オブジェクト未登録

12874 ・対象アラームハンドラが未登録〔D〕【NGKI2539】

12875 E_OACV オブジェクトアクセス違反

12876 ・対象アラームハンドラに対する通常操作1が許可されていな

12877 い(sta_almの場合)〔P〕【NGKI2540】

12878

12879 【機能】

12880

12881 almidで指定したアラームハンドラ(対象アラームハンドラ)を動作開始する.

12882 具体的な振舞いは以下の通り.

12883

12884 対象アラームハンドラが動作していない状態であれば,対象アラームハンドラ

12885 は動作している状態となる【NGKI2541】.アラームハンドラを起動する時刻は,

12886 sta_almを呼び出してから,almtimで指定した相対時間後に設定される

12887 【NGKI2542】.

12888

12889 対象アラームハンドラが動作している状態であれば,アラームハンドラを起動

12890 する時刻の再設定のみが行われる【NGKI2543】.

12891 ----------------------------------------------------------------------

12892 msta_alm 割付けプロセッサ指定でのアラームハンドラの動作開始〔TM〕【NGKI2544】

12893 imsta_alm 割付けプロセッサ指定でのアラームハンドラの動作開始〔IM〕【NGKI2545】

12894

12895 【C言語API】

12896 ER ercd = msta_alm(ID almid, RELTIM almtim, ID prcid)

12897 ER ercd = imsta_alm(ID almid, RELTIM almti m, ID prcid)

12898

12899 【パラメータ】

12900 ID almid 対象アラームハンドラのID番号

Page 259: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

259

12901 RELTIM almtim アラームハンドラの起動時刻(相対時間)

12902 ID prcid アラームハンドラの割付け対象のプロセッサの

12903 ID 番号

12904

12905 【リターンパラメータ】

12906 ER ercd 正常終了(E_OK)またはエラーコード

12907

12908 【エラーコード】

12909 E_CTX コンテキストエラー

12910 ・非タスクコンテキストからの呼出し(msta_almの場合)

12911 【NGKI2546】

12912 ・タスクコンテキストからの呼出し(imsta_almの場合)【NGKI2547】

12913 ・CPUロック状態からの呼出し【NGKI2548】

12914 E_NOSPT 未サポート機能

12915 ・条件については機能の項を参照

12916 E_ID 不正ID番号

12917 ・almidが有効範囲外【NGKI2549】

12918 ・prcidが有効範囲外【NGKI2550】

12919 E_PAR パラメータエラー

12920 ・almtimがTMAX_RELTIMより大きい【NGKI2551】

12921 ・その他の条件については機能の項を参照

12922 E_NOEXS オブジェクト未登録

12923 ・対象アラームハンドラが未登録〔D〕【NGKI2552】

12924 E_OACV オブジェクトアクセス違反

12925 ・対象アラームハンドラに対する通常操作1が許可されていな

12926 い(msta_almの場合)〔P〕【NGKI2553】

12927

12928 【機能】

12929

12930 prcidで指定したプロセッサを割付けプロセッサとして,almidで指定したアラー

12931 ムハンドラ(対象アラームハンドラ)を動作開始する.具体的な振舞いは以下

12932 の通り.

12933

12934 対象アラームハンドラが動作していない状態であれば,対象アラームハンドラ

12935 の割付けプロセッサがprcidで指定したプロセッサに変更された後,対象アラー

12936 ムハンドラは動作している状態となる【NGKI2554】.アラームハンドラを起動

12937 する時刻は,msta_almを呼び出してから,almtimで指定した相対時間後に設定

12938 される【NGKI2555】.

12939

12940 対象アラームハンドラが動作している状態であれば,対象アラームハンドラの

12941 割付けプロセッサがprcidで指定したプロセッサに変更された後,アラームハン

12942 ドラを起動する時刻の再設定が行われる【NGKI2556】.

12943

12944 対象アラームハンドラが実行中である場合には,割付けプロセッサを変更して

12945 も,実行中のアラームハンドラを実行するプロセッサは変更されない

12946 【NGKI2557】.対象アラームハンドラが変更後の割付けプロセッサで実行され

12947 るのは,次に起動される時からである【NGKI2558】.

12948

12949 対象アラームハンドラの属するクラスの割付け可能プロセッサが,prcidで指定

12950 したプロセッサを含んでいない場合には,E_PARエラーとなる【NGKI2559】.

Page 260: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

260

12951

12952 prcidにTPRC_INI(=0)を指定すると,対象アラームハンドラの割付けプロセッ

12953 サを,それが属するクラスの初期割付けプロセッサとする【NGKI2560】.

12954

12955 グローバルタイマ方式を用いている場合,msta_alm/imsta_almはE_NOSPTを返

12956 す【NGKI2561】.

12957

12958 【使用上の注意】

12959

12960 msta_alm/imsta_almで実行中のアラームハンドラの割付けプロセッサを変更し

12961 た場合,同じアラームハンドラが異なるプロセッサで同時に実行される可能性

12962 がある.特に,almtimに0を指定する場合に,注意が必要である.

12963

12964 【μITRON4.0仕様との関係】

12965

12966 μITRON4.0仕様に定義されていないサービスコールである.

12967 ----------------------------------------------------------------------

12968 stp_alm アラームハンドラの動作停止〔T〕【NGKI2562】

12969 istp_alm アラームハンドラの動作停止〔I〕【NGKI2563】

12970

12971 【C言語API】

12972 ER ercd = stp_alm(ID almid)

12973 ER ercd = istp_alm(ID almid)

12974

12975 【パラメータ】

12976 ID almid 対象アラームハンドラのID番号

12977

12978 【リターンパラメータ】

12979 ER ercd 正常終了(E_OK)またはエラーコード

12980

12981 【エラーコード】

12982 E_CTX コンテキストエラー

12983 ・非タスクコンテキストからの呼出し(stp_almの場合)【NGKI2564】

12984 ・タスクコンテキストからの呼出し(istp_almの場合)【NGKI2565】

12985 ・CPUロック状態からの呼出し【NGKI2566】

12986 E_ID 不正ID番号

12987 ・almidが有効範囲外【NGKI2567】

12988 E_NOEXS オブジェクト未登録

12989 ・対象アラームハンドラが未登録〔D〕【NGKI2568】

12990 E_OACV オブジェクトアクセス違反

12991 ・対象アラームハンドラに対する通常操作2が許可されていな

12992 い(stp_almの場合)〔P〕【NGKI2569】

12993

12994 【機能】

12995

12996 almidで指定したアラームハンドラ(対象アラームハンドラ)を動作停止する.

12997 具体的な振舞いは以下の通り.

12998

12999 対象アラームハンドラが動作している状態であれば,動作していない状態とな

13000 る【NGKI2570】.対象アラームハンドラが動作していない状態であれば,何も

Page 261: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

261

13001 行われずに正常終了する【NGKI2571】.

13002 ----------------------------------------------------------------------

13003 ref_alm アラームハンドラの状態参照〔T〕【NGKI2572】

13004

13005 【C言語API】

13006 ER ercd = ref_alm(ID almid, T_RALM *pk_ralm)

13007

13008 【パラメータ】

13009 ID almid 対象アラームハンドラのID番号

13010 T_RALM * pk_ralm アラームハンドラの現在状態を入れるパケット

13011 へのポインタ

13012

13013 【リターンパラメータ】

13014 ER ercd 正常終了(E_OK)またはエラーコード

13015

13016 *アラームハンドラの現在状態(パケットの内容)

13017 STAT almstat アラームハンドラの動作状態

13018 RELTIM lefttim アラームハンドラを起動する時刻までの相対時間

13019 ID prcid アラームハンドラの割付けプロセッサのID(マル

13020 チプロセッサ対応カーネルの場合)

13021

13022 【エラーコード】

13023 E_CTX コンテキストエラー

13024 ・非タスクコンテキストからの呼出し【NGKI2573】

13025 ・CPUロック状態からの呼出し【NGKI2574】

13026 E_ID 不正ID番号

13027 ・almidが有効範囲外【NGKI2575】

13028 E_NOEXS オブジェクト未登録

13029 ・対象アラームハンドラが未登録〔D〕【NGKI2576】

13030 E_OACV オブジェクトアクセス違反

13031 ・対象アラームハンドラに対する参照操作が許可されていな

13032 い〔P〕【NGKI2577】

13033 E_MACV メモリアクセス違反

13034 ・pk_ralmが指すメモリ領域への書込みアクセスが許可されて

13035 いない〔P〕【NGKI2578】

13036

13037 【機能】

13038

13039 almidで指定したアラームハンドラ(対象アラームハンドラ)の現在状態を参照

13040 する.参照した現在状態は,pk_ralmで指定したパケットに返される【NGKI2579】.

13041

13042 almstatには,対象アラームハンドラの現在の動作状態を表す次のいずれかの値

13043 が返される【NGKI2580】.

13044

13045 TALM_STP 0x01U アラームハンドラが動作していない状態

13046 TALM_STA 0x02U アラームハンドラが動作している状態

13047

13048 対象アラームハンドラが動作している状態である場合には,lefttimに,アラー

13049 ムハンドラ起動する時刻までの相対時間が返される【NGKI2581】.対象アラー

13050 ムハンドラが動作していない状態である場合には,lefttimの値は保証されない

Page 262: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

262

13051 【NGKI2582】.

13052

13053 マルチプロセッサ対応カーネルでは,prcidに,対象アラームハンドラの割付け

13054 プロセッサのID番号が返される【NGKI2583】.

13055

13056 【使用上の注意】

13057

13058 ref_almはデバッグ時向けの機能であり,その他の目的に使用することは推奨し

13059 ない.これは,ref_almを呼び出し,対象アラームハンドラの現在状態を参照し

13060 た直後に割込みが発生した場合,ref_almから戻ってきた時には対象アラームハ

13061 ンドラの状態が変化している可能性があるためである.

13062

13063 【μITRON4.0仕様との関係】

13064

13065 TALM_STPとTALM_STAを値を変更した.

13066 ----------------------------------------------------------------------

13067

13068 4.6.4 オーバランハンドラ

13069

13070 オーバランハンドラは,タスクが使用したプロセッサ時間が,指定した時間を

13071 超えた場合に起動されるタイムイベントハンドラである.オーバランハンドラ

13072 は,システムで1つのみ登録することができる【NGKI2584】.

13073

13074 オーバランハンドラ機能に関連して,各タスクが持つ情報は次の通り

13075 【NGKI2585】.

13076

13077 ・オーバランハンドラの動作状態

13078 ・残りプロセッサ時間

13079

13080 オーバランハンドラの動作状態は,タスク毎に,動作している状態と動作して

13081 いない状態のいずれかをとる【NGKI2586】.残りプロセッサ時間は,オーバラ

13082 ンハンドラが動作している状態の時に,タスクが使用できる残りのプロセッサ

13083 時間を表す.

13084

13085 オーバランハンドラの動作状態は,タスクの起動時に,動作していない状態に

13086 初期化される【NGKI2587】.

13087

13088 残りプロセッサ時間は,オーバランハンドラが動作している状態でタスクが実

13089 行している間,タスクが使用したプロセッサ時間の分だけ減少する【NGKI2588】.

13090 残りプロセッサ時間が0になると(これをオーバランと呼ぶ),オーバランハン

13091 ドラが起動される【NGKI2589】.

13092

13093 タスクが使用したプロセッサ時間には,そのタスク自身とタスク例外処理ルー

13094 チン,それらから呼び出したサービルコール(拡張サービスコールを含む)の

13095 実行時間を含む【NGKI2590】.一方,タスクの実行中に起動されたカーネル管

13096 理の割込みハンドラ(割込みサービスルーチン,周期ハンドラ,アラームハン

13097 ドラ,オーバランハンドラの実行時間を含む)とカーネル管理のCPU例外ハンド

13098 ラの実行時間は含まないが,割込みハンドラおよびCPU例外ハンドラの呼出し/

13099 復帰にかかる時間と,それらの入口処理と出口処理の一部の実行時間は含んで

13100 しまう【NGKI2591】.また,タスクの実行中に起動されたカーネル管理外の割

Page 263: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

263

13101 込みハンドラとカーネル管理外のCPU例外ハンドラの実行時間も含む

13102 【NGKI2592】.

13103

13104 プロセッサ時間は,符号無しの整数型であるOVRTIM型で表し,単位はマイクロ

13105 秒とする【NGKI2593】.ただし,プロセッサ時間には,OVRTIM型に格納できる

13106 任意の値を指定できるとは限らず,指定できる値にターゲット定義の上限があ

13107 る場合がある【NGKI2594】.プロセッサ時間に指定できる最大値は,構成マク

13108 ロTMAX_OVRTIMに定義されている【NGKI2595】.また,タスクが使用したプロセッ

13109 サ時間の計測精度はターゲットに依存する【NGKI2596】.

13110

13111 保護機能対応カーネルにおいて,オーバランハンドラは,カーネルドメインに

13112 属する【NGKI2597】.

13113

13114 ターゲット定義で,オーバランハンドラ機能がサポートされていない場合があ

13115 る【NGKI2598】.オーバランハンドラ機能がサポートされている場合には,

13116 TOPPERS_SUPPORT_OVRHDRがマクロ定義される【NGKI2599】.サポートされてい

13117 ない場合にオーバランハンドラ機能のサービスコールを呼び出すと,E_NOSPTエ

13118 ラーが返るか,リンク時にエラーとなる【NGKI2600】.

13119

13120 オーバランハンドラ機能に用いるデータ型は次の通り.

13121

13122 OVRTIM プロセッサ時間(符号無し整数,単位はマイクロ秒,ulong_t

13123 に定義)【NGKI2601】

13124

13125 オーバランハンドラ属性に指定できる属性はない【NGKI2602】.そのためオー

13126 バランハンドラ属性には,TA_NULLを指定しなければならない【NGKI2603】.

13127

13128 C言語によるオーバランハンドラの記述形式は次の通り【NGKI2604】.

13129

13130 void overrun_handler(ID tskid, intptr_t exinf)

13131 {

13132 オーバランハンドラ本体

13133 }

13134

13135 tskidにはオーバランを起こしたタスクのID番号が,exinfにはそのタスクの拡

13136 張情報が,それぞれ渡される【NGKI2605】.

13137

13138 オーバランハンドラ機能に関連するカーネル構成マクロは次の通り.

13139

13140 TMAX_OVRTIM プロセッサ時間に指定できる最大値【NGKI2606】

13141

13142 TOPPERS_SUPPORT_OVRHDR オーバランハンドラ機能がサポートされて

13143 いる【NGKI2607】

13144

13145 【使用上の注意】

13146

13147 マルチプロセッサ対応カーネルでは,オーバランハンドラが異なるプロセッサ

13148 で同時に実行される可能性があるので,注意が必要である.

13149

13150 【TOPPERS/ASPカーネルにおける規定】

Page 264: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

264

13151

13152 ASPカーネルでは,オーバランハンドラをサポートしない【ASPS0184】.ただし,

13153 オーバランハンドラ機能拡張パッケージを用いると,オーバランハンドラ機能

13154 を追加することができる【ASPS0185】.

13155

13156 【TOPPERS/FMPカーネルにおける規定】

13157

13158 FMPカーネルでは,オーバランハンドラをサポートしない【FMPS0155】.

13159

13160 【TOPPERS/HRP2カーネルにおける規定】

13161

13162 HRP2カーネルでは,オーバランハンドラをサポートする【HRPS0149】.

13163

13164 【μITRON4.0仕様との関係】

13165

13166 OVRTIMの時間単位は,μITRON4.0仕様では実装定義としていたが,この仕様で

13167 はマイクロ秒と規定した.

13168

13169 TMAX_OVRTIMは,μITRON4.0仕様に規定されていないカーネル構成マクロである.

13170 ----------------------------------------------------------------------

13171 DEF_OVR オーバランハンドラの定義〔S〕【NGKI2608】

13172 def_ovr オーバランハンドラの定義〔TD〕【NGKI2609】

13173

13174 【静的API】

13175 DEF_OVR({ ATR ovratr, OVRHDR ovrhdr })

13176

13177 【C言語API】

13178 ER ercd = def_ovr(const T_DOVR *pk_dovr)

13179

13180 【パラメータ】

13181 T_DOVR * pk_dovr オーバランハンドラの定義情報を入れたパケッ

13182 トへのポインタ(静的APIを除く)

13183

13184 *オーバランハンドラの定義情報(パケットの内容)

13185 ATR ovratr オーバランハンドラ属性

13186 OVRHDR ovrhdr オーバランハンドラの先頭番地

13187

13188 【リターンパラメータ】

13189 ER ercd 正常終了(E_OK)またはエラーコード

13190

13191 【エラーコード】

13192 E_CTX コンテキストエラー

13193 ・非タスクコンテキストからの呼出し〔s〕【NGKI2610】

13194 ・CPUロック状態からの呼出し〔s〕【NGKI2611】

13195 E_RSATR 予約属性

13196 ・ovratrが無効【NGKI2612】

13197 ・その他の条件については機能の項を参照

13198 E_PAR パラメータエラー

13199 ・ovrhdrがプログラムの先頭番地として正しくない【NGKI2613】

13200 E_OACV オブジェクトアクセス違反

Page 265: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

265

13201 ・システム状態に対する管理操作が許可されていない〔sP〕

13202 【NGKI2614】

13203 E_MACV メモリアクセス違反

13204 ・pk_dovrが指すメモリ領域への読出しアクセスが許可されて

13205 いない〔sP〕【NGKI2615】

13206 E_OBJ オブジェクト状態エラー

13207 ・条件については機能の項を参照

13208

13209 【機能】

13210

13211 各パラメータで指定したオーバランハンドラ定義情報に従って,オーバランハ

13212 ンドラを定義する【NGKI2616】.ただし,def_ovrにおいてpk_dovrをNULLにし

13213 た場合には,オーバランハンドラの定義を解除する【NGKI2617】.

13214

13215 静的APIにおいては,ovratrは整数定数式パラメータ,ovrhdrは一般定数式パラ

13216 メータである【NGKI2618】.

13217

13218 オーバランハンドラを定義する場合(DEF_OVRの場合およびdef_ovrにおいて

13219 pk_dovrをNULL以外にした場合)で,すでにオーバランハンドラが定義されてい

13220 る場合には,E_OBJエラーとなる【NGKI2619】.

13221

13222 保護機能対応カーネルにおいて,DEF_OVRは,カーネルドメインの囲みの中に記

13223 述しなければならない.そうでない場合には,E_RSATRエラーとなる

13224 【NGKI2621】.また,def_ovrでオーバランハンドラを定義する場合には,オー

13225 バランハンドラの属する保護ドメインを設定する必要はなく,オーバランハン

13226 ドラ属性にTA_DOM(domid)を指定した場合にはE_RSATRエラーとなる【NGKI2622】.

13227 ただし,TA_DOM(TDOM_SELF)を指定した場合には,指定が無視され,E_RSATRエ

13228 ラーは検出されない【NGKI2623】.

13229

13230 マルチプロセッサ対応カーネルでは,DEF_OVRは,クラスの囲みの外に記述しな

13231 ければならない.そうでない場合には,E_RSATRエラーとなる【NGKI2625】.ま

13232 た,def_ovrオーバランハンドラを定義する場合には,オーバランハンドラの属

13233 するクラスを設定する必要はなく,オーバランハンドラ属性にTA_CLS(clsid)を

13234 指定した場合にはE_RSATRエラーとなる【NGKI2626】.ただし,

13235 TA_CLS(TCLS_SELF)を指定した場合には,指定が無視され,E_RSATRエラーは検

13236 出されない【NGKI2627】.

13237

13238 オーバランハンドラの定義を解除する場合(def_ovrにおいてpk_dovrをNULLに

13239 した場合)で,オーバランハンドラが定義されていない場合には,E_OBJエラー

13240 となる【NGKI2628】.

13241

13242 オーバランハンドラの定義を解除すると,オーバランハンドラの動作状態は,

13243 すべてのタスクに対して動作していない状態となる【NGKI2629】.

13244

13245 【使用上の注意】

13246

13247 def_ovrによりオーバランハンドラの定義を解除する場合,サービスコールの処

13248 理時間およびカーネル内での割込み禁止時間が,タスクの総数に比例して長く

13249 なる.特に,タスクの総数が多い場合,カーネル内での割込み禁止時間が長く

13250 なるため,注意が必要である.

Page 266: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

266

13251

13252 【TOPPERS/ASPカーネルにおける規定】

13253

13254 ASPカーネルのオーバランハンドラ機能拡張パッケージでは,DEF_OVRのみをサ

13255 ポートする【ASPS0186】.

13256

13257 【TOPPERS/HRP2カーネルにおける規定】

13258

13259 HRP2カーネルでは,DEF_OVRのみをサポートする【HRPS0150】.

13260

13261 【μITRON4.0仕様との関係】

13262

13263 ovrhdrのデータ型をOVRHDRに変更した.

13264

13265 def_ovrによって定義済みのオーバランハンドラを再定義しようとした場合に,

13266 E_OBJエラーとすることにした.オーバランハンドラの定義を変更するには,一

13267 度定義を解除してから,再度定義する必要がある.

13268 ----------------------------------------------------------------------

13269 sta_ovr オーバランハンドラの動作開始〔T〕【NGKI2630】

13270 ista_ovr オーバランハンドラの動作開始〔I〕【NGKI2631】

13271

13272 【C言語API】

13273 ER ercd = sta_ovr(I D tskid, OVRTIM ovrtim)

13274 ER ercd = ista_ovr(ID tskid, OVRTIM ovrtim)

13275

13276 【パラメータ】

13277 ID tskid 対象タスクのID番号

13278 OVRTIM ovrtim 対象タスクの残りプロセッサ時間

13279

13280 【リターンパラメータ】

13281 ER ercd 正常終了(E_OK)またはエラーコード

13282

13283 【エラーコード】

13284 E_CTX コンテキストエラー

13285 ・非タスクコンテキストからの呼出し(sta_ovrの場合)【NGKI2632】

13286 ・タスクコンテキストからの呼出し(ista_ovrの場合)【NGKI2633】

13287 ・CPUロック状態からの呼出し【NGKI2634】

13288 E_ID 不正ID番号

13289 ・tskidが有効範囲外【NGKI2635】

13290 E_NOEXS オブジェクト未登録

13291 ・対象タスクが未登録〔D〕【NGKI2636】

13292 E_OACV オブジェクトアクセス違反

13293 ・対象タスクに対する通常操作2が許可されていない(sta_ovr

13294 の場合)〔P〕【NGKI2637】

13295 E_PAR パラメータエラー

13296 ・ovrtimが0,またはTMAX_OVRTIMより大きい【NGKI2643】

13297 E_OBJ オブジェクト状態エラー

13298 ・オーバランハンドラが定義されていない【NGKI2638】

13299

13300 【機能】

Page 267: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

267

13301

13302 tskidで指定したタスク(対象タスク)に対して,オーバランハンドラの動作を

13303 開始する.具体的な振舞いは以下の通り.

13304

13305 対象タスクに対するオーバランハンドラの動作状態は,動作している状態とな

13306 り,残りプロセッサ時間は,ovrtimに指定した時間に設定される【NGKI2639】.

13307 対象タスクに対してオーバランハンドラが動作している状態であれば,残りプ

13308 ロセッサ時間の設定のみが行われる【NGKI2640】.

13309

13310 sta_ovrにおいてtskidにTSK_SELF(=0)を指定すると,自タスクが対象タスク

13311 となる【NGKI2641】.

13312

13313 【μITRON4.0仕様との関係】

13314

13315 ista_ovrは,μITRON4.0仕様に定義されていないサービスコールである.

13316 ----------------------------------------------------------------------

13317 stp_ovr オーバランハンドラの動作停止〔T〕【NGKI2644】

13318 istp_ovr オーバランハンドラの動作停止〔I〕【NGKI2645】

13319

13320 【C言語API】

13321 ER ercd = stp_ovr(ID tskid)

13322 ER ercd = istp_ovr(ID tskid)

13323

13324 【パラメータ】

13325 ID tskid 対象タスクのID番号

13326

13327 【リターンパラメータ】

13328 ER ercd 正常終了(E_OK)またはエラーコード

13329

13330 【エラーコード】

13331 E_CTX コンテキストエラー

13332 ・非タスクコンテキストからの呼出し(stp_ovrの場合)【NGKI2646】

13333 ・タスクコンテキストからの呼出し(istp_ovrの場合)【NGKI2647】

13334 ・CPUロック状態からの呼出し【NGKI2648】

13335 E_ID 不正ID番号

13336 ・tskidが有効範囲外【NGKI2649】

13337 E_NOEXS オブジェクト未登録

13338 ・対象タスクが未登録〔D〕【NGKI2650】

13339 E_OACV オブジェクトアクセス違反

13340 ・対象タスクに対する通常操作2が許可されていない(stp_ovr

13341 の場合)〔P〕【NGKI2651】

13342 E_OBJ オブジェクト状態エラー

13343 ・オーバランハンドラが定義されていない【NGKI2652】

13344

13345 【機能】

13346

13347 tskidで指定したタスク(対象タスク)に対して,オーバランハンドラの動作を

13348 停止する.具体的な振舞いは以下の通り.

13349

13350 対象タスクに対するオーバランハンドラの動作状態は,動作していない状態と

Page 268: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

268

13351 なる【NGKI2653】.対象タスクに対してオーバランハンドラが動作していない

13352 状態であれば,何も行われずに正常終了する【NGKI2654】.

13353

13354 stp_ovrにおいてtskidにTSK_SELF(=0)を指定すると,自タスクが対象タスク

13355 となる【NGKI2655】.

13356

13357 【μITRON4.0仕様との関係】

13358

13359 istp_ovrは,μITRON4.0仕様に定義されていないサービスコールである.

13360 ----------------------------------------------------------------------

13361 ref_ovr オーバランハンドラの状態参照〔T〕【NGKI2656】

13362

13363 【C言語API】

13364 ER ercd = ref_ovr(ID tskid, T_ROVR *pk_rovr)

13365

13366 【パラメータ】

13367 ID tskid 対象タスクのID番号

13368 T_ROVR * pk_rovr オーバランハンドラの現在状態を入れるパケッ

13369 トへのポインタ

13370

13371 【リターンパラメータ】

13372 ER ercd 正常終了(E_OK)またはエラーコード

13373

13374 *タスクの現在状態(パケットの内容)

13375 STAT ovrstat オーバランハンドラの動作状態

13376 OVRTIM leftotm 残りプロセッサ時間

13377

13378 【エラーコード】

13379 E_CTX コンテキストエラー

13380 ・非タスクコンテキストからの呼出し【NGKI2657】

13381 ・CPUロック状態からの呼出し【NGKI2658】

13382 E_ID 不正ID番号

13383 ・tskidが有効範囲外【NGKI2659】

13384 E_NOEXS オブジェクト未登録

13385 ・対象タスクが未登録〔D〕【NGKI2660】

13386 E_OACV オブジェクトアクセス違反

13387 ・対象タスクに対する参照操作が許可されていない〔P〕【NGKI2661】

13388 E_MACV メモリアクセス違反

13389 ・pk_rovrが指すメモリ領域への書込みアクセスが許可されて

13390 いない〔P〕【NGKI2662】

13391 E_OBJ オブジェクト状態エラー

13392 ・オーバランハンドラが定義されていない【NGKI2663】

13393

13394 【機能】

13395

13396 tskidで指定したタスク(対象タスク)に対するオーバランハンドラの現在状態

13397 を参照する.参照した現在状態は,pk_rovrで指定したメモリ領域に返される

13398 【NGKI2664】.

13399

13400 ovrstatには,対象タスクに対するオーバランハンドラの動作状態を表す次のい

Page 269: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

269

13401 ずれかの値が返される【NGKI2665】.

13402

13403 TOVR_STP 0x01U オーバランハンドラが動作していない状態

13404 TOVR_STA 0x02U オーバランハンドラが動作している状態

13405

13406 対象タスクに対してオーバランハンドラが動作している状態の場合には,

13407 leftotmに,オーバランハンドラが起動されるまでの残りプロセッサ時間が返さ

13408 れる【NGKI2666】.オーバランハンドラが起動される直前には,leftotmに0が

13409 返される可能性がある【NGKI2667】.オーバランハンドラが動作していない状

13410 態の場合には,leftotmの値は保証されない【NGKI2668】.

13411

13412 tskidにTSK_SELF(=0)を指定すると,自タスクが対象タスクとなる

13413 【NGKI2669】.

13414

13415 【使用上の注意】

13416

13417 ref_ovrはデバッグ時向けの機能であり,その他の目的に使用することは推奨し

13418 ない.これは,ref_ovrを呼び出し,対象オーバランハンドラの現在状態を参照

13419 した直後に割込みが発生した場合,ref_ovrから戻ってきた時には対象オーバラ

13420 ンハンドラの状態が変化している可能性があるためである.

13421

13422 【未決定事項】

13423

13424 マルチプロセッサ対応カーネルにおいて,対象タスクが,自タスクが割付けら

13425 れたプロセッサと異なるプロセッサに割り付けられている場合に,leftotmを参

13426 照できるとするかどうかは,今後の課題である.

13427

13428 【μITRON4.0仕様との関係】

13429

13430 TOVR_STPとTOVR_STAを値を変更した.

13431 ----------------------------------------------------------------------

13432

13433 4.7 システム状態管理機能

13434

13435 システム状態管理機能は,特定のオブジェクトに関連しないシステムの状態を

13436 変更/参照するための機能である.

13437

13438 ----------------------------------------------------------------------

13439 SAC_SYS システム状態のアクセス許可ベクタの設定〔SP〕【NGKI2670】

13440 sac_sys システム状態のアクセス許可ベクタの設定〔TPD〕【NGKI2671】

13441

13442 【静的API】

13443 SAC_SYS({ ACPTN acptn1, ACPTN acptn2, ACPTN acptn3, ACPTN acptn4 })

13444

13445 【C言語API】

13446 ER ercd = sac_sys(const ACVCT *p_acvct)

13447

13448 【パラメータ】

13449 ACVCT * p _acvct アクセス許可ベクタを入れたパケットへのポ

13450 インタ(静的APIを除く)

Page 270: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

270

13451

13452 *アクセス許可ベクタ(パケットの内容)

13453 ACPTN acptn1 通常操作1のアクセス許可パターン

13454 ACPTN acptn2 通常操作2のアクセス許可パターン

13455 ACPTN acptn3 管理操作のアクセス許可パターン

13456 ACPTN acptn4 参照操作のアクセス許可パターン

13457

13458 【リターンパラメータ】

13459 ER ercd 正常終了(E_OK)またはエラーコード

13460

13461 【エラーコード】

13462 E_CTX コンテキストエラー

13463 ・非タスクコンテキストからの呼出し〔s〕【NGKI2672】

13464 ・CPUロック状態からの呼出し〔s〕【NGKI2673】

13465 E_RSATR 予約属性

13466 ・カーネルドメインの囲みの中に記述されていない〔S〕【NGKI2674】

13467 ・クラスの囲みの中に記述されている〔SM〕【NGKI2675】

13468 E_OACV オブジェクトアクセス違反

13469 ・カーネルドメイン以外からの呼出し〔s〕【NGKI2676】

13470 E_OBJ オブジェクト状態エラー

13471 ・システム状態のアクセス許可ベクタが設定済み〔S〕【NGKI2677】

13472

13473 【機能】

13474

13475 システム状態のアクセス許可ベクタ(4つのアクセス許可パターンの組)を,各

13476 パラメータで指定した値に設定する【NGKI2678】.

13477

13478 静的APIにおいては,acptn1~acptn4は整数定数式パラメータである【NGKI2679】.

13479

13480 【TOPPERS/ASPカーネルにおける規定】

13481

13482 ASPカーネルでは,SAC_SYS,sac_sysをサポートしない【ASPS0187】.

13483

13484 【TOPPERS/FMPカーネルにおける規定】

13485

13486 FMPカーネルでは,SAC_SYS,sac_sysをサポートしない【FMPS0156】.

13487

13488 【TOPPERS/HRP2カーネルにおける規定】

13489

13490 HRP2カーネルでは,SAC_SYSのみをサポートする【HRPS0151】.

13491

13492 【TOPPERS/SSPカーネルにおける規定】

13493

13494 SSPカーネルでは,SAC_SYS,sac_sysをサポートしない【SSPS0130】.

13495 ----------------------------------------------------------------------

13496 rot_rdq タスクの優先順位の回転〔T〕【NGKI2680】

13497 irot_rdq タスクの優先順位の回転〔I〕【NGKI2681】

13498

13499 【C言語API】

13500 ER ercd = rot_rdq(PRI tskpri)

Page 271: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

271

13501 ER ercd = irot_rdq(PRI tskpri)

13502

13503 【パラメータ】

13504 PRI tskpri 回転対象の優先度(対象優先度)

13505

13506 【リターンパラメータ】

13507 ER ercd 正常終了(E_OK)またはエラーコード

13508

13509 【エラーコード】

13510 E_CTX コンテキストエラー

13511 ・非タスクコンテキストからの呼出し(rot_rdqの場合)【NGKI2682】

13512 ・タスクコンテキストからの呼出し(irot_rdqの場合)【NGKI2683】

13513 ・CPUロック状態からの呼出し【NGKI2684】

13514 E_NOSPT 未サポート機能

13515 ・条件については機能の項を参照

13516 E_PAR パラメータエラー

13517 ・tskpriが有効範囲外【NGKI2685】

13518 E_OACV オブジェクトアクセス違反

13519 ・システム状態に対する通常操作1が許可されていない〔P〕

13520 【NGKI2686】

13521

13522 【機能】

13523

13524 tskpriで指定した優先度(対象優先度)を持つ実行できる状態のタスクの中で,

13525 最も優先順位が高いタスクを,同じ優先度のタスクの中で最も優先順位が低い

13526 状態にする【NGKI2687】.対象優先度を持つ実行できる状態のタスクが無いか

13527 1つのみの場合には,何も行われずに正常終了する【NGKI2688】.

13528

13529 rot_rdqにおいて,tskpriにTPRI_SELF(=0)を指定すると,自タスクのベース

13530 優先度が対象優先度となる【NGKI2689】.

13531

13532 対象優先度を持つ実行できる状態のタスクの中で,最も優先順位が高いタスク

13533 が制約タスクの場合には,E_NOSPTエラーとなる【NGKI2690】.

13534

13535 【TOPPERS/SSPカーネルにおける規定】

13536

13537 SSPカーネルでは,rot_rdq,irot_rdqをサポートしない【SSPS0131】.

13538 ----------------------------------------------------------------------

13539 mrot_rdq プロセッサ指定でのタスクの優先順位の回転〔TM〕【NGKI2691】

13540 imrot_rdq プロセッサ指定でのタスクの優先順位の回転〔IM〕【NGKI2692】

13541

13542 【C言語API】

13543 ER ercd = mrot_rdq(PRI tskpri, ID prcid)

13544 ER ercd = imrot_rdq(PRI tskpri, ID prcid)

13545

13546 【パラメータ】

13547 PRI tskpri 回転対象の優先度(対象優先度)

13548 ID prcid 優先順位の回転対象とするプロセッサのID番号

13549

13550 【リターンパラメータ】

Page 272: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

272

13551 ER ercd 正常終了(E_OK)またはエラーコード

13552

13553 【エラーコード】

13554 E_CTX コンテキストエラー

13555 ・非タスクコンテキストからの呼出し(mrot_rdqの場合)

13556 【NGKI2693】

13557 ・タスクコンテキストからの呼出し(imrot_rdqの場合)【NGKI2694】

13558 ・CPUロック状態からの呼出し【NGKI2695】

13559 E_NOSPT 未サポート機能

13560 ・条件については機能の項を参照

13561 E_ID 不正ID番号

13562 ・prcidが有効範囲外【NGKI2696】

13563 E_PAR パラメータエラー

13564 ・tskpriが有効範囲外【NGKI2697】

13565 E_OACV オブジェクトアクセス違反

13566 ・システム状態に対する通常操作1が許可されていない〔P〕

13567 【NGKI2698】

13568

13569 【機能】

13570

13571 prcidで指定したプロセッサに割り付けられており,tskpriで指定した優先度

13572 (対象優先度)を持つ実行できる状態のタスクの中で,最も優先順位が高いタ

13573 スクを,同じ優先度のタスクの中で最も優先順位が低い状態にする【NGKI2699】.

13574 対象優先度を持つ実行できる状態のタスクが無いか1つのみの場合には,何も行

13575 われずに正常終了する【NGKI2700】.

13576

13577 mrot_rdqにおいて,tskpriにTPRI_SELF(=0)を指定すると,自タスクのベー

13578 ス優先度が対象優先度となる【NGKI2701】.

13579

13580 prcidで指定したプロセッサに割り付けられており,対象優先度を持つ実行でき

13581 る状態のタスクの中で,最も優先順位が高いタスクが制約タスクの場合には,

13582 E_NOSPTエラーとなる【NGKI2702】.

13583

13584 【TOPPERS/ASPカーネルにおける規定】

13585

13586 ASPカーネルでは,mrot_rdq,imrot_rdqをサポートしない【ASPS0188】.

13587

13588 【TOPPERS/HRP2カーネルにおける規定】

13589

13590 HRP2カーネルでは,mrot_rdq,imrot_rdqをサポートしない【HRPS0152】.

13591

13592 【TOPPERS/SSPカーネルにおける規定】

13593

13594 SSPカーネルでは,mrot_rdq,imrot_rdqをサポートしない【SSPS0132】.

13595

13596 【μITRON4.0仕様との関係】

13597

13598 μITRON4.0仕様に定義されていないサービスコールである.

13599 ----------------------------------------------------------------------

13600 get_tid 実行状態のタスクIDの参照〔T〕【NGKI2703】

Page 273: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

273

13601 iget_tid 実行状態のタスクIDの参照〔I〕【NGKI2704】

13602

13603 【C言語API】

13604 ER ercd = get_tid(ID *p_tskid)

13605 ER ercd = iget_tid(ID *p_tskid)

13606

13607 【パラメータ】

13608 ID * p_tskid タスクIDを入れるメモリ領域へのポインタ

13609

13610 【リターンパラメータ】

13611 ER ercd 正常終了(E_OK)またはエラーコード

13612 ID tskid タスクID

13613

13614 【エラーコード】

13615 E_CTX コンテキストエラー

13616 ・非タスクコンテキストからの呼出し(get_tidの場合)【NGKI2705】

13617 ・タスクコンテキストからの呼出し(iget_tidの場合)【NGKI2706】

13618 ・CPUロック状態からの呼出し【NGKI2707】

13619 E_MACV メモリアクセス違反

13620 ・p_tskidが指すメモリ領域への書込みアクセスが許可されて

13621 いない〔P〕【NGKI2708】

13622

13623 【機能】

13624

13625 実行状態のタスク(get_tidの場合には自タスク)のID番号を参照する.参照し

13626 たタスクIDは,p_tskidが指すメモリ領域に返される【NGKI2709】.

13627

13628 iget_tidにおいて,実行状態のタスクがない場合には,TSK_NONE(=0)が返さ

13629 れる【NGKI2710】.

13630

13631 マルチプロセッサ対応カーネルにおいては,サービスコールを呼び出した処理

13632 単位を実行しているプロセッサにおいて実行状態のタスクのID番号を参照する

13633 【NGKI2711】.

13634

13635 【TOPPERS/SSPカーネルにおける規定】

13636

13637 SSPカーネルでは,get_tidをサポートしない【SSPS0133】.

13638 ----------------------------------------------------------------------

13639 get_did 実行状態のタスクが属する保護ドメインIDの参照〔TP〕【NGKI2712】

13640

13641 【C言語API】

13642 ER ercd = get_did(ID *p_domid)

13643

13644 【パラメータ】

13645 ID * p_domid 保護ドメインIDを入れるメモリ領域へのポインタ

13646

13647 【リターンパラメータ】

13648 ER ercd 正常終了(E_OK)またはエラーコード

13649 ID domid 保護ドメインID

13650

Page 274: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

274

13651 【エラーコード】

13652 E_CTX コンテキストエラー

13653 ・非タスクコンテキストからの呼出し【NGKI2713】

13654 ・CPUロック状態からの呼出し【NGKI2714】

13655 E_MACV メモリアクセス違反

13656 ・p_domidが指すメモリ領域への書込みアクセスが許可されて

13657 いない【NGKI2715】

13658

13659 【機能】

13660

13661 実行状態のタスク(自タスク)が属する保護ドメインのID番号を参照する.参

13662 照した保護ドメインIDは,p_domidが指すメモリ領域に返される【NGKI2716】.

13663

13664 マルチプロセッサ対応カーネルにおいては,サービスコールを呼び出した処理

13665 単位を実行しているプロセッサにおいて実行状態のタスクが属する保護ドメイ

13666 ンのID番号を参照する【NGKI2717】.

13667

13668 【TOPPERS/ASPカーネルにおける規定】

13669

13670 ASPカーネルでは,get_didをサポートしない【ASPS0189】.

13671

13672 【TOPPERS/FMPカーネルにおける規定】

13673

13674 FMPカーネルでは,get_didをサポートしない【FMPS0157】.

13675

13676 【TOPPERS/SSPカーネルにおける規定】

13677

13678 SSPカーネルでは,get_didをサポートしない【SSPS0134】.

13679 ----------------------------------------------------------------------

13680 get_pid 割付けプロセッサのID番号の参照〔TM〕【NGKI2718】

13681 iget_pid 割付けプロセッサのID番号の参照〔IM〕【NGKI2719】

13682

13683 【C言語API】

13684 ER ercd = get_pid(ID *p_prcid)

13685 ER ercd = iget_pid(ID *p_prcid)

13686

13687 【パラメータ】

13688 ID * p_prcid プロセッサIDを入れるメモリ領域へのポインタ

13689

13690 【リターンパラメータ】

13691 ER ercd 正常終了(E_OK)またはエラーコード

13692 ID prcid プロセッサID

13693

13694 【エラーコード】

13695 E_CTX コンテキストエラー

13696 ・非タスクコンテキストからの呼出し(get_pidの場合)【NGKI2720】

13697 ・タスクコンテキストからの呼出し(iget_pidの場合)【NGKI2721】

13698 ・CPUロック状態からの呼出し【NGKI2722】

13699 E_MACV メモリアクセス違反

13700 ・p_prcidが指すメモリ領域への書込みアクセスが許可されて

Page 275: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

275

13701 いない〔P〕【NGKI2723】

13702

13703 【機能】

13704

13705 サービスコールを呼び出した処理単位の割付けプロセッサのID番号を参照する.

13706 参照したプロセッサIDは,p_prcidが指すメモリ領域に返される

13707 【NGKI2724】.

13708

13709 【使用上の注意】

13710

13711 タスクは,get_pidを用いて,自タスクの割付けプロセッサを正しく参照できる

13712 とは限らない.これは,get_pidを呼び出し,自タスクの割付けプロセッサの

13713 ID番号を参照した直後に割込みが発生した場合,get_pidから戻ってきた時には

13714 割付けプロセッサが変化している可能性があるためである.

13715

13716 【TOPPERS/ASPカーネルにおける規定】

13717

13718 ASPカーネルでは,get_pid,iget_pidをサポートしない【ASPS0190】.

13719

13720 【TOPPERS/HRP2カーネルにおける規定】

13721

13722 HRP2カーネルでは,get_pid,iget_pidをサポートしない【HRPS0153】.

13723

13724 【TOPPERS/SSPカーネルにおける規定】

13725

13726 SSPカーネルでは,get_pid,iget_pidをサポートしない【SSPS0135】.

13727

13728 【μITRON4.0仕様との関係】

13729

13730 μITRON4.0仕様に定義されていないサービスコールである.

13731 ----------------------------------------------------------------------

13732 loc_cpu CPUロック状態への遷移〔T〕【NGKI2725】

13733 iloc_cpu CPUロック状態への遷移〔I〕【NGKI2726】

13734

13735 【C言語API】

13736 ER ercd = loc_cpu()

13737 ER ercd = iloc_cpu()

13738

13739 【パラメータ】

13740 なし

13741

13742 【リターンパラメータ】

13743 ER ercd 正常終了(E_OK)またはエラーコード

13744

13745 【エラーコード】

13746 E_CTX コンテキストエラー

13747 ・非タスクコンテキストからの呼出し(loc_cpuの場合)【NGKI2727】

13748 ・タスクコンテキストからの呼出し(iloc_cpuの場合)【NGKI2728】

13749 E_OACV オブジェクトアクセス違反

13750 ・システム状態に対する通常操作2が許可されていない

Page 276: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

276

13751 (loc_cpuの場合)〔P〕【NGKI2729】

13752

13753 【機能】

13754

13755 CPUロックフラグをセットし,CPUロック状態へ遷移する【NGKI2730】.CPUロッ

13756 ク状態で呼び出した場合には,何も行われずに正常終了する【NGKI2731】.

13757 ----------------------------------------------------------------------

13758 unl_cpu CPUロック状態の解除〔T〕【NGKI2732】

13759 iunl_cpu CPUロック状態の解除〔I〕【NGKI2733】

13760

13761 【C言語API】

13762 ER ercd = unl_cpu()

13763 ER ercd = iunl_cpu()

13764

13765 【パラメータ】

13766 なし

13767

13768 【リターンパラメータ】

13769 ER ercd 正常終了(E_OK)またはエラーコード

13770

13771 【エラーコード】

13772 E_CTX コンテキストエラー

13773 ・非タスクコンテキストからの呼出し(unl_cpuの場合)【NGKI2734】

13774 ・タスクコンテキストからの呼出し(iunl_cpuの場合)【NGKI2735】

13775 E_OACV オブジェクトアクセス違反

13776 ・システム状態に対する通常操作2が許可されていない

13777 (unl_cpuの場合)〔P〕【NGKI2736】

13778

13779 【機能】

13780

13781 CPUロックフラグをクリアし,CPUロック解除状態へ遷移する【NGKI2737】.

13782 CPUロック解除状態で呼び出した場合には,何も行われずに正常終了する

13783 【NGKI2738】.

13784

13785 マルチプロセッサ対応カーネルにおいて,unl_cpu/iunl_cpuを呼び出したプロ

13786 セッサによって取得されている状態となっているスピンロックがある場合には,

13787 unl_cpu/iunl_cpuによってCPUロック解除状態に遷移しない(何も行われずに

13788 正常終了する)【NGKI2739】.

13789

13790 【補足説明】

13791

13792 マルチプロセッサ対応カーネルでは,CPUロック解除状態へ遷移した結果,ディ

13793 スパッチ保留状態が解除され,ディスパッチが起こる可能性がある.また,保

13794 護機能対応カーネルとマルチプロセッサ対応カーネルでは,タスク例外処理ルー

13795 チンの実行が開始される可能性がある.

13796 ----------------------------------------------------------------------

13797 dis_dsp ディスパッチの禁止〔T〕【NGKI2740】

13798

13799 【C言語API】

13800 ER ercd = dis_dsp()

Page 277: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

277

13801

13802 【パラメータ】

13803 なし

13804

13805 【リターンパラメータ】

13806 ER ercd 正常終了(E_OK)またはエラーコード

13807

13808 【エラーコード】

13809 E_CTX コンテキストエラー

13810 ・非タスクコンテキストからの呼出し【NGKI2741】

13811 ・CPUロック状態からの呼出し【NGKI2742】

13812 E_OACV オブジェクトアクセス違反

13813 ・システム状態に対する通常操作1が許可されていない〔P〕

13814 【NGKI2743】

13815

13816 【機能】

13817

13818 ディスパッチ禁止フラグをセットし,ディスパッチ禁止状態へ遷移する

13819 【NGKI2744】.ディスパッチ禁止状態で呼び出した場合には,何も行われずに

13820 正常終了する【NGKI2745】.

13821 ----------------------------------------------------------------------

13822 ena_dsp ディスパッチの許可〔T〕【NGKI2746】

13823

13824 【C言語API】

13825 ER ercd = ena_dsp( )

13826

13827 【パラメータ】

13828 なし

13829

13830 【リターンパラメータ】

13831 ER ercd 正常終了(E_OK)またはエラーコード

13832

13833 【エラーコード】

13834 E_CTX コンテキストエラー

13835 ・非タスクコンテキストからの呼出し【NGKI2747】

13836 ・CPUロック状態からの呼出し【NGKI2748】

13837 E_OACV オブジェクトアクセス違反

13838 ・システム状態に対する通常操作1が許可されていない〔P〕

13839 【NGKI2749】

13840

13841 【機能】

13842

13843 ディスパッチ禁止フラグをクリアし,ディスパッチ許可状態へ遷移する

13844 【NGKI2750】.ディスパッチ許可状態で呼び出した場合には,何も行われずに

13845 正常終了する【NGKI2751】.

13846

13847 【補足説明】

13848

13849 ディスパッチ許可状態へ遷移した結果,ディスパッチ保留状態が解除され,ディ

13850 スパッチが起こる可能性がある.

Page 278: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

278

13851 ----------------------------------------------------------------------

13852 sns_ctx コンテキストの参照〔TI〕【NGKI2752】

13853

13854 【C言語API】

13855 bool_t state = sns_ctx()

13856

13857 【パラメータ】

13858 なし

13859

13860 【リターンパラメータ】

13861 bool_t state コンテキスト

13862

13863 【機能】

13864

13865 実行中のコンテキストを参照する.具体的な振舞いは以下の通り.

13866

13867 sns_ctxを非タスクコンテキストから呼び出した場合にはtrue,タスクコンテキ

13868 ストから呼び出した場合にはfalseが返る【NGKI2753】.

13869 ----------------------------------------------------------------------

13870 sns_loc CPUロック状態の参照〔TI〕【NGKI2754】

13871

13872 【C言語API】

13873 bool_t state = sns_loc()

13874

13875 【パラメータ】

13876 なし

13877

13878 【リターンパラメータ】

13879 bool_t state CPUロックフラグ

13880

13881 【機能】

13882

13883 CPUロックフラグを参照する.具体的な振舞いは以下の通り.

13884

13885 sns_locをCPUロック状態で呼び出した場合にはtrue,CPUロック解除状態で呼び

13886 出した場合にはfalseが返る【NGKI2755】.

13887 ----------------------------------------------------------------------

13888 sns_dsp ディスパッチ禁止状態の参照〔TI〕【NGKI2756】

13889

13890 【C言語API】

13891 bool_t state = sns_dsp()

13892

13893 【パラメータ】

13894 なし

13895

13896 【リターンパラメータ】

13897 bool_t state ディスパッチ禁止フラグ

13898

13899 【機能】

13900

Page 279: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

279

13901 ディスパッチ禁止フラグを参照する.具体的な振舞いは以下の通り.

13902

13903 sns_dspをディスパッチ禁止状態で呼び出した場合にはtrue,ディスパッチ許可

13904 状態で呼び出した場合にはfalseが返る【NGKI2757】.

13905 ----------------------------------------------------------------------

13906 sns_dpn ディスパッチ保留状態の参照〔TI〕【NGKI2758】

13907

13908 【C言語API】

13909 bool_t state = sns_dpn()

13910

13911 【パラメータ】

13912 なし

13913

13914 【リターンパラメータ】

13915 bool_t state ディスパッチ保留状態

13916

13917 【機能】

13918

13919 ディスパッチ保留状態であるか否かを参照する.具体的な振舞いは以下の通り.

13920

13921 sns_dpnをディスパッチ保留状態で呼び出した場合にはtrue,ディスパッチ保留

13922 状態でない状態で呼び出した場合にはfalseが返る【NGKI2759】.

13923 ----------------------------------------------------------------------

13924 sns_ker カーネル非動作状態の参照〔TI〕【NGKI2760】

13925

13926 【C言語API】

13927 bool_t state = sns_ker()

13928

13929 【パラメータ】

13930 なし

13931

13932 【リターンパラメータ】

13933 bool_t state カーネル非動作状態

13934

13935 【機能】

13936

13937 カーネルが動作中であるか否かを参照する.具体的な振舞いは以下の通り.

13938

13939 sns_kerをカーネルの初期化完了前(初期化ルーチン実行中を含む)または終了

13940 処理開始後(終了処理ルーチン実行中を含む)に呼び出した場合にはtrue,カー

13941 ネルの動作中に呼び出した場合にはfalseが返る【NGKI2761】.

13942

13943 【使用方法】

13944

13945 sns_kerは,カーネルが動作している時とそうでない時で,処理内容を変えたい

13946 場合に使用する.sns_kerがtrueを返した場合,他のサービスコールを呼び出す

13947 ことはできない.sns_kerがtrueを返す時に他のサービスコールを呼び出した場

13948 合の動作は保証されない.

13949

13950 【使用上の注意】

Page 280: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

280

13951

13952 どちらの条件でtrueが返るか間違いやすいので注意すること.

13953

13954 【μITRON4.0仕様との関係】

13955

13956 μITRON4.0仕様に定義されていないサービスコールである.

13957 ----------------------------------------------------------------------

13958 ext_ker カーネルの終了〔TI〕【NGKI2762】

13959

13960 【C言語API】

13961 ER ercd = ext_ker()

13962

13963 【パラメータ】

13964 なし

13965

13966 【リターンパラメータ】

13967 ER ercd エラーコード

13968

13969 【エラーコード】

13970 E_SYS システムエラー

13971 ・カーネルの誤動作【NGKI2763】

13972 E_OACV オブジェクトアクセス違反

13973 ・カーネルドメイン以外からの呼出し〔P〕【NGKI2764】

13974

13975 【機能】

13976

13977 カーネルを終了する.具体的な振舞いについては,「2.9.2 システム終了手順」

13978 の節を参照すること.

13979

13980 ext_kerが正常に処理された場合,ext_kerからはリターンしない【NGKI2765】.

13981

13982 【μITRON4.0仕様との関係】

13983

13984 μITRON4.0仕様に定義されていないサービスコールである.

13985 ----------------------------------------------------------------------

13986 ref_sys システムの状態参照〔T〕

13987

13988 【C言語API】

13989 ER ercd = ref_sys(T_RSYS *pk_rsys)

13990

13991 ☆未完成

13992

13993 【TOPPERS/ASPカーネルにおける規定】

13994

13995 ASPカーネルでは,ref_sysをサポートしない.

13996

13997 【TOPPERS/FMPカーネルにおける規定】

13998

13999 FMPカーネルでは,ref_sysをサポートしない.

14000

Page 281: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

281

14001 【TOPPERS/HRP2カーネルにおける規定】

14002

14003 HRP2カーネルでは,ref_sysをサポートしない.

14004

14005 【TOPPERS/SSPカーネルにおける規定】

14006

14007 SSPカーネルでは,ref_sysをサポートしない.

14008 ----------------------------------------------------------------------

14009

14010 4.8 メモリオブジェクト管理機能

14011

14012 メモリオブジェクト管理機能は,保護機能対応カーネルでのみサポートされる

14013 機能である.保護機能対応でないカーネルでは,メモリオブジェクト管理機能

14014 をサポートしない.

14015

14016 〔メモリリージョン〕

14017

14018 メモリリージョンは,オブジェクトモジュールに含まれるセクションの配置対

14019 象となる同じ性質を持った連続したメモリ領域である.メモリリージョンは,

14020 メモリリージョン名によって識別する【NGKI2766】.

14021

14022 各メモリリージョンが持つ情報は次の通り【NGKI2767】.

14023

14024 ・先頭番地

14025 ・サイズ

14026 ・メモリリージョン属性

14027

14028 メモリリージョンの先頭番地とサイズには,ターゲット定義の制約が課せられ

14029 る場合がある【NGKI2768】.

14030

14031 メモリリージョン属性には,次の属性を指定することができる【NGKI3256】.

14032

14033 TA_NOWRITE 0x01U 書込みアクセス禁止

14034

14035 ターゲットによっては,ターゲット定義のメモリリージョン属性を指定できる

14036 場合がある【NGKI2771】.

14037

14038 標準メモリリージョンとは,ATT_MOD/ATA_MODによって,オブジェクトモジュー

14039 ルに含まれる標準のセクションが配置されるメモリリージョンである.標準メ

14040 モリリージョンには,標準のセクションの中で,書込みアクセスを行わないも

14041 のが配置される標準ROMリージョンと,書込みアクセスを行うものが配置される

14042 標準RAMリージョンが含まれる.

14043

14044 マルチプロセッサ対応カーネルでは,ATT_MOD/ATA_MODがクラスの囲みの外に

14045 記述された場合に適用される共通の標準メモリリージョンに加えて,クラス毎

14046 の標準メモリリージョンを定義することができる【NGKI3257】.

14047

14048 標準メモリリージョン(マルチプロセッサ対応カーネルでは,共通の標準メモ

14049 リリージョン)は,必ず定義しなければならない.定義しない場合には,コン

14050 フィギュレータがエラーを報告する【NGKI3259】.

Page 282: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

282

14051

14052 〔メモリオブジェクト〕

14053

14054 メモリオブジェクトは,保護機能対応カーネルにおいてアクセス保護の対象と

14055 する連続したメモリ領域である.メモリオブジェクトは,その先頭番地によっ

14056 て識別する【NGKI2772】.

14057

14058 各メモリオブジェクトが持つ情報は次の通り【NGKI2773】.

14059

14060 ・先頭番地

14061 ・サイズ

14062 ・メモリオブジェクト属性

14063 ・アクセス許可ベクタ

14064 ・属する保護ドメイン

14065 ・属するクラス(マルチプロセッサ対応カーネルの場合)

14066

14067 メモリオブジェクトの先頭番地とサイズには,ターゲット定義の制約が課せら

14068 れる【NGKI2774】.

14069

14070 メモリオブジェクト属性には,次の属性を指定することができる【NGKI2775】.

14071

14072 TA_NOWRITE 0x01U 書込みアクセス禁止

14073 TA_NOREAD 0x02U 読出しアクセス禁止

14074 TA_EXEC 0x04U 実行アクセス許可

14075 TA_MEMINI 0x08U メモリの初期化を行う

14076 TA_MEMPRSV 0x10U メモリの初期化を行わない

14077 TA_SDATA 0x20U ショートデータ領域に配置

14078 TA_UNCACHE 0x40U キャッシュ禁止

14079 TA_IODEV 0x80U 周辺デバイスの領域

14080

14081 メモリオブジェクトに対して書込みアクセスできるのは,メモリオブジェクト

14082 属性に書込みアクセス禁止(TA_NOWRITE属性)が指定されておらず,アクセス

14083 許可ベクタにより書込みアクセスが許可されている場合である【NGKI2776】.

14084 また,読出しアクセスできるのは,メモリオブジェクト属性に読出しアクセス

14085 禁止(TA_NOREAD属性)が指定されておらず,アクセス許可ベクタにより読出し・

14086 実行アクセスが許可されている場合である【NGKI2777】.実行アクセスできる

14087 のは,メモリオブジェクト属性に実行アクセス許可(TA_EXEC属性)が指定され

14088 ており,アクセス許可ベクタにより読出し・実行アクセスが許可されている場

14089 合である【NGKI2778】.

14090

14091 ただし,ターゲットハードウェアの制約によってこれらの属性を実現できない

14092 場合には,次のように扱われる.書込みアクセス禁止が実現できない場合には,

14093 TA_NOWRITEを指定しても無視される【NGKI2779】.また,読出しアクセス禁止

14094 が実現できない場合には,TA_NOREADを指定しても無視される【NGKI2780】.実

14095 行アクセス禁止が実現できない場合には,TA_EXECを指定しなくても実行アクセ

14096 ス許可となり,TA_EXECは無視される【NGKI2781】.どのような場合にどの属性

14097 の指定が無視されるかは,ターゲット定義である【NGKI2782】.

14098

14099 TA_MEMINI属性は,システム初期化時に初期化するメモリオブジェクトであるこ

14100 とを,TA_MEMPRSV属性は,システム初期化時に初期化を行わないメモリオブジェ

Page 283: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

283

14101 クトであることを示す【NGKI2783】.いずれの属性も指定しない場合,そのメ

14102 モリオブジェクトは,システム初期化時にクリア(言い換えると,0に初期化)

14103 される【NGKI2784】.TA_MEMINIとTA_MEMPRSVの両方を指定した場合には,

14104 E_RSATRエラーとなる【NGKI2785】.

14105

14106 TA_NOWRITEが指定されている場合には,TA_MEMINIとTA_MEMPRSVは無視される

14107 (指定しても指定しなくても,同じ振舞いとなる)【NGKI2786】.

14108

14109 TA_MEMINI属性を設定したメモリオブジェクトを初期化に用いる初期化データは,

14110 標準ROMリージョン(マルチプロセッサ対応カーネルでは,共通の標準ROMリー

14111 ジョン)に配置され,メモリオブジェクトとしては登録されない【NGKI2787】.

14112

14113 TA_SDATA属性は,メモリオブジェクトをショートデータ領域に配置することを

14114 示す【NGKI2788】.具体的な扱いはターゲット定義であるが,ショートデータ

14115 領域がサポートされていないターゲットでは,この属性は無視される

14116 【NGKI2789】.また,ターゲットによっては,TA_NOWRITEを指定した場合に,

14117 TA_SDATAが無視される場合がある【NGKI2790】.

14118

14119 TA_UNCACHE属性は,メモリオブジェクトをキャッシュ禁止に設定することを,

14120 TA_IODEV属性は,メモリオブジェクトを周辺デバイスの領域として扱うことを

14121 示す【NGKI2791】.具体的な扱いはターゲット定義であるが,これらの属性を

14122 指定しても意味がないターゲット(例えば,キャッシュを持たないターゲット

14123 プロセッサでのTA_UNCACHE)では,これらの属性は無視される【NGKI2792】.

14124 逆に,キャッシュ禁止にできないメモリオブジェクトに対してTA_UNCACHEを指

14125 定した場合や,周辺デバイスの領域として扱うことができないメモリオブジェ

14126 クトに対してTA_IODEVを指定した場合には,E_RSATRエラーとなる【NGKI2793】.

14127

14128 ターゲットによっては,ターゲット定義のメモリオブジェクト属性を指定でき

14129 る場合がある【NGKI2794】.ターゲット定義のメモリオブジェクト属性として,

14130 次の属性を予約している【NGKI2795】.

14131

14132 TA_WTHROUGH ライトスルーキャッシュを用いる

14133

14134 〔カーネル構成マクロ〕

14135

14136 メモリオブジェクト管理機能に関連するカーネル構成マクロは次の通り.

14137

14138 TOPPERS_SUPPORT_ATT_MOD ATT_MOD /ATA_MODがサポートされている

14139 【NGKI2796】

14140 TOPPERS_SUPPORT_ATT_PMA ATT_PMA /ATA_PMA/att_pmaがサポートさ

14141 れている【NGKI2797】

14142

14143 ただし,att_pmaは,動的生成対応カーネルのみでサポートされるAPIであるた

14144 め,サポートされているかを判定するには,TOPPERS_SUPPORT_DYNAMIC_CREと

14145 TOPPERS_SUPPORT_ATT_PMA の両方が定義されていることをチェックする必要があ

14146 る【NGKI2798】.

14147

14148 【補足説明】

14149

14150 メモリオブジェクトが属するクラスは,ATT_MOD/ATA_MODにおいて,標準のセ

Page 284: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

284

14151 クションが配置されるメモリリージョンを決定するためのみに使用される.

14152

14153 【TOPPERS/ASPカーネルにおける規定】

14154

14155 ASPカーネルでは,メモリオブジェクト管理機能をサポートしない【ASPS0191】.

14156

14157 【TOPPERS/FMPカーネルにおける規定】

14158

14159 FMPカーネルでは,メモリオブジェクト管理機能をサポートしない【FMPS0158】.

14160

14161 【TOPPERS/HRP2カーネルにおける規定】

14162

14163 HRP2カーネルでは,メモリオブジェクト管理機能をサポートする【HRPS0154】.

14164

14165 【TOPPERS/SSPカーネルにおける規定】

14166

14167 SSPカーネルでは,メモリオブジェクト管理機能をサポートしない【SSPS0136】.

14168

14169 【μITRON4.0/PX仕様との関係】

14170

14171 値が0のメモリオブジェクト属性(TA_RW,TA_CACHE)は,デフォルトの扱いに

14172 して廃止した.TA_ROはTA_NOWRITEに改名し,TA_NOREAD,TA_EXEC,TA_MEMINI,

14173 TA_MEMPRSV,TA_IODEVを追加した.また,TA_UNCACHEの値を変更し,ターゲッ

14174 ト定義のメモリオブジェクト属性としてTA_WTHROUGHを予約した.

14175

14176 メモリリージョンは,μITRON4.0/PX仕様にはない概念である.

14177

14178 【仕様決定の理由】

14179

14180 TA_IODEV属性を導入したのは,ターゲットプロセッサによっては,周辺デバイ

14181 スの領域として扱うためには,キャッシュ禁止に加えて,メモリのアクセス順

14182 序を変更しないことを指定しなければならないためである.メモリのアクセス

14183 順序を変更しないことを指定するメモリオブジェクト属性を,ターゲット定義

14184 で用意してもよいが,それを使うとアプリケーションのポータビリティが下が

14185 るため,TA_IODEV属性を用意することにした.

14186 ----------------------------------------------------------------------

14187 ATT_REG メモリリージョンの登録〔SP〕【NGKI2799】

14188

14189 【静的API】

14190 ATT_REG("メモリリージョン名", { ATR regatr, void *base, SIZE size })

14191

14192 【パラメータ】

14193 "メモリリージョン名" 登録するメモリリージョンを指定する文字列

14194 ATR regatr メモリリージョン属性

14195 void * base 登録するメモリリージョンの先頭番地

14196 SIZE size 登録するメモリリージョンのサイズ(バイト数)

14197

14198 【エラーコード】

14199 E_RSATR 予約属性

14200 ・regatrが無効【NGKI2800】

Page 285: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

285

14201 ・保護ドメインの囲みの中に記述されている【NGKI2814】

14202 ・クラスの囲みの中に記述されている〔M〕【NGKI3260】

14203 E_PAR パラメータエラー

14204 ・sizeが0以下【NGKI2816】

14205 ・その他の条件については機能の項を参照

14206 E_OBJ オブジェクト状態エラー

14207 ・登録済みのメモリリージョンの再登録【NGKI2801】

14208 ・その他の条件については機能の項を参照

14209

14210 【機能】

14211

14212 各パラメータで指定したメモリリージョン登録情報に従って,指定したメモリ

14213 リージョンを登録する.具体的な振舞いは以下の通り.

14214

14215 baseとsizeで指定したメモリ領域が,メモリリージョンとして登録される

14216 【NGKI2802】.登録されるメモリリージョンには,regatrで指定したメモリリー

14217 ジョン属性が設定される【NGKI2803】.

14218

14219 メモリリージョン名は文字列パラメータ,regatr,base,sizeは整数定数式パ

14220 ラメータである【NGKI2804】.

14221

14222 baseやsizeに,ターゲット定義の制約に合致しない先頭番地やサイズを指定し

14223 た時には,E_PARエラーとなる【NGKI2815】.登録しようとしたメモリリージョ

14224 ンが,登録済みのメモリリージョンとメモリ領域が重なる場合には,E_OBJエラー

14225 となる【NGKI2817】.

14226

14227 【μITRON4.0/PX仕様との関係】

14228

14229 μITRON4.0/PX仕様に定義されていない静的APIである.

14230 ----------------------------------------------------------------------

14231 DEF_SRG 標準メモリリージョンの定義〔SP〕【NGKI3261】

14232

14233 【静的API】

14234 DEF_SRG("標準ROMリージョン名", "標準RAMリージョン名")

14235

14236 【パラメータ】

14237 "標準ROMリージョン名" 標準ROMリージョンとするメモリリージョンを

14238 指定する文字列

14239 "標準RAMリージョン名" 標準RAMリージョンとするメモリリージョンを

14240 指定する文字列

14241

14242 【エラーコード】

14243 E_RSATR 予約属性

14244 ・保護ドメインの囲みの中に記述されている【NGKI3262】

14245 E_OBJ オブジェクト状態エラー

14246 ・標準メモリリージョンが定義済み【NGKI3263】

14247 ・標準ROMリージョンに指定したメモリリージョンが未登録

14248 【NGKI3264】

14249 ・標準RAMリージョンに指定したメモリリージョンが未登録

14250 【NGKI3272】

Page 286: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

286

14251 ・その他の条件については機能の項を参照

14252

14253 【機能】

14254

14255 各パラメータに従って,標準ROMリージョンと標準RAMリージョンを定義する

14256 【NGKI3265】.

14257

14258 マルチプロセッサ対応カーネルでは,DEF_SRGをクラスの囲みの外に記述すると,

14259 共通の標準ROMリージョンと標準RAMリージョンを定義し,クラスの囲みの中に

14260 記述すると,そのクラスの標準ROMリージョンと標準RAMリージョンを定義する

14261 【NGKI3266】.

14262

14263 標準ROMリージョンは,TA_NOWRITE属性のメモリリージョンでなければならない.

14264 標準ROMリージョンとして指定したメモリリージョンが,TA_NOWRITE属性でない

14265 場合には,E_OBJエラーとなる【NGKI3268】.また,標準RAMリージョンは,

14266 TA_NOWRITE属性でないメモリリージョンでなければならない.標準RAMリージョ

14267 ンとして指定したメモリリージョンが,TA_NOWRITE属性である場合には,

14268 E_OBJエラーとなる【NGKI3270】.

14269

14270 【μITRON4.0/PX仕様との関係】

14271

14272 μITRON4.0/PX仕様に定義されていない静的APIである.

14273 ----------------------------------------------------------------------

14274 ATT_SEC セクションの登録〔SP〕【NGKI2818】

14275 ATA_SEC セクションの登録(アクセス許可ベクタ付き)〔SP〕【NGKI2819】

14276

14277 【静的API】

14278 ATT_SEC("セクション名", { ATR mematr, "メモリリージョン名" })

14279 ATA_SEC("セクション名", { ATR mematr, "メモリリージョン名" },

14280 { ACPTN acptn1, ACPTN acptn2, ACPTN acptn3, ACPTN acptn4 })

14281

14282 【パラメータ】

14283 "セクション名" 登録するセクションを指定する文字列

14284 ATR mematr メモリオブジェクト属性

14285 "メモリリージョン名" セクションを配置するメモリリージョンを指定

14286 する文字列

14287

14288 *アクセス許可ベクタ(パケットの内容)

14289 ACPTN acptn1 通常操作1のアクセス許可パターン

14290 ACPTN acptn2 通常操作2のアクセス許可パターン

14291 ACPTN acptn3 管理操作のアクセス許可パターン

14292 ACPTN acptn4 参照操作のアクセス許可パターン

14293

14294 【エラーコード】

14295 E_RSATR 予約属性

14296 ・mematrが無効【NGKI2820】

14297 ・その他の条件については機能の項を参照

14298 E_NOSPT 未サポート機能

14299 ・条件については機能の項を参照

14300 E_PAR パラメータエラー

Page 287: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

287

14301 ・条件については機能の項を参照

14302 E_OBJ オブジェクト状態エラー

14303 ・登録済みのセクションの再登録【NGKI2821】

14304 ・指定したメモリリージョンが未登録【NGKI2822】

14305

14306 【機能】

14307

14308 各パラメータで指定した情報に従って,指定したセクションをカーネルに登録

14309 する.具体的な振舞いは以下の通り.

14310

14311 各オブジェクトモジュールに含まれるセクション名で指定したセクションが,

14312 メモリリージョン名で指定したメモリリージョンに配置され,メモリオブジェ

14313 クトとして登録される【NGKI2823】.登録されるメモリオブジェクトには,

14314 mematrで指定したメモリオブジェクト属性が設定される【NGKI2824】.

14315 ATA_SECの場合には,登録されるメモリオブジェクトのアクセス許可ベクタ(4

14316 つのアクセス許可パターンの組)が,acptn1~acptn4で指定した値に設定され

14317 る【NGKI2825】.

14318

14319 指定したメモリリージョンがTA_NOWRITE属性である場合には,メモリオブジェ

14320 クト属性にTA_NOWRITE属性を指定したことになる(TA_NOWRITE属性を指定して

14321 も指定しなくても,同じ振舞いとなる)【NGKI2826】.

14322

14323 mematrに,TA_MEMINIとTA_MEMPRSVを同時に指定することはできない.指定した

14324 場合には,E_RSATRエラーとなる【NGKI2828】.

14325

14326 登録されるメモリオブジェクトと同じ保護ドメインに属し,メモリオブジェク

14327 ト属性とアクセス許可ベクタがすべて一致するメモリオブジェクトがある場合

14328 には,1つのメモリオブジェクトにまとめて登録される場合がある【NGKI2829】.

14329

14330 セクション名とメモリリージョン名は文字列パラメータ,mematr,acptn1~

14331 acptn4は整数定数式パラメータである【NGKI2830】.

14332

14333 ターゲット定義で,ATA_SECにより登録できるセクションが属する保護ドメイン

14334 や登録できる数に制限がある場合がある【NGKI2831】.この制限に違反した場

14335 合には,E_NOSPTエラーとなる【NGKI2832】.

14336

14337 ATT_MOD/ATA_MODがサポートされているターゲットでは,セクション名として,

14338 標準のセクションを指定することはできない.指定した場合には,E_PARエラー

14339 となる【NGKI2834】.

14340

14341 保護ドメイン毎の標準セクションは,コンフィギュレータによってカーネルに

14342 登録されるため,ATT_SEC/ATA_SECで登録することはできない.セクション名

14343 として指定した場合には,E_PARエラーとなる【NGKI2836】.

14344

14345 マルチプロセッサ対応カーネルにおいて,指定したメモリリージョンがあるク

14346 ラス専用のメモリリージョンの場合で,ATT_SEC/ATA_SECをクラスの囲みの外

14347 に記述するか,他のクラスの囲みの中に記述した場合には,E_RSATRエラーとな

14348 る【NGKI2837】.

14349

14350 【μITRON4.0/PX仕様との関係】

Page 288: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

288

14351

14352 μITRON4.0/PX仕様に定義されていない静的APIである.

14353 ----------------------------------------------------------------------

14354 LNK_SEC セクションの配置〔SP〕【NGKI2838】

14355

14356 【静的API】

14357 LNK_SEC("セクション名", { "メモリリージョン名" })

14358

14359 【パラメータ】

14360 "セクション名" 配置するセクションを指定する文字列

14361 "メモリリージョン名" セクションを配置するメモリリージョンを指定

14362 する文字列

14363

14364 【エラーコード】

14365 E_RSATR 予約属性

14366 ・条件については機能の項を参照

14367 E_PAR パラメータエラー

14368 ・条件については機能の項を参照

14369 E_OBJ オブジェクト状態エラー

14370 ・登録済みのセクションの再登録【NGKI2839】

14371 ・指定したメモリリージョンが未登録【NGKI2840】

14372

14373 【機能】

14374

14375 各オブジェクトモジュールに含まれるセクション名で指定したセクションを,

14376 メモリリージョン名で指定したメモリリージョンに配置する【NGKI2841】.

14377

14378 セクション名として,標準のセクションや保護ドメイン毎の標準セクションを

14379 指定することはできない.指定した場合には,E_PARエラーとなる【NGKI2843】.

14380

14381 マルチプロセッサ対応カーネルにおいて,指定したメモリリージョンがあるク

14382 ラス専用のメモリリージョンの場合で,LNK_SECをクラスの囲みの外に記述する

14383 か,他のクラスの囲みの中に記述した場合には,E_RSATRエラーとなる

14384 【NGKI2844】.

14385

14386 【使用上の注意】

14387

14388 LNK_SECにより配置されたセクションは,メモリオブジェクトとしてカーネルに

14389 登録されず,メモリ保護が実現できる先頭番地とサイズになるとは限らない.

14390

14391 【μITRON4.0/PX仕様との関係】

14392

14393 μITRON4.0/PX仕様に定義されていない静的APIである.

14394 ----------------------------------------------------------------------

14395 ATT_MOD オブジェクトモジュールの登録〔SP〕【NGKI2845】

14396 ATA_MOD オブジェクトモジュールの登録(アクセス許可ベクタ付き)〔SP〕

14397 【NGKI2846】

14398

14399 【静的API】

14400 ATT_MOD("オブジェクトモジュール名")

Page 289: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

289

14401 ATA_MOD("オブジェクトモジュール名",

14402 { ACPTN acptn1, ACPTN acptn2, ACPTN acptn3, ACPTN acptn4 })

14403

14404 【パラメータ】

14405 "オブジェクトモジュール名" 登録するオブジェクトモジュールを指

14406 定する文字列

14407

14408 *アクセス許可ベクタ(パケットの内容)

14409 ACPTN acptn1 通常操作1のアクセス許可パターン

14410 ACPTN acptn2 通常操作2のアクセス許可パターン

14411 ACPTN acptn3 管理操作のアクセス許可パターン

14412 ACPTN acptn4 参照操作のアクセス許可パターン

14413

14414 【エラーコード】

14415 E_RSATR 予約属性

14416 ・mematrが無効【NGKI2847】

14417 E_NOSPT 未サポート機能

14418 ・条件については機能の項を参照

14419 E_OBJ オブジェクト状態エラー

14420 ・登録済みのオブジェクトモジュールの再登録【NGKI2848】

14421

14422 【機能】

14423

14424 各パラメータで指定した情報に従って,指定したオブジェクトモジュールをカー

14425 ネルに登録する.具体的な振舞いは以下の通り.

14426

14427 オブジェクトモジュール名で指定したオブジェクトモジュールに含まれる標準

14428 のセクションの内,書込みアクセスを行わないセクションは標準ROMリージョン

14429 に,書込みアクセスを行うセクションは標準RAMリージョンに配置され,メモリ

14430 オブジェクトとして登録される【NGKI2849】.登録されるメモリオブジェクト

14431 には,ターゲット定義でセクション毎に定まるメモリオブジェクト属性が設定

14432 される【NGKI2850】.ATA_MODの場合には,登録されるメモリオブジェクトのア

14433 クセス許可ベクタ(4つのアクセス許可パターンの組)が,acptn1~acptn4で指

14434 定した値に設定される【NGKI2851】.

14435

14436 マルチプロセッサ対応カーネルでは,ATT_MOD/ATA_MODを,クラスの囲みの外

14437 に記述することも,クラスの囲みの中に記述することもできる【NGKI2852】.

14438 ATT_MOD/ATA_MODをクラスの囲みの外に記述した場合,標準のセクションは,

14439 共通の標準メモリリージョンに配置される【NGKI2853】.クラスの囲みの中に

14440 記述した場合,そのクラスの標準メモリリージョンが定義されていればそれら

14441 のメモリリージョン,定義されていなければ共通の標準メモリリージョンに配

14442 置される【NGKI2854】.ただし,セクションによっては,ターゲット定義で,

14443 クラスの標準メモリリージョンが定義されている場合でも,共通の標準メモリ

14444 リージョンに配置される場合がある【NGKI3271】.

14445

14446 登録されるメモリオブジェクトと同じ保護ドメインに属し,メモリオブジェク

14447 ト属性とアクセス許可ベクタがすべて一致するメモリオブジェクトがある場合

14448 には,1つのメモリオブジェクトにまとめて登録される場合がある【NGKI2855】.

14449

14450 オブジェクトモジュール名は文字列パラメータ,acptn1~acptn4は整数定数式

Page 290: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

290

14451 パラメータである【NGKI2856】.

14452

14453 ターゲット定義で,ATA_MODにより登録できるオブジェクトモジュールが属する

14454 保護ドメインや登録できる数に制限がある場合がある【NGKI2857】.この制限

14455 に違反した場合には,E_NOSPTエラーとなる【NGKI2858】.

14456

14457 ターゲット定義で,ATT_MOD/ATA_MODがサポートされていない場合がある

14458 【NGKI2859】.ATT_MOD/ATA_MODがサポートされている場合には,

14459 TOPPERS_SUPPORT_ATT_MOD がマクロ定義される【NGKI2860】.サポートされてい

14460 ない場合にATT_MOD/ATA_MODを使用すると,コンフィギュレータがE_NOSPTエラー

14461 を報告する【NGKI2861】.

14462

14463 【補足説明】

14464

14465 ATT_MOD/ATA_MODでは,標準のセクション以外は配置・登録されない.標準の

14466 セクション以外のセクションを配置・登録するためには,ATT_SEC/ATA_SECを用

14467 いる必要がある.

14468

14469 【μITRON4.0/PX仕様との関係】

14470

14471 オブジェクトモジュールに含まれるセクションの配置場所が,標準ROMリージョ

14472 ンと標準RAMリージョンであることを明確化した.

14473 ----------------------------------------------------------------------

14474 ATT_MEM メモリオブジェクトの登録〔SP〕【NGKI2862】

14475 ATA_MEM メモリオブジェクトの登録(アクセス許可ベクタ付き)〔SP〕【NGKI2863】

14476 att_mem メモリオブジェクトの登録〔TPD〕【NGKI2864】

14477

14478 【静的API】

14479 ATT_MEM({ ATR mematr, void *base, SIZE size })

14480 ATA_MEM({ ATR mematr, void *base, SIZE size },

14481 { ACPTN acptn1, ACPTN acptn 2, ACPTN acptn3, ACPTN acptn4 })

14482

14483 【C言語API】

14484 ER ercd = att_mem(const T_AMEM *pk_amem)

14485

14486 【パラメータ】

14487 T_AMEM * pk_amem メモリオブジェクトの登録情報を入れたパケッ

14488 トへのポインタ(静的APIを除く)

14489

14490 *メモリオブジェクトの登録情報(パケットの内容)

14491 ATR mematr メモリオブジェクト属性

14492 void * base 登録するメモリ領域の先頭番地

14493 SIZE size 登録するメモリ領域のサイズ(バイト数)

14494

14495 *アクセス許可ベクタ(パケットの内容)

14496 ACPTN acptn1 通常操作1のアクセス許可パターン

14497 ACPTN acptn2 通常操作2のアクセス許可パターン

14498 ACPTN acptn3 管理操作のアクセス許可パターン

14499 ACPTN acptn4 参照操作のアクセス許可パターン

14500

Page 291: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

291

14501 【リターンパラメータ】

14502 ER ercd 正常終了(E_OK)またはエラーコード

14503

14504 【エラーコード】

14505 E_CTX コンテキストエラー

14506 ・非タスクコンテキストからの呼出し〔s〕【NGKI2865】

14507 ・CPUロック状態からの呼出し〔s〕【NGKI2866】

14508 E_RSATR 予約属性

14509 ・mematrが無効【NGKI2867】

14510 ・属する保護ドメインの指定が有効範囲外〔sP〕【NGKI2868】

14511 ・属するクラスの指定が有効範囲外〔sM〕【NGKI2869】

14512 ・その他の条件については機能の項を参照

14513 E_NOSPT 未サポート機能

14514 ・条件については機能の項を参照

14515 E_PAR パラメータエラー

14516 ・sizeが0以下【NGKI2881】

14517 ・その他の条件については機能の項を参照

14518 E_OACV オブジェクトアクセス違反

14519 ・システム状態に対する管理操作が許可されていない〔sP〕

14520 【NGKI2870】

14521 E_MACV メモリアクセス違反

14522 ・pk_amemが指すメモリ領域への読出しアクセスが許可されて

14523 いない〔sP〕【NGKI2871】

14524 E_OBJ オブジェクト状態エラー

14525 ・条件については機能の項を参照

14526

14527 【機能】

14528

14529 各パラメータで指定したメモリオブジェクト登録情報に従って,メモリオブジェ

14530 クトを登録する.具体的な振舞いは以下の通り.

14531

14532 baseとsizeで指定したメモリ領域が,メモリオブジェクトとして登録される

14533 【NGKI2872】.登録されるメモリオブジェクトには,mematrで指定したメモリ

14534 オブジェクト属性が設定される【NGKI2873】.ATA_MEMの場合には,登録される

14535 メモリオブジェクトのアクセス許可ベクタ(4つのアクセス許可パターンの組)

14536 が,acptn1~acptn4で指定した値に設定される【NGKI2874】.

14537

14538 mematrには,TA_MEMPRSVを指定しなければならず,TA_MEMINIを指定することは

14539 できない.TA_MEMPRSVを指定しない場合や,TA_MEMINIを指定した場合には,

14540 E_RSATRエラーとなる【NGKI2876】.また,mematrにTA_SDATAを指定することは

14541 できない.TA_SDATAを指定した場合には,E_RSATRエラーとなる【NGKI3274】.

14542

14543 静的APIにおいては,mematr,size,acptn1~acptn4は整数定数式パラメータ,

14544 baseは一般定数式パラメータである【NGKI2877】.

14545

14546 ターゲット定義で,ATT_MEM/ATA_MEMにより登録できるメモリオブジェクトが

14547 属する保護ドメインや登録できる数に制限がある場合がある【NGKI2878】.こ

14548 の制限に違反した場合には,E_NOSPTエラーとなる【NGKI2879】.

14549

14550 baseやsizeに,ターゲット定義の制約に合致しない先頭番地やサイズを指定し

Page 292: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

292

14551 た時には,E_PARエラーとなる【NGKI2880】.登録しようとしたメモリオブジェ

14552 クトが,登録済みのメモリオブジェクトとメモリ領域が重なる場合には,

14553 E_OBJエラーとなる【NGKI2882】.

14554

14555 【使用上の注意】

14556

14557 ATT_MEM/ATA_MEMは,メモリ空間にマッピングされたI/O領域にアクセスできる

14558 ようにするために使用することを想定した静的APIである.メモリ領域に対して

14559 は,ATT_SEC/ATA_SECかATT_MOD/ATA_MODを使用することを推奨する.

14560

14561 ATT_MEM/ATA_MEMで登録したメモリオブジェクトのメモリ領域が,ATT_REGで登

14562 録したメモリリージョンと重なっても,直ちにエラーとはならない.ただし,

14563 メモリリージョン内に配置されたメモリオブジェクトと,ATT_MEM/ATA_MEMで

14564 登録したメモリオブジェクトのメモリ領域が重なった場合には,E_OBJエラーと

14565 なる.

14566

14567 【TOPPERS/HRP2カーネルにおける規定】

14568

14569 HRP2カーネルでは,ATT_MEMとATA_MEMのみをサポートする【HRPS0155】.

14570

14571 【μITRON4.0/PX仕様との関係】

14572

14573 アクセス許可ベクタを指定してメモリオブジェクトを登録するサービスコール

14574 (ata_mem)は廃止した.

14575

14576 baseやsizeがターゲット定義の制約に合致しない場合,μITRON4.0/PX仕様では

14577 ターゲット定義の制約に合致するようにメモり領域を広げることとしていたが,

14578 この仕様ではE_PARエラーとなることとした.

14579 ----------------------------------------------------------------------

14580 ATT_PMA 物理メモリ領域の登録〔SP〕【NGKI2883】

14581 ATA_PMA 物理メモリ領域の登録(アクセス許可ベクタ付き)〔SP〕【NGKI2884】

14582 att_pma 物理メモリ領域の登録〔TPD〕【NGKI2885】

14583

14584 【静的API】

14585 ATT_PMA({ ATR mematr, void *base, SIZE size, void *paddr })

14586 ATA_PMA({ A TR mematr, void *base, SIZE size, void *paddr },

14587 { ACPTN acptn1, ACPTN acptn2, ACPTN acptn3, ACPTN acptn4 })

14588

14589 【C言語API】

14590 ER ercd = att_pma(const T_APMA *pk_apma)

14591

14592 【パラメータ】

14593 T_APMA * pk_apma 物理メモリ領域の登録情報を入れたパケットへ

14594 のポインタ(静的APIを除く)

14595

14596 *物理メモリ領域の登録情報(パケットの内容)

14597 ATR mematr メモリオブジェクト属性

14598 void * base 登録するメモリ領域の先頭番地

14599 SIZE size 登録するメモリ領域のサイズ(バイト数)

14600 void * paddr 登録するメモリ領域の物理アドレス空間における

Page 293: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

293

14601 先頭番地

14602

14603 *アクセス許可ベクタ(パケットの内容)

14604 ACPTN acptn1 通常操作1のアクセス許可パターン

14605 ACPTN acptn2 通常操作2のアクセス許可パターン

14606 ACPTN acptn3 管理操作のアクセス許可パターン

14607 ACPTN acptn4 参照操作のアクセス許可パターン

14608

14609 【リターンパラメータ】

14610 ER ercd 正常終了(E_OK)またはエラーコード

14611

14612 【エラーコード】

14613 E_CTX コンテキストエラー

14614 ・非タスクコンテキストからの呼出し〔s〕【NGKI2886】

14615 ・CPUロック状態からの呼出し〔s〕【NGKI2887】

14616 E_RSATR 予約属性

14617 ・mematrが無効

14618 ・属する保護ドメインの指定が有効範囲外〔sP〕【NGKI2888】

14619 ・属するクラスの指定が有効範囲外〔sM〕【NGKI2889】

14620 ・その他の条件については機能の項を参照

14621 E_NOSPT 未サポート機能

14622 ・条件については機能の項を参照

14623 E_PAR パラメータエラー

14624 ・sizeが0以下【NGKI2901】

14625 ・その他の条件については機能の項を参照

14626 E_OACV オブジェクトアクセス違反

14627 ・システム状態に対する管理操作が許可されていない〔sP〕

14628 【NGKI2890】

14629 E_MACV メモリアクセス違反

14630 ・pk_apmaが指すメモリ領域への読出しアクセスが許可されて

14631 いない〔sP〕【NGKI2891】

14632 E_OBJ オブジェクト状態エラー

14633 ・条件については機能の項を参照

14634

14635 【機能】

14636

14637 各パラメータで指定した物理メモリ領域の登録情報に従って,メモリオブジェ

14638 クトを登録する.具体的な振舞いは以下の通り.

14639

14640 物理アドレス空間において先頭番地がpaddr,サイズがsizeのメモリ領域が,論

14641 理アドレス空間においてbaseで指定した番地からアクセスできるように,メモ

14642 リオブジェクトとして登録される【NGKI2892】.登録されるメモリオブジェク

14643 トには,mematrで指定したメモリオブジェクト属性が設定される【NGKI2893】.

14644 ATA_PMAの場合には,登録されるメモリオブジェクトのアクセス許可ベクタ(4

14645 つのアクセス許可パターンの組)が,acptn1~acptn4で指定した値に設定され

14646 る【NGKI2894】.

14647

14648 mematrには,TA_MEMPRSVを指定しなければならず,TA_MEMINIを指定することは

14649 できない.TA_MEMPRSVを指定しない場合や,TA_MEMINIを指定した場合には,

14650 E_RSATRエラーとなる【NGKI2896】.

Page 294: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

294

14651

14652 静的APIにおいては,mematr,size,paddr,acptn1~acptn4は整数定数式パラ

14653 メータ,baseは一般定数式パラメータである【NGKI2897】.

14654

14655 ターゲット定義で,ATT_PMA/ATA_PMAにより登録できるメモリオブジェクトが

14656 属する保護ドメインや登録できる数に制限がある場合がある【NGKI2898】.こ

14657 の制限に違反した場合には,E_NOSPTエラーとなる【NGKI2899】.

14658

14659 base,size,paddrに,ターゲット定義の制約に合致しない先頭番地やサイズを

14660 指定した時には,E_PARエラーとなる【NGKI2900】.登録しようとしたメモリオ

14661 ブジェクトが,登録済みのメモリオブジェクトと論理アドレス空間においてメ

14662 モリ領域が重なる場合には,E_OBJエラーとなる【NGKI2902】.

14663

14664 ATT_PMA/ATA_PMA/att_pmaは,MMU(Memory Management Unit)を持つターゲッ

14665 トシステムにおいて,ターゲット定義でサポートされる機能である【NGKI2903】.

14666 ATT_PMA/ATA_PMA/att_pmaがサポートされている場合には,

14667 TOPPERS_SUPPORT_ATT_PMA がマクロ定義される【NGKI2904】.ATT_PMA/ATA_PMA

14668 がサポートされていない場合にこれらの静的APIを使用すると,コンフィギュレー

14669 タがE_NOSPTエラーを報告する【NGKI2905】.また,att_pmaがサポートされて

14670 いない場合にatt_pmaを呼び出すと,E_NOSPTエラーが返るか,リンク時にエラー

14671 となる【NGKI2906】.

14672

14673 【TOPPERS/HRP2カーネルにおける規定】

14674

14675 HRP2カーネルでは,ターゲット定義で,ATT_PMAとATA_PMAのみをサポートする

14676 【HRPS0156】.

14677

14678 【μITRON4.0/PX仕様との関係】

14679

14680 μITRON4.0/PX仕様に定義されていない静的APIおよびサービスコールである.

14681 ----------------------------------------------------------------------

14682 sac_mem メモリオブジェクトのアクセス許可ベクタの設定〔TPD〕【NGKI2907】

14683

14684 【C言語API】

14685 ER ercd = sac_mem(const void *base, const ACVCT *p_acvct)

14686

14687 【パラメータ】

14688 void * base メモリオブジェクトの先頭番地

14689 ACVCT * p_acvct アクセス許可ベクタを入れたパケットへのポ

14690 インタ

14691

14692 *アクセス許可ベクタ(パケットの内容)

14693 ACPTN acptn1 通常操作1のアクセス許可パターン

14694 ACPTN acptn2 通常操作2のアクセス許可パターン

14695 ACPTN acptn3 管理操作のアクセス許可パターン

14696 ACPTN acptn4 参照操作のアクセス許可パターン

14697

14698 【リターンパラメータ】

14699 ER ercd 正常終了(E_OK)またはエラーコード

14700

Page 295: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

295

14701 【エラーコード】

14702 E_CTX コンテキストエラー

14703 ・非タスクコンテキストからの呼出し【NGKI2908】

14704 ・CPUロック状態からの呼出し【NGKI2909】

14705 E_PAR パラメータエラー

14706 ・baseがメモリオブジェクトの先頭番地でない【NGKI2910】

14707 E_NOEXS オブジェクト未登録

14708 ・baseで指定した番地を含むメモリオブジェクトが登録され

14709 ていない【NGKI2911】

14710 E_OACV オブジェクトアクセス違反

14711 ・対象メモリオブジェクトに対する管理操作が許可されてい

14712 ない【NGKI2912】

14713 E_MACV メモリアクセス違反

14714 ・p_acvctが指すメモリ領域への読出しアクセスが許可されて

14715 いない【NGKI2913】

14716 E_OBJ オブジェクト状態エラー

14717 ・対象メモリオブジェクトは静的APIで登録された【NGKI2914】

14718

14719 【機能】

14720

14721 baseで指定したメモリオブジェクト(対象メモリオブジェクト)のアクセス許

14722 可ベクタ(4つのアクセス許可パターンの組)を,各パラメータで指定した値に

14723 設定する【NGKI2915】.

14724

14725 【TOPPERS/HRP2カーネルにおける規定】

14726

14727 HRP2カーネルでは,sac_memをサポートしない【HRPS0157】.

14728

14729 【μITRON4.0/PX仕様との関係】

14730

14731 静的APIによって登録したメモリオブジェクトは,アクセス許可ベクタを設定す

14732 ることができないこととした.

14733

14734 μITRON4.0/PX仕様では,baseはメモリオブジェクトに含まれる番地を指定する

14735 ものとしていたが,この仕様では,メモリオブジェクトの先頭番地でなければ

14736 ならないものとした.

14737 ----------------------------------------------------------------------

14738 det_mem メモリオブジェクトの登録解除〔TPD〕【NGKI2916】

14739

14740 【C言語API】

14741 ER ercd = det_mem(const void *base)

14742

14743 【パラメータ】

14744 void * base メモリオブジェクトの先頭番地

14745

14746 【リターンパラメータ】

14747 ER ercd 正常終了(E_OK)またはエラーコード

14748

14749 【エラーコード】

14750 E_CTX コンテキストエラー

Page 296: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

296

14751 ・非タスクコンテキストからの呼出し【NGKI2917】

14752 ・CPUロック状態からの呼出し【NGKI2918】

14753 E_PAR パラメータエラー

14754 ・baseがメモリオブジェクトの先頭番地でない【NGKI2919】

14755 E_NOEXS オブジェクト未登録

14756 ・baseで指定した番地を含むメモリオブジェクトが登録され

14757 ていない【NGKI2920】

14758 E_OACV オブジェクトアクセス違反

14759 ・対象メモリオブジェクトに対する管理操作が許可されてい

14760 ない【NGKI2921】

14761 E_OBJ オブジェクト状態エラー

14762 ・対象メモリオブジェクトは静的APIで登録された【NGKI2922】

14763

14764 【機能】

14765

14766 baseで指定したメモリオブジェクト(対象メモリオブジェクト)を登録解除す

14767 る【NGKI2923】.

14768

14769 【TOPPERS/HRP2カーネルにおける規定】

14770

14771 HRP2カーネルでは,det_memをサポートしない【HRPS0158】.

14772

14773 【μITRON4.0/PX仕様との関係】

14774

14775 静的APIによって登録したメモリオブジェクトは,登録を解除することができな

14776 いこととした.

14777

14778 μITRON4.0/PX仕様では,baseはメモリオブジェクトに含まれる番地を指定する

14779 ものとしていたが,この仕様では,メモリオブジェクトの先頭番地でなければ

14780 ならないものとした.

14781 ----------------------------------------------------------------------

14782 prb_mem メモリ領域に対するアクセス権のチェック〔TP〕【NGKI2924】

14783

14784 【C言語API】

14785 ER ercd = prb_mem(const void *base, SIZE size, ID tskid, MODE pmmode)

14786

14787 【パラメータ】

14788 void * base メモリ領域の先頭番地

14789 SIZE size メモリ領域のサイズ(バイト数)

14790 ID tskid アクセス元のタスクのID番号

14791 MODE pmmode アクセスモード

14792

14793 【リターンパラメータ】

14794 ER ercd 正常終了(E_OK)またはエラーコード

14795

14796 【エラーコード】

14797 E_CTX コンテキストエラー

14798 ・非タスクコンテキストからの呼出し【NGKI2925】

14799 E_ID 不正ID番号

14800 ・tskidが有効範囲外【NGKI2927】

Page 297: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

297

14801 E_PAR パラメータエラー

14802 ・sizeが0【NGKI2929】

14803 ・その他の条件については機能の項を参照

14804 E_NOEXS オブジェクト未登録

14805 ・baseで指定した番地を含むメモリオブジェクトが登録され

14806 ていない【NGKI2930】

14807 E_OACV オブジェクトアクセス違反

14808 ・対象メモリ領域を含むメモリオブジェクトに対する参照操

14809 作が許可されていない【NGKI2931】

14810 E_MACV メモリアクセス違反

14811 ・条件については機能の項を参照

14812 E_OBJ オブジェクト状態エラー

14813 ・対象メモリ領域がメモリオブジェクトの境界を越えている

14814 【NGKI2932】

14815

14816 【機能】

14817

14818 tskidで指定したタスクから,baseとsizeで指定したメモリ領域(対象メモリ領

14819 域)に対して,pmmodeで指定した種別のアクセスが許可されているかをチェッ

14820 クする.アクセスが許可されている場合にE_OK,そうでない場合にE_MACVが返

14821 る【NGKI2933】.tskidで指定したタスクがカーネルドメインに属する場合,

14822 E_MACVが返ることはない【NGKI2934】.

14823

14824 pmmodeには,TPM_WRITE(=0x01U),TPM_READ(=0x02U),TPM_EXEC(=

14825 0x04U)のいずれか,またはそれらの内のいくつかのビット毎論理和(C言語の

14826 "¦")を指定することができる【NGKI2935】.TPM_WRITE,TPM_READ,TPM_EXEC

14827 を指定した場合には,それぞれ,読出しアクセス,書込みアクセス,実行アク

14828 セスが許可されているかをチェックする【NGKI2936】.また,いくつかのビッ

14829 ト毎論理和を指定した場合には,それらに対応した種別のアクセスがすべて許

14830 可されているかをチェックする【NGKI2937】.pmmodeにそれ以外の値を指定し

14831 た場合には,E_PARエラーとなる【NGKI2938】.

14832

14833 tskidにTSK_SELF(=0)を指定すると,自タスクから対象メモリ領域に対して

14834 アクセスが許可されているかをチェックする【NGKI2939】.

14835

14836 【μITRON4.0/PX仕様との関係】

14837

14838 アクセスする主体の指定方法を,保護ドメインによる指定(domid)から,タス

14839 クによる指定(tskid)に変更した.また,pmmodeに指定できるアクセス種別に

14840 TPM_EXECを追加し,TPM_WRITEとTPM_READの値を入れ換えた.CPUロック状態か

14841 らも呼び出せるものとした.

14842

14843 【仕様決定の理由】

14844

14845 prb_memを,CPUロック状態からも呼び出せるものとしたのは,次の理由による.

14846 prb_memは,拡張サービスコールの中で,タスクから渡されたポインタが,その

14847 タスクからアクセスできる領域であるかを調べるために用いることを想定して

14848 いる.拡張サービスコールの中には,CPUロック状態でも呼び出せるものがあり,

14849 そのような拡張サービスコールを実現するには,prb_memがCPUロック状態から

14850 呼び出せることが必要である.

Page 298: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

298

14851

14852 なお,prb_memを非タスクコンテキストから呼び出すことはできないが,非タス

14853 クコンテキストで実行される処理単位は必ずカーネルドメインに属するために,

14854 prb_memを使ってアクセス権を調べる必要がないことから,支障がない.

14855 ----------------------------------------------------------------------

14856 ref_mem メモリオブジェクトの状態参照〔TP〕

14857

14858 【C言語API】

14859 ER ercd = ref_mem(const void *base, T_RMEM *pk_rmem)

14860

14861 ☆未完成

14862

14863 【TOPPERS/HRP2カーネルにおける規定】

14864

14865 HRP2カーネルでは,ref_memをサポートしない.

14866 ----------------------------------------------------------------------

14867

14868 4.9 割込み管理機能

14869

14870 割込み処理のプログラムは,割込みサービスルーチン(ISR)として実現するこ

14871 とを推奨する.割込みサービスルーチンをカーネルに登録する場合には,まず,

14872 割込みサービスルーチンの登録対象となる割込み要求ラインの属性を設定して

14873 おく必要がある【NGKI2940】.割込みサービスルーチンは,カーネル内の割込

14874 みハンドラを経由して呼び出される【NGKI2941】.

14875

14876 ただし,カーネルが用意する割込みハンドラで対応できないケースに対応する

14877 ために,アプリケーションで割込みハンドラを用意することも可能である

14878 【NGKI2942】.この場合にも,割込みハンドラをカーネルに登録する前に,割

14879 込みハンドラの登録対象となる割込みハンドラ番号に対応する割込み要求ライ

14880 ンの属性を設定しておく必要がある【NGKI2943】.

14881

14882 割込み要求ラインの属性を設定する際に指定する割込み要求ライン属性には,

14883 次の属性を指定することができる【NGKI2944】.

14884

14885 TA_ENAINT 0x01U 割込み要求禁止フラグをクリア

14886 TA_EDGE 0x02U エッジトリガ

14887

14888 ターゲットによっては,ターゲット定義の割込み要求ライン属性を指定できる

14889 場合がある【NGKI2945】.ターゲット定義の割込み要求ライン属性として,次

14890 の属性を予約している【NGKI2946】.

14891

14892 TA_POSEDGE ポジティブエッジトリガ

14893 TA_NEGEDGE ネガティブエッジトリガ

14894 TA_BOTHEDGE 両エッジトリガ

14895 TA_LOWLEVEL ローレベルトリガ

14896 TA_HIGHLEVEL ハイレベルトリガ

14897 TA_BROADCAST すべてのプロセッサで割込みを処理(マルチプロセッ

14898 サ対応カーネルの場合)

14899

14900 割込みサービスルーチンは,カーネルが実行を制御する処理単位である.割込

Page 299: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

299

14901 みサービスルーチンは,割込みサービスルーチンIDと呼ぶID番号によって識別

14902 する【NGKI2947】.

14903

14904 1つの割込み要求ラインに対して複数の割込みサービスルーチンを登録した場合,

14905 それらの割込みサービスルーチンは,割込みサービスルーチン優先度の高い順

14906 にすべて呼び出される【NGKI2948】.割込みサービスルーチン優先度が同じ場

14907 合には,登録した順(静的APIにより登録した場合には,割込みサービスルーチ

14908 ンを生成するAPIをコンフィギュレーションファイル中に記述した順)で呼び出

14909 される【NGKI2949】.

14910

14911 保護機能対応カーネルにおいて,割込みサービスルーチンが属することのでき

14912 る保護ドメインは,カーネルドメインに限られる【NGKI2950】.

14913

14914 割込みサービスルーチン属性に指定できる属性はない【NGKI2951】.そのため

14915 割込みサービスルーチン属性には,TA_NULLを指定しなければならない

14916 【NGKI2952】.

14917

14918 C言語による割込みサービスルーチンの記述形式は次の通り【NGKI2953】.

14919

14920 void interrupt_service_routine(intptr_t exinf)

14921 {

14922 割込みサービスルーチン本体

14923 }

14924

14925 exinfには,割込みサービスルーチンの拡張情報が渡される【NGKI2954】.

14926

14927 割込みハンドラは,カーネルが実行を制御する処理単位である.割込みハンド

14928 ラは,割込みハンドラ番号と呼ぶオブジェクト番号によって識別する

14929 【NGKI2955】.

14930

14931 保護機能対応カーネルにおいて,割込みハンドラは,カーネルドメインに属す

14932 る【NGKI2956】.

14933

14934 割込みハンドラを登録する際に指定する割込みハンドラ属性には,ターゲット

14935 定義で,次の属性を指定することができる【NGKI2957】.

14936

14937 TA_NONKERNEL 0x02U カーネル管理外の割込み

14938

14939 TA_NONKERNELを指定しない場合,カーネル管理の割込みとなる【NGKI2958】.

14940 また,ターゲットによっては,その他のターゲット定義の割込みハンドラ属性

14941 を指定できる場合がある【NGKI2959】.

14942

14943 C言語による割込みハンドラの記述形式は次の通り【NGKI2960】.

14944

14945 void interrupt_handler(void)

14946 {

14947 割込みハンドラ本体

14948 }

14949

14950 割込み管理機能に関連するカーネル構成マクロは次の通り.

Page 300: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

300

14951

14952 TMIN_INTPRI 割込み優先度の最小値(最高値) 【NGKI2961】

14953 TMAX_INTPRI 割込み優先度の最大値(最低値,=-1)

14954

14955 TMIN_ISRPRI 割込みサービスルーチン優先度の最小値(=1)【NGKI2962】

14956 TMAX_ISRPRI 割込みサービスルーチン優先度の最大値

14957

14958 TOPPERS_SUPPORT_DIS_INT dis_intがサポートされている【NGKI2963】

14959 TOPPERS_SUPPORT_ENA_INT ena_int がサポートされている【NGKI2964】

14960

14961 【使用上の注意】

14962

14963 1つの割込み要求ラインに複数のデバイスからの割込み要求が接続されている場

14964 合に対応するために,割込みサービスルーチンは,それが処理する割込み要求

14965 が発生しているかをチェックし,割込み要求が発生していない場合には何もせ

14966 ずにリターンするように実装すべきである.

14967

14968 【TOPPERS/ASPカーネルにおける規定】

14969

14970 ASPカーネルでは,割込みサービスルーチン優先度の最大値(=TMAX_ISRPRI)

14971 は16に固定されている【ASPS0192】.ただし,タスク優先度拡張パッケージで

14972 は,TMAX_ISRPRIを256に拡張する【ASPS0193】.

14973

14974 【TOPPERS/FMPカーネルにおける規定】

14975

14976 FMPカーネルでは,割込みサービスルーチン優先度の最大値(=TMAX_ISRPRI)

14977 は16に固定されている【FMPS0159】.

14978

14979 【TOPPERS/HRP2カーネルにおける規定】

14980

14981 HRP2カーネルでは,割込みサービスルーチン優先度の最大値(=TMAX_ISRPRI)

14982 は16に固定されている【HRPS0159】.

14983

14984 【TOPPERS/SSPカーネルにおける規定】

14985

14986 SSPカーネルでは,割込みサービスルーチン優先度の最大値(=TMAX_ISRPRI)

14987 は16に固定されている【SSPS0137】.

14988

14989 【μITRON4.0仕様との関係】

14990

14991 割込み要求ラインの属性,割込み優先度,割込みサービスルーチン優先度は,

14992 μITRON4.0仕様にない概念であり,TMIN_INTPRI,TMAX_INTPRI,TMIN_ISRPRI,

14993 TMAX_ISRPRIは,μITRON4.0仕様に定義のないカーネル構成マクロである.また,

14994 TA_NONKERNELは,μITRON4.0仕様に定義のない割込みハンドラ属性である.

14995 ----------------------------------------------------------------------

14996 CFG_INT 割込み要求ラインの属性の設定〔S〕【NGKI2965】

14997 cfg_int 割込み要求ラインの属性の設定〔TD〕【NGKI2966】

14998

14999 【静的API】

15000 CFG_INT(INTNO intno, { ATR intatr, PRI intpri })

Page 301: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

301

15001

15002 【C言語API】

15003 ER ercd = cfg_int(INTNO intno, const T_CINT *pk_cint)

15004

15005 【パラメータ】

15006 INTNO intno 割込み番号

15007 T_CINT * pk_cint 割込み要求ラインの属性の設定情報を入れたパ

15008 ケットへのポインタ(静的APIを除く)

15009

15010 *割込み要求ラインの属性の設定情報(パケットの内容)

15011 ATR intatr 割込み要求ライン属性

15012 PRI intpri 割込み優先度

15013

15014 【リターンパラメータ】

15015 ER ercd 正常終了(E_OK)またはエラーコード

15016

15017 【エラーコード】

15018 E_CTX コンテキストエラー

15019 ・非タスクコンテキストからの呼出し〔s〕【NGKI2967】

15020 ・CPUロック状態からの呼出し〔s〕【NGKI2968】

15021 E_RSATR 予約属性

15022 ・intatrが無効【NGKI2969】

15023 ・属するクラスの指定が有効範囲外〔sM〕【NGKI2970】

15024 ・クラスの囲みの中に記述されていない〔SM〕【NGKI2971】

15025 ・その他の条件については機能の項を参照

15026 E_PAR パラメータエラー

15027 ・intnoが有効範囲外【NGKI2972】

15028 ・intpriが有効範囲外【NGKI2973】

15029 ・その他の条件については機能の項を参照

15030 E_OACV オブジェクトアクセス違反

15031 ・システム状態に対する管理操作が許可されていない〔sP〕

15032 【NGKI2974】

15033 E_MACV メモリアクセス違反

15034 ・pk_cintが指すメモリ領域への読出しアクセスが許可されて

15035 いない〔sP〕【NGKI2975】

15036 E_OBJ オブジェクト状態エラー

15037 ・対象割込み要求ラインに対して属性が設定済み〔S〕【NGKI2976】

15038 ・その他の条件については機能の項を参照

15039

15040 【機能】

15041

15042 intnoで指定した割込み要求ライン(対象割込み要求ライン)に対して,各パラ

15043 メータで指定した属性を設定する【NGKI2977】.

15044

15045 対象割込み要求ラインの割込み要求禁止フラグは,intatrにTA_ENAINTを指定し

15046 た場合にクリアされ,指定しない場合にセットされる【NGKI2978】.

15047

15048 静的APIにおいては,intno,intatr,intpriは整数定数式パラメータである

15049 【NGKI2979】.

15050

Page 302: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

302

15051 cfg_intにおいて,ターゲット定義で,複数の割込み要求ラインの割込み優先度

15052 が連動して設定される場合がある【NGKI2980】.

15053

15054 intpriに指定できる値は,基本的には,TMIN_INTPRI以上,TMAX_INTPRI以下の

15055 値である【NGKI2981】.ターゲット定義の拡張で,カーネル管理外の割込み要

15056 求ラインに対しても属性を設定できる場合には,TMIN_INTPRIよりも小さい値を

15057 指定することができる【NGKI2982】.このように拡張されている場合,カーネ

15058 ル管理外の割込み要求ラインを対象として,intpriにTMIN_INTPRI以上の値を指

15059 定した場合には,E_OBJエラーとなる【NGKI2983】.逆に,カーネル管理の割込

15060 み要求ラインを対象として,intpriがTMIN_INTPRIよりも小さい値である場合に

15061 も,E_OBJエラーとなる【NGKI2984】.

15062

15063 対象割込み要求ラインに対して,設定できない割込み要求ライン属性をintatr

15064 に指定した場合にはE_RSATRエラー,設定できない割込み優先度をintpriに指定

15065 した場合にはE_PARエラーとなる【NGKI2985】.ここで,設定できない割込み要

15066 求ライン属性/割込み優先度には,ターゲット定義の制限によって設定できな

15067 い値も含む【NGKI2986】.また,マルチプロセッサ対応カーネルにおいて,

15068 cfg_intを呼び出したタスクが割り付けられているプロセッサから,対象割込み

15069 要求ラインの属性を設定できない場合も,これに該当する【NGKI2987】.

15070

15071 保護機能対応カーネルにおいて,CFG_INTは,カーネルドメインの囲みの中に記

15072 述しなければならない.そうでない場合には,E_RSATRエラーとなる

15073 【NGKI2989】.また,cfg_intはカーネルオブジェクトを登録するサービスコー

15074 ルではないため,割込み要求ライン属性にTA_DOM(domid)を指定した場合には

15075 E_RSATRエラーとなる【NGKI2990】.ただし,TA_DOM(TDOM_SELF)を指定した場

15076 合には,指定が無視され,E_RSATRエラーは検出されない【NGKI2991】.

15077

15078 マルチプロセッサ対応カーネルで,CFG_INTの記述が,対象割込み要求ラインに

15079 対して登録された割込みサービスルーチン(または対象割込み番号に対応する

15080 割込みハンドラ番号に対して登録された割込みハンドラ)と異なるクラスの囲

15081 み中にある場合には,E_RSATRエラーとなる【NGKI2992】.

15082

15083 【補足説明】

15084

15085 ターゲット定義の制限によって設定できない割込み要求ライン属性/割込み優

15086 先度は,主にターゲットハードウェアの制限から来るものである.例えば,対

15087 象割込み要求ラインに対して,トリガモードや割込み優先度が固定されていて,

15088 変更できないケースが考えられる.

15089

15090 cfg_intにおいて,ターゲット定義で,複数の割込み要求ラインの割込み優先度

15091 が連動して設定されるのは,ターゲットハードウェアの制限により,異なる割

15092 込み要求ラインに対して,同一の割込み優先度しか設定できないケースに対応

15093 するための仕様である.この場合,CFG_INTにおいては,同一の割込み優先度し

15094 か設定できない割込み要求ラインに対して異なる割込み優先度を設定した場合

15095 には,E_PARエラーとなる.

15096

15097 【TOPPERS/ASPカーネルにおける規定】

15098

15099 ASPカーネルでは,CFG_INTのみをサポートする【ASPS0194】.

15100

Page 303: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

303

15101 【TOPPERS/FMPカーネルにおける規定】

15102

15103 FMPカーネルでは,CFG_INTのみをサポートする【FMPS0160】.

15104

15105 【TOPPERS/HRP2カーネルにおける規定】

15106

15107 HRP2カーネルでは,CFG_INTのみをサポートする【HRPS0160】.

15108

15109 【TOPPERS/SSPカーネルにおける規定】

15110

15111 SSPカーネルでは,CFG_INTのみをサポートする【SSPS0138】.

15112

15113 【μITRON4.0仕様との関係】

15114

15115 μITRON4.0仕様に定義されていない静的APIおよびサービスコールである.

15116 ----------------------------------------------------------------------

15117 CRE_ISR 割込みサービスルーチンの生成〔S〕【NGKI2993】

15118 ATT_ISR 割込みサービスルーチンの追加〔S〕【NGKI2994】

15119 acre_isr 割込みサービスルーチンの生成〔TD〕【NGKI2995】

15120

15121 【静的API】

15122 CRE_ISR(ID isrid, { ATR isratr, intptr_t exinf,

15123 INTNO intno, ISR isr, PRI isrpri })

15124 ATT_ISR({ ATR isratr, intptr_t exinf, INTNO intno, ISR isr, PRI isrpri })

15125

15126 【C言語API】

15127 ER_ID isrid = acre_isr(const T_CISR *pk_cisr )

15128

15129 【パラメータ】

15130 ID isrid 対象割込みサービスルーチンのID番号(CRE_ISR

15131 の場合)

15132 T_CISR * pk_cisr 割込みサービスルーチンの生成情報を入れたパ

15133 ケットへのポインタ(静的APIを除く)

15134

15135 *割込みサービスルーチンの生成情報(パケットの内容)

15136 ATR isratr 割込みサービスルーチン属性

15137 intptr_t exinf 割込みサービスルーチンの拡張情報

15138 INTNO intno 割込みサービスルーチンを登録する割込み番号

15139 ISR isr 割込みサービスルーチンの先頭番地

15140 PRI isrpri 割込みサービスルーチン優先度

15141

15142 【リターンパラメータ】

15143 ER_ID isrid 生成された割込みサービスルーチンのID番号(正

15144 の値)またはエラーコード

15145

15146 【エラーコード】

15147 E_CTX コンテキストエラー

15148 ・非タスクコンテキストからの呼出し〔s〕【NGKI2996】

15149 ・CPUロック状態からの呼出し〔s〕【NGKI2997】

15150 E_RSATR 予約属性

Page 304: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

304

15151 ・isratrが無効【NGKI2998】

15152 ・属する保護ドメインの指定が有効範囲外またはカーネルド

15153 メイン以外〔sP〕【NGKI2999】

15154 ・カーネルドメインの囲みの中に記述されていない〔SP〕

15155 【NGKI3000】

15156 ・属するクラスの指定が有効範囲外〔sM〕【NGKI3001】

15157 ・クラスの囲みの中に記述されていない〔SM〕【NGKI3002】

15158 ・その他の条件については機能の項を参照

15159 E_PAR パラメータエラー

15160 ・intnoが有効範囲外【NGKI3003】

15161 ・isrがプログラムの先頭番地として正しくない【NGKI3004】

15162 ・isrpriが有効範囲外【NGKI3005】

15163 E_OACV オブジェクトアクセス違反

15164 ・システム状態に対する管理操作が許可されていない〔sP〕

15165 【NGKI3006】

15166 E_MACV メモリアクセス違反

15167 ・pk_cisrが指すメモリ領域への読出しアクセスが許可されて

15168 いない〔sP〕【NGKI3007】

15169 E_NOID ID番号不足

15170 ・割り付けられる割込みサービスルーチンIDがない〔sD〕

15171 【NGKI3008】

15172 E_OBJ オブジェクト状態エラー

15173 ・isridで指定した割込みサービスルーチンが登録済み

15174 (CRE_ISRの場合)【NGKI3009】

15175 ・その他の条件については機能の項を参照

15176

15177 【機能】

15178

15179 各パラメータで指定した割込みサービスルーチン生成情報に従って,割込みサー

15180 ビスルーチンを生成する【NGKI3010】.

15181

15182 ATT_ISRによって生成された割込みサービスルーチンは,ID番号を持たない

15183 【NGKI3011】.

15184

15185 intnoで指定した割込み要求ラインの属性が設定されていない場合には,E_OBJ

15186 エラーとなる【NGKI3012】.また,intnoで指定した割込み番号に対応する割込

15187 みハンドラ番号に対して,割込みハンドラを定義する機能(DEF_INH,def_inh)

15188 によって割込みハンドラが定義されている場合にも,E_OBJエラーとなる

15189 【NGKI3013】.さらに,intno でカーネル管理外の割込みを指定した場合にも,

15190 E_OBJエラーとなる【NGKI3014】.

15191

15192 静的APIにおいては,isridはオブジェクト識別名,isratr,intno,isrpriは整

15193 数定数式パラメータ,exinfとisrは一般定数式パラメータである【NGKI3015】.

15194

15195 マルチプロセッサ対応カーネルで,生成する割込みサービスルーチンの属する

15196 クラスの割付け可能プロセッサが,intnoで指定した割込み要求ラインが接続さ

15197 れたプロセッサの集合に含まれていない場合には,E_RSATRエラーとなる

15198 【NGKI3016】.また,intnoで指定した割込み要求ラインに対して登録済みの割

15199 込みサービスルーチンがある場合に,生成する割込みサービスルーチンがそれ

15200 と異なるクラスに属する場合にも,E_RSATRエラーとなる【NGKI3017】.さらに,

Page 305: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

305

15201 ターゲット定義で,割込みサービスルーチンが属することができるクラスに制

15202 限がある場合がある【NGKI3018】.生成する割込みサービスルーチンの属する

15203 クラスが,ターゲット定義の制限に合致しない場合にも,E_RSATRエラーとなる

15204 【NGKI3019】.

15205

15206 静的APIにおいて,isrが不正である場合にE_PARエラーが検出されるか否かは,

15207 ターゲット定義である【NGKI3020】.

15208

15209 【TOPPERS/ASPカーネルにおける規定】

15210

15211 ASPカーネルでは,ATT_ISRのみをサポートする.ただし,動的生成機能拡張パッ

15212 ケージでは,acre_isrもサポートする【ASPS0195】.

15213

15214 【TOPPERS/FMPカーネルにおける規定】

15215

15216 FMPカーネルでは,ATT_ISRのみをサポートする【FMPS0161】.

15217

15218 【TOPPERS/HRP2カーネルにおける規定】

15219

15220 HRP2カーネルでは,ATT_ISRのみをサポートする【HRPS0161】.

15221

15222 【TOPPERS/SSPカーネルにおける規定】

15223

15224 SSPカーネルでは,ATT_ISRのみをサポートする【SSPS0139】.

15225

15226 【μITRON4.0仕様との関係】

15227

15228 割込みサービスルーチンの生成情報に,isrpri(割込みサービスルーチンの割

15229 込み優先度)を追加した.CRE_ISRは,μITRON4.0仕様に定義されていない静的

15230 APIである.

15231 ----------------------------------------------------------------------

15232 AID_ISR 割付け可能な割込みサービスルーチンIDの数の指定〔SD〕【NGKI3021】

15233

15234 【静的API】

15235 AID_ISR(uint_t noisr)

15236

15237 【パラメータ】

15238 uint_t noisr 割付け可能な割込みサービスルーチンIDの数

15239

15240 【エラーコード】

15241 E_RSATR 予約属性

15242 ・クラスの囲みの中に記述されていない〔M〕【NGKI3022】

15243 ・カーネルドメインの囲みの中に記述されていない〔P〕【NGKI3023】

15244 E_PAR パラメータエラー

15245 ・noisrが負の値【NGKI3287】

15246

15247 【機能】

15248

15249 noisrで指定した数の割込みサービスルーチンIDを,割込みサービスルーチンを

15250 生成するサービスコールによって割付け可能な割込みサービスルーチンIDとし

Page 306: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

306

15251 て確保する【NGKI3024】.

15252

15253 noisrは整数定数式パラメータである【NGKI3025】.

15254 ----------------------------------------------------------------------

15255 SAC_ISR 割込みサービスルーチンのアクセス許可ベクタの設定〔SP〕【NGKI3026】

15256 sac_isr 割込みサービスルーチンのアクセス許可ベクタの設定〔TPD〕【NGKI3027】

15257

15258 【静的API】

15259 SAC_ISR(ID isrid, { ACPTN acptn1, ACPTN acptn2,

15260 ACPTN acptn3, ACPTN acptn4 })

15261

15262 【C言語API】

15263 ER ercd = sac_isr(ID isrid, const ACVCT *p_acvct)

15264

15265

15266 【パラメータ】

15267 ID isrid 対象割込みサービスルーチンのID番号

15268 ACVCT * p_acvct アクセス許可ベクタを入れたパケットへのポ

15269 インタ(静的APIを除く)

15270

15271 *アクセス許可ベクタ(パケットの内容)

15272 ACPTN acptn1 通常操作1のアクセス許可パターン

15273 ACPTN acptn2 通常操作2のアクセス許可パターン

15274 ACPTN acptn3 管理操作のアクセス許可パターン

15275 ACPTN acptn4 参照操作のアクセス許可パターン

15276

15277 【リターンパラメータ】

15278 ER ercd 正常終了(E_OK)またはエラーコード

15279

15280 【エラーコード】

15281 E_CTX コンテキストエラー

15282 ・非タスクコンテキストからの呼出し〔s〕【NGKI3028】

15283 ・CPUロック状態からの呼出し〔s〕【NGKI3029】

15284 E_ID 不正ID番号

15285 ・isridが有効範囲外〔s〕【NGKI3030】

15286 E_RSATR 予約属性

15287 ・対象割込みサービスルーチンが属する保護ドメインの囲み

15288 の中に記述されていない〔S〕【NGKI3031】

15289 ・対象割込みサービスルーチンが属するクラスの囲みの中に

15290 記述されていない〔SM〕【NGKI3032】

15291 E_NOEXS オブジェクト未登録

15292 ・対象割込みサービスルーチンが未登録【NGKI3033】

15293 E_OACV オブジェクトアクセス違反

15294 ・対象割込みサービスルーチンに対する管理操作が許可され

15295 ていない)〔s〕【NGKI3034】

15296 E_MACV メモリアクセス違反

15297 ・p_acvctが指すメモリ領域への読出しアクセスが許可されて

15298 いない)〔s〕【NGKI3035】

15299 E_OBJ オブジェクト状態エラー

15300 ・対象割込みサービスルーチンは静的APIで生成された〔s〕

Page 307: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

307

15301 【NGKI3036】

15302 ・対象割込みサービスルーチンに対してアクセス許可ベクタ

15303 が設定済み〔S〕【NGKI3037】

15304

15305 【機能】

15306

15307 isridで指定した割込みサービスルーチン(対象割込みサービスルーチン)のア

15308 クセス許可ベクタ(4つのアクセス許可パターンの組)を,各パラメータで指定

15309 した値に設定する【NGKI3038】.

15310

15311 静的APIにおいては,isridはオブジェクト識別名,acptn1~acptn4は整数定数

15312 式パラメータである【NGKI3039】.

15313

15314 【TOPPERS/ASPカーネルにおける規定】

15315

15316 ASPカーネルでは,SAC_ISR,sac_isrをサポートしない【ASPS0196】.

15317

15318 【TOPPERS/FMPカーネルにおける規定】

15319

15320 FMPカーネルでは,SAC_ISR,sac_isrをサポートしない【FMPS0162】.

15321

15322 【TOPPERS/HRP2カーネルにおける規定】

15323

15324 HRP2カーネルでは,SAC_ISR,sac_isrをサポートしない【HRPS0162】.

15325

15326 【TOPPERS/SSPカーネルにおける規定】

15327

15328 SSPカーネルでは,SAC_ISR,sac_isrをサポートしない【SSPS0140】.

15329

15330 【未決定事項】

15331

15332 割込みサービスルーチンのアクセス許可ベクタを設けず,システム状態のアク

15333 セス許可ベクタでアクセス保護する方法も考えられる.

15334 ----------------------------------------------------------------------

15335 del_isr 割込みサービスルーチンの削除〔TD〕【NGKI3040】

15336

15337 【C言語API】

15338 ER ercd = del_isr(ID isrid)

15339

15340 【パラメータ】

15341 ID isrid 対象割込みサービスルーチンのID番号

15342

15343 【リターンパラメータ】

15344 ER ercd 正常終了(E_OK)またはエラーコード

15345

15346 【エラーコード】

15347 E_CTX コンテキストエラー

15348 ・非タスクコンテキストからの呼出し【NGKI3041】

15349 ・CPUロック状態からの呼出し【NGKI3042】

15350 E_ID 不正ID番号

Page 308: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

308

15351 ・isridが有効範囲外【NGKI3043】

15352 E_NOEXS オブジェクト未登録

15353 ・対象割込みサービスルーチンが未登録【NGKI3044】

15354 E_OACV オブジェクトアクセス違反

15355 ・対象割込みサービスルーチンに対する管理操作が許可され

15356 ていない〔P〕【NGKI3045】

15357 E_OBJ オブジェクト状態エラー

15358 ・対象割込みサービスルーチンは静的APIで生成された【NGKI3046】

15359

15360 【機能】

15361

15362 isridで指定した割込みサービスルーチン(対象割込みサービスルーチン)を削

15363 除する.具体的な振舞いは以下の通り.

15364

15365 対象割込みサービスルーチンの登録が解除され,その割込みサービスルーチン

15366 IDが未使用の状態に戻される【NGKI3047】.

15367

15368 【TOPPERS/ASPカーネルにおける規定】

15369

15370 ASPカーネルでは,del_isrをサポートしない【ASPS0197】.ただし,動的生成

15371 機能拡張パッケージでは,del_isrをサポートする【ASPS0198】.

15372

15373 【TOPPERS/FMPカーネルにおける規定】

15374

15375 FMPカーネルでは,del_isrをサポートしない【FMPS0163】.

15376

15377 【TOPPERS/HRP2カーネルにおける規定】

15378

15379 HRP2カーネルでは,del_isrをサポートしない【HRPS0163】.

15380

15381 【TOPPERS/SSPカーネルにおける規定】

15382

15383 SSPカーネルでは,del_isrをサポートしない【SSPS0141】.

15384 ----------------------------------------------------------------------

15385 ref_isr 割込みサービスルーチンの状態参照〔T〕

15386

15387 【C言語API】

15388 ER ercd = ref_isr(ID isrid, T_RISR *pk_risr)

15389

15390 ☆未完成

15391

15392 【TOPPERS/ASPカーネルにおける規定】

15393

15394 ASPカーネルでは,ref_isrをサポートしない.

15395

15396 【TOPPERS/FMPカーネルにおける規定】

15397

15398 FMPカーネルでは,ref_isrをサポートしない.

15399

15400 【TOPPERS/HRP2カーネルにおける規定】

Page 309: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

309

15401

15402 HRP2カーネルでは,ref_isrをサポートしない.

15403

15404 【TOPPERS/SSPカーネルにおける規定】

15405

15406 SSPカーネルでは,ref_isrをサポートしない.

15407 ----------------------------------------------------------------------

15408 DEF_INH 割込みハンドラの定義〔S〕【NGKI3048】

15409 def_inh 割込みハンドラの定義〔TD〕【NGKI3049】

15410

15411 【静的API】

15412 DEF_INH(INHNO inhno, { ATR inhatr, INTHDR inthdr })

15413

15414 【C言語API】

15415 ER ercd = def_inh(INHNO inhno, const T_DINH *pk_dinh)

15416

15417 【パラメータ】

15418 INHNO inhno 割込みハンドラ番号

15419 T_DINH * pk_dinh 割込みハンドラの定義情報を入れたパケットへ

15420 のポインタ(静的APIを除く)

15421

15422 *割込みハンドラの定義情報(パケットの内容)

15423 ATR inhatr 割込みハンドラ属性

15424 INTHDR i nthdr 割込みハンドラの先頭番地

15425

15426 【リターンパラメータ】

15427 ER ercd 正常終了(E_OK)またはエラーコード

15428

15429 【エラーコード】

15430 E_CTX コンテキストエラー

15431 ・非タスクコンテキストからの呼出し〔s〕【NGKI3050】

15432 ・CPUロック状態からの呼出し〔s〕【NGKI3051】

15433 E_RSATR 予約属性

15434 ・inhatrが無効【NGKI3052】

15435 ・属するクラスの指定が有効範囲外〔sM〕【NGKI3053】

15436 ・クラスの囲みの中に記述されていない〔SM〕【NGKI3054】

15437 ・その他の条件については機能の項を参照

15438 E_PAR パラメータエラー

15439 ・inhnoが有効範囲外【NGKI3055】

15440 ・inthdrがプログラムの先頭番地として正しくない【NGKI3056】

15441 ・その他の条件については機能の項を参照

15442 E_OACV オブジェクトアクセス違反

15443 ・システム状態に対する管理操作が許可されていない〔sP〕

15444 【NGKI3057】

15445 E_MACV メモリアクセス違反

15446 ・pk_dinhが指すメモリ領域への読出しアクセスが許可されて

15447 いない〔sP〕【NGKI3058】

15448 E_OBJ オブジェクト状態エラー

15449 ・条件については機能の項を参照

15450

Page 310: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

310

15451 【機能】

15452

15453 inhnoで指定した割込みハンドラ番号(対象割込みハンドラ番号)に対して,各

15454 パラメータで指定した割込みハンドラ定義情報に従って,割込みハンドラを定

15455 義する【NGKI3059】.ただし,def_inhにおいてpk_dinhをNULLにした場合には,

15456 対象割込みハンドラ番号に対する割込みハンドラの定義を解除する【NGKI3060】.

15457

15458 静的APIにおいては,inhnoとinhatrは整数定数式パラメータ,inthdrは一般定

15459 数式パラメータである【NGKI3061】.

15460

15461 割込みハンドラを定義する場合(DEF_INHの場合およびdef_inhにおいて

15462 pk_dinhをNULL以外にした場合)には,次のエラーが検出される.

15463

15464 対象割込みハンドラ番号に対応する割込み要求ラインの属性が設定されていな

15465 い場合には,E_OBJエラーとなる【NGKI3062】.また,対象割込みハンドラ番号

15466 に対してすでに割込みハンドラが定義されている場合と,対象割込みハンドラ

15467 番号に対応する割込み番号を対象に割込みサービスルーチンが登録されている

15468 場合にも,E_OBJエラーとなる【NGKI3063】.

15469

15470 ターゲット定義の拡張で,カーネル管理外の割込みに対しても割込みハンドラ

15471 を定義できる場合には,次のエラーが検出される【NGKI3064】.カーネル管理

15472 外の割込みハンドラを対象として,inhatrにTA_NONKERNELを指定しない場合に

15473 は,E_OBJエラーとなる【NGKI3065】.逆に,カーネル管理の割込みハンドラを

15474 対象として,inhatrにTA_NONKERNELを指定した場合にも,E_OBJエラーとなる

15475 【NGKI3066】.また,ターゲット定義でカーネル管理外に固定されている割込

15476 みハンドラがある場合には,それを対象割込みハンドラに指定して,inhatrに

15477 TA_NONKERNELを指定しない場合には,E_RSATRエラーとなる【NGKI3067】.逆に,

15478 ターゲット定義でカーネル管理に固定されている割込みハンドラがある場合に

15479 は,それを対象割込みハンドラに指定して,inhatrにTA_NONKERNELを指定した

15480 場合には,E_RSATRエラーとなる【NGKI3068】.

15481

15482 保護機能対応カーネルにおいて,DEF_INHは,カーネルドメインの囲みの中に記

15483 述しなければならない.そうでない場合には,E_RSATRエラーとなる

15484 【NGKI3070】.また,def_inhで割込みハンドラを定義する場合には,割込みハ

15485 ンドラの属する保護ドメインを設定する必要はなく,割込みハンドラ属性に

15486 TA_DOM(domid)を指定した場合にはE_RSATRエラーとなる【NGKI3071】.ただし,

15487 TA_DOM(TDOM_SELF)を指定した場合には,指定が無視され,E_RSATRエラーは検

15488 出されない【NGKI3072】.

15489

15490 マルチプロセッサ対応カーネルで,登録する割込みハンドラの属するクラスの

15491 初期割付けプロセッサが,その割込みが要求されるプロセッサでない場合には,

15492 E_RSATRエラーとなる【NGKI3073】.また,ターゲット定義で,割込みハンドラ

15493 が属することができるクラスに制限がある場合がある【NGKI3074】.登録する

15494 割込みハンドラの属するクラスが,ターゲット定義の制限に合致しない場合に

15495 も,E_RSATRエラーとなる【NGKI3075】.

15496

15497 割込みハンドラの定義を解除する場合(def_inhにおいてpk_dinhをNULLにした

15498 場合)で,対象割込みハンドラ番号に対して割込みハンドラが定義されていな

15499 い場合には,E_OBJエラーとなる【NGKI3076】.また,対象割込みハンドラ番号

15500 に対して定義された割込みハンドラが,静的APIで定義されたものである場合に

Page 311: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

311

15501 は,ターゲット定義でE_OBJエラーとなる場合がある【NGKI3077】.

15502

15503 ターゲット定義で,対象割込みハンドラを定義(または定義解除)できない場

15504 合には,E_PARエラーとなる【NGKI3078】.具体的には,マルチプロセッサ対応

15505 カーネルにおいて,def_inhを呼び出したタスクが割り付けられているプロセッ

15506 サから,対象割込みハンドラを定義(または定義解除)できない場合が,これ

15507 に該当する【NGKI3079】.

15508

15509 静的APIにおいて,inthdrが不正である場合にE_PARエラーが検出されるか否か

15510 は,ターゲット定義である【NGKI3080】.

15511

15512 【TOPPERS/ASPカーネルにおける規定】

15513

15514 ASPカーネルでは,DEF_INHのみをサポートする【ASPS0199】.

15515

15516 【TOPPERS/FMPカーネルにおける規定】

15517

15518 FMPカーネルでは,DEF_INHのみをサポートする【FMPS0164】.

15519

15520 【TOPPERS/HRP2カーネルにおける規定】

15521

15522 HRP2カーネルでは,DEF_INHのみをサポートする【HRPS0164】.

15523

15524 【TOPPERS/SSPカーネルにおける規定】

15525

15526 SSPカーネルでは,DEF_INHのみをサポートする【SSPS0142】.

15527

15528 【μITRON4.0仕様との関係】

15529

15530 inthdrのデータ型をINTHDRに変更した.

15531

15532 def_inhによって定義済みの割込みハンドラを再定義しようとした場合に,

15533 E_OBJエラーとすることにした.割込みハンドラの定義を変更するには,一度定

15534 義を解除してから,再度定義する必要がある.

15535 ----------------------------------------------------------------------

15536 dis_int 割込みの禁止〔T〕【NGKI3081】

15537

15538 【C言語API】

15539 ER ercd = dis_int(INTNO intno)

15540

15541 【パラメータ】

15542 INTNO intno 割込み番号

15543

15544 【リターンパラメータ】

15545 ER ercd 正常終了(E_OK)またはエラーコード

15546

15547 【エラーコード】

15548 E_CTX コンテキストエラー

15549 ・非タスクコンテキストからの呼出し【NGKI3082】

15550 E_NOSPT 未サポートエラー

Page 312: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

312

15551 ・条件については機能の項を参照

15552 E_PAR パラメータエラー

15553 ・intnoが有効範囲外【NGKI3083】

15554 ・その他の条件については機能の項を参照

15555 E_OACV オブジェクトアクセス違反

15556 ・システム状態に対する通常操作2が許可されていない〔P〕

15557 【NGKI3084】

15558 E_OBJ オブジェクト状態エラー

15559 ・対象割込み要求ラインに対して割込み要求ライン属性が設

15560 定されていない【NGKI3085】

15561

15562 【機能】

15563

15564 intnoで指定した割込み要求ライン(対象割込み要求ライン)の割込み要求禁止

15565 フラグをセットする【NGKI3086】.

15566

15567 ターゲット定義で,対象割込み要求ラインの割込み要求禁止フラグをセットで

15568 きない場合には,E_PARエラーとなる【NGKI3087】.具体的には,対象割込み要

15569 求ラインに対して割込み要求禁止フラグがサポートされていない場合や,マル

15570 チプロセッサ対応カーネルにおいて,dis_intを呼び出したタスクが割り付けら

15571 れているプロセッサから,対象割込み要求ラインの割込み要求禁止フラグが操

15572 作できない場合が,これに該当する【NGKI3088】.

15573

15574 ターゲット定義で,割込み要求禁止フラグの振舞いが,この仕様の規定と異な

15575 る場合がある【NGKI3089】.特にマルチプロセッサ対応カーネルでは,あるプ

15576 ロセッサからdis_intを呼び出して割込み要求禁止フラグをセットしても,他の

15577 プロセッサに対しては割込みがマスクされない場合がある【NGKI3090】.

15578

15579 ターゲット定義で,dis_intがサポートされていない場合がある【NGKI3091】.

15580 dis_intがサポートされている場合には,TOPPERS_SUPPORT_DIS_INTがマクロ定

15581 義される【NGKI3092】.サポートされていない場合にdis_intを呼び出すと,

15582 E_NOSPTエラーが返るか,リンク時にエラーとなる【NGKI3093】.

15583

15584 【μITRON4.0仕様との関係】

15585

15586 μITRON4.0仕様で実装定義としていたintnoの意味を標準化した.

15587

15588 CPUロック状態でも呼び出せるものとした.

15589 ----------------------------------------------------------------------

15590 ena_int 割込みの許可〔T〕【NGKI3094】

15591

15592 【C言語API】

15593 ER ercd = ena_int(INTNO intno)

15594

15595 【パラメータ】

15596 INTNO intno 割込み番号

15597

15598 【リターンパラメータ】

15599 ER ercd 正常終了(E_OK)またはエラーコード

15600

Page 313: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

313

15601 【エラーコード】

15602 E_CTX コンテキストエラー

15603 ・非タスクコンテキストからの呼出し【NGKI3095】

15604 E_NOSPT 未サポートエラー

15605 ・条件については機能の項を参照

15606 E_PAR パラメータエラー

15607 ・intnoが有効範囲外【NGKI3096】

15608 ・その他の条件については機能の項を参照

15609 E_OACV オブジェクトアクセス違反

15610 ・システム状態に対する通常操作2が許可されていない〔P〕

15611 【NGKI3097】

15612 E_OBJ オブジェクト状態エラー

15613 ・対象割込み要求ラインに対して割込み要求ライン属性が設

15614 定されていない【NGKI3098】

15615

15616 【機能】

15617

15618 intnoで指定した割込み要求ライン(対象割込み要求ライン)の割込み要求禁止

15619 フラグをクリアする【NGKI3099】.

15620

15621 ターゲット定義で,対象割込み要求ラインの割込み要求禁止フラグをクリアで

15622 きない場合には,E_PARエラーとなる【NGKI3100】.具体的には,対象割込み要

15623 求ラインに対して割込み要求禁止フラグがサポートされていない場合や,マル

15624 チプロセッサ対応カーネルにおいて,ena_intを呼び出したタスクが割り付けら

15625 れているプロセッサから,対象割込み要求ラインの割込み要求禁止フラグが操

15626 作できない場合が,これに該当する【NGKI3101】.

15627

15628 ターゲット定義で,割込み要求禁止フラグの振舞いが,この仕様の規定と異な

15629 る場合がある【NGKI3102】.特にマルチプロセッサ対応カーネルでは,あるプ

15630 ロセッサからena_intを呼び出して割込み要求禁止フラグをクリアしても,他の

15631 プロセッサに対しては割込みがマスク解除されない場合がある【NGKI3103】.

15632

15633 ターゲット定義で,ena_intがサポートされていない場合がある【NGKI3104】.

15634 ena_intがサポートされている場合には,TOPPERS_SUPPORT_ENA_INTがマクロ定

15635 義される【NGKI3105】.サポートされていない場合にena_intを呼び出すと,

15636 E_NOSPTエラーが返るか,リンク時にエラーとなる【NGKI3106】.

15637

15638 【μITRON4.0仕様との関係】

15639

15640 μITRON4.0仕様で実装定義としていたintnoの意味を標準化した.

15641

15642 CPUロック状態でも呼び出せるものとした.

15643 ----------------------------------------------------------------------

15644 ref_int 割込み要求ラインの参照〔T〕

15645

15646 【C言語API】

15647 ER ercd = ref_int(INTNO intno, T_RINT *pk_rint)

15648

15649 ☆未完成

15650

Page 314: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

314

15651 【TOPPERS/ASPカーネルにおける規定】

15652

15653 ASPカーネルでは,ref_intをサポートしない.

15654

15655 【TOPPERS/FMPカーネルにおける規定】

15656

15657 FMPカーネルでは,ref_intをサポートしない.

15658

15659 【TOPPERS/HRP2カーネルにおける規定】

15660

15661 HRP2カーネルでは,ref_intをサポートしない.

15662

15663 【TOPPERS/SSPカーネルにおける規定】

15664

15665 SSPカーネルでは,ref_intをサポートしない.

15666

15667 【μITRON4.0仕様との関係】

15668

15669 μITRON4.0仕様に定義されていないサービスコールである.

15670 ----------------------------------------------------------------------

15671 chg_ipm 割込み優先度マスクの変更〔T〕【NGKI3107】

15672

15673 【C言語API】

15674 ER ercd = chg_ipm(PRI intpri)

15675

15676 【パラメータ】

15677 PRI intpri 割込み優先度マスク

15678

15679 【リターンパラメータ】

15680 ER ercd 正常終了(E_OK)またはエラーコード

15681

15682 【エラーコード】

15683 E_CTX コンテキストエラー

15684 ・非タスクコンテキストからの呼出し【NGKI3108】

15685 ・CPUロック状態からの呼出し【NGKI3109】

15686 E_PAR パラメータエラー

15687 ・条件については機能の項を参照

15688 E_OACV オブジェクトアクセス違反

15689 ・システム状態に対する通常操作2が許可されていない〔P〕

15690 【NGKI3110】

15691

15692 【機能】

15693

15694 割込み優先度マスクを,intpriで指定した値に変更する【NGKI3111】.

15695

15696 intpriは,TMIN_INTPRI以上,TIPM_ENAALL以下でなければならない.そうでな

15697 い場合には,E_PARエラーとなる【NGKI3113】.ただし,ターゲット定義の拡張

15698 として,TMIN_INTPRIよりも小さい値を指定できる場合がある【NGKI3114】.

15699

15700 【補足説明】

Page 315: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

315

15701

15702 割込み優先度マスクをTIPM_ENAALLに変更した場合,ディスパッチ保留状態が解

15703 除され,ディスパッチが起こる可能性がある.また,タスク例外処理ルーチン

15704 の実行が開始される可能性がある.

15705

15706 【TOPPERS/SSPカーネルにおける規定】

15707

15708 SSPカーネルでは,chg_ipmをサポートしない【SSPS0143】.

15709

15710 【μITRON4.0仕様との関係】

15711

15712 μITRON4.0仕様では,サービスコールの名称およびパラメータの名称が実装定

15713 義となっているサービスコールである.

15714 ----------------------------------------------------------------------

15715 get_ipm 割込み優先度マスクの参照〔T〕【NGKI3115】

15716

15717 【C言語API】

15718 ER ercd = get_ipm(PRI *p_intpri)

15719

15720 【パラメータ】

15721 PRI * p_intpri 割込み優先度マスクを入れるメモリ領域へのポ

15722 インタ

15723

15724 【リターンパラメータ】

15725 ER ercd エラーコード

15726 PRI intpri 割込み優先度マスク

15727

15728 【エラーコード】

15729 E_CTX コンテキストエラー

15730 ・非タスクコンテキストからの呼出し【NGKI3116】

15731 ・CPUロック状態からの呼出し【NGKI3117】

15732 E_OACV オブジェクトアクセス違反

15733 ・システム状態に対する参照操作が許可されていない〔P〕

15734 【NGKI3118】

15735 E_MACV メモリアクセス違反

15736 ・p_intpriが指すメモリ領域への書込みアクセスが許可され

15737 ていない〔P〕【NGKI3119】

15738

15739 【機能】

15740

15741 割込み優先度マスクの現在値を参照する.参照した割込み優先度マスクは,

15742 p_intpriが指すメモリ領域に返される【NGKI3120】.

15743

15744 【TOPPERS/SSPカーネルにおける規定】

15745

15746 SSPカーネルでは,get_ipmをサポートしない【SSPS0144】.

15747

15748 【μITRON4.0仕様との関係】

15749

15750 μITRON4.0仕様では,サービスコールの名称およびパラメータの名称が実装定

Page 316: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

316

15751 義となっているサービスコールである.

15752 ----------------------------------------------------------------------

15753

15754 4.10 CPU例外管理機能

15755

15756 CPU例外ハンドラは,カーネルが実行を制御する処理単位である.CPU例外ハン

15757 ドラは,CPU例外ハンドラ番号と呼ぶオブジェクト番号によって識別する

15758 【NGKI3121】.

15759

15760 保護機能対応カーネルにおいて,CPU例外ハンドラは,カーネルドメインに属す

15761 る【NGKI3122】.

15762

15763 CPU例外ハンドラ属性に標準で指定できる属性はないが,ターゲットによっては,

15764 ターゲット定義のCPU例外ハンドラ属性を指定できる場合がある【NGKI3123】.

15765 ターゲット定義のCPU例外ハンドラ属性として,次の属性を予約している

15766 【NGKI3124】.

15767

15768 TA_DIRECT CPU 例外ハンドラを直接呼び出す

15769

15770 C言語によるCPU例外ハンドラの記述形式は次の通り【NGKI3125】.

15771

15772 void cpu_exception_handler(void *p_excinf)

15773 {

15774 CPU例外ハンドラ本体

15775 }

15776

15777 p_excinfには,CPU例外の情報を記憶しているメモリ領域の先頭番地が渡される

15778 【NGKI3126】.これは,CPU例外ハンドラ内で,CPU例外発生時の状態を参照す

15779 る際に必要となる.

15780 ----------------------------------------------------------------------

15781 DEF_EXC CPU例外ハンドラの定義〔S〕【NGKI3127】

15782 def_exc CPU例外ハンドラの定義〔TD〕【NGKI3128】

15783

15784 【静的API】

15785 DEF_EXC(EXCNO excno, { ATR excatr, EXCHDR exc hdr })

15786

15787 【C言語API】

15788 ER ercd = def_exc(EXCNO excno, const T_DEXC *pk_dexc)

15789

15790 【パラメータ】

15791 EXCNO excno CPU 例外ハンドラ番号

15792 T_DEXC * pk_dexc CPU 例外ハンドラの定義情報を入れたパケットへ

15793 のポインタ(静的APIを除く)

15794

15795 *CPU例外ハンドラの定義情報(パケットの内容)

15796 ATR excatr CPU 例外ハンドラ属性

15797 EXCHDR exchdr CPU 例外ハンドラの先頭番地

15798

15799 【リターンパラメータ】

15800 ER erc d 正常終了(E_OK)またはエラーコード

Page 317: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

317

15801

15802 【エラーコード】

15803 E_CTX コンテキストエラー

15804 ・非タスクコンテキストからの呼出し〔s〕【NGKI3129】

15805 ・CPUロック状態からの呼出し〔s〕【NGKI3130】

15806 E_RSATR 予約属性

15807 ・excatrが無効【NGKI3131】

15808 ・属するクラスの指定が有効範囲外〔sM〕【NGKI3132】

15809 ・クラスの囲みの中に記述されていない〔SM〕【NGKI3133】

15810 ・その他の条件については機能の項を参照

15811 E_PAR パラメータエラー

15812 ・excnoが有効範囲外【NGKI3134】

15813 ・exchdrがプログラムの先頭番地として正しくない【NGKI3135】

15814 E_OACV オブジェクトアクセス違反

15815 ・システム状態に対する管理操作が許可されていない〔sP〕

15816 【NGKI3136】

15817 E_MACV メモリアクセス違反

15818 ・pk_dexcが指すメモリ領域への読出しアクセスが許可されて

15819 いない〔sP〕【NGKI3137】

15820 E_OBJ オブジェクト状態エラー

15821 ・条件については機能の項を参照

15822

15823 【機能】

15824

15825 excnoで指定したCPU例外ハンドラ番号(対象CPU例外ハンドラ番号)に対して,

15826 各パラメータで指定したCPU例外ハンドラ定義情報に従って,CPU例外ハンドラ

15827 を定義する【NGKI3138】.ただし,def_excにおいてpk_dexcをNULLにした場合

15828 には,対象CPU例外ハンドラ番号に対するCPU例外ハンドラの定義を解除する

15829 【NGKI3139】.

15830

15831 静的APIにおいては,excnoとexcatrは整数定数式パラメータ,exchdrは一般定

15832 数式パラメータである【NGKI3140】.

15833

15834 CPU例外ハンドラを定義する場合(DEF_EXCの場合およびdef_excにおいて

15835 pk_dexcをNULL以外にした場合)で,対象CPU例外ハンドラ番号に対してすでに

15836 CPU例外ハンドラが定義されている場合には,E_OBJエラーとなる【NGKI3141】.

15837

15838 保護機能対応カーネルにおいて,DEF_EXCは,カーネルドメインの囲みの中に記

15839 述しなければならない.そうでない場合には,E_RSATRエラーとなる

15840 【NGKI3143】.また,def_excでCPU例外ハンドラを定義する場合には,CPU例外

15841 ハンドラの属する保護ドメインを設定する必要はなく,CPU例外ハンドラ属性に

15842 TA_DOM(domid)を指定した場合にはE_RSATRエラーとなる【NGKI3144】.ただし,

15843 TA_DOM(TDOM_SELF)を指定した場合には,指定が無視され,E_RSATRエラーは検

15844 出されない【NGKI3145】.

15845

15846 マルチプロセッサ対応カーネルで,登録するCPU例外ハンドラの属するクラスの

15847 初期割付けプロセッサが,そのCPU例外が発生するプロセッサでない場合には,

15848 E_RSATRエラーとなる【NGKI3146】.

15849

15850 CPU例外ハンドラの定義を解除する場合(def_excにおいてpk_dexcをNULLにした

Page 318: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

318

15851 場合)で,対象CPU例外ハンドラ番号に対してCPU例外ハンドラが定義されてい

15852 ない場合には,E_OBJエラーとなる【NGKI3147】.また,対象CPU例外ハンドラ

15853 番号に対して定義されたCPU例外ハンドラが,静的APIで定義されたものである

15854 場合には,ターゲット定義でE_OBJエラーとなる場合がある【NGKI3148】.

15855

15856 静的APIにおいて,exchdrが不正である場合にE_PARエラーが検出されるか否か

15857 は,ターゲット定義である【NGKI3149】.

15858

15859 【TOPPERS/ASPカーネルにおける規定】

15860

15861 ASPカーネルでは,DEF_EXCのみをサポートする【ASPS0200】.

15862

15863 【TOPPERS/FMPカーネルにおける規定】

15864

15865 FMPカーネルでは,DEF_EXCのみをサポートする【FMPS0165】.

15866

15867 【TOPPERS/HRP2カーネルにおける規定】

15868

15869 HRP2カーネルでは,DEF_EXCのみをサポートする【HRPS0165】.

15870

15871 【TOPPERS/SSPカーネルにおける規定】

15872

15873 SSPカーネルでは,DEF_EXCのみをサポートする【SSPS0145】.

15874

15875 【μITRON4.0仕様との関係】

15876

15877 def_excによって,定義済みのCPU例外ハンドラを再定義しようとした場合に,

15878 E_OBJエラーとすることにした.

15879 ----------------------------------------------------------------------

15880 xsns_dpn CPU例外発生時のディスパッチ保留状態の参照〔TI〕【NGKI3150】

15881

15882 【C言語API】

15883 bool_t stat = xsns_dpn(void *p_excinf)

15884

15885 【パラメータ】

15886 void * p_excinf CPU 例外の情報を記憶しているメモリ領域の先頭

15887 番地

15888

15889 【リターンパラメータ】

15890 bool_t state ディスパッチ保留状態

15891

15892 【機能】

15893

15894 CPU例外発生時のディスパッチ保留状態を参照する.具体的な振舞いは以下の通

15895 り.

15896

15897 実行中のCPU例外ハンドラの起動原因となったCPU例外が,カーネル管理外の

15898 CPU例外でなく,タスクコンテキストで発生し,そのタスクがディスパッチ保留

15899 状態でなかった場合にfalse,そうでない場合にtrueが返る【NGKI3151】.

15900

Page 319: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

319

15901 保護機能対応のカーネルにおいて,xsns_dpnをタスクコンテキストから呼び出

15902 した場合には,trueが返る【NGKI3152】.

15903

15904 p_excinfには,CPU例外ハンドラに渡されるp_excinfパラメータをそのまま渡す

15905 【NGKI3153】.

15906

15907 【使用方法】

15908

15909 xsns_dpnは,CPU例外ハンドラの中で,どのようなリカバリ処理が可能かを判別

15910 したい場合に使用する.xsns_dpnがfalseを返した場合(trueを返した場合では

15911 ないので注意すること),非タスクコンテキスト用のサービスコールを用いて

15912 CPU例外を起こしたタスクよりも優先度の高いタスクを起動または待ち解除し,

15913 そのタスクでリカバリ処理を行うことができる.ただし,CPU例外を起こしたタ

15914 スクが最高優先度の場合には,この方法でリカバリ処理を行うことはできない.

15915

15916 【使用上の注意】

15917

15918 xsns_dpnは,E_CTXエラーを返すことがないために〔TI〕となっているが,CPU

15919 例外ハンドラから呼び出すためのものである.CPU例外ハンドラ以外から呼び出

15920 した場合や,p_excinfに正しい値を渡さなかった場合,xsns_dpnが返す値は意

15921 味を持たない.

15922

15923 どちらの条件でtrueが返るか間違いやすいので注意すること.

15924

15925 【TOPPERS/SSPカーネルにおける規定】

15926

15927 SSPカーネルでは,xsns_dpnをサポートしない【SSPS0146】.

15928

15929 【μITRON4.0仕様との関係】

15930

15931 μITRON4.0仕様に定義されていないサービスコールである.

15932

15933 【仕様決定の理由】

15934

15935 保護機能対応のカーネルにおいては,xsns_dpnをユーザドメインから呼び出す

15936 ことは禁止すべきである.ユーザドメインの実行中は,必ずタスクコンテキス

15937 トであるため,xsns_dpnをタスクコンテキストから呼び出した場合に必ずtrue

15938 を返す仕様とすることで,xsns_dpnをユーザドメインから呼び出すことを実質

15939 的に禁止している.

15940 ----------------------------------------------------------------------

15941 xsns_xpn CPU例外発生時のタスク例外処理保留状態の参照〔TI〕【NGKI3154】

15942

15943 【C言語API】

15944 bool_t stat = xsns_xpn(void *p_excinf)

15945

15946 【パラメータ】

15947 void * p_excinf CPU 例外の情報を記憶しているメモリ領域の先頭

15948 番地

15949

15950 【リターンパラメータ】

Page 320: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

320

15951 bool_t state タスク例外処理保留状態

15952

15953 【機能】

15954

15955 CPU例外発生時にタスク例外処理ルーチンを実行開始できない状態であったかを

15956 参照する.具体的な振舞いは以下の通り.

15957

15958 実行中のCPU例外ハンドラの起動原因となったCPU例外が,カーネル管理外の

15959 CPU例外でなく,タスクコンテキストで発生し,そのタスクがタスク例外処理ルー

15960 チンを実行開始できる状態であった場合にfalse,そうでない場合にtrueが返る

15961 【NGKI3155】.

15962

15963 保護機能対応カーネルにおいて,CPU例外が発生したタスクがユーザタスクの場

15964 合には,ユーザスタック領域の残りが少なく,タスク例外処理ルーチンを実行

15965 開始できない(タスク例外処理ルーチンを実行開始しようとすると,タスク例

15966 外実行開始時スタック不正例外が発生する)場合にも,trueを返す【NGKI3156】.

15967

15968 保護機能対応のカーネルにおいて,xsns_xpnをタスクコンテキストから呼び出

15969 した場合には,trueが返る【NGKI3157】.

15970

15971 p_excinfには,CPU例外ハンドラに渡されるp_excinfパラメータをそのまま渡す

15972 【NGKI3158】.

15973

15974 【使用方法】

15975

15976 xsns_xpnは,CPU例外ハンドラの中で,どのようなリカバリ処理が可能かを判別

15977 したい場合に使用する.xsns_xpnがfalseを返した場合(trueを返した場合では

15978 ないので注意すること),非タスクコンテキスト用のサービスコールを用いて

15979 CPU例外を起こしたタスクにタスク例外を要求し,タスク例外処理ルーチンでリ

15980 カバリ処理を行うことができる.

15981

15982 【使用上の注意】

15983

15984 xsns_xpnは,E_CTXエラーを返すことがないために〔TI〕となっているが,CPU

15985 例外ハンドラから呼び出すためのものである.CPU例外ハンドラ以外から呼び出

15986 した場合や,p_excinfに正しい値を渡さなかった場合,xsns_xpnが返す値は意

15987 味を持たない.

15988

15989 どちらの条件でtrueが返るか間違いやすいので注意すること.

15990

15991 【TOPPERS/SSPカーネルにおける規定】

15992

15993 SSPカーネルでは,xsns_xpnをサポートしない【SSPS0147】.

15994

15995 【μITRON4.0仕様との関係】

15996

15997 μITRON4.0仕様に定義されていないサービスコールである.

15998

15999 【仕様決定の理由】

16000

Page 321: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

321

16001 保護機能対応のカーネルにおいては,xsns_xpnをユーザドメインから呼び出す

16002 ことは禁止すべきである.ユーザドメインの実行中は,必ずタスクコンテキス

16003 トであるため,xsns_xpnをタスクコンテキストから呼び出した場合に必ずtrue

16004 を返す仕様とすることで,xsns_xpnをユーザドメインから呼び出すことを実質

16005 的に禁止している.

16006 ----------------------------------------------------------------------

16007

16008 4.11 拡張サービスコール管理機能

16009

16010 拡張サービスコールは,非特権モードで実行される処理単位から,特権モード

16011 で実行すべきルーチンを呼び出すための機能である【NGKI3159】.特権モード

16012 で実行するルーチンを,拡張サービスコールと呼ぶ.拡張サービスコールは,

16013 特権モードで実行される処理単位からも呼び出すことができる【NGKI3160】.

16014

16015 保護機能対応カーネルにおいて,拡張サービスコールは,カーネルドメインに

16016 属する【NGKI3161】.拡張サービスコールは,それを呼び出す処理単位とは別

16017 の処理単位であり,拡張サービスコールからカーネルオブジェクトをアクセス

16018 する場合には,拡張サービスコールがアクセスの主体となる【NGKI3162】.そ

16019 のため,拡張サービスコールからは,すべてのカーネルオブジェクトに対して,

16020 すべての種別のアクセスを行うことが許可される.

16021

16022 保護機能対応でないカーネルでは,非特権モードと特権モードの区別がないた

16023 め,拡張サービスコール管理機能をサポートしない【NGKI3163】.

16024

16025 C言語による拡張サービスコールの記述形式は次の通り【NGKI3164】.

16026

16027 ER_UINT extended_svc(intptr_t par1, intptr_t par2, intptr_t par3,

16028 intptr_t par4, intptr_t par5, ID cdmid)

16029 {

16030 拡張サービスコール本体

16031 }

16032

16033 cdmidには,拡張サービスコールを呼び出した処理単位が属する保護ドメインの

16034 ID番号が渡される【NGKI3165】.すなわち,拡張サービスコールから呼び出し

16035 た場合にはTDOM_KERNEL(=-1)が,タスク本体(拡張サービスコールを除く)

16036 から呼び出した場合にはそのタスク(自タスク)の属する保護ドメインIDが渡

16037 される.

16038

16039 par1~par5には,拡張サービスコールに対するパラメータが渡される

16040 【NGKI3166】.

16041

16042 拡張サービスコール管理機能に関連するカーネル構成マクロは次の通り.

16043

16044 TMAX_FNCD 拡張サービスコールの機能番号の最大値(動的生成対応

16045 カーネルでは,登録できる拡張サービスコールの数に一

16046 致)【NGKI3167】

16047

16048 【TOPPERS/ASPカーネルにおける規定】

16049

16050 ASPカーネルでは,拡張サービスコール管理機能をサポートしない【ASPS0201】.

Page 322: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

322

16051

16052 【TOPPERS/FMPカーネルにおける規定】

16053

16054 FMPカーネルでは,拡張サービスコール管理機能をサポートしない【FMPS0166】.

16055

16056 【TOPPERS/HRP2カーネルにおける規定】

16057

16058 HRP2カーネルでは,拡張サービスコール管理機能をサポートする【HRPS0166】.

16059

16060 【TOPPERS/SSPカーネルにおける規定】

16061

16062 SSPカーネルでは,拡張サービスコール管理機能をサポートしない【SSPS0148】.

16063

16064 【未決定事項】

16065

16066 動的生成対応カーネルにおいてTMAX_FNCDを設定する方法については,現時点で

16067 は未決定である.

16068

16069 【μITRON4.0仕様との関係】

16070

16071 この仕様では,拡張サービスコールに対するパラメータを,intptr_t型のパラ

16072 メータ5個に固定した.

16073

16074 拡張サービスコールに,それを呼び出した処理単位が属する保護ドメインのID

16075 番号を渡す機能を追加した.

16076

16077 TMAX_FNCDは,μITRON4.0仕様に規定されていないカーネル構成マクロである.

16078 ----------------------------------------------------------------------

16079 DEF_SVC 拡張サービスコールの定義〔SP〕【NGKI3168】

16080 def_svc 拡張サービスコールの定義〔TPD〕【NGKI3169】

16081

16082 【静的API】

16083 DEF_SVC(FN fncd, { ATR svcatr, EXTSVC extsvc, SIZE stksz })

16084

16085 【C言語API】

16086 ER ercd = def_svc(FN fncd, const T_DSVC *pk_dsvc)

16087

16088 【パラメータ】

16089 FN fncd 拡張サービスコールの機能コード

16090 T_DSVC * pk_d svc 拡張サービスコールの定義情報を入れたパケッ

16091 トへのポインタ(静的APIを除く)

16092

16093 *拡張サービスコールの定義情報(パケットの内容)

16094 ATR svcatr 拡張サービスコール属性

16095 EXTSVC extsvc 拡張サービスコールの先頭番地

16096 SIZE stksz 拡張サービスコールで使用するスタックサイズ

16097

16098 【リターンパラメータ】

16099 ER ercd 正常終了(E_OK)またはエラーコード

16100

Page 323: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

323

16101 【エラーコード】

16102 E_CTX コンテキストエラー

16103 ・非タスクコンテキストからの呼出し〔s〕【NGKI3170】

16104 ・CPUロック状態からの呼出し〔s〕【NGKI3171】

16105 E_RSATR 予約属性

16106 ・svcatrが無効【NGKI3172】

16107 ・その他の条件については機能の項を参照

16108 E_PAR パラメータエラー

16109 ・fncdが0または負の値【NGKI3173】

16110 ・fncdがTMAX_FNCDよりも大きい〔s〕【NGKI3174】

16111 ・extsvcがプログラムの先頭番地として正しくない【NGKI3175】

16112 ・stkszが負の値〔S〕【NGKI3290】

16113 E_OACV オブジェクトアクセス違反

16114 ・システム状態に対する管理操作が許可されていない〔s〕

16115 【NGKI3176】

16116 E_MACV メモリアクセス違反

16117 ・pk_dsvcが指すメモリ領域への読出しアクセスが許可されて

16118 いない〔s〕【NGKI3177】

16119 E_OBJ オブジェクト状態エラー

16120 ・条件については機能の項を参照

16121

16122 【機能】

16123

16124 fncdで指定した機能コード(対象機能コード)に対して,各パラメータで指定

16125 した拡張サービスコール定義情報に従って,拡張サービスコールを定義する

16126 【NGKI3178】.ただし,def_svcにおいてpk_dsvcをNULLにした場合には,対象

16127 機能コードに対する拡張サービスコールの定義を解除する【NGKI3179】.

16128

16129 静的APIにおいては,fncd,svcatr,stkszは整数定数式パラメータ,svchdrは

16130 一般定数式パラメータである【NGKI3180】.

16131

16132 拡張サービスコールを定義する場合(DEF_SVCの場合およびdef_svcにおいて

16133 pk_dsvcをNULL以外にした場合)で,対象機能コードに対してすでに拡張サービ

16134 スコールが定義されている場合には,E_OBJエラーとなる【NGKI3181】.

16135

16136 DEF_SVCは,カーネルドメインの囲みの中に記述しなければならない.そうでな

16137 い場合には,E_RSATRエラーとなる【NGKI3183】.また,def_svcで拡張サービ

16138 スコールを定義する場合には,拡張サービスコールの属する保護ドメインを設

16139 定する必要はなく,拡張サービスコール属性にTA_DOM(domid)を指定した場合に

16140 はE_RSATRエラーとなる【NGKI3184】.ただし,TA_DOM(TDOM_SELF)を指定した

16141 場合には,指定が無視され,E_RSATRエラーは検出されない【NGKI3185】.

16142

16143 マルチプロセッサ対応カーネルでは,DEF_SVCは,クラスの囲みの外に記述しな

16144 ければならない.そうでない場合には,E_RSATRエラーとなる【NGKI3187】.ま

16145 た,def_svcで拡張サービスコールを定義する場合には,拡張サービスコールの

16146 属するクラスを設定する必要はなく,拡張サービスコール属性に

16147 TA_CLS(clsid)を指定した場合にはE_RSATRエラーとなる【NGKI3188】.ただし,

16148 TA_CLS(TCLS_SELF)を指定した場合には,指定が無視され,E_RSATRエラーは検

16149 出されない【NGKI3189】.

16150

Page 324: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

324

16151 拡張サービスコールの定義を解除する場合(def_svcにおいてpk_dsvcをNULLに

16152 した場合)で,対象機能コードに対して拡張サービスコールが定義されていな

16153 い場合には,E_OBJエラーとなる【NGKI3190】.

16154

16155 【TOPPERS/HRP2カーネルにおける規定】

16156

16157 HRP2カーネルでは,DEF_SVCのみをサポートする【HRPS0167】.

16158

16159 【μITRON4.0仕様との関係】

16160

16161 拡張サービスコールの定義情報に,stksz(拡張サービスコールで使用するスタッ

16162 クサイズ)を追加した.

16163

16164 extsvcのデータ型を,EXTSVCに変更した.

16165 ----------------------------------------------------------------------

16166 cal_svc 拡張サービスコールの呼出し〔TIP〕【NGKI3191】

16167

16168 【C言語API】

16169 ER_UINT ercd = cal_svc(FN fncd, intptr_t par1, intptr_t par2,

16170 intptr_t par3, intptr_t par4, intptr_t par5)

16171

16172 【パラメータ】

16173 FN fncd 呼び出す拡張サービスコールの機能コード

16174 intptr_t par1 拡張サービスコールへの第1パラメータ

16175 intptr_t par2 拡張サービスコールへの第2パラメータ

16176 intptr_t par3 拡張サービスコールへの第3パラメータ

16177 intptr_t par4 拡張サービスコールへの第4パラメータ

16178 intptr_t par5 拡張サービスコールへの第5パラメータ

16179

16180 【リターンパラメータ】

16181 ER_UINT ercd 正常終了(正の値または0)またはエラーコード

16182

16183 【エラーコード】

16184 E_SYS システムエラー

16185 ・条件については機能の項を参照

16186 E_RSFN 予約機能コード

16187 ・fncdが0または負の値【NGKI3192】

16188 ・fncdがTMAX_FNCDよりも大きい【NGKI3193】

16189 ・fncdで指定した機能コードに対して拡張サービスコールが

16190 定義されていない【NGKI3194】

16191 E_NOMEM メモリ不足

16192 ・条件については機能の項を参照

16193 *その他,拡張サービスコールが返すエラーコードがそのまま返る.

16194

16195 【機能】

16196

16197 fncdで指定した機能コードの拡張サービスコールを,par1,par2,…,par5を

16198 パラメータとして呼び出し,拡張サービスコールの返値を返す【NGKI3195】.

16199

16200 また,タスクコンテキストから呼び出した場合には,次のエラーが検出される

Page 325: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

325

16201 【NGKI3196】.スタック(ユーザタスクの場合はシステムスタック)の残り領

16202 域が,拡張サービスコールで使用するスタックサイズよりも小さい場合には,

16203 E_NOMEMエラーとなる【NGKI3197】.また,拡張サービスコールのネストレベル

16204 が上限(=255)を超える場合には,E_SYSエラーが返る【NGKI3198】.

16205

16206 【μITRON4.0仕様との関係】

16207

16208 μITRON4.0仕様では,cal_svcでカーネルのサービスコールを呼び出せるかどう

16209 かは実装定義としているが,この仕様では,カーネルのサービスコールを呼び

16210 出せないこととした.

16211

16212 拡張サービスコールが呼び出される時に,スタックの残り領域のサイズをチェッ

16213 クする機能を追加した.

16214

16215 拡張サービスコールに対するパラメータを,intptr_t型のパラメータ5個に固定

16216 し,cal_svcから返るエラー(E_SYS,E_RSFN,E_NOMEM)について規定した.

16217

16218 【仕様決定の理由】

16219

16220 パラメータの型と数を固定したのは,型チェックを厳密にできるようにし,パ

16221 ラメータをコンパイラやコーリングコンベンションによらずに正しく渡せるよ

16222 うにするためである.

16223 ----------------------------------------------------------------------

16224

16225 4.12 システム構成管理機能

16226

16227 システム構成管理機能には,非タスクコンテキスト用スタック領域を設定する

16228 機能,初期化ルーチンと終了処理ルーチンを登録する機能,カーネルのコンフィ

16229 ギュレーション情報やバージョン情報を参照する機能が含まれる.

16230

16231 非タスクコンテキスト用スタック領域は,非タスクコンテキストで実行される

16232 処理単位が用いるスタック領域である.

16233

16234 保護機能対応カーネルにおいて,非タスクコンテキスト用のスタック領域は,

16235 カーネルの用いるオブジェクト管理領域と同様に扱われる【NGKI3199】.

16236

16237 初期化ルーチンは,カーネルが実行を制御する処理単位で,カーネルの動作開

16238 始の直前に,カーネル非動作状態で実行される【NGKI3200】.

16239

16240 保護機能対応カーネルにおいて,初期化ルーチンは,カーネルドメインに属す

16241 る【NGKI3201】.

16242

16243 初期化ルーチン属性に指定できる属性はない【NGKI3202】.そのため初期化ルー

16244 チン属性には,TA_NULLを指定しなければならない【NGKI3203】.

16245

16246 C言語による初期化ルーチンの記述形式は次の通り【NGKI3204】.

16247

16248 void initialization_routine(intptr_t exinf)

16249 {

16250 初期化ルーチン本体

Page 326: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

326

16251 }

16252

16253 exinfには,初期化ルーチンの拡張情報が渡される【NGKI3205】.

16254

16255 終了処理ルーチンは,カーネルが実行を制御する処理単位で,カーネルの動作

16256 終了の直後に,カーネル非動作状態で実行される【NGKI3206】.

16257

16258 保護機能対応カーネルにおいて,終了処理ルーチンは,カーネルドメインに属

16259 する【NGKI3207】.

16260

16261 終了処理ルーチン属性に指定できる属性はない【NGKI3208】.そのため終了処

16262 理ルーチン属性には,TA_NULLを指定しなければならない【NGKI3209】.

16263

16264 C言語による終了処理ルーチンの記述形式は次の通り【NGKI3210】.

16265

16266 void termination_routine(intptr_t exinf)

16267 {

16268 終了処理ルーチン本体

16269 }

16270

16271 exinfには,終了処理ルーチンの拡張情報が渡される【NGKI3211】.

16272

16273 【μITRON4.0仕様との関係】

16274

16275 非タスクコンテキスト用スタック領域の設定と,終了処理ルーチンは,

16276 μITRON4.0仕様に規定されていない機能である.

16277 ----------------------------------------------------------------------

16278 DEF_ICS 非タスクコンテキスト用スタック領域の設定〔S〕【NGKI3212】

16279

16280 【静的API】

16281 DEF_ICS({ SIZE istksz, STK_T *istk })

16282

16283 【パラメータ】

16284 *非タスクコンテキスト用スタック領域の設定情報

16285 SIZE istksz 非タスクコンテキスト用スタック領域のサイズ

16286 (バイト数)

16287 STK_T istk 非タスクコンテキスト用スタック領域の先頭番地

16288

16289 【エラーコード】

16290 E_RSATR 予約属性

16291 ・カーネルドメインの囲みの中に記述されていない〔P〕【NGKI3213】

16292 ・クラスの囲みの中に記述されていない〔M〕【NGKI3214】

16293 E_PAR パラメータエラー

16294 ・条件については機能の項を参照

16295 E_NOMEM メモリ不足

16296 ・非タスクコンテキスト用スタック領域が確保できない【NGKI3215】

16297 E_OBJ オブジェクト状態エラー

16298 ・非タスクコンテキスト用スタック領域が設定済み【NGKI3216】

16299 ・その他の条件については機能の項を参照

16300

Page 327: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

327

16301 【機能】

16302

16303 各パラメータで指定した非タスクコンテキスト用スタック領域の設定情報に従っ

16304 て,非タスクコンテキスト用スタック領域を設定する【NGKI3217】.istkszに

16305 0以下の値を指定した時や,ターゲット定義の最小値よりも小さい値を指定した

16306 時には,E_PARエラーとなる【NGKI3254】.

16307

16308 istkszは整数定数式パラメータ,istkは一般定数式パラメータである.コンフィ

16309 ギュレータは,静的APIのメモリ不足(E_NOMEM)エラーを検出することができ

16310 ない【NGKI3218】.

16311

16312 istkをNULLとした場合,istkszで指定したサイズのスタック領域が,コンフィ

16313 ギュレータにより確保される【NGKI3219】.istkszにターゲット定義の制約に

16314 合致しないサイズを指定した時には,ターゲット定義の制約に合致するように

16315 大きい方に丸めたサイズで確保される【NGKI3220】.

16316

16317 istkにNULL以外を指定した場合,istkとistkszで指定したスタック領域は,ア

16318 プリケーションで確保しておく必要がある【NGKI3221】.スタック領域をアプ

16319 リケーションで確保する方法については,「2.15.3 カーネル共通マクロ」の節

16320 を参照すること.その方法に従わず,istkやistkszにターゲット定義の制約に

16321 合致しない先頭番地やサイズを指定した時には,E_PARエラーとなる

16322 【NGKI3222】.

16323

16324 保護機能対応カーネルでは,istkとistkszで指定した非タスクコンテキスト用

16325 のスタック領域がカーネル専用のメモリオブジェクトに含まれない場合,

16326 E_OBJエラーとなる【NGKI3223】.

16327

16328 DEF_ICSにより非タスクコンテキスト用スタック領域を設定しない場合,ターゲッ

16329 ト定義のデフォルトのサイズのスタック領域が,コンフィギュレータにより確

16330 保される【NGKI3224】.

16331

16332 マルチプロセッサ対応カーネルでは,非タスクコンテキスト用スタック領域は

16333 プロセッサ毎に確保する必要がある【NGKI3225】.DEF_ICSにより設定する非タ

16334 スクコンテキスト用スタック領域は,DEF_ICSの記述をその囲みの中に含むクラ

16335 スの初期割付けプロセッサが使用する【NGKI3226】.そのプロセッサに対して

16336 すでに非タスクコンテキスト用スタック領域が設定されている場合には,

16337 E_OBJエラーとなる【NGKI3227】.

16338

16339 【TOPPERS/SSPカーネルにおける規定】

16340

16341 SSPカーネルでは,istkにはNULLを指定しなくてはならず,その場合でも,コン

16342 フィギュレータは非タスクコンテキスト用のスタック領域を確保しない

16343 【SSPS0149】.これは,SSPカーネルでは,すべての処理単位が共有スタック領

16344 域を使用し,非タスクコンテキストのみが用いるスタック領域を持たないため

16345 である.そのため,DEF_ICSの役割は,非タスクコンテキストが用いるスタック

16346 領域のサイズを指定することのみとなる.itskにNULL以外を指定した場合には,

16347 E_PARエラーとなる【SSPS0150】.

16348

16349 共有スタック領域の設定方法については,DEF_STKの項を参照すること.

16350

Page 328: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

328

16351 【μITRON4.0仕様との関係】

16352

16353 μITRON4.0仕様に定義されていない静的APIである.

16354 ----------------------------------------------------------------------

16355 DEF_STK 共有スタック領域の設定〔S〕【NGKI3228】

16356

16357 【静的API】

16358 DEF_STK({ SIZE stksz, S TK_T *stk })

16359

16360 【パラメータ】

16361 *共有スタック領域の設定情報

16362 SIZE stksz 共有スタック領域のサイズ(バイト数)

16363 STK_T stk 共有スタック領域の先頭番地

16364

16365 【エラーコード】

16366 E_PAR パラメータエラー

16367 ・条件については機能の項を参照

16368 E_NOMEM メモリ不足

16369 ・共有スタック領域が確保できない【NGKI3229】

16370 E_OBJ オブジェクト状態エラー

16371 ・共有スタック領域が設定済み

16372

16373 【サポートするカーネル】

16374

16375 DEF_STKは,TOPPERS/SSPカーネルのみがサポートする静的APIである.他のカー

16376 ネルは,DEF_STKをサポートしない【NGKI3230】.

16377

16378 【機能】

16379

16380 各パラメータで指定した共有スタック領域の設定情報に従って,共有スタック

16381 領域を設定する【NGKI3231】.stkszに0以下の値を指定した時や,ターゲット

16382 定義の最小値よりも小さい値を指定した時には,E_PARエラーとなる【NGKI3255】.

16383

16384 stkszは整数定数式パラメータ,stkは一般定数式パラメータである.コンフィ

16385 ギュレータは,静的APIのメモリ不足(E_NOMEM)エラーを検出することができ

16386 ない【NGKI3232】.

16387

16388 stkをNULLとした場合,stkszで指定したサイズのスタック領域が,コンフィギュ

16389 レータにより確保される【NGKI3233】.stkszにターゲット定義の制約に合致し

16390 ないサイズを指定した時には,ターゲット定義の制約に合致するように大きい

16391 方に丸めたサイズで確保される【NGKI3234】.

16392

16393 stkにNULL以外を指定した場合,stkとstkszで指定したスタック領域は,アプリ

16394 ケーションで確保しておく必要がある【NGKI3235】.スタック領域をアプリケー

16395 ションで確保する方法については,「2.15.3 カーネル共通マクロ」の節を参照

16396 すること.その方法に従わず,stkやstkszにターゲット定義の制約に合致しな

16397 い先頭番地やサイズを指定した時には,E_PARエラーとなる【NGKI3236】.

16398

16399 コンフィギュレータは,各タスクのスタック領域のサイズと,非タスクコンテ

16400 キスト用のスタック領域のサイズから,共有スタック領域に必要なサイズを計

Page 329: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

329

16401 算する【NGKI3237】.DEF_STKにより共有スタック領域を設定しない場合,必要

16402 なサイズの共有スタック領域が,コンフィギュレータにより確保される

16403 【NGKI3238】.

16404

16405 stkszに指定したスタック領域のサイズが,共有スタック領域に必要なサイズよ

16406 りも小さい場合,コンフィギュレータは警告メッセージを出力する【NGKI3239】.

16407

16408 【μITRON4.0仕様との関係】

16409

16410 μITRON4.0仕様に定義されていない静的APIである.

16411 ----------------------------------------------------------------------

16412 ATT_INI 初期化ルーチンの追加〔S〕【NGKI3240】

16413

16414 【静的API】

16415 ATT_INI({ ATR iniatr, intptr_t exinf, INIRTN inirtn })

16416

16417 【パラメータ】

16418 *初期化ルーチンの追加情報

16419 ATR iniatr 初期化ルーチン属性

16420 intptr_t exinf 初期化ルーチンの拡張情報

16421 INIRTN inirtn 初期化ルーチンの先頭番地

16422

16423 【エラーコード】

16424 E_RSATR 予約属性

16425 ・iniatrが無効【NGKI3241】

16426 ・カーネルドメインの囲みの中に記述されていない〔P〕【NGKI3242】

16427 E_PAR パラメータエラー

16428 ・inirtnがプログラムの先頭番地として正しくない【NGKI3243】

16429

16430 【機能】

16431

16432 各パラメータで指定した初期化ルーチン追加情報に従って,初期化ルーチンを

16433 追加する【NGKI3244】.

16434

16435 iniatrは整数定数式パラメータ,exinfとinirtnは一般定数式パラメータである

16436 【NGKI3245】.

16437

16438 inirtnが不正である場合にE_PARエラーが検出されるか否かは,ターゲット定義

16439 である【NGKI3246】.

16440

16441 【補足説明】

16442

16443 マルチプロセッサ対応カーネルでは,クラスに属さないグローバル初期化ルー

16444 チンはマスタプロセッサで実行され,クラスに属するローカル初期化ルーチン

16445 はそのクラスの初期割付けプロセッサにより実行される.

16446 ----------------------------------------------------------------------

16447 ATT_TER 終了処理ルーチンの追加〔S〕【NGKI3247】

16448

16449 【静的API】

16450 ATT_TER({ ATR teratr, intptr_t exinf, TERRTN terrtn })

Page 330: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

330

16451

16452 【パラメータ】

16453 *終了処理ルーチンの追加情報

16454 ATR teratr 終了処理ルーチン属性

16455 intptr_t exinf 終了処理ルーチンの拡張情報

16456 TERRTN terrtn 終了処理ルーチンの先頭番地

16457

16458 【エラーコード】

16459 E_RSATR 予約属性

16460 ・teratrが無効【NGKI3248】

16461 ・カーネルドメインの囲みの中に記述されていない〔P〕【NGKI3249】

16462 E_PAR パラメータエラー

16463 ・terrtnがプログラムの先頭番地として正しくない【NGKI3250】

16464

16465 【機能】

16466

16467 各パラメータで指定した終了処理ルーチン追加情報に従って,終了処理ルーチ

16468 ンを追加する【NGKI3251】.

16469

16470 teratrは整数定数式パラメータ,exinfとterrtnは一般定数式パラメータである

16471 【NGKI3252】.

16472

16473 terrtnが不正である場合にE_PARエラーが検出されるか否かは,ターゲット定義

16474 である【NGKI3253】.

16475

16476 【補足説明】

16477

16478 マルチプロセッサ対応カーネルでは,クラスに属さないグローバル終了処理ルー

16479 チンはマスタプロセッサで実行され,クラスに属するローカル終了処理ルーチ

16480 ンはそのクラスの初期割付けプロセッサにより実行される.

16481

16482 【μITRON4.0仕様との関係】

16483

16484 μITRON4.0仕様に定義されていない静的APIである.

16485 ----------------------------------------------------------------------

16486 ref_cfg コンフィギュレーション情報の参照〔T〕

16487

16488 【C言語API】

16489 ER ercd = ref_cfg(T_RCFG *pk_rcfg)

16490

16491 ☆未完成

16492

16493 【TOPPERS/ASPカーネルにおける規定】

16494

16495 ASPカーネルでは,ref_cfgをサポートしない.

16496

16497 【TOPPERS/FMPカーネルにおける規定】

16498

16499 FMPカーネルでは,ref_cfgをサポートしない.

16500

Page 331: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

331

16501 【TOPPERS/HRP2カーネルにおける規定】

16502

16503 HRP2カーネルでは,ref_cfgをサポートしない.

16504

16505 【TOPPERS/SSPカーネルにおける規定】

16506

16507 SSPカーネルでは,ref_cfgをサポートしない.

16508 ----------------------------------------------------------------------

16509 ref_ver バージョン情報の参照〔T〕

16510

16511 【C言語API】

16512 ER ercd = ref_ver(T_RVER *pk_rver)

16513

16514 ☆未完成

16515

16516 【TOPPERS/ASPカーネルにおける規定】

16517

16518 ASPカーネルでは,ref_verをサポートしない.

16519

16520 【TOPPERS/FMPカーネルにおける規定】

16521

16522 FMPカーネルでは,ref_verをサポートしない.

16523

16524 【TOPPERS/HRP2カーネルにおける規定】

16525

16526 HRP2カーネルでは,ref_verをサポートしない.

16527

16528 【TOPPERS/SSPカーネルにおける規定】

16529

16530 SSPカーネルでは,ref_verをサポートしない.

16531 ----------------------------------------------------------------------

16532

16533

16534 第5章 リファレンス

16535

16536 5.1 サービスコール一覧

16537

16538 (1) タスク管理機能

16539

16540 ER_ID tskid = acre_tsk(const T_CTSK *pk_ctsk) 〔TD〕

16541 ER ercd = sac_tsk(ID tskid, const ACVCT *p_acvct) 〔TPD〕

16542 ER ercd = del_tsk(ID tskid) 〔TD〕

16543 ER ercd = act_tsk(ID tskid) 〔T〕

16544 ER ercd = iact_tsk(ID tskid) 〔I〕

16545 ER ercd = mact_tsk(ID tskid, ID prcid) 〔TM〕

16546 ER ercd = imact_tsk(ID tskid, ID prcid) 〔IM〕

16547 ER_UINT actcnt = can_act(ID tskid) 〔T〕

16548 ER ercd = mig_tsk(ID tskid, ID prcid) 〔TM〕

16549 ER ercd = ext_tsk() 〔T〕

16550 ER ercd = ter_tsk(ID tskid) 〔T〕

Page 332: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

332

16551 ER ercd = chg_pri(ID tskid, PRI tskpri) 〔T〕

16552 ER ercd = get_pri(ID tskid, PRI *p_tskpri) 〔T〕

16553 ER ercd = get_inf(intptr_t *p_exinf) 〔T〕

16554 ER ercd = ref_tsk(ID tskid, T_RTSK *pk_rtsk) 〔T〕

16555

16556 (2) タスク付属同期機能

16557

16558 ER ercd = slp_tsk() 〔T〕

16559 ER ercd = tslp_tsk(TMO tmout) 〔T〕

16560 ER ercd = wup_tsk(ID tskid) 〔T〕

16561 ER ercd = iwup_tsk(ID tskid) 〔I〕

16562 ER_UINT wupcnt = can_wup(ID tskid) 〔T〕

16563 ER ercd = rel_wai(ID tskid) 〔T〕

16564 ER ercd = irel_wai(ID tskid) 〔I〕

16565 ER ercd = sus_tsk(ID tskid) 〔T〕

16566 ER ercd = rsm_tsk(ID tskid) 〔T〕

16567 ER ercd = dis_wai(ID tskid) 〔TP〕

16568 ER ercd = idis_wai(ID tskid) 〔IP〕

16569 ER ercd = ena_wai(ID tskid) 〔TP〕

16570 ER ercd = iena_wai(ID tskid) 〔IP〕

16571 ER ercd = dly_tsk(RELTIM dlytim) 〔T〕

16572

16573 (3) タスク例外処理機能

16574

16575 ER ercd = def_tex(ID tskid, cons t T_DTEX *pk_dtex) 〔TD〕

16576 ER ercd = ras_tex(ID tskid, TEXPTN rasptn) 〔T〕

16577 ER ercd = iras_tex(ID tskid, TEXPTN rasptn) 〔I〕

16578 ER ercd = dis_tex() 〔T〕

16579 ER ercd = ena_tex() 〔T〕

16580 bool_t state = sns_tex() 〔TI〕

16581 ER ercd = ref_tex(ID tskid, T_RTEX *pk_rtex) 〔T〕

16582

16583 (4) 同期・通信機能

16584

16585 セマフォ

16586

16587 ER_ID semid = acre_sem(const T_CSEM *pk_csem) 〔TD〕

16588 ER ercd = sac_sem(ID semid, const ACVCT *p_acvct) 〔TPD〕

16589 ER ercd = del_sem(ID semid) 〔TD〕

16590 ER ercd = sig_sem(ID semid) 〔T〕

16591 ER ercd = isig_sem(ID semid) 〔I〕

16592 ER ercd = wai_sem(ID semid) 〔T〕

16593 ER ercd = pol_sem(ID semid) 〔T〕

16594 ER ercd = twai_sem(ID semid, TMO tmout) 〔T〕

16595 ER ercd = ini_sem(ID semid) 〔T〕

16596 ER ercd = ref_sem(ID semid, T_RSEM *pk_rsem) 〔T〕

16597

16598 イベントフラグ

16599

16600 ER_ID flgid = acre_flg(const T_CFLG *pk_cflg) 〔TD〕

Page 333: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

333

16601 ER ercd = sac_flg(ID flgid, const ACVCT *p_acvct) 〔TPD〕

16602 ER ercd = del_flg(ID flgid) 〔TD〕

16603 ER ercd = set_flg(ID flgid, FLGPTN setptn) 〔T〕

16604 ER ercd = iset_flg(ID flgid, FLGPTN setptn) 〔I〕

16605 ER ercd = clr_flg(ID flgid, FLGPTN clrptn) 〔T〕

16606 ER ercd = wai_flg(ID flgid, FLGPTN waiptn, 〔T〕

16607 MODE wfmode, FLGPTN *p_flgptn)

16608 ER ercd = pol_flg(ID flgid, FLGPTN waiptn, 〔T〕

16609 MODE wfmode, FLGPTN *p_flgptn)

16610 ER ercd = t wai_flg(ID flgid, FLGPTN waiptn, 〔T〕

16611 MODE wfmode, FLGPTN *p_flgptn, TMO tmout)

16612 ER ercd = ini_flg(ID flgid) 〔T〕

16613 ER ercd = ref_flg(ID flgid, T_RFLG *pk_rflg) 〔T〕

16614

16615 データキュー

16616

16617 ER_ID dtqid = acre_dtq(const T_CDTQ *pk_cdtq) 〔TD〕

16618 ER ercd = sac_dtq(ID dtqid, const ACVCT *p_acvct) 〔TPD〕

16619 ER ercd = del_dtq(ID dtqid) 〔TD〕

16620 ER ercd = snd_dtq(ID dtqid, intptr_t data) 〔T〕

16621 ER ercd = psnd_dtq(ID dtqid, intptr_t data) 〔T〕

16622 ER ercd = ipsnd_dtq(ID dtqid, intptr_t data) 〔I〕

16623 ER ercd = tsnd_dtq(ID dtqid, intptr_t data, TMO tmout) 〔T〕

16624 ER ercd = fsnd_dtq(ID dtqid, intptr_t data) 〔T〕

16625 ER ercd = ifsn d_dtq(ID dtqid, intptr_t data) 〔I〕

16626 ER ercd = rcv_dtq(ID dtqid, intptr_t *p_data) 〔T〕

16627 ER ercd = prcv_dtq(ID dtqid, intptr_t *p_data) 〔T〕

16628 ER ercd = trcv_dtq(ID dt qid, intptr_t *p_data, TMO tmout) 〔T〕

16629 ER ercd = ini_dtq(ID dtqid) 〔T〕

16630 ER ercd = ref_dtq(ID dtqid, T_RDTQ *pk_rdtq) 〔T〕

16631

16632 優先度データキュー

16633

16634 ER_ID pdqid = acre_pdq(const T_CPDQ *pk_cpdq) 〔TD〕

16635 ER ercd = sac_pdq(ID pdqid, const ACVCT *p_acvct) 〔TPD〕

16636 ER ercd = del_pdq(ID pdqid) 〔TD〕

16637 ER ercd = snd_pdq(ID pdqid, intptr_t data, PRI datapri) 〔T〕

16638 ER ercd = psnd_pdq(ID pdqid, intptr_t data, PRI datapri) 〔T〕

16639 ER ercd = ipsnd_pdq(ID pdqid, intptr_t data, PRI datapri) 〔I〕

16640 ER ercd = tsnd_pdq(ID pdqid, intptr_t data, 〔T〕

16641 PRI datapri, TMO tmout)

16642 ER ercd = rcv_pdq(ID pdqid, intptr_t *p_data, PRI *p_datapri) 〔T〕

16643 ER ercd = prcv_pdq(ID pdqid, intptr_t *p_data, PRI *p_datapri) 〔T〕

16644 ER ercd = trcv_pdq(ID pdqid, intptr_t *p_data, 〔T〕

16645 PRI *p_datapri, TMO tmout)

16646 ER ercd = ini_pdq(ID pdqid) 〔T〕

16647 ER ercd = ref_pdq(ID pdqid, T_RPDQ *pk_rpdq) 〔T〕

16648

16649 メールボックス

16650

Page 334: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

334

16651 ER_ID mbxid = acre_mbx(const T_CMBX *pk_cmbx) 〔TDp〕

16652 ER ercd = del_mbx(ID mbxid) 〔TDp〕

16653 ER ercd = snd_mbx(ID mbxid, T_MSG *pk_msg) 〔Tp〕

16654 ER ercd = rcv_mbx(ID mbxid, T_MSG **ppk_msg) 〔Tp〕

16655 ER ercd = prcv_mbx(ID mbxid, T_MSG **ppk_msg) 〔Tp〕

16656 ER ercd = trcv_mbx(ID mbxid, T_MSG **ppk_msg, TMO tmout) 〔Tp〕

16657 ER ercd = ini_mbx(ID mbxid) 〔Tp〕

16658 ER ercd = ref_mbx (ID mbxid, T_RMBX *pk_rmbx) 〔Tp〕

16659

16660 ミューテックス

16661

16662 ER_ID mtxid = acre_mtx(const T_CMTX *pk_cmtx) 〔TD〕

16663 ER ercd = sac_mtx(ID mtxid, const ACVCT *p_acvct) 〔TPD〕

16664 ER ercd = del_mtx(ID mtxid) 〔TD〕

16665 ER ercd = loc_mtx(ID mtxid) 〔T〕

16666 ER ercd = ploc_mtx(ID mtxid) 〔T〕

16667 ER ercd = tloc_mtx(ID mtxid, TMO tmout) 〔T〕

16668 ER ercd = unl_mtx(ID mtxid) 〔T〕

16669 ER ercd = ini_mtx(ID mtxid) 〔T〕

16670 ER ercd = ref_mtx(ID mtxid, T_RMTX *pk_rmtx) 〔T〕

16671

16672 メッセージバッファ

16673

16674 ER_ID mbfid = acre_mbf(const T_CMBF *pk_cmbf) 〔TD〕

16675 ER ercd = sac_mbf(ID mbfid, const ACVCT *p_acvct) 〔TPD〕

16676 ER ercd = del_mbf(ID mbfid) 〔TD〕

16677 ER ercd = snd_mbf(ID mbfid, const void *msg, uint_t msgsz) 〔T〕

16678 ER ercd = psnd_mbf(ID mbfid, const void *msg, uint_t msgsz ) 〔T〕

16679 ER ercd = tsnd_mbf(ID mbfid, const void *msg, 〔T〕

16680 uint_t msgsz, TMO tmout)

16681 ER_UINT msgsz = rcv_mbf(ID mbfid, void *msg) 〔T〕

16682 ER_UINT msgsz = prcv_mbf(ID mbfid, void *msg) 〔T〕

16683 ER_UINT msgsz = trcv_mbf(ID mbfid, void *msg, TMO tmout) 〔T〕

16684 ER ercd = ini_mbf(ID mbfid) 〔T〕

16685 ER ercd = ref_mbf(ID mbfid, T_RMBF *pk_rmbf) 〔T〕

16686

16687 スピンロック

16688

16689 ER_ID spnid = acre_spn(const T_CSPN *pk_cspn) 〔TMD〕

16690 ER ercd = sac_spn(ID spnid, const ACVCT *p_acvct) 〔TPMD〕

16691 ER ercd = del_spn(ID spnid) 〔TMD〕

16692 ER ercd = loc_spn(ID spnid) 〔TM〕

16693 ER ercd = iloc_spn(ID spnid) 〔IM〕

16694 ER ercd = try_spn(ID spnid) 〔TM〕

16695 ER ercd = itry_spn(ID spnid) 〔IM〕

16696 ER ercd = unl_spn(ID spnid) 〔TM〕

16697 ER ercd = iunl_spn(ID spnid) 〔IM〕

16698 ER ercd = ref_spn(ID spnid, T_RSPN *pk_rspn) 〔TM〕

16699

16700 (5) メモリプール管理機能

Page 335: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

335

16701

16702 固定長メモリプール

16703

16704 ER_ID mpfid = acre_mpf(const T_CMPF *pk_cmpf) 〔TD〕

16705 ER ercd = sac_mpf(ID mpfid, const ACVCT *p_acvct) 〔TPD〕

16706 ER ercd = del_mpf(ID mpfid) 〔TD〕

16707 ER ercd = get_mpf(ID mpfid, void **p_blk) 〔T〕

16708 ER ercd = pget_mpf(ID mpfid, void **p_blk) 〔T〕

16709 ER ercd = tget_mpf(ID mpfid, void **p_blk, TMO tmout) 〔T〕

16710 ER ercd = rel_mpf(ID mpfid, void *blk) 〔T〕

16711 ER ercd = ini_mpf(ID mpfid) 〔T〕

16712 ER ercd = ref_mpf(ID mpfid, T_RMPF *pk_rmpf) 〔T〕

16713

16714 (6) 時間管理機能

16715

16716 システム時刻管理

16717

16718 ER ercd = get_tim(SYSTIM *p_systim) 〔T〕

16719 ER ercd = get_utm(SYSUTM *p_sysutm) 〔TI〕

16720

16721 周期ハンドラ

16722

16723 ER_ID cycid = acre_cyc(const T_CCYC *pk_ccyc) 〔TD〕

16724 ER ercd = sac_cyc(ID cycid, const ACVCT *p_acvct) 〔TPD〕

16725 ER ercd = del_cyc(ID cycid) 〔TD〕

16726 ER ercd = sta_cyc(ID cycid) 〔T〕

16727 ER ercd = msta_cyc(ID cycid, ID prcid) 〔TM〕

16728 ER ercd = stp_cyc(ID cycid) 〔T〕

16729 ER ercd = ref_cyc(ID cycid, T_RCYC *pk_rcyc) 〔T〕

16730

16731 アラームハンドラ

16732

16733 ER_ID almid = acre_alm(const T_CALM *pk_calm) 〔TD〕

16734 ER ercd = sac_alm(ID almid, const ACVCT *p_acvct) 〔TPD〕

16735 ER ercd = del_alm(ID almid) 〔TD〕

16736 ER ercd = sta_alm(ID almid, RELTIM almtim) 〔T〕

16737 ER ercd = ista_alm(ID almid, RELTIM almtim) 〔I〕

16738 ER ercd = msta_alm(ID almid, RELTIM almtim, ID prcid) 〔TM〕

16739 ER ercd = imsta_alm(ID almid, RELTIM almtim, ID prcid) 〔IM〕

16740 ER ercd = stp_alm(ID almid) 〔T〕

16741 ER ercd = istp_alm(ID almid) 〔I〕

16742 ER ercd = ref_alm(ID almid, T_RALM *pk_ralm) 〔T〕

16743

16744 オーバランハンドラ

16745

16746 ER ercd = def_ovr(const T_DOVR *pk_dovr) 〔TD〕

16747 ER ercd = sta_ovr(ID tskid, OVRTIM ovrtim) 〔T〕

16748 ER ercd = ista_ovr(ID tskid, OVRTIM ovrtim) 〔I〕

16749 ER ercd = stp_ovr(ID tskid) 〔T〕

16750 ER ercd = istp_ovr(ID tskid) 〔I〕

Page 336: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

336

16751 ER ercd = ref_ovr(ID tskid, T_ROVR *pk_rovr) 〔T〕

16752

16753 (7) システム状態管理機能

16754

16755 ER ercd = sac_sys(const ACVCT *p_acvct) 〔TPD〕

16756 ER ercd = rot_rdq(PRI tskpri) 〔T〕

16757 ER ercd = irot_rdq(PRI tskpri) 〔I〕

16758 ER ercd = mrot_rdq (PRI tskpri, ID prcid) 〔TM〕

16759 ER ercd = imrot_rdq(PRI tskpri, ID prcid) 〔IM〕

16760 ER ercd = get_tid(ID *p_tskid) 〔T〕

16761 ER ercd = iget_tid(ID *p_t skid) 〔I〕

16762 ER ercd = get_did(ID *p_domid) 〔TP〕

16763 ER ercd = get_pid(ID *p_prcid) 〔TM〕

16764 ER ercd = iget_pid(ID *p_prcid) 〔IM〕

16765 ER ercd = loc_cpu() 〔T〕

16766 ER ercd = iloc_cpu() 〔I〕

16767 ER ercd = unl_cpu() 〔T〕

16768 ER ercd = iunl_cpu() 〔I〕

16769 ER ercd = dis_dsp() 〔T〕

16770 ER ercd = ena_dsp() 〔T〕

16771 bool_t state = sns_ctx() 〔TI〕

16772 bool_t state = sns_loc() 〔TI〕

16773 bool_t state = sns_dsp() 〔TI〕

16774 bool_t state = sns_dpn() 〔TI〕

16775 bool_t state = sns_ker() 〔TI〕

16776 ER ercd = ext_ker() 〔TI〕

16777 ER ercd = ref_sys(T_RSYS *pk_rsys) 〔T〕

16778

16779 (8) メモリオブジェクト管理機能

16780

16781 ER ercd = att_mem(const T_AMEM *pk_amem) 〔TPD〕

16782 ER ercd = att_pma(const T _AMEM *pk_apma) 〔TPD〕

16783 ER ercd = sac_mem(const void *base, const ACVCT *p_acvct) 〔TPD〕

16784 ER ercd = det_mem(const void *base) 〔TPD〕

16785 ER ercd = prb_mem(const void *base, SIZE size, 〔TP〕

16786 ID tskid, MODE pmmode)

16787 ER ercd = ref_mem(const void *base, T_RMEM *pk_rmem) 〔TP〕

16788

16789 (9) 割込み管理機能

16790

16791 ER ercd = cfg_int(INTNO intno, const T_CINT *pk_cint) 〔TD〕

16792 ER_ID isrid = acre_isr(const T_CISR *pk_cisr) 〔TD〕

16793 ER ercd = sac_isr(ID isrid, const ACVCT *p_acvct) 〔TPD〕

16794 ER ercd = del_isr(ID isrid) 〔TD〕

16795 ER ercd = ref_isr(ID isrid, T_RISR *pk_risr) 〔T〕

16796 ER ercd = def_inh(INHNO inhno, const T_DINH *pk_dinh) 〔TD〕

16797 ER ercd = dis_in t(INTNO intno) 〔T〕

16798 ER ercd = ena_int(INTNO intno) 〔T〕

16799 ER ercd = ref_int(INTNO intno, T_RINT *pk_rint) 〔T〕

16800 ER ercd = chg_ipm(PRI intp ri) 〔T〕

Page 337: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

337

16801 ER ercd = get_ipm(PRI *p_intpri) 〔T〕

16802

16803 (10) CPU例外管理機能

16804

16805 ER ercd = def_exc(EXCNO excno, const T_DEXC *pk_dexc) 〔TD〕

16806 bool_t stat = xsns_dpn(void *p_excinf) 〔TI〕

16807 bool_t stat = xsns_xpn(void *p_excinf) 〔TI〕

16808

16809 (11) 拡張サービスコール管理機能

16810

16811 ER ercd = def_svc(FN fncd, const T_DSVC *pk_dsvc) 〔TPD〕

16812 ER_UINT ercd = cal_svc(FN fncd, intptr_t par1, intptr_t par2, 〔TIP〕

16813 intptr_t par3, intptr_t par4, intptr_t par5)

16814

16815 (12) システム構成管理機能

16816

16817 ER ercd = ref_cfg(T_RCFG *pk_rcfg) 〔T〕

16818 ER ercd = ref_ver(T_RVER *pk_rver) 〔T〕

16819

16820 5.2 静的API一覧

16821

16822 (1) タスク管理機能

16823

16824 *保護機能対応でないカーネルの場合

16825 CRE_TSK(ID tskid, { ATR tskatr, intptr_t exinf, TASK task, 〔S〕

16826 PRI itskpri, SIZE stksz, STK_T *stk })

16827

16828 *保護機能対応カーネルの場合

16829 CRE_TSK(ID tskid, { ATR tsk atr, intptr_t exinf, TASK task, 〔SP〕

16830 PRI itskpri, SIZE stksz, STK_T *stk,

16831 SIZE sstksz, STK_T *sstk })

16832 ※ sstkszおよびsstkの記述は省略することができる.

16833

16834 AID_TSK(uint_t notsk) 〔SD〕

16835 SAC_TSK(ID tskid, { ACPTN acptn1, ACPTN acptn2, 〔SP〕

16836 ACPTN acptn3, ACPTN acptn4 })

16837 DEF_EPR(ID tskid, { PRI exepri }) 〔S〕

16838

16839 (2) タスク付属同期機能

16840

16841 なし

16842

16843 (3) タスク例外処理機能

16844

16845 DEF_TEX(ID tskid, { ATR texatr, TEXRTN texrtn }) 〔S〕

16846

16847 (4) 同期・通信機能

16848

16849 セマフォ

16850

Page 338: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

338

16851 CRE_SEM(ID semid, { ATR sematr, uint_t isemcnt, uint_t maxsem }) 〔S〕

16852 AID_SEM(uint_t nosem) 〔SD〕

16853 SAC_SEM(ID semid, { ACPTN acptn1, ACPTN acptn2, 〔SP〕

16854 ACPTN acptn3, ACPTN acptn4 })

16855

16856 イベントフラグ

16857

16858 CRE_FLG(ID flgid, { ATR flgatr, FLGPTN iflgptn }) 〔S〕

16859 AID_FLG(uint_t noflg) 〔SD〕

16860 SAC_FLG(ID flgid, { ACPTN acptn1, ACPTN acptn2, 〔SP〕

16861 ACPTN acptn3, ACPTN acptn4 })

16862

16863 データキュー

16864

16865 CRE_DTQ(ID dtqid, { ATR dtqatr, uint_t dtqcnt, void *dtqmb }) 〔S〕

16866 AID_DTQ(uint_t nodtq) 〔SD〕

16867 SAC_DTQ(ID dtqid, { ACPTN acptn1, ACPTN acptn2, 〔SP〕

16868 ACPTN acptn3, ACPTN acptn4 })

16869

16870 優先度データキュー

16871

16872 CRE_PDQ(ID pdqid, { ATR pdqatr, uint_t pdqcnt, 〔S〕

16873 PRI maxdpri, void *pdqmb })

16874 AID_PDQ(uint_t nopdq) 〔SD〕

16875 SAC_PDQ(ID pdqid, { ACPTN acptn1, ACPTN acptn2, 〔SP〕

16876 ACPTN acptn3 , ACPTN acptn4 })

16877

16878 メールボックス

16879

16880 CRE_MBX(ID mbxid, { ATR mbxatr, PRI maxmpri, void *mprihd }) 〔Sp〕

16881 AID_MBX(uint_t nombx) 〔SpD〕

16882

16883 ミューテックス

16884

16885 CRE_MTX(ID mtxid, { ATR mtxatr, PRI ceilpri }) 〔S〕

16886 AID_MTX(uint_t nomtx) 〔SD〕

16887 SAC_MTX(ID mtxid, { ACPTN acptn1, ACPTN acptn2, 〔SP〕

16888 ACPTN acptn3, ACPTN acptn4 })

16889

16890 メッセージバッファ

16891

16892 CRE_MBF(ID mbfid, { ATR mbfatr, uint_t maxmsz,

16893 SIZE mbfsz, void *mbfmb }) 〔S〕

16894 AID_MBF(uint_t nombf) 〔SD〕

16895 SAC_MBF(ID mbfid, { ACPTN acptn1, ACPTN acptn2, 〔SP〕

16896 ACPTN acptn3, ACPTN acptn4 })

16897

16898 スピンロック

16899

16900 CRE_SPN(ID spnid, { ATR spnatr }) 〔SM〕

Page 339: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

339

16901 AID_SPN(uint_t nospn) 〔SMD〕

16902 SAC_SPN(ID spnid, { ACPTN acptn1, ACPTN acptn2, 〔SPM〕

16903 ACPTN acptn3, ACPTN acptn4 })

16904

16905 (5) メモリプール管理機能

16906

16907 固定長メモリプール

16908

16909 CRE_MPF(ID mpfid, { ATR mpfatr, uint_t blkcnt, uint_ t blksz, 〔S〕

16910 MPF_T *mpf, void *mpfmb })

16911 AID_MPF(uint_t nompf) 〔SD〕

16912 SAC_MPF(ID mpfid, { ACPTN acptn1, ACPTN acptn2, 〔SP〕

16913 ACPTN acptn3, ACPTN acptn4 })

16914

16915 (6) 時間管理機能

16916

16917 周期ハンドラ

16918

16919 CRE_CYC(ID cycid, { ATR cycatr, intptr_t exinf, CYCHDR cychdr, 〔S〕

16920 RELTIM cyctim, RELTIM cycphs })

16921 AID_CYC(uint_t nocyc) 〔SD〕

16922 SAC_CYC(ID cycid, { ACPTN acptn1, ACPTN acptn2, 〔SP〕

16923 ACPTN acptn3, ACPTN acptn4 })

16924

16925 アラームハンドラ

16926

16927 CRE_ALM(ID almid, { ATR almatr, intptr_t exinf, ALMHDR almhdr }) 〔S〕

16928 AID_ALM(uint_t noalm) 〔SD〕

16929 SAC_ALM(ID almid, { ACPTN acptn1, ACPTN acptn2, 〔SP〕

16930 ACPTN acptn3, ACPTN acptn4 })

16931

16932 オーバランハンドラ

16933

16934 DEF_OVR({ ATR ovratr, OVRHDR ovrhdr }) 〔S〕

16935

16936 (7) システム状態管理機能

16937

16938 SAC_SYS({ ACPTN acptn1, ACPTN acptn2, 〔SP〕

16939 ACPTN acptn3, ACPTN acptn4 })

16940

16941 (8) メモリオブジェクト管理機能

16942

16943 ATT_REG("メモリリージョン名", 〔SP〕

16944 { ATR regatr, void *base, SIZE size })

16945 DEF_SRG("標準ROMリージョン名", "標準RAMリージョン名") 〔SP〕

16946 ATT_SEC("セクション名", { ATR mematr, "メモリリージョン名" }) 〔SP〕

16947 ATA_SEC("セクション名", { ATR mematr, "メモリリージョン名" }, 〔SP〕

16948 { ACPTN acptn1, ACPTN acptn2, ACPTN acptn3, ACPTN acptn4 })

16949 LNK_SEC("セクション名", { "メモリリージョン名" }) 〔SP〕

16950 ATT_MOD("オブジェクトモジュール名") 〔SP〕

Page 340: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

340

16951 ATA_MOD("オブジェクトモジュール名", 〔SP〕

16952 { ACPTN acptn1, ACPTN acptn2, ACPTN acptn3, ACPTN acptn4 })

16953 ATT_MEM({ ATR mematr, void *base, SIZE size }) 〔SP〕

16954 ATA_MEM({ ATR mematr, void *base, SIZE size }, 〔SP〕

16955 { ACPTN acptn1, ACPTN acptn2, ACPTN acptn3, ACPTN acptn4 })

16956 ATT_PMA({ ATR mematr, void *base, SIZE size, void *paddr }) 〔SP〕

16957 ATA_PMA({ ATR mematr, void *base, SIZE size, void *paddr }, 〔SP〕

16958 { ACPTN acptn1, ACPTN acptn2, ACPTN acptn3, ACPTN acptn4 })

16959

16960 (9) 割込み管理機能

16961

16962 CFG_INT(INTNO intno, { ATR intatr, PRI intpri }) 〔S〕

16963 CRE_ISR(ID isrid, { ATR isratr, intptr_t exinf, 〔S〕

16964 INTNO intno, ISR isr, PRI isrpri })

16965 ATT_ISR({ ATR isratr, intptr_t exinf, 〔S〕

16966 INTNO intno, ISR isr, PRI isrpri })

16967 AID_ISR(uint_t noisr) 〔SD〕

16968 SAC_ISR(ID isrid, { A CPTN acptn1, ACPTN acptn2, 〔SP〕

16969 ACPTN acptn3, ACPTN acptn4 })

16970 DEF_INH(INHNO inhno, { ATR inhatr, INTHDR inthdr }) 〔S〕

16971

16972 (10) CPU例外管理機能

16973

16974 DEF_EXC(EXCNO excno, { ATR excatr, EXCHDR exchdr }) 〔S〕

16975

16976 (11) 拡張サービスコール管理機能

16977

16978 DEF_SVC(FN fncd, { ATR svcatr, EXTSVC svcrtn, SIZE stksz }) 〔SP〕

16979

16980 (12) システム構成管理機能

16981

16982 DEF_ICS({ SIZE istksz, STK_T *istk }) 〔S〕

16983 DEF_STK({ SIZE stksz, STK_T *stk }) 〔S〕

16984 ATT_INI({ ATR iniatr, intptr_t exinf, INIRTN inirtn }) 〔S〕

16985 ATT_TER({ ATR teratr, intptr_t exinf, TERRTN terrtn }) 〔S〕

16986

16987 5.3 データ型

16988

16989 5.3.1 TOPPERS共通データ型

16990

16991 int8_t 符号付き8ビット整数(オプション,C99準拠)

16992 uint8_t 符号無し8ビット整数(オプション,C99準拠)

16993 int16_t 符号付き16ビット整数(C99準拠)

16994 uint16_t 符号無し16ビット整数(C99準拠)

16995 int32_t 符号付き32ビット整数(C99準拠)

16996 uint32_t 符号無し32ビット整数(C99準拠)

16997 int64_t 符号付き64ビット整数(オプション,C99準拠)

16998 uint64_t 符号無し64ビット整数(オプション,C99準拠)

16999 int128_t 符号付き128ビット整数(オプション,C99準拠)

17000 uint128_t 符号無し128ビット整数(オプション,C99準拠)

Page 341: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

341

17001

17002 int_least8_t 8ビット以上の符号付き整数(C99準拠)

17003 uint_least8_t int_least8_t 型と同じサイズの符号無し整数(C99準拠)

17004

17005 float32_t IEEE754 準拠の32ビット単精度浮動小数点数(オプション)

17006 double64_t IEEE754 準拠の64ビット倍精度浮動小数点数(オプション)

17007

17008 bool_t 真偽値(trueまたはfalse)

17009 int_t 16ビット以上の符号付き整数

17010 uint_t int_t型と同じサイズの符号無し整数

17011 long_t 32ビット以上かつint_t型以上のサイズの符号付き整数

17012 ulong_t long_t型と同じサイズの符号無し整数

17013

17014 intptr_t ポインタを格納できるサイズの符号付き整数(C99準拠)

17015 uintptr_t intptr_t 型と同じサイズの符号無し整数(C99準拠)

17016

17017 FN 機能コード(符号付き整数,int_tに定義)

17018 ER エラーコード(符号付き整数,int_tに定義)

17019 ID オブジェクトのID番号(符号付き整数,int_tに定義)

17020 ATR オブジェクト属性(符号無し整数,uint_tに定義)

17021 STAT オブジェクトの状態(符号無し整数,uint_tに定義)

17022 MODE サービスコールの動作モード(符号無し整数,uint_tに定義)

17023 PRI 優先度(符号付き整数,int_tに定義)

17024 SIZE メモリ領域のサイズ(符号無し整数,ポインタを格納できる

17025 サイズの符号無し整数型に定義)

17026

17027 TMO タイムアウト指定(符号付き整数,単位はミリ秒,int_tに定義)

17028 RELTIM 相対時間(符号無し整数,単位はミリ秒,uint_tに定義)

17029 SYSTIM システム時刻(符号無し整数,単位はミリ秒,ulong_tに定義)

17030 SYSUTM 性能評価用システム時刻(符号無し整数,単位はマイクロ秒,

17031 ulong_t に定義)

17032

17033 FP プログラムの起動番地(型の定まらない関数ポインタ)

17034

17035 ER_BOOL エラーコードまたは真偽値(符号付き整数,int_tに定義)

17036 ER_ID エラーコードまたはID番号(符号付き整数,int_tに定義,

17037 負のID番号は格納できない)

17038 ER_UINT エラーコードまたは符号無し整数(符号付き整数,int_tに

17039 定義,符号無し整数を格納する場合の有効ビット数はuint_t

17040 より1ビット短い)

17041

17042 MB_T オブジェクト管理領域を確保するためのデータ型

17043

17044 ACPTN アクセス許可パターン(符号無し32ビット整数,uint32_tに

17045 定義)

17046

17047 typedef struct acvct { /* アクセス許可ベクタ */

17048 ACPTN acptn1; /* 通常操作1のアクセス許可パターン */

17049 ACPTN acptn2; /* 通常操作2のアクセス許可パターン */

17050 ACPTN acptn3; /* 管理操作のアクセス許可パターン */

Page 342: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

342

17051 ACPTN acptn4; /* 参照操作のアクセス許可パターン */

17052 } ACVCT;

17053

17054 5.3.2 カーネルの使用するデータ型

17055

17056 TEXPTN タスク例外要因のビットパターン(符号無し整数,uint_tに定義)

17057 FLGPTN イベントフラグのビットパターン(符号無し整数,uint_tに定義)

17058 OVRTIM プロセッサ時間(符号無し整数,単位はマイクロ秒,ulong_tに定義)

17059 INTNO 割込み番号(符号無し整数,uint_tに定義)

17060 INHNO 割込みハンドラ番号(符号無し整数,uint_tに定義)

17061 EXCNO CPU例外ハンドラ番号(符号無し整数,uint_tに定義)

17062

17063 TASK タスクのメインルーチン(関数ポインタ)

17064 TEXRTN タスク例外処理ルーチン(関数ポインタ)

17065 CYCHDR 周期ハンドラ(関数ポインタ)

17066 ALMHDR アラームハンドラ(関数ポインタ)

17067 OVRHDR オーバランハンドラ(関数ポインタ)

17068 ISR 割込みサービスルーチン(関数ポインタ)

17069 INTHDR 割込みハンドラ(関数ポインタ)

17070 EXCHDR CPU例外ハンドラ(関数ポインタ)

17071 EXTSVC 拡張サービスコール(関数ポインタ)

17072 INIRTN 初期化ルーチン(関数ポインタ)

17073 TERRTN 終了処理ルーチン(関数ポインタ)

17074

17075 STK_T スタック領域を確保するためのデータ型

17076 MPF_T 固定長メモリプール領域を確保するためのデータ型

17077

17078 メールボックスのメッセージヘッダ【NGKI4001】

17079

17080 typedef struct t_msg {

17081 struct t_msg *pk_next;

17082 } T_MSG;

17083

17084 メールボックスの優先度付きメッセージヘッダ【NGKI4002】

17085

17086 typedef struct t_msg_pri {

17087 T_MSG msgque; /* メールボックスのメッセージヘッダ */

17088 PRI msgpri; /* メッセージ優先度 */

17089 } T_MSG_PRI;

17090

17091 5.3.3 カーネルの使用するパケット形式

17092

17093 (1) タスク管理機能

17094

17095 タスクの生成情報のパケット形式【NGKI4003】

17096

17097 typedef struct t_ctsk {

17098 ATR tskatr; /* タスク属性 */

17099 intptr_t exinf; /* タスクの拡張情報 */

17100 TASK task; /* タスクのメインルーチンの先頭番地 */

Page 343: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

343

17101 PRI itskpri; /* タスクの起動時優先度 */

17102 SIZE stksz; /* タスクのスタック領域のサイズ */

17103 STK_T * stk; /* タスクのスタック領域の先頭番地 */

17104 /* 以下は,保護機能対応カーネルの場合 */

17105 SIZE sstksz; /* タスクのシステムスタック領域のサイズ */

17106 STK_T * sstk; /* タスクのシステムスタック領域の先頭番地 */

17107 } T_CTSK;

17108

17109 タスクの現在状態のパケット形式【NGKI4004】

17110

17111 typedef struct t_rtsk {

17112 STAT tskstat; /* タスク状態 */

17113 PRI tskpri; /* タスクの現在優先度 */

17114 PRI tskbpri; /* タスクのベース優先度 */

17115 STAT tskwait; /* 待ち要因 */

17116 ID wobjid; /* 待ち対象のオブジェクトのID */

17117 TMO lefttmo; /* タイムアウトするまでの時間 */

17118 uint_t actcnt; /* 起動要求キューイング数 */

17119 uint_t wupcnt; /* 起床要求キューイング数 */

17120 /* 以下は,保護機能対応カーネルの場合 */

17121 bool_t texmsk; /* タスク例外マスク状態か否か */

17122 bool_t waifbd; /* 待ち禁止状態か否か */

17123 uint_t svclevel; /* 拡張サービスコールのネストレベル */

17124 /* 以下は,マルチプロセッサ対応カーネルの場合 */

17125 ID prcid; /* 割付けプロセッサのID */

17126 ID actprc /* 次の起動時の割付けプロセッサのID */

17127 } T_RTSK;

17128

17129 (2) タスク付属同期機能

17130

17131 なし

17132

17133 (3) タスク例外処理機能

17134

17135 タスク例外処理ルーチンの定義情報のパケット形式【NGKI4005】

17136

17137 typedef struct t_dtex {

17138 ATR texatr; /* タスク例外処理ルーチン属性 */

17139 TEXRTN texrtn; /* タスク例外処理ルーチンの先頭番地 */

17140 } T_DTEX;

17141

17142 タスク例外処理の現在状態のパケット形式【NGKI4006】

17143

17144 typedef struct t_rtex {

17145 STAT texstat; /* タスク例外処理の状態 */

17146 TEXPTN pndptn; /* 保留例外要因 */

17147 } T_RTEX;

17148

17149 (4) 同期・通信機能

17150

Page 344: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

344

17151 セマフォの生成情報のパケット形式【NGKI4007】

17152

17153 typedef struct t_csem {

17154 ATR sematr; /* セマフォ属性 */

17155 uint_t isemcnt; /* セマフォの初期資源数 */

17156 uint_t maxsem; /* セマフォの最大資源数 */

17157 } T_CSEM;

17158

17159 セマフォの現在状態のパケット形式【NGKI4008】

17160

17161 typedef struct t_rsem {

17162 ID wtskid; /* セマフォの待ち行列の先頭のタスクのID番号 */

17163 uint_t semcnt; /* セマフォの資源数 */

17164 } T_RSEM;

17165

17166 イベントフラグの生成情報のパケット形式【NGKI4009】

17167

17168 typedef struct t_cflg {

17169 ATR flgatr; /* イベントフラグ属性 */

17170 FLGPTN iflgptn; /* イベントフラグの初期ビットパターン */

17171 } T_CFLG;

17172

17173 イベントフラグの現在状態のパケット形式【NGKI4010】

17174

17175 typedef struct t_rflg {

17176 ID wtskid; /* イベントフラグの待ち行列の先頭のタス

17177 クのID番号 */

17178 FLGPTN flgptn; /* イベントフラグのビットパターン */

17179 } T_RFLG;

17180

17181 データキューの生成情報のパケット形式【NGKI4011】

17182

17183 typedef struct t_cdtq {

17184 ATR dtqatr; /* データキュー属性 */

17185 uint_t dtqcnt; /* データキュー管理領域に格納できるデータ数 */

17186 void * dtqmb; /* データキュー管理領域の先頭番地 */

17187 } T_CDTQ;

17188

17189 データキューの現在状態のパケット形式【NGKI4012】

17190

17191 typedef struct t_rdtq {

17192 ID stskid; /* データキューの送信待ち行列の先頭のタ

17193 スクのID番号 */

17194 ID rtskid; /* データキューの受信待ち行列の先頭のタ

17195 スクのID番号 */

17196 uint_t sdtqcnt; /* データキュー管理領域に格納されている

17197 データの数 */

17198 } T_RDTQ;

17199

17200 優先度データキューの生成情報のパケット形式【NGKI4013】

Page 345: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

345

17201

17202 typedef struct t_cpdq {

17203 ATR pdqatr; /* 優先度データキュー属性 */

17204 uint_t pdqcnt; /* 優先度データキュー管理領域に格納でき

17205 るデータ数 */

17206 PRI maxdpri; /* 優先度データキューに送信できるデータ

17207 優先度の最大値 */

17208 void * pdqmb; /* 優先度データキュー管理領域の先頭番地 */

17209 } T_CPDQ;

17210

17211 優先度データキューの現在状態のパケット形式【NGKI4014】

17212

17213 typedef struct t_rpdq {

17214 ID stskid; /* 優先度データキューの送信待ち行列の先

17215 頭のタスクのID番号 */

17216 ID rtskid; /* 優先度データキューの受信待ち行列の先

17217 頭のタスクのID番号 */

17218 uint_t spdqcnt; /* 優先度データキュー管理領域に格納され

17219 ているデータの数 */

17220 } T_RPDQ;

17221

17222 メールボックスの生成情報のパケット形式【NGKI4015】

17223

17224 typedef struct t_cmbx {

17225 ATR mbxatr; /* メールボックス属性 */

17226 PRI maxmpri; /* 優先度メールボックスに送信できるメッ

17227 セージ優先度の最大値 */

17228 void * mprihd; /* 優先度別のメッセージキューヘッダ領域

17229 の先頭番地 */

17230 } T_CMBX;

17231

17232 メールボックスの現在状態のパケット形式【NGKI4016】

17233

17234 typedef struct t_rmbx {

17235 ID wtskid; /* メールボックスの待ち行列の先頭のタスク

17236 のID番号 */

17237 T_MSG *pk_msg ; /* メッセージキューの先頭につながれたメッ

17238 セージの先頭番地 */

17239 } T_RMBX;

17240

17241 ミューテックスの生成情報のパケット形式【NGKI4017】

17242

17243 typedef struct t_cmtx {

17244 ATR mtxatr; /* ミューテックス属性 */

17245 PRI ceilpri; /* ミューテックスの上限優先度 */

17246 } T_CMTX;

17247

17248 ミューテックスの現在状態のパケット形式【NGKI4018】

17249

17250 typedef struct t_rmtx {

Page 346: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

346

17251 ID htskid; /* ミューテックスをロックしているタス

17252 クのID番号 */

17253 ID wtskid; /* ミューテックスの待ち行列の先頭のタ

17254 スクのID番号 */

17255 } T_RMTX;

17256

17257 メッセージバッファの生成情報のパケット形式【NGKI4037】

17258

17259 typedef struct t_cmbf {

17260 ATR mbfatr; /* メッセージバッファ属性 */

17261 uint_t maxmsz; /* メッセージバッファの最大メッセージ

17262 サイズ(バイト数)*/

17263 SIZE mbfsz; /* メッセージバッファ管理領域のサイズ

17264 (バイト数)*/

17265 void * mbfmb; /* メッセージバッファ管理領域の先頭番地 */

17266 } T_CMBF;

17267

17268 メッセージバッファの現在状態のパケット形式【NGKI4038】

17269

17270 typedef struct t_rmbf {

17271 ID stskid; /* メッセージバッファの送信待ち行列の先頭の

17272 タスクのID番号 */

17273 ID rtskid; /* メッセージバッファの受信待ち行列の先頭の

17274 タスクのID番号 */

17275 uint_t smbfcnt; /* メッセージバッファ管理領域に格納されてい

17276 るメッセージの数 */

17277 SIZE fmbfsz; /* メッセージバッファ管理領域中の空き領域の

17278 サイズ */

17279 } T_RMBF;

17280

17281 スピンロックの生成情報のパケット形式【NGKI4019】

17282

17283 typedef struct t_cspn {

17284 ATR spnatr; /* スピンロック属性 */

17285 } T_CSPN;

17286

17287 スピンロックの現在状態のパケット形式【NGKI4020】

17288

17289 typedef struct t_rspn {

17290 STAT spnstat /* スピンロックのロック状態 */

17291 } T_RSPN;

17292

17293 (5) メモリプール管理機能

17294

17295 固定長メモリプールの生成情報のパケット形式【NGKI4021】

17296

17297 typedef struct t_cmpf {

17298 ATR mpfatr; /* 固定長メモリプール属性 */

17299 uint_t blkcnt; /* 獲得できる固定長メモリブロックの数 */

17300 uint_t blksz; /* 固定長メモリブロックのサイズ */

Page 347: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

347

17301 MPF_T * mpf; /* 固定長メモリプール領域の先頭番地 */

17302 void * mpfmb; /* 固定長メモリプール管理領域の先頭番地 */

17303 } T_CMPF;

17304

17305 固定長メモリプールの現在状態のパケット形式【NGKI4022】

17306

17307 typedef struct t_rmpf {

17308 ID wtskid; /* 固定長メモリプールの待ち行列の先頭の

17309 タスクのID番号 */

17310 uint_t fblkcnt; /* 固定長メモリプール領域の空きメモリ領

17311 域に割り付けることができる固定長メモ

17312 リブロックの数 */

17313 } T_RMPF;

17314

17315 (6) 時間管理機能

17316

17317 周期ハンドラの生成情報のパケット形式【NGKI4023】

17318

17319 typedef struct t_ccyc {

17320 ATR cycatr; /* 周期ハンドラ属性 */

17321 intptr_t exinf; /* 周期ハンドラの拡張情報 */

17322 CYCHDR cychdr; /* 周期ハンドラの先頭番地 */

17323 RELTIM cyctim; /* 周期ハンドラの起動周期 */

17324 RELTIM cycphs; /* 周期ハンドラの起動位相 */

17325 } T_CCYC;

17326

17327 周期ハンドラの現在状態のパケット形式【NGKI4024】

17328

17329 typedef struct t_rcyc {

17330 STAT cycstat; /* 周期ハンドラの動作状態 */

17331 RELTIM lefttim; /* 次に周期ハンドラを起動する時刻までの

17332 相対時間 */

17333 /* 以下は,マルチプロセッサ対応カーネルの場合 */

17334 ID prcid; /* 割付けプロセッサのID */

17335 } T_RCYC;

17336

17337 アラームハンドラの生成情報のパケット形式【NGKI4025】

17338

17339 typedef struct t_calm {

17340 ATR almatr; /* アラームハンドラ属性 */

17341 intptr_t exinf; /* アラームハンドラの拡張情報 */

17342 ALMHDR almhdr; /* アラームハンドラの先頭番地 */

17343 } T_CALM;

17344

17345 アラームハンドラの現在状態のパケット形式【NGKI4026】

17346

17347 typedef struct t_ralm {

17348 STAT almstat; /* アラームハンドラの動作状態 */

17349 RELTIM lefttim; /* アラームハンドラを起動する時刻までの

17350 相対時間 */

Page 348: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

348

17351 /* 以下は,マルチプロセッサ対応カーネルの場合 */

17352 ID prcid; /* 割付けプロセッサのID */

17353 } T_RALM;

17354

17355 オーバランハンドラの定義情報のパケット形式【NGKI4027】

17356

17357 typedef struct t_dovr {

17358 ATR ovratr; /* オーバランハンドラ属性 */

17359 OVRHDR ovrhdr; /* オーバランハンドラの先頭番地 */

17360 } T_DOVR;

17361

17362 オーバランハンドラの現在状態のパケット形式【NGKI4028】

17363

17364 typedef struct t_rovr {

17365 STAT ovrstat; /* オーバランハンドラの動作状態 */

17366 OVRTIM leftotm; /* 残りプロセッサ時間 */

17367 } T_ROVR;

17368

17369 (7) システム状態管理機能

17370

17371 システムの現在状態のパケット形式

17372

17373 ☆未完成

17374

17375 (8) メモリオブジェクト管理機能

17376

17377 メモリオブジェクトの登録情報のパケット形式【NGKI4029】

17378

17379 typedef struct t_amem {

17380 ATR mematr /* メモリオブジェクト属性 */

17381 void * base /* 登録するメモリ領域の先頭番地 */

17382 SIZE size /* 登録するメモリ領域のサイズ(バイト数)*/

17383 } T_AMEM;

17384

17385 物理メモリ領域の登録情報のパケット形式【NGKI4030】

17386

17387 typedef struct t_apma {

17388 ATR mematr /* メモリオブジェクト属性 */

17389 void * base /* 登録するメモリ領域の先頭番地 */

17390 SIZE size /* 登録するメモリ領域のサイズ(バイト数)*/

17391 void * paddr /* 登録するメモリ領域の物理アドレスの先頭

17392 番地 */

17393 } T_APMA;

17394

17395 メモリオブジェクトの現在状態のパケット形式

17396

17397 ☆未完成

17398

17399 (9) 割込み管理機能

17400

Page 349: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

349

17401 割込み要求ラインの属性の設定情報のパケット形式【NGKI4031】

17402

17403 typedef struct t_cint {

17404 ATR intatr; /* 割込み要求ライン属性 */

17405 PRI intpri; /* 割込み優先度 */

17406 } T_CINT;

17407

17408 割込みサービスルーチンの生成情報のパケット形式【NGKI4032】

17409

17410 typedef struct t_cisr {

17411 ATR isratr; /* 割込みサービスルーチン属性 */

17412 intptr_t exinf; /* 割込みサービスルーチンの拡張情報 */

17413 INTNO intno; /* 割込みサービスルーチンを登録する割込

17414 み番号 */

17415 ISR isr; /* 割込みサービスルーチンの先頭番地 */

17416 PRI isrpri; /* 割込みサービスルーチン優先度 */

17417 } T_CISR;

17418

17419 割込みサービスルーチンの現在状態のパケット形式

17420

17421 ☆未完成

17422

17423 割込みハンドラの定義情報のパケット形式【NGKI4033】

17424

17425 typedef struct t_dinh {

17426 ATR inhatr; /* 割込みハンドラ属性 */

17427 INTHDR inthdr; /* 割込みハンドラの先頭番地 */

17428 } T_DINH;

17429

17430 割込み要求ラインの現在状態のパケット形式

17431

17432 ☆未完成

17433

17434 (10) CPU例外管理機能

17435

17436 CPU例外ハンドラの定義情報のパケット形式【NGKI4034】

17437

17438 typedef struct t_dexc {

17439 ATR excatr; /* CPU 例外ハンドラ属性 */

17440 EXCHDR exchdr; /* CPU 例外ハンドラの先頭番地 */

17441 } T_DEXC;

17442

17443 (11) 拡張サービスコール管理機能

17444

17445 拡張サービスコールの定義情報のパケット形式【NGKI4035】

17446

17447 typedef struct t_dsvc {

17448 ATR svcatr /* 拡張サービスコール属性 */

17449 EXTSVC svcrtn /* 拡張サービスコールの先頭番地 */

17450 SIZE stksz /* 拡張サービスコールで使用するスタック

Page 350: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

350

17451 サイズ */

17452 } T_DSVC;

17453

17454 (12) システム構成管理機能

17455

17456 コンフィギュレーション情報のパケット形式

17457

17458 ☆未完成

17459

17460 バージョン情報のパケット形式

17461

17462 ☆未完成

17463

17464 5.4 定数とマクロ

17465

17466 5.4.1 TOPPERS共通定数

17467

17468 (1) 一般定数

17469

17470 NULL 無効ポインタ

17471

17472 true 1 真

17473 false 0 偽

17474

17475 E_OK 0 正常終了

17476

17477 (2) 整数型に格納できる最大値と最小値

17478

17479 INT8_MAX int8_t に格納できる最大値(オプション,C99準拠)

17480 INT8_MIN int8_t に格納できる最小値(オプション,C99準拠)

17481 UINT8_MAX uint8_t に格納できる最大値(オプション,C99準拠)

17482 INT16_MAX int16_tに格納できる最大値(C99準拠)

17483 INT16_MIN int16_t に格納できる最小値(C99準拠)

17484 UINT16_MAX uint16_t に格納できる最大値(C99準拠)

17485 INT32_MAX int32_t に格納できる最大値(C99準拠)

17486 INT32_MIN int32_tに格納できる最小値(C99準拠)

17487 UINT32_MAX uint32_t に格納できる最大値(C99準拠)

17488 INT64_MAX int64_t に格納できる最大値(オプション,C99準拠)

17489 INT64_MIN int64_t に格納できる最小値(オプション,C99準拠)

17490 UINT64_MAX uint64_t に格納できる最大値(オプション,C99準拠)

17491 INT128_MAX int128_t に格納できる最大値(オプション,C99準拠)

17492 INT128_MIN int128_t に格納できる最小値(オプション,C99準拠)

17493 UINT128_MAX uint128_t に格納できる最大値(オプション,C99準拠)

17494

17495 INT_LEAST8_MAX int_least8_tに格納できる最大値(C99準拠)

17496 INT_LEAST8_MIN int_least8_t に格納できる最小値(C99準拠)

17497 UINT_LEAST8_MAX uint_least8_t に格納できる最大値(C99準拠)

17498 INT_MAX int_t に格納できる最大値(C90準拠)

17499 INT_MIN int_t に格納できる最小値(C90準拠)

17500 UINT_MAX uint_t に格納できる最大値(C90準拠)

Page 351: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

351

17501 LONG_MAX long_t に格納できる最大値(C90準拠)

17502 LONG_MIN long_t に格納できる最小値(C90準拠)

17503 ULONG_MAX ulong_t に格納できる最大値(C90準拠)

17504

17505 FLOAT32_MIN float32_t に格納できる最小の正規化された正の浮

17506 動小数点数(オプション)

17507 FLOAT32_MAX float32_t に格納できる表現可能な最大の有限浮動

17508 小数点数(オプション)

17509 DOUBLE64_MIN doub le64_tに格納できる最小の正規化された正の浮

17510 動小数点数(オプション)

17511 DOUBLE64_MAX double64_t に格納できる表現可能な最大の有限浮動

17512 小数点数(オプション)

17513

17514 (3) 整数型のビット数

17515

17516 CHAR_BIT char型のビット数(C90準拠)

17517

17518 (4) オブジェクト属性

17519

17520 TA_NULL 0U オブジェクト属性を指定しない

17521

17522 (5) タイムアウト指定

17523

17524 TMO_POL 0 ポーリング

17525 TMO_FEVR -1 永久待ち

17526 TMO_NBLK -2 ノンブロッキング

17527

17528 (6) アクセス許可パターン

17529

17530 TACP_KERNEL 0U カーネルドメインのみにアクセスを許可

17531 TACP_SHARED ̃0U すべての保護ドメインにアクセスを許可

17532

17533 5.4.2 TOPPERS共通マクロ

17534

17535 (1) 整数定数を作るマクロ

17536

17537 INT8_C(val) int_least8_t 型の定数を作るマクロ(C99準拠)

17538 UINT8_C(val) uint_least8_t 型の定数を作るマクロ(C99準拠)

17539 INT16_C(val) int16_t 型の定数を作るマクロ(C99準拠)

17540 UINT16_C(val) uint16_t型の定数を作るマクロ(C99準拠)

17541 INT32_C(val) int32_t 型の定数を作るマクロ(C99準拠)

17542 UINT32_C(val) uint32_t 型の定数を作るマクロ(C99準拠)

17543 INT64_C(val) int64_t 型の定数を作るマクロ(オプション,C99準拠)

17544 UINT64_C(val) uint64_t 型の定数を作るマクロ(オプション,C99準拠)

17545 INT128_C(val) int128_t 型の定数を作るマクロ(オプション,C99準拠)

17546 UINT128_C(val) uint128_t 型の定数を作るマクロ(オプション,C99準拠)

17547

17548 UINT_C(val) uint_t 型の定数を作るマクロ

17549 ULONG_C(val) ulong_t 型の定数を作るマクロ

17550

Page 352: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

352

17551 (2) 型に関する情報を取り出すためのマクロ

17552

17553 offsetof(structure, field) 構造体structure中のフィールドfieldの

17554 バイト位置を返すマクロ(C90準拠)

17555

17556 alignof(type) 型typeのアラインメント単位を返すマクロ

17557

17558 ALIGN_TYPE(addr, type) 番地addrが型typeに対してアラインしてい

17559 るかどうかを返すマクロ

17560

17561 (3) assertマクロ

17562

17563 assert(exp) exp が成立しているかを検査するマクロ(C90準拠)

17564

17565 (4) コンパイラの拡張機能のためのマクロ

17566

17567 inline インライン関数

17568 Inline ファイルローカルなインライン関数

17569 asm インラインアセンブラ

17570 Asm インラインアセンブラ(最適化抑止)

17571 throw() 例外を発生しない関数

17572 NoReturn リターンしない関数

17573

17574 (5) エラーコード生成・分解マクロ

17575

17576 ERCD(mercd, sercd) メインエラーコードmercdとサブエラーコードsercdか

17577 ら,エラーコードを生成するためのマクロ

17578

17579 MERCD(ercd) エラーコードercdからメインエラーコードを抽出する

17580 ためのマクロ

17581 SERCD(ercd) エラーコードercdからサブエラーコードを抽出するた

17582 めのマクロ

17583

17584 (6) アクセス許可パターン生成マクロ

17585

17586 TACP(domid) domid で指定される保護ドメインに属する処理単位の

17587 みにアクセスを許可するアクセス許可パターン

17588

17589 5.4.3 カーネル共通定数

17590

17591 (1) オブジェクト属性

17592

17593 TA_TPRI 0x01U タスクの待ち行列をタスクの優先度順に

17594

17595 (2) 保護ドメインID

17596

17597 TDOM_SELF 0 自タスクの属する保護ドメイン

17598 TDOM_KERNEL -1 カーネルドメイン

17599 TDOM_NONE -2 無所属(保護ドメインに属さない)

17600

Page 353: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

353

17601 (3) その他のカーネル共通定数

17602

17603 TCLS_SELF 0 自タスクの属するクラス

17604

17605 TPRC_NONE 0 割付けプロセッサの指定がない

17606 TPRC_INI 0 初期割付けプロセッサ

17607

17608 TSK_SELF 0 自タスク指定

17609 TSK_NONE 0 該当するタスクがない

17610

17611 TPRI_SELF 0 自タスクのベース優先度の指定

17612 TPRI_INI 0 タスクの起動時優先度の指定

17613

17614 TIPM_ENAALL 0 割込み優先度マスク全解除

17615

17616 5.4.4 カーネル共通マクロ

17617

17618 (1) オブジェクト属性を作るマクロ

17619

17620 TA_DOM(domid) domid で指定される保護ドメインに属する

17621 TA_CLS(clsid) clsid で指定されるクラスに属する

17622

17623 (2) サービスコールの呼出し方法を指定するマクロ

17624

17625 SVC_CALL(svc) svc で指定されるサービスコールを関数呼出しによっ

17626 て呼び出すための名称

17627

17628 5.4.5 カーネルの機能毎の定数

17629

17630 (1) タスク管理機能

17631

17632 TA_ACT 0x02U タスクの生成時にタスクを起動する

17633 TA_RSTR 0x04U 生成するタスクを制約タスクとする

17634 TA_FPU FPUレジスタをコンテキストに含める

17635

17636 TTS_RUN 0x01U 実行状態

17637 TTS_RDY 0x02U 実行可能状態

17638 TTS_WAI 0x04U 待ち状態

17639 TTS_SUS 0x08U 強制待ち状態

17640 TTS_WAS 0x0cU 二重待ち状態

17641 TTS_DMT 0x10U 休止状態

17642

17643 TTW_SLP 0x0001U 起床待ち

17644 TTW_DLY 0x0002U 時間経過待ち

17645 TTW_SEM 0x0004U セマフォの資源獲得待ち

17646 TTW_FLG 0x0008U イベントフラグ待ち

17647 TTW_SDTQ 0x0010U データキューへの送信待ち

17648 TTW_RDTQ 0x0020U データキューからの受信待ち

17649 TTW_SPDQ 0x0100U 優先度データキューへの送信待ち

17650 TTW_RPDQ 0x0200U 優先度データキューからの受信待ち

Page 354: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

354

17651 TTW_MBX 0x0040U メールボックスからの受信待ち

17652 TTW_MTX 0x0080U ミューテックスのロック待ち状態

17653 TTW_SMBF 0x0400U メッセージバッファへの送信待ち

17654 TTW_RMBF 0x0800U メッセージバッファからの受信待ち

17655 TTW_MPF 0x2000U 固定長メモリブロックの獲得待ち

17656

17657 TA_FPUの値は,ターゲット定義とする.

17658

17659 (3) タスク例外処理機能

17660

17661 TTEX_ENA 0x01U タスク例外処理許可状態

17662 TTEX_DIS 0x02U タスク例外処理禁止状態

17663

17664 (4) 同期・通信機能

17665

17666 イベントフラグ

17667

17668 TA_WMUL 0x 02U 複数のタスクが待つのを許す

17669 TA_CLR 0x04U タスクの待ち解除時にイベントフラグをクリアする

17670

17671 TWF_ORW 0x01U イベントフラグのOR待ちモード

17672 TWF_ANDW 0x02U イベントフラグのAND待ちモード

17673

17674 メールボックス

17675

17676 TA_MPRI 0x02U メッセージキューをメッセージの優先度順にする

17677

17678 スピンロック

17679

17680 TSPN_UNL 0x01U 取得されていない状態

17681 TSPN_LOC 0x02U 取得されている状態

17682

17683 (6) 時間管理機能

17684

17685 周期ハンドラ

17686

17687 TA_STA 0x02U 周期ハンドラの生成時に周期ハンドラを動作開始する

17688 TA_PHS 0x04U 周期ハンドラを生成した時刻を基準時刻とする

17689

17690 TCYC_STP 0x01U 周期ハンドラが動作していない状態

17691 TCYC_STA 0x02U 周期ハンドラが動作している状態

17692

17693 アラームハンドラ

17694

17695 TALM_STP 0x01U アラームハンドラが動作していない状態

17696 TALM_STA 0x02U アラームハンドラが動作している状態

17697

17698 オーバランハンドラ

17699

17700 TOVR_STP 0x01U オーバランハンドラが動作していない状態

Page 355: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

355

17701 TOVR_STA 0x02U オーバランハンドラが動作している状態

17702

17703 (8) メモリオブジェクト管理機能

17704

17705 TA_NOWRITE 0x01U 書込みアクセス禁止

17706 TA_NOREAD 0x02U 読出しアクセス禁止

17707 TA_EXEC 0x04U 実行アクセス許可

17708 TA_MEMINI 0x08U メモリの初期化を行う

17709 TA_MEMPRSV 0x10U メモリの初期化を行わない

17710 TA_SDATA 0x20U ショートデータ領域に配置

17711 TA_UNCACHE 0x40U キャッシュ禁止

17712 TA_IODEV 0x80U 周辺デバイスの領域

17713 TA_WTHROUGH ライトスルーキャッシュを用いる

17714

17715 TPM_WRITE 0x01U 書込みアクセス権のチェック

17716 TPM_READ 0x02U 読出しアクセス権のチェック

17717 TPM_EXEC 0x04U 実行アクセス権のチェック

17718

17719 TA_WTHROUGHの値は,ターゲット定義とする.

17720

17721 (9) 割込み管理機能

17722

17723 TA_ENAINT 0x01U 割込み要求禁止フラグをクリア

17724 TA_EDGE 0x02U エッジトリガ

17725 TA_POSEDGE ポジティブエッジトリガ

17726 TA_NEGEDGE ネガティブエッジトリガ

17727 TA_BOTHEDGE 両エッジトリガ

17728 TA_LOWLEVEL ローレベルトリガ

17729 TA_HIGHLEVEL ハイレベルトリガ

17730

17731 TA_NONKERNEL 0x02U カーネル管理外の割込み

17732

17733 TA_POSEDGE,TA_NEGEDGE,TA_BOTHEDGE,TA_LOWLEVEL,TA_HIGHLEVELの値は,

17734 ターゲット定義とする.

17735

17736 (10) CPU例外管理機能

17737

17738 TA_DIRECT CPU 例外ハンドラを直接呼び出す

17739

17740 TA_DIRECTの値は,ターゲット定義とする.

17741

17742 5.4.6 カーネルの機能毎のマクロ

17743

17744 (1) タスク管理機能

17745

17746 COUNT_STK_T(sz) サイズszのスタック領域を確保するために必要な

17747 STK_T 型の配列の要素数

17748 ROUND_STK_T(sz) 要素数COUNT_STK_T(sz)のSTK_T型の配列のサイズ(sz

17749 を,STK_T型のサイズの倍数になるように大きい方に

17750 丸めた値)

Page 356: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

356

17751

17752 (4) 同期・通信機能

17753

17754 TSZ_DTQMB(dtqcnt) dtqcnt で指定した数のデータを格納できるデータ

17755 キュー管理領域のサイズ(バイト数)

17756 TCNT_DTQMB(dtqcnt) dtqcnt で指定した数のデータを格納できるデータ

17757 キュー管理領域を確保するために必要なMB_T型の配

17758 列の要素数

17759

17760 TSZ_PDQMB(pdqcnt) pdqcnt で指定した数のデータを格納できる優先度デー

17761 タキュー管理領域のサイズ(バイト数)

17762 TCNT_PDQMB(pdqcnt) pdqcnt で指定した数のデータを格納できる優先度デー

17763 タキュー管理領域を確保するために必要なMB_T型の

17764 配列の要素数

17765

17766 TSZ_MBFMB(msgcnt, msgsz) msgsz で指定したサイズのメッセージを,

17767 msgcnt で指定した数だけ格納できるメッセー

17768 ジバッファ管理領域のサイズ(バイト数)

17769 TCNT_MBFMB(msgcnt, msgsz) msgsz で指定したサイズのメッセージを,

17770 msgcnt で指定した数だけ格納できるメッセー

17771 ジバッファ管理領域を確保するために必要

17772 なMB_T型の配列の要素数

17773

17774 (5) メモリプール管理機能

17775

17776 COUNT_MPF_T(blksz) 固定長メモリブロックのサイズがblkszの固定長メモ

17777 リプール領域を確保するために,固定長メモリブロッ

17778 ク1つあたりに必要なMPF_T型の配列の要素数を求め

17779 るマクロ

17780 ROUND_MPF_T(blksz) 要素数COUNT_MPF_T(blksz)のMPF_T型の配列のサイズ

17781 (blkszを,MPF_T型のサイズの倍数になるように大き

17782 い方に丸めた値)

17783

17784 TSZ_MPFMB(blkcnt) blkcnt で指定した数の固定長メモリブロックを管理

17785 することができる固定長メモリプール管理領域のサ

17786 イズ(バイト数)

17787 TCNT_MPFMB(blkcnt) blkcnt で指定した数の固定長メモリブロックを管理

17788 することができる固定長メモリプール管理領域を確

17789 保するために必要なMB_T型の配列の要素数

17790

17791 5.5 構成マクロ

17792

17793 5.5.1 TOPPERS共通構成マクロ

17794

17795 (1) 相対時間の範囲

17796

17797 TMAX_RELTIM 相対時間に指定できる最大値

17798

17799 5.5.2 カーネル共通構成マクロ

17800

Page 357: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

357

17801 (1) サポートする機能

17802

17803 TOPPERS_SUPPORT_PROTECT 保護機能対応のカーネル

17804 TOPPERS_SUPPORT_MULTI_PRC マルチプロセッサ対応のカーネル

17805 TOPPERS_SUPPORT_DYNAMIC_CRE 動的生成対応のカーネル

17806

17807 (2) 優先度の範囲

17808

17809 TMIN_TPRI タスク優先度の最小値(=1)

17810 TMAX_TPRI タスク優先度の最大値

17811

17812 (3) プロセッサの数

17813

17814 TNUM_PRCID プロセッサの数

17815

17816 (4) 特殊な役割を持ったプロセッサ

17817

17818 TOPPERS_MASTER_PRCID マスタプロセッサのID番号

17819 TOPPERS_SYSTIM_PRCID システム時刻管理プロセッサのID番号

17820

17821 (5) タイマ方式

17822

17823 TOPPERS_SYSTIM_LOCAL ローカルタイマ方式の場合にマクロ定義

17824 TOPPERS_SYSTIM_GLOBAL グローバルタイマ方式の場合にマクロ定義

17825

17826 (6) バージョン情報

17827

17828 TKERNEL_MAKER カーネルのメーカコード(=0x0118)

17829 TKERNEL_PRID カーネルの識別番号

17830 TKERNEL_SPVER カーネル仕様のバージョン番号

17831 TKERNEL_PRVER カーネルのバージョン番号

17832

17833 5.5.3 カーネルの機能毎の構成マクロ

17834

17835 (1) タスク管理機能

17836

17837 TMAX_ACTCNT タスクの起動要求キューイング数の最大値

17838

17839 TNUM_TSKID 登録できるタスクの数(動的生成対応でないカーネルで

17840 は,静的APIによって登録されたタスクの数に一致)

17841

17842 (2) タスク付属同期機能

17843

17844 TMAX_WUPCNT タスクの起床要求キューイング数の最大値

17845

17846 (3) タスク例外処理機能

17847

17848 TBIT_TEXPTN タスク例外要因のビット数(TEXPTNの有効ビット数)

17849

17850 (4) 同期・通信機能

Page 358: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

358

17851

17852 セマフォ

17853

17854 TMAX_MAXSEM セマフォの最大資源数の最大値

17855

17856 TNUM_SEMID 登録できるセマフォの数(動的生成対応でないカーネル

17857 では,静的APIによって登録されたセマフォの数に一致)

17858

17859 イベントフラグ

17860

17861 TBIT_FLGPTN イベントフラグのビット数(FLGPTNの有効ビット数)

17862

17863 TNUM_FLGID 登録できるイベントフラグの数(動的生成対応でないカー

17864 ネルでは,静的APIによって登録されたイベントフラグの

17865 数に一致)

17866

17867 データキュー

17868

17869 TNUM_DTQID 登録できるデータキューの数(動的生成対応でないカー

17870 ネルでは,静的APIによって登録されたデータキューの数

17871 に一致)

17872

17873 優先度データキュー

17874

17875 TMIN_DPRI データ優先度の最小値(=1)

17876 TMAX_DPRI データ優先度の最大値

17877

17878 TNUM_PDQID 登録できる優先度データキューの数(動的生成対応でな

17879 いカーネルでは,静的APIによって登録された優先度デー

17880 タキューの数に一致)

17881

17882 メールボックス

17883

17884 TMIN_MPRI メッセージ優先度の最小値(=1)

17885 TMAX_MPRI メッセージ優先度の最大値

17886

17887 TNUM_MBXID 登録できるメールボックスの数(動的生成対応でないカー

17888 ネルでは,静的APIによって登録されたメールボックスの

17889 数に一致)

17890

17891 ミューテックス

17892

17893 TNUM_MTXID 登録できるミューテックスの数(動的生成対応でないカー

17894 ネルでは,静的APIによって登録されたミューテックスの

17895 数に一致)

17896

17897 メッセージバッファ

17898

17899 TNUM_MBFID 登録できるメッセージバッファの数(動的生成対応でな

17900 いカーネルでは,静的APIによって登録されたメッセー

Page 359: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

359

17901 ジバッファの数に一致)

17902

17903 スピンロック

17904

17905 TNUM_SPNID 登録できるスピンロックの数(動的生成対応でないカー

17906 ネルでは,静的APIによって登録されたミューテックスの

17907 数に一致)

17908

17909 (5) メモリプール管理機能

17910

17911 固定長メモリプール

17912

17913 TNUM_MPFID 登録できる固定長メモリプールの数(動的生成対応でない

17914 カーネルでは,静的APIによって登録された固定長メモリ

17915 プールの数に一致)

17916

17917 (6) 時間管理機能

17918

17919 システム時刻管理

17920

17921 TIC_NUME タイムティックの周期(単位はミリ秒)の分子

17922 TIC_DENO タイムティックの周期(単位はミリ秒)の分母

17923

17924 TOPPERS_SUPPORT_GET_UTM get_utm がサポートされている

17925

17926 周期ハンドラ

17927

17928 TNUM_CYCID 登録できる周期ハンドラの数(動的生成対応でないカー

17929 ネルでは,静的APIによって登録された周期ハンドラの数

17930 に一致)

17931

17932 アラームハンドラ

17933

17934 TNUM_ALMID 登録できるアラームハンドラの数(動的生成対応でない

17935 カーネルでは,静的APIによって登録されたアラームハン

17936 ドラの数に一致)

17937

17938 オーバランハンドラ

17939

17940 TMAX_OVRTIM プロセッサ時間に指定できる最大値

17941

17942 TOPPERS_SUPPORT_OVR HDR オーバランハンドラ機能がサポートされて

17943 いる

17944

17945 (7) システム状態管理機能

17946

17947 なし

17948

17949 (8) メモリオブジェクト管理機能

17950

Page 360: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

360

17951 TOPPERS_SUPPORT_ATT_MOD ATT_MOD /ATA_MODがサポートされている

17952 TOPPERS_SUPPORT_ATT_PMA ATT_PMA /ATA_PMA/att_pmaがサポートさ

17953 れている

17954

17955 (9) 割込み管理機能

17956

17957 TMIN_INTPRI 割込み優先度の最小値(最高値)

17958 TMAX_INTPRI 割込み優先度の最大値(最低値,=-1)

17959

17960 TMIN_ISRPRI 割込みサービスルーチン優先度の最小値(=1)

17961 TMAX_ISRPRI 割込みサービスルーチン優先度の最大値

17962

17963 TOPPERS_SUPPORT_DIS_INT dis_int がサポートされている

17964 TOPPERS_SUPPORT_ENA_INT ena_int がサポートされている

17965

17966 (10) CPU例外管理機能

17967

17968 なし

17969

17970 (11) 拡張サービスコール管理機能

17971

17972 TNUM_FNCD 登録できる拡張サービスコールの数(動的生成対応でな

17973 いカーネルでは,静的APIによって登録された拡張サービ

17974 スコールの数に一致)

17975

17976 (12) システム構成管理機能

17977

17978 なし

17979

17980 5.6 エラーコード一覧

17981

17982 (1) メインエラーコード

17983

17984 E_SYS -5 システムエラー

17985 E_NOSPT -9 未サポート機能

17986 E_RSFN -10 予約機能コード

17987 E_RSATR -11 予約属性

17988 E_PAR -17 パラメータエラー

17989 E_ID -18 不正ID番号

17990 E_CTX -25 コンテキストエラー

17991 E_MACV -26 メモリアクセス違反

17992 E_OACV -27 オブジェクトアクセス違反

17993 E_ILUSE -28 サービスコール不正使用

17994 E_NOMEM -33 メモリ不足

17995 E_NOID -34 ID番号不足

17996 E_NORES -35 資源不足

17997 E_OBJ -41 オブジェクト状態エラー

17998 E_NOEXS -42 オブジェクト未登録

17999 E_QOVR -43 キューイングオーバフロー

18000 E_RLWAI -49 待ち禁止状態または待ち状態の強制解除

Page 361: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

361

18001 E_TMOUT -50 ポーリング失敗またはタイムアウト

18002 E_DLT -51 待ちオブジェクトの削除または再初期化

18003 E_CLS -52 待ちオブジェクトの状態変化

18004 E_WBLK -57 ノンブロッキング受付け

18005 E_BOVR -58 バッファオーバフロー

18006

18007 5.7 機能コード一覧【NGKI4036】

18008

18009 --------------------------------------------------------

18010 -0 -1 -2 -3

18011 --------------------------------------------------------

18012 -0x01 予約 予約 予約 予約

18013 -0x05 act_tsk iact_tsk can_act ext_tsk

18014 -0x09 ter_tsk chg_pri get_pri get_inf

18015 -0x0d slp_tsk tslp_tsk wup_tsk iwup_tsk

18016 -0x11 can_wup rel_wai irel_wai 予約

18017 -0x15 dis_wai idis_wai ena_wai iena_wai

18018 -0x19 sus_tsk rsm_tsk dly_tsk 予約

18019 -0x1d ras_tex iras_tex dis_tex ena_tex

18020 -0x21 sns_tex ref_tex 予約 予約

18021 -0x25 sig_sem isig_sem wai_sem pol_sem

18022 -0x29 twai_sem 予約 予約 予約

18023 -0x2d set_flg iset_flg clr_flg wai_flg

18024 -0x31 pol_flg twai_flg 予約 予約

18025 -0x35 snd_dtq psnd_dtq ipsnd_dtq tsnd_dtq

18026 -0x39 fsnd_dtq ifsnd_dtq rcv_dtq prcv_dtq

18027 -0x3d trcv_dtq 予約 予約 予約

18028 -0x41 snd_pdq psnd_pdq ipsnd_pdq tsnd_pdq

18029 -0x45 rcv_pdq prcv_pdq trcv_pdq 予約

18030 -0x49 snd_mbx rcv_mbx prcv_mbx trcv_mbx

18031 -0x4d loc_mtx ploc_mtx tloc_mtx unl_mtx

18032 -0x51 snd_mbf psnd_mbf tsnd_mbf rcv_mbf

18033 -0x55 prcv_mbf trcv_mbf 予約 予約

18034 -0x59 get_mpf pget_mpf tget_mpf rel_mpf

18035 -0x5d get_tim get_utm 予約 ref_ovr

18036 -0x61 sta_cyc stp_cyc 予約 予約

18037 -0x65 sta_alm ista_alm stp_alm istp_alm

18038 -0x69 sta_ovr ista_ovr stp_ovr istp_ovr

18039 -0x6d sac_sys ref_sys rot_rdq irot_rdq

18040 -0x71 get_did 予約 get_tid iget_tid

18041 -0x75 loc_cpu iloc_cpu unl_cpu iunl_cpu

18042 -0x79 dis_dsp ena_dsp sns_ctx sns_loc

18043 -0x7d sns_dsp sns_dpn sns_ker ext_ker

18044 -0x81 att_mem det_mem sac_mem prb_mem

18045 -0x85 ref_mem 予約 att_pma 予約

18046 -0x89 cfg_int dis_int ena_int ref_int

18047 -0x8d chg_ipm get_ipm 予約 予約

18048 -0x91 xsns_dpn xsns_xpn 予約 予約

18049 -0x95 ref_cfg ref_ver 予約 予約

18050 -0x99 予約 予約 予約 予約

Page 362: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

362

18051 -0x9d 予約 予約 予約 予約

18052 -0xa1 予約 ini_sem ini_flg ini_dtq

18053 -0xa5 ini_pdq ini_mbx ini_mtx ini_mbf

18054 -0xa9 ini_mpf 予約 予約 予約

18055 -0xad 予約 予約 予約 予約

18056 -0xb1 ref_tsk ref_sem ref_flg ref_dtq

18057 -0xb5 ref_pdq ref_mbx ref_mtx ref_mbf

18058 -0xb9 ref_mpf ref_cyc ref_alm re f_isr

18059 -0xbd ref_spn 予約 予約 予約

18060 -0xc1 acre_tsk acre_sem acre_flg acre_dtq

18061 -0xc5 acre_pdq acre_mbx acre_mtx acre_mbf

18062 -0xc9 acre_mpf acre_cyc acre_alm a cre_isr

18063 -0xcd acre_spn 予約 予約 予約

18064 -0xd1 del_tsk del_sem del_flg del_dtq

18065 -0xd5 del_pdq del_mbx del_mtx del_mbf

18066 -0xd9 del_mpf del_cyc del_alm d el_isr

18067 -0xdd del_spn 予約 予約 予約

18068 -0xe1 sac_tsk sac_sem sac_flg sac_dtq

18069 -0xe5 sac_pdq 予約 sac_mtx sac_mbf

18070 -0xe9 sac_mpf sac_cyc sac_alm sac_ isr

18071 -0xed sac_spn 予約 予約 予約

18072 -0xf1 def_tex def_ovr def_inh def_exc

18073 -0xf5 def_svc 予約 予約 予約

18074 -0xf9 予約 予約 予約 予約

18075 -0xfd 予約 予約 予約 予約

18076 -0x101 mact_tsk imact_tsk mig_tsk 予約

18077 -0x105 msta_cyc 予約 msta_alm imsta_alm

18078 -0x109 mrot_rdq imrot_rdq get_pid iget_pid

18079 -0x10d 予約 予約 予約 予約

18080 -0x111 loc_spn iloc_spn try_spn itry_spn

18081 -0x115 unl_spn iunl_spn 予約 予約

18082 -0x119 予約 予約 予約 予約

18083 -0x11d 予約 予約 予約 予約

18084 --------------------------------------------------------

18085

18086 【μITRON4.0仕様との関係】

18087

18088 サービスコールの機能コードを割り当てなおした.

18089

18090 5.8 カーネルオブジェクトに対するアクセスの種別

18091

18092 ------------------------------------------------------------------------

18093 オブジェクトの種類 通常操作1 通常操作2 管理操作 参照操作

18094 ------------------------------------------------------------------------

18095 メモリオブジェクト 書込み 読出し det_mem ref_mem

18096 実行 sac_mem prb_mem

18097 ------------------------------------------------------------------------

18098 タスク act_tsk ter_tsk del_tsk get_pri

18099 mact_tsk chg_pri sac_tsk ref_tsk

18100 can_act rel_wai def_tex ref_tex

Page 363: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

363

18101 mig_tsk sus_tsk ref_ovr

18102 wup_tsk rsm_tsk

18103 can_wup dis_wai

18104 ena_wai

18105 ras_tex

18106 sta_ovr

18107 stp_ovr

18108 ------------------------------------------------------------------------

18109 セマフォ sig_sem wai_sem del_sem ref_sem

18110 pol_sem ini_sem

18111 twai_sem sac_sem

18112 ------------------------------------------------------------------------

18113 イベントフラグ set_flg wai_flg del_flg ref_flg

18114 clr_flg pol_flg ini_flg

18115 twai_flg sac_flg

18116 ------------------------------------------------------------------------

18117 データキュー snd_dtq rcv_dtq del_dtq ref_dtq

18118 psnd_dtq prcv_dtq ini_dtq

18119 tsnd_dtq trcv_dtq sac_dtq

18120 fsnd_dtq

18121 ------------------------------------------------------------------------

18122 優先度データキュー snd_pdq rcv_pdq del_pdq ref_pdq

18123 psnd_pdq prcv_pdq ini_pdq

18124 tsnd_pdq trcv_pdq sac_pdq

18125 ------------------------------------------------------------------------

18126 メッセージバッファ snd_mbf rcv_mbf del_mbf ref_mbf

18127 psnd_mbf prcv_mbf ini_mbf

18128 tsnd_mbf trcv_mbf sac_mbf

18129 ------------------------------------------------------------------------

18130 ミューテックス loc_mtx - del_mtx ref_mtx

18131 ploc_mtx ini_mtx

18132 tloc_mtx sac_mtx

18133 unl_mtx

18134 ------------------------------------------------------------------------

18135 スピンロック loc_spn - del_spn ref_spn

18136 try_spn sac_spn

18137 unl_spn

18138 ------------------------------------------------------------------------

18139 固定長メモリプール get_mpf rel_mpf del_mpf ref_mpf

18140 pget_mpf ini_mpf

18141 tget_mpf sac_mpf

18142 ------------------------------------------------------------------------

18143 周期ハンドラ sta_cyc stp_cyc del_cyc ref_cyc

18144 msta_cyc sac_cyc

18145 ------------------------------------------------------------------------

18146 アラームハンドラ sta_alm stp_alm del_alm ref_alm

18147 msta_alm sac_alm

18148 ------------------------------------------------------------------------

18149 割込みサービスルーチン - - del_isr ref_isr

18150 sac_isr

Page 364: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

364

18151 ------------------------------------------------------------------------

18152 システム状態 rot_rdq loc_cpu acre_yyy get_tim

18153 mrot_rdq unl_cpu att_mem get_ipm

18154 dis_dsp dis_int att_pma ref_sys

18155 ena_dsp ena_int cfg_int ref_int

18156 chg_ipm def_inh ref_cfg

18157 def_exc ref_ver

18158 def_svc

18159 def_ovr

18160 ------------------------------------------------------------------------

18161

18162 すべての保護ドメインから呼び出すことができるサービスコール:

18163

18164 ・自タスクへの操作(ext_tsk,get_inf,slp_tsk,tslp_tsk,dly_tsk,

18165 dis_tex,ena_tex)

18166 ・タスク例外状態参照(sns_tex)

18167 ・性能評価用システム時刻の参照(get_utm)

18168 ・システム状態参照(get_tid,get_did,get_pid,sns_ctx,sns_loc,

18169 sns_dsp,sns_dpn,sns_ker)

18170 ・CPU例外発生時の状態参照(xsns_dpn,xsns_xpn)

18171 ・拡張サービスコールの呼出し(cal_svc)

18172

18173 カーネルドメインのみから呼び出すことができるサービスコール:

18174

18175 ・システム状態のアクセス許可ベクタの設定(sac_sys)

18176 ・カーネルの終了(ext_ker)

18177 ・非タスクコンテキスト専用のサービスコール

18178

18179 アクセス許可ベクタによるアクセス保護を行わないサービスコール:

18180

18181 ・ミューテックスのロック解除(unl_mtx)

18182

18183 【補足説明】

18184

18185 xsns_dpnとxsns_xpnは,エラーコードを返さないために,すべての保護ドメイ

18186 ンから呼び出すことができるサービスコールとしているが,タスクコンテキス

18187 トから呼び出した場合には必ずtrueが返ることとしており,実質的にはカーネ

18188 ルドメインのみから呼び出すことができる.

18189

18190 【μITRON4.0/PX仕様との関係】

18191

18192 get_priは,μITRON4.0/PX仕様ではタスクに対する通常操作1としていたのを,

18193 タスクに対する参照操作に変更した.また,get_ipm(μITRON4.0/PX仕様では

18194 get_ixx)をシステム状態に対する通常操作2から参照操作に,sac_sysをシステ

18195 ム状態に対する管理操作からカーネルドメインのみから呼び出すことができる

18196 サービスコールに変更した.システム時刻に対するアクセス許可ベクタは廃止

18197 し,get_timはシステム状態に対する参照操作とした.

18198

18199 【仕様変更の経緯】

18200

Page 365: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

365

18201 この仕様のRelease 1.5以前では,unl_mtxは,アクセス許可ベクタによるアク

18202 セス保護を行わないサービスコールとしていた.これは,ミューテックスをロッ

18203 クしたタスク以外がunl_mtxを呼び出すとE_ILUSEエラーとなるため,実質的に

18204 は対象ミューテックスの通常操作1としてアクセス保護されているとみなすこと

18205 ができると考えたためである.しかし,タスクが拡張サービスコールの中で

18206 ミューテックスをロックした場合,アクセス許可ベクタではアクセスが許可さ

18207 れていないミューテックスをロックすることができる.このようなミューテッ

18208 クスのロック解除は,タスクから直接unl_mtxを呼んで行うのではなく,拡張サー

18209 ビスコールの中で行うべきと考えられる.そこで,unl_mtxを,対象ミューテッ

18210 クスの通常操作1としてアクセス保護する仕様に変更した.なお,HRP2カーネル

18211 Release 2.1以前のバージョンは,古い仕様に従って実装されている.

18212

18213 5.9 ターゲット定義事項一覧

18214

18215 ・割込み優先度の段階数[NGKI0256]

18216

18217 ・割込み番号の付与方法[NGKI0272]

18218

18219 ・割込みハンドラ番号の付与方法[NGKI0273]

18220

18221 ・割込み番号に対応しない割込みハンドラ番号や,割込みハンドラ番号に対応

18222 しない割込み番号を設けるか[NGKI0276]

18223

18224 ・受け付けた割込み要求に対して,割込みサービスルーチンも割込みハンドラ

18225 も登録していない場合の振舞い[NGKI0249]

18226

18227 ・割込み要求禁止フラグがサポートされているか[NGKI0260][NGKI0261]

18228

18229 ・割込み要求禁止フラグの振舞いを仕様と異なるものとするか[NGKI0261]

18230

18231 ・割込み要求ラインのトリガモードの設定がサポートされているか[NGKI0267]

18232

18233 ・割込み要求ラインをエッジトリガに設定する場合に,ポジティブエッジトリ

18234 ガかネガティブエッジトリガか両エッジトリガかを設定できるか[NGKI0265]

18235

18236 ・割込み要求ラインをレベルトリガに設定する場合に,ローレベルトリガかハ

18237 イレベルトリガかを設定できるか[NGKI0266]

18238

18239 ・あるプロセッサで割込み要求禁止フラグを動的にセット/クリアしても,他

18240 のプロセッサに対しては割込みがマスク/マスク解除されないものとするか

18241 〔M〕[NGKI0281]

18242

18243 ・TMIN_INTPRIを固定するか設定できるようにするかと,設定できるようにする

18244 場合の設定方法[NGKI0288]

18245

18246 ・NMI以外にカーネル管理外の割込みを設けるか(設けられるようにするか)

18247 [NGKI0289]

18248

18249 ・カーネル管理外の割込みハンドラが実行開始される時のシステム状態とコン

18250 テキスト,割込みハンドラの終了時に行われる処理,割込みハンドラの記述

Page 366: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

366

18251 方法[NGKI0292]

18252

18253 ・カーネル管理外の割込みの設定方法として,3つの方法のいずれを採用するか

18254 [NGKI0295]

18255

18256 ・カーネル管理外とされた割込みに対して,カーネルのAPIにより割込みハンド

18257 ラを登録できるかと,割込み要求ラインの属性を設定できるか[NGKI0297]

18258

18259 ・CPU例外ハンドラ番号の付与方法[NGKI0306]

18260

18261 ・発生したCPU例外に対して,CPU例外ハンドラを登録していない場合の振舞い

18262 [NGKI0314]

18263

18264 ・メモリオブジェクトの先頭番地とサイズに対する制約〔P〕[NGKI0070]

18265 [NGKI2774]

18266

18267 ・コンパイラが出力しないセクションの中で,どれを標準のセクションと扱う

18268 か〔P〕[NGKI0113]

18269

18270 ・保護ドメイン毎の標準セクションのセクション名を,標準のセクション名と

18271 保護ドメイン名を"_"でつないだものとする仕様を変更するか〔P〕[NGKI0116]

18272

18273 ・タスクのユーザスタック領域はそのタスク(とカーネルドメインに属する処

18274 理単位)のみがアクセスできるという仕様を変更するか〔P〕[NGKI0074]

18275

18276 ・メモリオブジェクトに対して,通常のメモリアクセスにより,許可されてい

18277 ない書込みアクセスまたは読出しアクセス(実行アクセスを含む)を行おう

18278 とした場合に,どのCPU例外ハンドラが起動されるか〔P〕[NGKI0411]

18279

18280 ・メモリオブジェクトに対して,サービスコールを通じて,許可されていない

18281 書込みアクセスまたは読出しアクセスを行おうとした場合に,サービスコー

18282 ルからE_MACVエラーが返るか,メモリアクセス違反ハンドラが起動されるか

18283 〔P〕[NGKI0413]

18284

18285 ・メモリアクセス違反ハンドラで,アクセス違反を発生させたアクセスに関す

18286 る情報(アクセスした番地,アクセスの種別,アクセスした命令の番地など)

18287 を参照する方法〔P〕[NGKI0414]

18288

18289 ・メモリオブジェクトの書込みアクセスと読出しアクセス(実行アクセスを含

18290 む)に対して設定できるアクセス許可パターンに対する制限〔P〕[NGKI0417]

18291

18292 ・1つの保護ドメインに登録できるメモリオブジェクトの数に対する制限〔P〕

18293 [NGKI0423]

18294

18295 ・ユーザスタック領域に対して実行アクセスを行えるか〔P〕[NGKI0440]

18296

18297 ・タスクのユーザスタック領域を,そのタスクが属する保護ドメイン全体から

18298 アクセスできるものとするか〔P〕[NGKI0441]

18299

18300 ・使用できるクラスのID番号とその属性〔M〕[NGKI0107]

Page 367: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

367

18301

18302 ・どのプロセッサをマスタプロセッサとするか〔M〕[NGKI0101]

18303

18304 ・ローカルタイマ方式とグローバルタイマ方式のどちらの方式を用いることが

18305 できるか〔M〕[NGKI0108]

18306

18307 ・グローバルタイマ方式の場合に,どのプロセッサをシステム時刻管理プロセッ

18308 サとするか〔M〕[NGKI0111]

18309

18310 ・int8_t,uint8_t,int64_t,uint64_t,int128_t,uint128_t,float32_t,

18311 double64_tが使用できるか[NGKI0488][NGKI0490]

18312

18313 ・ターゲット定義のタスク属性[NGKI1016]

18314

18315 ・タスクが用いるスタック領域のサイズの最小値[NGKI1042]

18316

18317 ・タスクのシステムスタック領域のサイズの最小値〔P〕[NGKI1044]

18318

18319 ・タスクが用いるスタック領域の先頭番地とサイズに対する制約[NGKI1050]

18320 [NGKI1056]

18321

18322 ・ユーザスタックのスタック領域(ユーザスタック領域)をアプリケーション

18323 で確保する方法〔P〕[NGKI1059]

18324

18325 ・タスクのシステムスタック領域の先頭番地とサイズに対する制約〔P〕

18326 [NGKI1062][NGKI1065][NGKI1070]

18327

18328 ・データキュー管理領域の先頭番地に対する制約[NGKI1687]

18329

18330 ・優先度データキュー管理領域の先頭番地に対する制約[NGKI1824]

18331

18332 ・メッセージバッファ管理領域の先頭番地とサイズに対する制約[NGKI3319]

18333 [NGKI3324]

18334

18335 ・生成できるスピンロックの数の上限〔M〕[NGKI2142]

18336

18337 ・スピンロックに対して,複数のプロセッサがロックの取得を待っている時に,

18338 どのプロセッサが最初にロックを取得できるか〔M〕[NGKI2183]

18339

18340 ・固定長メモリプール領域の先頭番地に対する制約[NGKI2249]

18341

18342 ・固定長メモリプール管理領域の先頭番地に対する制約[NGKI2256]

18343

18344 ・タイムティックの周期[NGKI2335]

18345

18346 ・マルチプロセッサ対応カーネルにおける性能評価用システム時刻の扱い〔M〕

18347 [NGKI2346]

18348

18349 ・get_utmがサポートされているか[NGKI2360]

18350

Page 368: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

368

18351 ・オーバランハンドラ機能がサポートされているか[NGKI2598]

18352

18353 ・オーバランハンドラ機能のプロセッサ時間に指定できる値の上限[NGKI2594]

18354

18355 ・ターゲット定義のメモリリージョン属性〔P〕

18356

18357 ・メモリリージョンの先頭番地とサイズに対する制約〔P〕[NGKI2768]

18358

18359 ・メモリオブジェクトに対するTA_NOWRITE属性,TA_NOREAD属性,TA_EXEC属性

18360 の内,どのような場合にどの属性の指定が無視されるか〔P〕[NGKI2782]

18361

18362 ・ショートデータ領域がサポートされておらず,TA_SDATA属性が無視されるか

18363 〔P〕[NGKI2789]

18364

18365 ・TA_NOWRITEを指定した場合に,TA_SDATAが無視されるか〔P〕[NGKI2790]

18366

18367 ・TA_UNCACHE属性やTA_IODEV属性を指定しても意味がなく,これらの属性が無

18368 視されるか〔P〕[NGKI2792]

18369

18370 ・キャッシュ禁止にできないメモリオブジェクトと周辺デバイスの領域として

18371 扱うことができないメモリオブジェクト〔P〕[NGKI2793]

18372

18373 ・ターゲット定義のメモリオブジェクト属性〔P〕[NGKI2794]

18374

18375 ・ATA_SECにより登録できるセクションが属する保護ドメインや登録できる数

18376 に対する制限〔P〕[NGKI2831]

18377

18378 ・ATT_MOD/ATA_MODがサポートされているか〔P〕[NGKI2859]

18379

18380 ・ATT_MOD/ATA_MODにより登録されるセクション毎のメモリオブジェクトに設

18381 定されるメモリオブジェクト属性〔P〕[NGKI2850]

18382

18383 ・クラスの囲みの中に記述されたATT_MOD/ATA_MODにおいて,クラスの標準メ

18384 モリリージョンが定義されている場合でも,共通の標準メモリリージョンに

18385 配置されるセクション〔PM〕[NGKI3271]

18386

18387 ・ATA_MODにより登録できるオブジェクトモジュールが属する保護ドメインや登

18388 録できる数に対する制限〔P〕[NGKI2857]

18389

18390 ・ATT_MEM/ATA_MEMにより登録できるメモリオブジェクトが属する保護ドメイ

18391 ンや登録できる数に対する制限〔P〕[NGKI2878]

18392

18393 ・ATT_MEM/ATA_MEM/att_memにより登録するメモリ領域の先頭番地とサイズに

18394 対する制約〔P〕[NGKI2880]

18395

18396 ・ATT_PMA/ATA_PMA/att_pmaがサポートされているか〔P〕[NGKI2903]

18397 [HRPS0156]

18398

18399 ・ATT_PMA/ATA_PMAにより登録できるメモリオブジェクトが属する保護ドメイ

18400 ンや登録できる数に対する制限〔P〕[NGKI2898]

Page 369: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

369

18401

18402 ・ATT_PMA/ATA_PMA/att_pmaにより登録するメモリ領域の先頭番地とサイズ,

18403 物理アドレス空間における先頭番地に対する制約〔P〕[NGKI2900]

18404

18405 ・ターゲット定義の割込み要求ライン属性[NGKI2945]

18406

18407 ・割込みハンドラ属性にTA_NONKERNELを指定できるか[NGKI2957]

18408

18409 ・その他のターゲット定義の割込みハンドラ属性[NGKI2959]

18410

18411 ・cfg_intにおいて,複数の割込み要求ラインの割込み優先度が連動して設定さ

18412 れるか〔D〕[NGKI2980]

18413

18414 ・CFG_INT/cfg_intで,カーネル管理外の割込み要求ラインに対しても属性を

18415 設定できるか[NGKI2982]

18416

18417 ・CFG_INT/cfg_intで,各割込み要求ラインに対して設定できる割込み要求ラ

18418 イン属性/割込み優先度に対する制限[NGKI2986]

18419

18420 ・割込みサービスルーチンが属することができるクラスに対する制限〔M〕

18421 [NGKI3018]

18422

18423 ・CRE_ISR/ATT_ISRにおいて,isrが不正である場合にE_PARエラーが検出され

18424 るか[NGKI3020]

18425

18426 ・DEF_INH/def_inhで,カーネル管理外の割込みに対しても割込みハンドラを

18427 定義できるか[NGKI3064]

18428

18429 ・カーネル管理外に固定されている割込みハンドラがあるか[NGKI3067]

18430

18431 ・カーネル管理に固定されている割込みハンドラがあるか[NGKI3068]

18432

18433 ・割込みハンドラが属することができるクラスに対する制限〔M〕[NGKI3074]

18434

18435 ・def_inhで,静的APIで定義された割込みハンドラの定義を解除できるか〔D〕

18436 [NGKI3077]

18437

18438 ・DEF_INH/def_inhで割込みハンドラを定義(または定義解除)できない割込

18439 みハンドラ番号[NGKI3078]

18440

18441 ・def_inhを呼び出したタスクが割り付けられているプロセッサから定義(また

18442 は定義解除)できない割込みハンドラ〔M〕[NGKI3079]

18443

18444 ・DEF_INHにおいて,inthdrが不正である場合にE_PARエラーが検出されるか

18445 [NGKI3080]

18446

18447 ・dis_intがサポートされているか[NGKI3091]

18448

18449 ・dis_intにより,どのような場合に割込み要求ラインの割込み要求禁止フラグ

18450 をセットできないか[NGKI3087]

Page 370: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

370

18451

18452 ・dis_intにおいて,割込み要求禁止フラグの振舞いが,この仕様の規定と異な

18453 るか[NGKI3089]

18454

18455 ・ena_intがサポートされているか[NGKI3104]

18456

18457 ・ena_intにより,どのような場合に割込み要求ラインの割込み要求禁止フラグ

18458 をクリアできないか[NGKI3100]

18459

18460 ・ena_intにおいて,割込み要求禁止フラグの振舞いが,この仕様の規定と異な

18461 るか[NGKI3102]

18462

18463 ・chg_ipmにより,割込み優先度マスクをTMIN_INTPRIよりも小さい値に変更で

18464 きるか[NGKI3114]

18465

18466 ・ターゲット定義のCPU例外ハンドラ属性[NGKI3123]

18467

18468 ・def_excで,静的APIで定義されたCPU例外ハンドラの定義を解除できるか〔D〕

18469 [NGKI3148]

18470

18471 ・DEF_EXCにおいて,exchdrが不正である場合にE_PARエラーが検出されるか

18472 [NGKI3149]

18473

18474 ・非タスクコンテキスト用スタック領域のサイズの最小値[NGKI3254]

18475

18476 ・非タスクコンテキスト用スタック領域の先頭番地とサイズに対する制約

18477 [NGKI3220][NGKI3222]

18478

18479 ・DEF_ICSにより非タスクコンテキスト用スタック領域を設定しない場合の,非

18480 タスクコンテキスト用スタック領域のデフォルトのサイズ[NGKI3224]

18481

18482 ・共有スタック領域のサイズの最小値[NGKI3255]

18483

18484 ・共有スタック領域の先頭番地とサイズに対する制約[NGKI3234][NGKI3236]

18485

18486 ・ATT_INIにおいて,inirtnが不正である場合にE_PARエラーが検出されるか

18487 [NGKI3246]

18488

18489 ・ATT_TERにおいて,terrtnが不正である場合にE_PARエラーが検出されるか

18490 [NGKI3253]

18491

18492 5.10 省略名の元になった英語

18493

18494 5.10.1 サービスコールと静的APIの名称の中のxxxの元になった英語

18495

18496 xxx 元になった英語

18497 ----------------------

18498 act activate

18499 aid automatically assigned ID

18500 ata attach with access control vector

Page 371: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

371

18501 att attach

18502 cal call

18503 can cancel

18504 cfg configure

18505 chg change

18506 clr clear

18507 cre create

18508 def define

18509 del delete

18510 det detach

18511 dis disable

18512 dly delay

18513 ena enable

18514 epr execution priority

18515 ext exit

18516 get get

18517 ini initialize

18518 lnk link

18519 loc lock

18520 mig migrate

18521 pol poll

18522 prb probe

18523 ras raise

18524 rcv receive

18525 ref reference

18526 rel release

18527 rot rotate

18528 rsm resume

18529 sac set access control vector

18530 set set

18531 sig signal

18532 slp sleep

18533 snd send

18534 sns sense

18535 sta start

18536 stp stop

18537 sus suspend

18538 ter terminate

18539 try try

18540 unl unlock

18541 wai wait

18542 wup wake up

18543

18544 5.10.2 サービスコールと静的APIの名称の中のyyyの元になった英語

18545

18546 yyy 元になった英語

18547 ----------------------

18548 act activation

18549 alm alarm handler

18550 cfg configuration

Page 372: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

372

18551 cpu CPU

18552 ctx context

18553 cyc cyclic handler

18554 did domain ID

18555 dpn dispatch pending

18556 dsp dispatch

18557 dtq data queue

18558 exc exception

18559 flg eventflag

18560 ics interrupt context stack

18561 inf information

18562 inh interrupt handler

18563 ini initilization

18564 int interrupt

18565 ipm interrupt priority mask

18566 isr interrupt service routine

18567 ker kernel

18568 loc lock

18569 mbf message buffer

18570 mbx mailbox

18571 mpf fixed -sized memory pool

18572 mem memory

18573 mod module

18574 mtx mutex

18575 ovr overrun handler

18576 pdq priority data queue

18577 pid processor ID

18578 pma physical memory area

18579 pri priority

18580 rdq ready queue

18581 reg region

18582 sec section

18583 sem semaphore

18584 srg standard memory region

18585 spn spin lock

18586 stk stack

18587 sys system

18588 svc service call

18589 ter termination

18590 tex task exception

18591 tid task ID

18592 tim time

18593 tsk task

18594 utm time in micro second

18595 ver version

18596 wai wait

18597 wup wake up

18598 xpn exception pending

18599

18600 5.10.3 サービスコールの名称の中のzの元になった英語

Page 373: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

TOPPERS 新世代カーネル統合仕様書

Release 1.6.0

373

18601

18602 z 元になった英語

18603 ----------------------

18604 a automatic ID assignment

18605 f force

18606 i interrupt

18607 m multiprocessor

18608 p poll

18609 t timeout

18610 x exception

18611

18612 5.11 バージョン履歴

18613

18614 2008年11月19日 Release 1.0.0 最初のリリース

18615 2009年5月8日 Release 1.1.0 FMPカーネルに関する記述が完成

18616 2010年5月10日 Release 1.2.0

18617 2011年5月5日 Release 1.3.0 HRP2カーネルに関する記述が完成

18618 2012年5月16日 Release 1.4.0 SSPカーネルに関する記述が完成

18619 2012年12月19日 Release 1.5.0 HRP2カーネルの仕様変更を反映

18620 2014年1月16日 Release 1.6.0

18621

18622 以上

Page 374: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

図2-1. 想定するソフトウェア構成

アプリケーションプログラム

システムサービス

カーネル

システムインタフェースレイヤ

プロセッサ, メモリ, タイマ 周辺デバイス

アプリケーションシステム

Page 375: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

図2-2. タスクの状態遷移

待ち解除

プリエンプト

ディスパッチ

強制待ち

待ち解除

待ち

生成 削除

終了

強制終了

強制終了

起動

再開

強制待ち 強制待ち

再開

実行できる状態

広義の待ち状態

起動された状態

実行状態 RUNNING

実行可能状態 READY

待ち状態 WAITING

二重待ち状態 WAITING-

SUSPENDED

強制待ち状態 SUSPENDED

休止状態 DORMANT

未登録状態 NON-EXISTENT

Page 376: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

図2-3. 過渡的な状態も含めたタスクの状態遷移

強制待ち

待ち解除

再開

生成 削除

待ち解除

プリエンプト

ディスパッチ

待ち

終了

強制終了

強制終了

起動

再開

強制待ち強制待ち

ディスパッチ保留

ディスパッチ 保留解除

ディスパッチ 保留解除

強制待ち 再開

実行状態 (ディスパッチ保留状態)

強制待ち状態 [実行継続中]

実行状態 RUNNING

実行可能状態 READY

待ち状態 WAITING

二重待ち状態 WAITING-

SUSPENDED

強制待ち状態 SUSPENDED

休止状態 DORMANT

未登録状態 NON-EXISTENT

Page 377: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

図2-4. TOPPERS標準割込み処理モデルの概念図

プロセッサ およびIRC

周辺デバイス割込み要求

割込み要求ライン

周辺デバイス割込み要求

……

(intno)割込み番号

割込み受付け

……

(inhno)割込みハンドラ番号

割込みサービス ルーチンID (isrid)

マルチプロセッサ対応 カーネルにおいて

プロセッサ毎に持つ範囲

割込みサービスルーチン (ISR)

割込み ハンドラ

割込み ハンドラ

割込み ハンドラ

割込みサービスルーチン (ISR)

全割込みロック フラグ

CPUロック フラグ

割込み優先度 マスク (IPM)

割込み 優先度比較

割込み 優先度比較

割込み 優先度比較

割込み 優先度設定

割込み 優先度設定

割込み 優先度設定

割込み要求 禁止フラグ

割込み要求 禁止フラグ

割込み要求 禁止フラグ

エッジ/ レベル変換

エッジ/ レベル変換

エッジ/ レベル変換

割込み選択

Page 378: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

図2-5. マルチプロセッサ対応カーネルにおける割込み番号と割込みハンドラ番号

割込み要求ライン

(intno)

割込み番号

(inhno)

割込みハンドラ番号

プロセッサ1 プロセッサ2 プロセッサn

ローカルIRC ローカルIRC ローカルIRC

0x0

1…

01

0x0

1…

02

0x0

1…

03

0x0

1…

04

0x0

2…

01

0x0

2…

02

0x0

2…

03

0x0

2…

04

0x0n…

01

0x0n…

02

0x0n…

03

0x0n…

04

0x0

1…

01

0x0

1…

02

0x0

2…

01

0x0

2…

02

0x0n…

01

0x0n…

02

0x0

0…

03

0x0

0…

04

グローバルIRC

Page 379: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

図2-6. マルチプロセッサ対応カーネルにおけるシステム初期化の流れ

スタートアップ モジュール

マスタプロセッサ スレーブプロセッサ

同期

同期

同期

同期

カーネルの動作開始 カーネルの動作開始

カーネル動作状態に 遷移

カーネル動作状態に 遷移

ローカル初期化 ルーチンの実行

ローカル初期化 ルーチンの実行

グローバル初期化 ルーチンの実行

カーネル自身の初期化と 静的APIの処理

カーネル自身の初期化と 静的APIの処理

カーネルの 初期化処理へ分岐

カーネルの 初期化処理へ分岐

共有リソースの 初期化処理

プロセッサ毎の 初期化処理

プロセッサ毎の 初期化処理

スタートアップ モジュールの実行開始

スタートアップ モジュールの実行開始

Page 380: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

図2-7. マルチプロセッサ対応カーネルにおけるシステム終了処理の流れ

マスタプロセッサ スレーブプロセッサカーネルを終了させる

サービスコールを 呼び出すプロセッサ

同期

同期

同期

ターゲットシステム 依存の終了処理

ターゲットシステム 依存の終了処理

ターゲットシステム 依存の終了処理

グローバル終了処理 ルーチンの実行

ローカル終了処理 ルーチンの実行

ローカル終了処理 ルーチンの実行

ローカル終了処理 ルーチンの実行

カーネル非動作状態に 遷移

カーネル非動作状態に 遷移

カーネルの 終了処理の開始

カーネルの 終了処理の開始

他のプロセッサに カーネルの終了を要求

カーネル非動作状態に 遷移

カーネルを終了させる サービスコールの呼出し

Page 381: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

図2-8. コンフィギュレータの処理モデル

system.cfg

システムコンフィギュレーションファイル

kernel_cfg.c

カーネル 構成・初期化ファイル

※ ファイル名中の斜体の部分は例である.

cfg1_out.c

パラメータ計算用 C言語ファイル

cfg1_out.srec

パラメータ計算 結果ファイル

system.srec

ロードモジュール

その他のソースファイル, オブジェクトファイル

エラーメッセージ

kernel_cfg.h

カーネル構成・初期化 ヘッダファイル

system.syms

シンボルファイル

cfg1_out.syms

シンボルファイル

コンフィギュレータ (パス1)

コンフィギュレータ (パス2)

コンフィギュレータ (パス3)

Cコンパイラ (+関連ツール)

Cコンパイラ (+関連ツール)

Page 382: TOPPERS新世代カーネル統合仕様書 Release 1.6.0 1 ...TOPPERS新世代カーネル統合仕様書 Release 1.6.0 3 101 2.5.9 カーネル管理外の状態 102 2.5.10 処理単位の開始・終了とシステム状態

図2-9. 保護機能対応カーネルにおけるコンフィギュレータの処理モデル

※ ファイル名中の斜体の部分は例である.

仮のリンカ スクリプト

cfg2_out.ld

仮のリンカ スクリプト

kernel_mem2.c

kernel_mem3.c

仮のメモリ構成・ 初期化ファイル

仮のメモリ構成・ 初期化ファイル

kernel_cfg.c

カーネル 構成・初期化ファイル

kernel_cfg.h

カーネル構成・初期化 ヘッダファイル

cfg2_out.syms

コンフィギュレータ (パス2)

コンフィギュレータ (パス3)

コンフィギュレータ (パス4)

cfg1_out.syms

シンボルファイル

cfg1_out.srec

パラメータ計算 結果ファイル

Cコンパイラ (+関連ツール)

cfg2_out.srec

Cコンパイラ (+関連ツール)

その他のソースファイル, オブジェクトファイル

ldscript.ld

リンカスクリプト

kernel_mem.c

メモリ構成・ 初期化ファイル

Cコンパイラ (+関連ツール)

system.srec

その他のソースファイル, オブジェクトファイル

system.syms

cfg3_out.symscfg3_out.srec

シンボルファイルロードモジュール

仮のシンボルファイル仮のロードモジュール

仮のシンボルファイル仮のロードモジュール

その他のソースファイル, オブジェクトファイル

cfg3_out.ld

オプション