文書番号：ATK2-0010
文書名：ATK2 外部仕様書

ATK2 外部仕様書
Ver.1.2.2
2017/03/24

文書番号：ATK2-0010
文書名：ATK2 外部仕様書

Copyright (C) 2011-2017 by Center for Embedded Computing Systems
Graduate School of Information Science, Nagoya Univ., JAPANCopyright (C) 2014-2016 by AISIN COMCRUISE Co., Ltd., JAPANCopyright (C) 2014-2016 by eSOL Co.,Ltd., JAPANCopyright (C) 2011-2017 by FUJI SOFT INCORPORATED, JAPANCopyright (C) 2011-2017 by NEC Communication Systems, Ltd., JAPANCopyright (C) 2011-2016 by Panasonic Advanced Technology Development Co., Ltd., JAPANCopyright (C) 2011-2014 by Renesas Electronics Corporation, JAPANCopyright (C) 2014-2017 by SCSK Corporation, JAPANCopyright (C) 2011-2013 by Spansion LLC, USA
Copyright (C) 2011-2016 by Sunny Giken Inc., JAPANCopyright (C) 2011-2017 by TOSHIBA CORPORATION, JAPANCopyright (C) 2011-2017 by Witz Corporation
Copyright (C) 2015-2017 by SUZUKI MOTOR CORPORATION

上記著作権者は，以下の (1)～(3)の条件を満たす場合に限り，本ドキュメント(本ドキュメントを改変したものを含む．以下同じ)を使用・複製・改変・再配布(以下，利用と呼ぶ)することを無償で許諾する．
(1)

本ドキュメントを利用する場合には，上記の著作権表示，この利用条件および下記の無保証規定が，そのままの形でドキュメント中に含まれていること．

(2)

本ドキュメントを改変する場合には，ドキュメントを改変した旨の記述を，改変後のドキュメント中に含めること．ただし，改変後のドキュメントが，TOPPERS プロジェクト指定の開発成果物である場合には，この限りではない．

(3)

本ドキュメントの利用により直接的または間接的に生じるいかなる損害からも，上記著作権者およびTOPPERS プロジェクトを免責すること．また，本ドキュメントのユーザまたはエンドユーザからのいかなる理由に基づく請求からも，上記著作権者および TOPPERS プロジェクトを免責すること．

本ドキュメントは，AUTOSAR（AUTomotive Open System ARchitecture）仕様に基づいている．上記の許諾は，
AUTOSAR の知的財産権を許諾するものではない．AUTOSAR は，AUTOSAR 仕様に基づいたソフトウェアを商用目的で利用する者に対して，AUTOSAR パートナーになることを求めている．

本ドキュメントは，無保証で提供されているものである．上記著作権者および TOPPERS プロジェクトは，本ドキュメントに関して，特定の使用目的に対する適合性も含めて，いかなる保証も行わない．また，本ドキュメン
トの利用により直接的または間接的に生じたいかなる損害に関しても，その責任を負わない．

i文書番号：ATK2-0010
文書名：ATK2 外部仕様書＜目次＞
1. 概要 .................................................................................................................................................. 1
1.1

本文書の目的........................................................................................................................... 1

1.2

関連文書.................................................................................................................................. 1

1.2.1

ベースとした文書............................................................................................................. 1

1.2.2

参考文書........................................................................................................................... 1

1.3

凡例......................................................................................................................................... 21.4

本仕様書に対応する ATK2 一覧 .............................................................................................. 3

2. 概念 .................................................................................................................................................. 42.1

機能一覧.................................................................................................................................. 42.2

主要概念.................................................................................................................................. 6

2.2.1

処理単位........................................................................................................................... 6

2.2.2

プロセッサコア ................................................................................................................ 7

2.2.3

メモリリージョン............................................................................................................. 8

2.2.4

処理レベル ....................................................................................................................... 9

2.2.5

優先度 ............................................................................................................................ 10

2.2.6

スタック......................................................................................................................... 11

2.3

OS 機能のクラス分け ............................................................................................................ 13

2.3.1

スケーラビリティクラス ................................................................................................ 14

2.3.2

コンフォーマンスクラス ................................................................................................ 17

2.4

マルチコア対応 OS ............................................................................................................... 20

2.4.1

対象とするマルチコアシステムのハードウェア ............................................................. 20

2.4.2

OS オブジェクト ............................................................................................................ 21

2.4.3

コア ID........................................................................................................................... 22

2.4.4

シングルコア OS 機能のマルチコア拡張 ........................................................................ 23

2.4.5

マルチコア追加機能 ....................................................................................................... 24

2.4.6

想定する実装方式........................................................................................................... 25

2.5

タスク ................................................................................................................................... 27

2.5.1

タスク状態 ..................................................................................................................... 27

2.5.2

タスクの種別.................................................................................................................. 28

2.5.3

タスクの状態遷移........................................................................................................... 29

2.5.4

タスクの操作.................................................................................................................. 31

2.5.5

タスクの実装方法........................................................................................................... 32

2.5.6

タスク優先度.................................................................................................................. 33

2.5.7

スケジューラ.................................................................................................................. 34

ii

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.5.8

スケジューリングポリシ ................................................................................................ 35

2.5.9

グループタスク .............................................................................................................. 39

2.5.10

マルチコア対応 OS におけるスケジューリング ............................................................. 40

2.5.11

スタック共有.................................................................................................................. 40

2.6

アプリケーションモード ....................................................................................................... 41

2.6.1

アプリケーションモードによる OS 起動処理の制御 ...................................................... 41

2.6.2

自動起動が可能な OS オブジェクト ............................................................................... 41

2.6.3

指定されたアプリケーションモードの取得 .................................................................... 41

2.6.4

自動起動オブジェクトの指定 ......................................................................................... 42

2.6.5

マルチコア対応 OS におけるアプリケーションモード ................................................... 42

2.7

割込み処理 ............................................................................................................................ 43

2.7.1

ISR の種別 ..................................................................................................................... 43

2.7.2

再スケジューリングタイミング ..................................................................................... 44

2.7.3

割込み管理の実装方法.................................................................................................... 45

2.7.4

割込み優先度.................................................................................................................. 46

2.7.5

実行中の ISRID の取得 .................................................................................................. 47

2.7.6

割込み禁止・許可状態の操作 ......................................................................................... 47

2.7.7

スタック共有.................................................................................................................. 48

2.8

イベント................................................................................................................................ 49

2.8.1

イベントとタスクの関係 ................................................................................................ 49

2.8.2

イベントの操作 .............................................................................................................. 50

2.8.3

イベントの動作例........................................................................................................... 51

2.8.4

イベントマスク値の設定 ................................................................................................ 52

2.9

リソース................................................................................................................................ 53

2.9.1

リソースの種別 .............................................................................................................. 53

2.9.2

優先度上限プロトコルと上限優先度 .............................................................................. 54

2.9.3

リソースの操作 .............................................................................................................. 55

2.9.4

優先度上限プロトコルの C2ISR 処理レベルへの拡張 .................................................... 57

2.9.5

内部リソースとグループタスクとの関係 ....................................................................... 60

2.9.6

スケジューラリソース.................................................................................................... 60

2.9.7

マルチコア対応 OS におけるリソース ........................................................................... 60

2.10

カウンタ ............................................................................................................................ 61

2.10.1

ティック......................................................................................................................... 61

2.10.2

カウンタの種別 .............................................................................................................. 61

2.10.3

カウンタの属性 .............................................................................................................. 62

2.10.4

カウンタの設定 .............................................................................................................. 62

2.10.5

カウンタの満了処理 ....................................................................................................... 62

iii

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.10.6

カウンタの操作 .............................................................................................................. 63

2.10.7

ハードウェアカウンタ.................................................................................................... 63

2.11

ソフトウェアフリーランタイマ ......................................................................................... 67

2.12

アラーム ............................................................................................................................ 68

2.12.1

アラームの満了タイミング ............................................................................................ 68

2.12.2

アラーム満了時に実行させるアクション ....................................................................... 68

2.12.3

アラームの操作 .............................................................................................................. 70

2.12.4

アラームコールバック.................................................................................................... 70

2.12.5

アラームの設定 .............................................................................................................. 71

2.13

スケジュールテーブル ....................................................................................................... 72

2.13.1

スケジュールテーブルの構成要素 .................................................................................. 72

2.13.2

スケジュールテーブルを制御するカウンタ .................................................................... 74

2.13.3

スケジュールテーブルの種別 ......................................................................................... 74

2.13.4

スケジュールテーブルの状態 ......................................................................................... 75

2.13.5

スケジュールテーブルの状態遷移 .................................................................................. 76

2.13.6

スケジュールテーブルの操作 ......................................................................................... 79

2.13.7

スケジュールテーブルの同期 ......................................................................................... 82

2.13.8

スケジュールテーブルの設定 ......................................................................................... 87

2.14

フックルーチン.................................................................................................................. 88

2.14.1

フックルーチンの種別.................................................................................................... 88

2.14.2

フックルーチンの処理レベル ......................................................................................... 92

2.14.3

フックルーチンで行う処理 ............................................................................................ 92

2.14.4

フックルーチンの指定.................................................................................................... 92

2.15

エラー処理......................................................................................................................... 93

2.15.1

エラー種別 ..................................................................................................................... 93

2.15.2

エラーコード種別........................................................................................................... 94

2.15.3

システムサービスにおけるエラーチェック .................................................................... 94

2.15.4

エラーフック.................................................................................................................. 95

2.16

スタックモニタリング ....................................................................................................... 98

2.16.1

スタックオーバーフローの検出方法 .............................................................................. 98

2.16.2

スタックモニタリングの動作タイミング ..................................................................... 100

2.16.3

スタックオーバーフロー時の動作 ................................................................................ 102

2.16.4

スタックモニタリングの指定 ....................................................................................... 102

2.17

タイミング保護................................................................................................................ 103

2.17.1

監視対象となる処理単位 .............................................................................................. 103

2.17.2

監視対象となる時間 ..................................................................................................... 103

2.17.3

タスクに対するタイミング保護機能 ............................................................................ 109iv

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.17.4C2ISR に対するタイミング保護機能 ........................................................................... 113

2.17.5タイミング保護違反時処理 .......................................................................................... 115

2.18

OS アプリケーション(OSAP).............................................................................................. 116

2.18.1

OSAP の概要 ............................................................................................................... 116

2.18.2

OSAP の種別 ............................................................................................................... 116

2.18.3

OSAP の構成 ............................................................................................................... 117

2.18.4OSAP の指定 ............................................................................................................... 117

2.18.5OSAP の状態 ............................................................................................................... 117

2.18.6OSAP の操作 ............................................................................................................... 120

2.18.7OSAP に所属する OS オブジェクトの保護 .................................................................. 121

2.18.8信頼関数....................................................................................................................... 123

2.18.9

マルチコア対応 OS における OSAP............................................................................. 129

2.18.10 システムサービスの呼出し方法 ................................................................................... 130
2.19

メモリ保護....................................................................................................................... 131

2.19.1

保護対象の OSAP ........................................................................................................ 131

2.19.2

メモリ領域に対する保護の概要 ................................................................................... 131

2.19.3

保護違反時の動作......................................................................................................... 137

2.19.4

メモリ保護の設定における前提 ................................................................................... 138

2.19.5

メモリ保護の設定方法.................................................................................................. 140

2.20

サービス保護 ................................................................................................................... 142

2.20.1

処理単位の不正な処理に対する保護 ............................................................................ 143

2.20.2

システムサービスでの不正な処理への保護 .................................................................. 146

2.20.3異なる OSAP からのアクセス保護 ............................................................................... 148

2.21

CPU 例外発生に対する処理 ................................................................................................ 149

2.22

保護違反時処理................................................................................................................ 150

2.22.1

保護違反時処理が動作する処理レベル ......................................................................... 150

2.22.2

プロテクションフック.................................................................................................. 150

2.22.3

保護違反に対して OS が提供する機能 ......................................................................... 151

2.22.4

強制終了処理................................................................................................................ 155

2.23

ネストして呼び出された処理単位の振る舞い .................................................................. 157

2.23.1

使用可能なシステムサービス ....................................................................................... 157

2.23.2

実行中のタスクおよび C2ISR ...................................................................................... 157

2.23.3

OSAPID の取得 ........................................................................................................... 159

2.23.4

OS オブジェクトのアクセス保護 ................................................................................. 159

2.23.5

メモリ保護 ................................................................................................................... 160

2.24
2.24.1システムの初期化と終了 ................................................................................................. 161
システムの初期化手順.................................................................................................. 161v

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.24.2

オブジェクトの自動起動 .............................................................................................. 162

2.24.3システムの終了手順 ..................................................................................................... 162

2.24.4

マルチコアシステムの初期化と終了 ............................................................................ 163

2.25

IOC(Inter-OS-Application Communicator)........................................................................ 167

2.25.1

IOC の構成................................................................................................................... 167

2.25.2IOC の種別................................................................................................................... 168

2.25.3IOC の操作................................................................................................................... 170

2.25.4

通信データ ................................................................................................................... 171

2.25.5IOC 用システムサービスに対するサービス保護 .......................................................... 172

2.25.6

IOC 用システムサービスに対するメモリ保護 .............................................................. 173

2.25.7

IOC 用システムサービスに対するアドレスチェック ................................................... 173

2.25.8IOC 用システムサービスに対するアドレスチェック ................................................... 173

2.25.9IOC 用システムサービスの呼出し方法 ........................................................................ 173

2.26

スピンロック ................................................................................................................... 175

2.26.1

スピンロックの種別 ..................................................................................................... 175

2.26.2

スピンロックの操作 ..................................................................................................... 175

2.27

コア間割込み ................................................................................................................... 179

2.27.1ICISR の起動 ............................................................................................................... 179

2.27.2ICISR の生成 ............................................................................................................... 179

2.27.3ICISR の機能 ............................................................................................................... 179

2.28

ミューテックス管理(参考仕様) ........................................................................................ 181

2.28.1

優先度上限プロトコルと上限優先度 ............................................................................ 181

2.28.2

ミューテックスの操作.................................................................................................. 181

2.28.3

ミューテックスの生成.................................................................................................. 182

2.29

コンフィギュレーション方法 .......................................................................................... 183

2.29.1

コンフィギュレーションファイルの記述 ..................................................................... 183

2.29.2

コンフィギュレーション処理 ....................................................................................... 184

2.29.3コンフィギュレーション情報の出力 ............................................................................ 184

2.29.4

OS オブジェクトのアクセス方法 ................................................................................. 185

2.30

ファイル構成 ................................................................................................................... 186

2.30.1

OS ヘッダファイル ...................................................................................................... 186

2.30.2

ファイルの互換性チェック .......................................................................................... 186

2.30.3

デバッグサポート......................................................................................................... 187

2.31

ポートインターフェイス ................................................................................................. 188

2.32

時間パーティショニング ................................................................................................. 189

2.32.1

システム周期とタイムウィンドウ ................................................................................ 190

2.32.2

スケジューラの拡張 ..................................................................................................... 191

vi

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.32.3

スケジューリングポリシへの影響 ................................................................................ 192

2.32.4

グループタスクへの影響 .............................................................................................. 192

2.32.5

スタック共有への影響.................................................................................................. 192

2.32.6

割込み処理への影響 ..................................................................................................... 193

2.32.7

リソースへの影響......................................................................................................... 194

2.32.8

アラームへの影響......................................................................................................... 196

2.32.9フックルーチンへの影響 .............................................................................................. 196

2.32.10 OSAP への影響 ............................................................................................................ 196
2.32.11 保護違反時処理への影響 .............................................................................................. 197
2.32.12 システムの初期化と終了への影響 ................................................................................ 197
2.32.13 OSAP の強制終了処理への影響 ................................................................................... 198
3. API 仕様 ........................................................................................................................................ 199
3.1

API の実装ルール ............................................................................................................... 199

3.2

各処理単位が使用できるシステムサービス ......................................................................... 199

3.3

API 仕様記載凡例 ............................................................................................................... 203

3.4

データ型.............................................................................................................................. 205

3.4.1

StatusType .................................................................................................................. 205

3.4.2

AppModeType ............................................................................................................. 206

3.4.3

OSServiceIdType ......................................................................................................... 206

3.4.4

TaskType ..................................................................................................................... 206

3.4.5

TaskRefType................................................................................................................ 207

3.4.6

TaskStateType ............................................................................................................ 207

3.4.7

TaskStateRefType ....................................................................................................... 207

3.4.8

ISRType ....................................................................................................................... 207

3.4.9

EventMaskType .......................................................................................................... 207

3.4.10

EventMaskRefType ..................................................................................................... 207

3.4.11

ResourceType .............................................................................................................. 207

3.4.12

CounterType................................................................................................................ 207

3.4.13

TickType ...................................................................................................................... 207

3.4.14

TickRefType ................................................................................................................ 208

3.4.15

AlarmType................................................................................................................... 208

3.4.16

AlarmBaseType ........................................................................................................... 208

3.4.17

AlarmBaseRefType ..................................................................................................... 208

3.4.18

ScheduleTableType ..................................................................................................... 208

3.4.19

ScheduleTableStatusType ........................................................................................... 208

3.4.20

ScheduleTableStatusRefType ..................................................................................... 208

3.4.21

PhysicalTimeType ....................................................................................................... 209

vii

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.4.22

ApplicationType .......................................................................................................... 209

3.4.23

ApplicationStateType.................................................................................................. 209

3.4.24

ApplicationStateRefType ............................................................................................ 209

3.4.25

TrustedFunctionIndexType......................................................................................... 209

3.4.26

TrustedFunctionParameterRefType ........................................................................... 209

3.4.27

AccessType .................................................................................................................. 209

3.4.28

ObjectAccessType ........................................................................................................ 209

3.4.29

ObjectTypeType........................................................................................................... 210

3.4.30

MemoryStartAddressType .......................................................................................... 210

3.4.31

MemorySizeType ......................................................................................................... 210

3.4.32

RestartType ................................................................................................................. 210

3.4.33

ProtectionReturnType ................................................................................................. 210

3.4.34

Std_ReturnType .......................................................................................................... 210

3.4.35

IocType ........................................................................................................................ 211

3.4.36

SenderIdType .............................................................................................................. 211

3.4.37CoreIdType .................................................................................................................. 211

3.4.38SpinlockIdType ........................................................................................................... 211

3.4.39

TryToGetSpinlockType ................................................................................................ 211

3.4.40

MutexType .................................................................................................................. 211

3.4.41

StackType .................................................................................................................... 211

3.4.42

TimeType..................................................................................................................... 211

3.4.43

FaultyContextType ..................................................................................................... 212

3.5

マクロ ................................................................................................................................. 213

3.5.1

メモリアクセス ............................................................................................................ 213

3.5.2

システムサービス呼出し .............................................................................................. 213

3.5.3

システムサービス ID 取得............................................................................................ 214

3.5.4

システムサービスパラメータ取得 ................................................................................ 214

3.6

定数..................................................................................................................................... 229

3.6.1

タスク状態 ................................................................................................................... 229

3.6.2

ID ................................................................................................................................ 229

3.6.3

アラーム設定................................................................................................................ 230

3.6.4

スケジュールテーブル状態 .......................................................................................... 231

3.6.5

OSAP 状態 ................................................................................................................... 231

3.6.6

アクセス情報................................................................................................................ 232

3.6.7

オブジェクト情報......................................................................................................... 232

3.6.8

リスタート情報 ............................................................................................................ 233

3.6.9

サービス ID.................................................................................................................. 234

viii

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.6.10

プロテクションフックの返り値 ................................................................................... 243

3.6.11

処理単位情報................................................................................................................ 244

3.6.12

無効値 .......................................................................................................................... 244

3.7

宣言記述.............................................................................................................................. 245

3.7.1

DeclareTask ................................................................................................................ 245

3.7.2

DeclareEvent............................................................................................................... 245

3.7.3

DeclareResource.......................................................................................................... 245

3.7.4

DeclareAlarm .............................................................................................................. 246

3.8

オブジェクトコンテナ......................................................................................................... 247

3.8.1

Os ................................................................................................................................ 248

3.8.2

OsOS ........................................................................................................................... 249

3.8.3

OsHooks ...................................................................................................................... 252

3.8.4

OsHookStack............................................................................................................... 255

3.8.5

OsOsStack ................................................................................................................... 256

3.8.6

OsTimingProtection .................................................................................................... 259

3.8.7

OsSystemCycle............................................................................................................ 260

3.8.8

OsSystemCycleTimeWindow ...................................................................................... 261

3.8.9

OsAppMode ................................................................................................................. 263

3.8.10

OsTask......................................................................................................................... 263

3.8.11OsTaskAutostart ......................................................................................................... 271

3.8.12

OsTaskTimingProtection ............................................................................................ 272

3.8.13

OsIsr ............................................................................................................................ 275

3.8.14

OsIsrTimingProtection ............................................................................................... 280

3.8.15OsEvent....................................................................................................................... 281

3.8.16

OsResource.................................................................................................................. 282

3.8.17

OsResourceTimingProtection ..................................................................................... 284

3.8.18OsCounter ................................................................................................................... 286

3.8.19OsDriver ...................................................................................................................... 289

3.8.20

OsTimeConstant ......................................................................................................... 289

3.8.21OsAlarm ...................................................................................................................... 289

3.8.22OsAlarmAction............................................................................................................ 291

3.8.23

OsAlarmActivateTask ................................................................................................. 292

3.8.24

OsAlarmCallback ........................................................................................................ 292

3.8.25

OsAlarmIncrementCounter ........................................................................................ 293

3.8.26

OsAlarmSetEvent ....................................................................................................... 294

3.8.27

OsAlarmAutostart ...................................................................................................... 296

3.8.28OsScheduleTable ......................................................................................................... 298

ix文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.8.29OsScheduleTableAutostart ......................................................................................... 299

3.8.30OsScheduleTableExpiryPoint ..................................................................................... 302

3.8.31OsScheduleTableEventSetting ................................................................................... 303

3.8.32OsScheduleTableTaskActivation ................................................................................ 304

3.8.33OsScheduleTblAdjustableExpPoint ............................................................................ 305

3.8.34OsScheduleTableSync ................................................................................................. 306

3.8.35

OsApplication .............................................................................................................. 308

3.8.36

OsApplicationHooks.................................................................................................... 317

3.8.37

OsApplicationTrustedFunction................................................................................... 317

3.8.38OsMemoryRegion ........................................................................................................ 319

3.8.39OsMemorySection ....................................................................................................... 322

3.8.40OsMemoryModule ....................................................................................................... 326

3.8.41OsMemoryArea ........................................................................................................... 327

3.8.42OsLinkSection ............................................................................................................. 331

3.8.43

OsStandardMemoryRegion......................................................................................... 332

3.8.44

OsIoc............................................................................................................................ 333

3.8.45

OsIocCommunication .................................................................................................. 334

3.8.46

OsIocSenderProperties ............................................................................................... 335

3.8.47

OsIocReceiverProperties ............................................................................................. 336

3.8.48

OsIocDataProperties ................................................................................................... 338

3.8.49OsSpinlock .................................................................................................................. 339

3.8.50

OsInterCoreInterrupt ................................................................................................. 341

3.8.51OsInterCoreInterruptTimingProtection ..................................................................... 343

3.8.52

OsInclude .................................................................................................................... 344

3.8.53

OsMutex ...................................................................................................................... 345

3.9システムサービス................................................................................................................ 346

3.9.1

GetActiveApplicationMode ......................................................................................... 346

3.9.2

StartOS ....................................................................................................................... 347

3.9.3

ShutdownOS ............................................................................................................... 348

3.9.4

ActivateTask ............................................................................................................... 350

3.9.5

TerminateTask ............................................................................................................ 352

3.9.6

ChainTask ................................................................................................................... 353

3.9.7

Schedule ...................................................................................................................... 355

3.9.8

GetTaskID ................................................................................................................... 356

3.9.9

GetTaskState .............................................................................................................. 358

3.9.10

EnableAllInterrupts.................................................................................................... 360

3.9.11DisableAllInterrupts ................................................................................................... 362

x文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.12

ResumeAllInterrupts .................................................................................................. 364

3.9.13

SuspendAllInterrupts ................................................................................................. 366

3.9.14

ResumeOSInterrupts .................................................................................................. 368

3.9.15SuspendOSInterrupts ................................................................................................. 370

3.9.16

GetISRID .................................................................................................................... 372

3.9.17

EnableInterruptSource ............................................................................................... 373

3.9.18DisableInterruptSource .............................................................................................. 375

3.9.19SetEvent...................................................................................................................... 377

3.9.20

ClearEvent .................................................................................................................. 379

3.9.21

GetEvent ..................................................................................................................... 380

3.9.22

WaitEvent ................................................................................................................... 382

3.9.23

GetResource ................................................................................................................ 384

3.9.24

ReleaseResource.......................................................................................................... 386

3.9.25

IncrementCounter....................................................................................................... 388

3.9.26

GetCounterValue ........................................................................................................ 390

3.9.27

GetElapsedValue ......................................................................................................... 392

3.9.28

GetAlarmBase ............................................................................................................. 394

3.9.29

GetAlarm..................................................................................................................... 395

3.9.30

SetRelAlarm ................................................................................................................ 397

3.9.31

SetAbsAlarm ............................................................................................................... 399

3.9.32

CancelAlarm ............................................................................................................... 401

3.9.33

StartScheduleTableRel ............................................................................................... 402

3.9.34

StartScheduleTableAbs............................................................................................... 404

3.9.35StopScheduleTable ...................................................................................................... 406

3.9.36

NextScheduleTable ..................................................................................................... 407

3.9.37

StartScheduleTableSynchron ..................................................................................... 410

3.9.38

SyncScheduleTable ..................................................................................................... 412

3.9.39SetScheduleTableAsync .............................................................................................. 414

3.9.40

GetScheduleTableStatus............................................................................................. 416

3.9.41

GetApplicationID ........................................................................................................ 418

3.9.42

CallTrustedFunction ................................................................................................... 420

3.9.43CheckISRMemoryAccess ............................................................................................ 423

3.9.44CheckTaskMemoryAccess ........................................................................................... 426

3.9.45CheckTaskAccess ........................................................................................................ 428

3.9.46CheckISRAccess .......................................................................................................... 430

3.9.47CheckAlarmAccess ...................................................................................................... 432

3.9.48CheckResourceAccess ................................................................................................. 434

xi文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.49CheckCounterAccess ................................................................................................... 436

3.9.50

CheckScheduleTableAccess ........................................................................................ 438

3.9.51

CheckSpinlockAccess .................................................................................................. 440

3.9.52CheckObjectAccess...................................................................................................... 442

3.9.53CheckTaskOwnership ................................................................................................. 444

3.9.54CheckISROwnership ................................................................................................... 446

3.9.55CheckAlarmOwnership............................................................................................... 448

3.9.56CheckCounterOwnership............................................................................................ 450

3.9.57CheckScheduleTableOwnership ................................................................................. 452

3.9.58CheckObjectOwnership .............................................................................................. 454

3.9.59TerminateApplication ................................................................................................. 456

3.9.60AllowAccess ................................................................................................................. 459

3.9.61

GetApplicationState.................................................................................................... 460

3.9.62

GetNumberOfActivatedCores ..................................................................................... 461

3.9.63

GetCoreID ................................................................................................................... 462

3.9.64

StartCore..................................................................................................................... 463

3.9.65

StartNonAutosarCore ................................................................................................. 465

3.9.66

GetSpinlock ................................................................................................................. 467

3.9.67

ReleaseSpinlock .......................................................................................................... 469

3.9.68

TryToGetSpinlock........................................................................................................ 471

3.9.69

ShutdownAllCores ...................................................................................................... 473

3.9.70RaiseInterCoreInterrupt............................................................................................. 474

3.9.71

GetMutex .................................................................................................................... 475

3.9.72

ReleaseMutex .............................................................................................................. 476

3.9.73

GetFaultyContext ....................................................................................................... 477

3.9.74

GetCurrentApplicationID ........................................................................................... 478

3.10

IOC 用システムサービス .................................................................................................... 480

3.10.1

IocSend_<IocId>[_<SenderId>] .................................................................................. 480

3.10.2

IocWrite_<IocId>[_<SenderId>].................................................................................. 482

3.10.3

IocSendGroup_<IocId> ............................................................................................... 483

3.10.4

IocWriteGroup_<IocId>............................................................................................... 484

3.10.5

IocReceive_<IocId> ..................................................................................................... 485

3.10.6

IocRead_<IocId> ......................................................................................................... 486

3.10.7

IocReceiveGroup_<IocId> ........................................................................................... 487

3.10.8

IocReadGroup_<IocId> ............................................................................................... 489

3.10.9

IocEmptyQueue_<IocId> ............................................................................................ 490

3.11

フックルーチン................................................................................................................ 491

xii

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.11.1

ErrorHook ................................................................................................................... 491

3.11.2

PreTaskHook ............................................................................................................... 492

3.11.3

PostTaskHook ............................................................................................................. 493

3.11.4

StartupHook................................................................................................................ 494

3.11.5

ShutdownHook ............................................................................................................ 495

3.11.6

ProtectionHook ........................................................................................................... 496

3.11.7

StartupHook_<App>（参考仕様） .............................................................................. 497

3.11.8ErrorHook_<App>（参考仕様）.................................................................................. 498

3.11.9

ShutdownHook_<App>（参考仕様） .......................................................................... 499

4. リファレンス ................................................................................................................................ 500
4.1

システムサービス一覧......................................................................................................... 500

4.2

フックルーチン ................................................................................................................... 503

4.3

データ型一覧....................................................................................................................... 504

4.4定数とマクロ一覧................................................................................................................ 506

4.4.1

OS 定数一覧 ................................................................................................................. 506

4.4.2

システムサービス ID 一覧............................................................................................ 509

4.4.3

OS マクロ一覧 ............................................................................................................. 512

4.4.4

システムサービス ID 取得マクロ一覧 .......................................................................... 513

4.4.5

システムサービスパラメータ取得マクロ一覧 .............................................................. 514

4.5

エラーコード一覧................................................................................................................ 517

4.6

IOC 用システムサービスエラーコード一覧 ........................................................................ 518

4.7

対象外とした AUTOSAR 仕様 ............................................................................................ 519

変更履歴............................................................................................................................................ 520

図 2-1 プロセッサコアの位置づけ .............................................................................................................. 7
図 2-2 処理レベルと優先度 ...................................................................................................................... 10
図 2-3 OS 機能のクラス・レベルの関係.................................................................................................... 13
図 2-4 コンフォーマンスクラス間の互換性 .............................................................................................. 20
図 2-5 OS オブジェクトのコア割付け ....................................................................................................... 21
図 2-6 コアを跨ぐシステムサービス......................................................................................................... 23
図 2-7 直接操作法によるコア間システムサービス実装 ............................................................................. 25
図 2-8 基本タスクのタスク状態遷移図 ..................................................................................................... 29
図 2-9 拡張タスクのタスク状態遷移図 ..................................................................................................... 30
図 2-10 スケジューラによる実行タスクの検索 ......................................................................................... 34
図 2-11 フルプリエンプティブスケジューリングの例 .............................................................................. 35
図 2-12 ノンプリエンプティブスケジューリングの例 .............................................................................. 37

xiii

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
図 2-13 混合プリエンプティブスケジューリングの例 .............................................................................. 38
図 2-14 グループタスクの動作例.............................................................................................................. 39
図 2-15 ISR 終了後の再スケジューリング動作の例 .................................................................................. 44
図 2-16 C1ISR に C2ISR が割込んだ場合の問題点 ................................................................................... 47
図 2-17 プリエンプティブタスクの同期例 ................................................................................................ 51
図 2-18 ノンプリエンプティブタスクの同期例 ......................................................................................... 51
図 2-19 リソースによるタスク間の排他例 ................................................................................................ 56
図 2-20 タスク－C2ISR 間の排他例 ......................................................................................................... 58
図 2-21 C2ISR－C2ISR 間の排他例 .......................................................................................................... 59
図 2-22 カウンタの概念図 ........................................................................................................................ 61
図 2-23 アラームの動作例 ........................................................................................................................ 69
図 2-24 スケジュールテーブルの構成 ....................................................................................................... 73
図 2-25 同期なしスケジュールテーブルの状態遷移図 .............................................................................. 76
図 2-26 暗黙同期スケジュールテーブルの状態遷移図 .............................................................................. 77
図 2-27 明示同期スケジュールテーブルの状態遷移図 .............................................................................. 78
図 2-28 絶対時刻でのスケジュールテーブル動作開始 .............................................................................. 80
図 2-29 相対時刻でのスケジュールテーブル動作開始 .............................................................................. 80
図 2-30 暗黙同期スケジュールテーブルの動作 ......................................................................................... 82
図 2-31 補正パラメータの適用例.............................................................................................................. 85
図 2-32 明示同期スケジュールテーブルの動作例 ..................................................................................... 86
図 2-33 エラーフック実装例..................................................................................................................... 97
図 2-34 スタックポインタチェック方式 ................................................................................................... 98
図 2-35 マジックナンバーチェック方式 ................................................................................................... 99
図 2-36 スタック残量チェック方式 .........................................................................................................100
図 2-37 ATK2 におけるスタックモニタリングのタイミング ....................................................................101
図 2-38 タスク実行時間 ...........................................................................................................................104
図 2-39 C2ISR 実行時間 ..........................................................................................................................105
図 2-40 基本タスクの到着間隔 ................................................................................................................106
図 2-41 拡張タスクの到着間隔 ................................................................................................................106
図 2-42 C2ISR 到着間隔 ..........................................................................................................................107
図 2-43 リソース占有時間 .......................................................................................................................107
図 2-44 割込み禁止時間...........................................................................................................................108
図 2-45 タスクの状態遷移とタイミング保護の対応 ................................................................................. 110
図 2-46 OSAP の状態遷移図 .................................................................................................................... 119
図 2-47 OSAP に所属する OS オブジェクトの保護 ..................................................................................122
図 2-48 信頼関数を呼び出すための機能 ..................................................................................................123
図 2-49 メモリリージョンとセクションの関係 ........................................................................................139xiv

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
図 2-50 システムサービス使用の制限 ......................................................................................................145
図 2-51 システム初期化シーケンス .........................................................................................................162
図 2-52 マルチコアシステムの初期化手順 ...............................................................................................164
図 2-53 同期 OS シャットダウンによるマルチコアシステム終了手順 .....................................................165
図 2-54 IOC によるデータ通信 ................................................................................................................167
図 2-55 1:1 通信と N:1 通信 .....................................................................................................................168
図 2-56 キューなし通信とキューあり通信 ...............................................................................................169
図 2-57 単一通信とグループ通信.............................................................................................................170
図 2-58 スピンロックによるデッドロックの例 1 .....................................................................................176
図 2-59 スピンロックによるデッドロックの例 2 .....................................................................................176
図 2-60 スピンロックの獲得可否.............................................................................................................177
図 2-61 スピンロックによるデッドロックの例 3 .....................................................................................177
図 2-62 コンフィギュレーション手順 ......................................................................................................183

表 2-1 スケーラビリティクラスごとの機能一覧 ....................................................................................... 14
表 2-2 本仕様書に対応する ATK2 とその機能との対応表 ......................................................................... 15
表 2-3 各スケーラビリティクラスでサポートするべき最小 OS オブジェクト .......................................... 15
表 2-4 ATK2 における OS オブジェクト数および OSAP 数 ...................................................................... 16
表 2-5 各コンフォーマンスクラスでサポートすべき最小機能セット ........................................................ 17
表 2-6 ATK2 における機能セット ............................................................................................................. 18
表 2-7 ATK2 における機能制約 ................................................................................................................. 19
表 2-8 OS 実行コードの持ち方によるメリットとデメリット .................................................................... 26
表 2-9 ハードウェアカウンタ制御関数仕様 .............................................................................................. 65
表 2-10 フックルーチンが定義可能な単位 ................................................................................................ 88
表 2-11 タスクの違反処理一覧 ................................................................................................................ 111
表 2-12 タスクに対するタイミング保護違反時のエラーコードの定義の違い .......................................... 112
表 2-13 C2ISR の違反処理一覧 ................................................................................................................ 113
表 2-14 C2ISR に対するタイミング保護違反時のエラーコードの定義の違い .......................................... 114
表 2-15 信頼 OSAP と非信頼 OSAP の動作モードの違い ........................................................................ 117
表 2-16 アクセス対象のメモリ領域に対する保護設定の一覧 ...................................................................132
表 2-17 OSAP のメモリ領域に対する保護設定の違い ..............................................................................134
表 2-18 各メモリ保護設定とデータのアクセス権 .....................................................................................141
表 2-19 サービス保護機能の適用一覧 ......................................................................................................142
表 2-20 保護違反時要求に対して OS が提供する機能一覧.......................................................................151
表 2-21 GetTaskID で取得出来るタスク ID .............................................................................................158
表 2-22 GetISRID で取得出来る ISRID ...................................................................................................158xv

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
表 2-23 GetApplicationID，GetCurrentApplicationID の戻り値 ............................................................159
表 3-1 各処理単位から呼出し可能なシステムサービス ............................................................................199
表 4-1 データ型一覧 ................................................................................................................................504
表 4-2 OS 定数一覧 ..................................................................................................................................506
表 4-3 システムサービス ID 一覧 ............................................................................................................509
表 4-4 OS マクロ一覧 ..............................................................................................................................512
表 4-5 システムサービス ID 取得マクロ一覧 ...........................................................................................513
表 4-6 システムサービスパラメータ取得マクロ一覧 ...............................................................................514
表 4-7 エラーコード一覧 .........................................................................................................................517
表 4-8 IOC 用システムサービスエラーコード一覧 ...................................................................................518

xvi文書番号：ATK2-0010
文書名：ATK2 外部仕様書
1. 概要
1.1

本文書の目的

本文書は「次世代車載システム向け RTOS 要求仕様書」に記述された要求事項を満たすリアルタイム
OS(以降，OS と略す)の機能仕様を規定するものである．
本仕様は AUTOSAR Specification of Operating System 仕様(以降，AUTOSAR 仕様と略す)をベー
スに，必要な拡張，修正を行ったものである．また，本仕様は AUTOSAR 仕様が OSEK/VDX Operating
System 仕様(以降，OSEK 仕様と略す)をベースにしていることから，間接的に OSEK 仕様もベースにしている【OS001】．
本文書は，OS に関する一般的な知識を持ったソフトウェア技術者が読むことを想定して記述している．OSEK 仕様や AUTOSAR 仕様に関する知識があることが望ましいが，それを前提とせず記述して
いる．
1.2

関連文書

1.2.1

ベースとした文書

以下の表は，本文書のベースとする文書であり，その内容は本文書内に包含されている．
文書名

バージョン

OSEK/VDX Operating System

Ver.2.2.3

AUTOSAR Specification of Operating System

V5.0.0 (R4.0 Rev 3)

1.2.2

参考文書

以下の表は，本文書から参照している文書，または本文書を理解するために必要な文書である．内容は本文書に包含されていない．
文書名

バージョン

次世代車載システム向け RTOS 要求仕様書

Ver.3.0.0

次世代車載システム向け RTOS ハードウェア要求仕様書

Ver.3.0.0

次世代車載システム向け RTOS 用語集

Ver.3.0.0

AUTOSAR Specification of Standard Types

V1.3.0 (R4.0 Rev 1)

AUTOSAR List of Basic Software Modules

V1.6.0 (R4.0 Rev 3)

Software Component TemplateV4.2.0 (R4.0 Rev 3)1

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
1.3

凡例

本文書では，OSEK 仕様と，AUTOSAR 仕様と，名古屋大学大学院情報科学研究科附属組込みシス
テム研究センター(NCES)を中心とする次世代車載システム向け RTOS の仕様検討及び開発に関するコンソーシアム型共同研究(ATK2 コンソーシアム)，および，車載制御システム向け高品質プラットフォームに関するコンソーシアム型共同研究(AP コンソーシアム)で，新規に規定した仕様が混在しているため，以下に示す仕様番号を用いてこれらの仕様を区別して管理を行う．仕様番号は，要求事項にのみ付
与することを基本とする．ただし，AUTOSAR 仕様において，概念の説明や補足事項についても仕様番号が付与されているものに関しては，そのまま付与する．また，本文書から ATK2 コンソーシアムおよび AP コンソーシアムで開発した OS である ATK2 の実装に依存する仕様を，参考情報として本文書に記載するため，仕様番号を付与する．
仕様番号【COSxxxx】

内容
関連文書 OSEK/VDX Operating System で規定された仕様．AUTOSAR
仕様では CoreOS として扱われるため，COS と表記を行う．
関連文書 AUTOSAR Specification of Operating System で規定された仕【OSxxx】

様．AUTOSAR 仕様で記述されている OS 仕様番号を用いる．本仕様に採用しなかった AUTOSAR 仕様についても，【OSxxx】で記載している．
関連文書 AUTOSAR Specification of Operating System で規定された仕様．AUTOSAR 仕様でコンフィギュレーション情報に関して記述されている OS 仕様番号を用いる．AUTOSAR 仕様では，【OSxxx_Conf】という表【OS_Confxxx】

記であるが，プレフィックスに統一するため，本仕様では左記の表記とす【MCOS_Confxxxx】

る．本仕様に採用しなかった AUTOSAR 仕様についても，【OS_Confxxx】
で記載している．同様に，マルチコア対応 OS におけるコンフィギュレー
ション情報に関する OS 仕様番号は【MCOSxxxx_Conf】という表記であるが，本仕様では左記の表記とする．
関連文書 AUTOSAR Specification of Operating System に記述されてい【OSaxxx】

るが，仕様番号表記がないもの．AUTOSAR 仕様の要求事項であるため，本仕様では，仕様番号を付与する．

【NOSxxxx】

ATK2 コンソーシアムで新規に規定した仕様．

〔COSxxx〕

本文中で上記の仕様番号を内部参照する際に使用する．

〔OSxxx〕

仕様定義である【COSxxxx】【OSxxx】【NOSxxxx】と区別するため，〔NOSxxx〕〔COSxxxx〕〔OSxxx〕〔NOSxxxx〕とする．

≪COSxxx≫

本文中で上記の仕様番号を引用する際に使用する．

≪OSxxx≫仕様定義である【COSxxxx】【OSxxx】【NOSxxxx】と区別するため，≪≪NOSxxx≫

COSxxxx≫≪OSxxx≫≪NOSxxxx≫とする．

2

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
AUTOSAR 仕様との違い
削除や改変を行った AUTOSAR 仕様に対して，どのような差分があるかを説明する．
OSEK 仕様との違い
削除や改変を行った OSEK 仕様に対して，どのような差分があるかを説明する．ただし，本書だけで理解可能である改変に関しては記載しない．
使用上の注意本仕様に準拠した OS の開発者ではなく，本 OS を使用してアプリケーション開発を行うユーザに対する，注意事項もしくは推奨事項を説明する．
図中で用いる処理単位の状態
本書の図の中で用いる，タスクなどの処理単位の状態の意味は以下の通りである．

1.4

RUNNINGWAITINGEXECUTION

PENDINGREADY

INTERRUPTEDSUSPENDED

優先度を変更して実行中

本仕様書に対応する ATK2 一覧

本仕様書に対応する ATK2 は，以下のとおりである．
・ ATK2-SC1
・ ATK2-SC2
・ ATK2-SC3
・ ATK2-SC4
・ ATK2-SC1-MC
・ ATK2-SC3-MC
・ ATK2-SC1-TP・ ATK2-SC3-TP
各カーネルで提供する機能は表 2-2 で示す．

3

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2. 概念
2.1

機能一覧

本 OS が提供する機能の概略を以下に示す．
タスク管理
・ タスクの起動，終了．
・ タスクディスパッチ機構．
割込み処理
・ 外部割込みに対する割込みサービスルーチン(以降，ISR と略す)の起動．
・ OS が管理しないカテゴリ 1ISR(以降，
C1ISR と略す)と OS が管理するカテゴリ 2ISR(以降，C2ISRと略す)のサポート．
・ 割込みの禁止，許可操作．
イベント同期処理・ イベントを利用したタスクの同期機能．
リソース管理・ タスク，C2ISR 間の排他制御機能．
カウンタ管理・ システム外部のハードウェアで発生する事象，およびシステム内部のソフトウェアで発生する事
象をカウント(カウンタの駆動)する機能．
アラーム管理・ カウンタによって駆動される繰り返し処理(タスク起動，イベントセット，コールバックルーチン
起動，他のカウンタに対するカウント)を行うための機能．
スケジュールテーブル管理・ カウンタによって駆動される一連の繰り返し処理(タスク起動，イベントセットの複数の組み合わせ)を静的なテーブルに記載されたタイミングで実行する機能．
タイミング保護・ タスク，ISR に与えられた時間制約の監視．
OS アプリケーション(以降，OSAP と略す)管理
・ OSAP の強制終了，再起動．

4

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
・ 信頼関数を実行する機能．
メモリ保護
・ OSAP によって分割されたプログラム間の不正なメモリアクセスの防止．
時間パーティショニング
・ OSAP によって分割されたプログラム間の時間分割．（以降，これを TP 機能と呼ぶ）
サービス保護・ OS を危険な状態にする振る舞いや OSAP が起こすエラーからの保護．
・ OSEK 仕様のエラーチェックの強化．
保護違反時処理・ タイミング保護，メモリ保護，CPU 例外で発生した保護違反のアプリケーションへの通知．
・ 違反したプログラムに対する強制終了処置．
エラー処理
・ OS が提供するサービス内で発生したエラーに対する処理．
IOC(Inter-OS-Application Communicator)
・ コアやメモリ保護の境界をまたいで通信するために用意された OSAP 間の通信機能．
マルチコア対応・ コアを跨いだシステムサービス．
・ OS の起動，終了のマルチコア対応．
・ スピンロック管理．
・ コア間割込み処理．
・ ミューテックス管理(参考仕様)

5文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.2

主要概念

2.2.1

処理単位

本 OS の処理単位を以下に示す．
2.2.1.1

タスク

タスクは OS によって実行されるプログラムの処理単位である．複数のタスクが存在する場合，タス
クはそれぞれ並行に実行され，実行順序は OS によってスケジューリングされる(詳細は 2.5 節を参照)．
2.2.1.2

ISR

ISR は割込みコントローラからの割込み要求をトリガとして起動されるプログラムの処理単位である(詳細は 2.7 節を参照)．
2.2.1.3

フックルーチンフックルーチンは OS 処理内の特定のタイミングに，OS によって実行される処理単位である(詳細は2.14 節を参照)．
2.2.1.4

アラームコールバック

アラームコールバックはアラーム満了時に，OS によって実行される処理単位である(詳細は 2.12.4 節
を参照)．

6

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.2.2

プロセッサコア

ソフトウェアの視点で 1 つの処理単位のみを同時に実行できるハードウェアの単位を「プロセッサコ
ア」または単に「コア」と呼ぶ．マルチスレッドプロセッサにおけるスレッドも 1 つのコアとして扱う．

MCU
プロセッサ
プロセッサ
コア1

I/O

プロセッサ
コア2

プロセッサ
コア3

メモリ

プロセッサ
コア4

・・・

図 2-1 プロセッサコアの位置づけ

シングルコアとマルチコアの定義
コアの数が１つのシステムをシングルコアシステムと呼び，コアが複数存在するシステムをマルチコ
アシステムと呼ぶ．

7

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.2.3

メモリリージョン

本節は，メモリ保護機能をサポートする SC3，SC4 に対する説明である．
一般に，ターゲットハードウェアには性質の異なる複数のメモリ領域が存在する．OS オブジェクトのコンフィギュレーションにおいて，OS の内部データの配置や，
アクセス保護を行うメモリ領域(以降，保護領域と略す)の指定など，複数のメモリデバイスから特定のメモリ領域を意識してコンフィギュレー
ションすることが必要になる．ターゲットハードウェアに存在するメモリ領域の中で，同じ性質を持つ
連続したメモリ領域のことをメモリリージョンと呼ぶ．ハードウェアにどのような性質のメモリリージ
ョンが存在するかは，ターゲット定義である【NOS1167】．
メモリリージョンの性質
一般に，ターゲットに存在するメモリがもつ性質として，以下の性質が挙げられる．マルチコアシス
テムのハードウェアにおけるメモリの性質に関しての詳細は「次世代車載システム向け RTOS ハードウ
ェア要求仕様書」を参照．
・ 書込み可否(ROM，RAM)・ 命令フェッチの可否(フェッチ可能，データ専用)
・ アクセス速度(内部メモリ，外部メモリ)
・ キャッシュ(キャッシャブル，ノンキャッシャブル)
・ 揮発性(電源 OFF 後のデータ保持可否)
・ マルチコアシステムにおける共有アクセス可否(プライベート，グローバル)
・ マルチコアシステムにおけるアクセス速度(ローカルバス接続，グローバルバス接続)
メモリリージョンの管理
ターゲットがサポートするすべてのメモリリージョンをジェネレータが管理する【NOS0014】．ジェネレータはコンフィギュレーションファイルにある記述とメモリリージョン管理情報を元に，ロードモ
ジュールのリンクに必要なファイル(リンカスクリプト等)を出力する【NOS0015】．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，メモリ領域を意識したコンフィギュレーションの仕組みが定義されていないた
め，本仕様で規定を行った．

8

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.2.4

処理レベル

異なる処理単位の間において，処理が実行される優先順位を処理レベルという．OS の持つ処理レベ
ルは以下の６種類で，記載順に高い処理レベルを持つ【NOS0242】．
・ C1ISR 処理レベル
・ OS 処理レベル
・ C2ISR 禁止処理レベル(タイミング保護を行う場合のみ)
・ C2ISR 処理レベル
・ スケジューラ処理レベル
・ タスク処理レベル
C1ISR 処理レベル
C1ISR が動作する処理レベルである．C1ISR は OS の管理外であり，OS よりも高い処理レベルで動作する．
OS 処理レベルOS の機能のうち，システムサービス，フックルーチン，アラームコールバック，ハードウェアカウ
ンタ制御関数，保護違反時処理，カウンタに接続された満了処理が動作する処理レベルである．
C2ISR 禁止処理レベル
タイミング保護機能に対応した OS において，アプリケーションがシステムサービスにより OS 割込み禁止としたあと，OS 割込み禁止が解除されるまでに処理単位が動作する処理レベルである【NOS1380】．
C2ISR 処理レベル
C2ISR が動作する処理レベルである．C2ISR は OS の管理下にあり，OS よりも低い処理レベルで動作する．
スケジューラ処理レベル
OS 機能におけるスケジューラが動作する概念的な処理レベルである．
タスク処理レベル
タスクが動作する処理レベルである．

9

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.2.5

優先度

タスクや割込みが動作する処理レベルでは，複数の処理単位が入れ換わり動作する．これらの処理単位において，処理が実行される優先順位を優先度と呼ぶ．タスクが実行される優先順位をタスク優先度と呼び，割込みが実行される優先順位を割込み優先度と呼ぶ．
タスク優先度の詳細は 2.5.6 節，割込み優先度の詳細は 2.7.4 節を参照．

高C1ISR処理レベル

処理レベル

OS処理レベル高

C2ISR禁止処理レベル(タイミング保護を行う場合のみ)

割込み優先度C2ISR処理レベル
スケジューラ処理レベル

低高
タスク優先度

タスク処理レベル低低

図 2-2 処理レベルと優先度

OSEK 仕様との違い
OSEK 仕様では，割込みレベル，スケジューラレベル，タスクレベルの 3 つの処理レベルを規定している．しかし，AUTOSAR におけるフックルーチンやタイミング保護の仕様を明確にするために，6 つの処理レベルを規定した≪NOS0242≫．

10

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.2.6

スタック

本 OS で管理するスタックを以下に示す．
2.2.6.1

タスク用スタック

SC1，SC2 において，タスクが使用するスタックである．タスク用スタックは，スタック共有する場
合を除いて，タスク毎に確保される【NOS0826】．各タスク用スタックのサイズは，コンフィギュレー
ション時に静的に指定する≪NOS0282≫．
2.2.6.2

C1ISR 用スタック

C1ISR が使用するスタックである．OS では，C1ISR 用スタックを管理しない【NOS0889】．割込み
発生時の処理単位のスタックをそのまま使用するか，C1ISR 用スタックを別途用意して，割込み発生時に切り替えるかなどの取り扱いはアプリケーション依存である【NOS0890】．
使用上の注意C1ISR 用スタックとして，割込み発生時の処理単位のスタックをそのまま使用する場合，C1ISR が使用するスタックサイズも考慮して，各処理単位用のスタックサイズを決定する必要がある．
C1ISR 用スタックを使用中にフックルーチンが呼び出された場合，フックルーチンはそのスタックを使用する．
2.2.6.3

C2ISR 用スタック

SC1，SC2 において，C2ISR が使用するスタックである．C2ISR 用スタックは，フック用スタックと合わせて 1 つのスタックで確保される【NOS1169】．各 C2ISR 用スタックのサイズは，コンフィギュレーション時に静的に指定する≪NOS0284≫．
2.2.6.4

フック用スタック

SC1，SC2 において，すべてのフックルーチンが使用するスタックである．フック用スタックは，
C2ISR 用スタックと合わせて 1 つのスタックで確保される≪NOS1169≫．フック用スタックのサイズ
は，コンフィギュレーション時に静的に指定する．
2.2.6.5

信頼タスク用スタック

SC3，SC4 において，信頼タスクが使用するスタックである．信頼タスク用スタックは，スタック共有する場合を除いて，信頼タスク毎に確保される【NOS0829】．各信頼タスク用スタックのサイズは，コンフィギュレーション時に静的に指定する≪NOS0282≫．
2.2.6.6

非信頼タスク用スタック

SC3，SC4 において，非信頼タスクが使用するメモリ保護対象のスタックである．非信頼タスク用ス
タックは，スタック共有する場合を除いて，非信頼タスク毎に確保される【NOS0830】．各非信頼タス

11文書番号：ATK2-0010
文書名：ATK2 外部仕様書
ク用スタックのサイズは，コンフィギュレーション時に静的に指定する≪NOS0282≫．
2.2.6.7

非信頼タスク用システムスタック

SC3，SC4 において，非信頼タスクからシステムサービス，信頼関数が呼び出された際に使用するス
タックである．非信頼タスク用システムスタックは，スタック共有する場合を除いて，非信頼タスク毎に確保される【NOS0831】．各非信頼タスク用スタックのサイズは，コンフィギュレーション時に静的に指定する≪NOS0283≫．
2.2.6.8

信頼 C2ISR 用スタック

SC3，SC4 において，信頼 C2ISR が使用するスタックである．信頼 C2ISR 用スタックは，信頼フッ
ク用スタックと合わせて 1 つのスタックで確保される【NOS1170】．信頼 C2ISR 用スタックのサイズ
は，コンフィギュレーション時に静的に指定する≪NOS0284≫．
2.2.6.9

信頼フック用スタック

SC3，SC4 において，システム定義のフックルーチン，信頼フック，非信頼フックから呼び出されたシステムサービスが使用するスタックである．信頼フック用スタックは，信頼 C2ISR 用スタックと合
わせて 1 つのスタックで確保される≪NOS1170≫．信頼フック用スタックのサイズは，コンフィギュ
レーション時に静的に指定する．
2.2.6.10 非信頼フック用スタック
SC3，SC4 において，非信頼フックが使用するスタックである．非信頼フック用スタックは，システ
ムに 1 つ確保される【NOS0836】．非信頼フック用スタックのサイズは，コンフィギュレーション時に静的に指定する≪NOS0780≫．
2.2.6.11 スタック領域の確保方法
スタック領域の確保方法は，ターゲット定義とする【NOS1171】．

12

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.3

OS 機能のクラス分け

本 OS では，OS 機能のクラス分けとして，スケーラビリティクラス，コンフォーマンスクラスの概念を持つ．それぞれの関係を図 2-3 に示す．なお，スケーラビリティクラスとコンフォーマンスクラスは独立した概念であるため，依存関係はない．

SC2
SC3
SC4

OS
タイミング保護

保護違反時処理

スケーラビリティクラス
の選択

メモリ保護

CoreOS (OSEK相当)
BCC1

ECC1

BCC2

ECC2

コンフォーマンス
クラスの選択図 2-3 OS 機能のクラス・レベルの関係

13文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.3.1

スケーラビリティクラス

スケーラビリティクラスはユーザに必要な機能とターゲットの持つ機能によって OS 機能を定義した機能セットである【OS241】．スケーラビリティクラスごとの OS 機能の一覧を 表 2-1 に示す．
表 2-1 スケーラビリティクラスごとの機能一覧
機能SC1 SC2 SC3 SC4OSEK OS(全コンフォーマンスクラス)○

アラームコールバック○

カウンタ管理システムサービス

○

○

○

○

○

○

○

ソフトウェアフリーランタイマサービス

○

○

○

○

スケジュールテーブル

○

○

○

○

スタックモニタリング

○

○

○

○

保護違反時処理(プロテクションフック)

○

○

○

○

CPU 例外に対する処理

○

○

○

○

タイミング保護○○グローバル時間同期

○

○

メモリ保護

○

○

OSAP

○

○

○

○

○

○

サービス保護
信頼関数

※1

※1

※1：サービス保護の一部をサポート
本仕様書に対応する ATK2 と，それが対応するスケーラビリティクラス，マルチコア対応機能および，
時間パーティショニング機能との対応表を表 2-2 に示す．

14

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
表 2-2 本仕様書に対応する ATK2 とその機能との対応表
カーネル名

スケーラビリティクラス

マルチコア対応

時間パーティショニング

ATK2-SC1SC1

ATK2-SC2SC2

ATK2-SC3SC3

ATK2-SC4SC4

ATK2-SC1-MC

SC1○

ATK2-SC3-MC

SC3○

ATK2-SC1-TP

SC1○

ATK2-SC3-TP

SC3○

各 SC で最低限サポートすべき OS オブジェクト数および OSAP 数を表 2-3 に示す．
表 2-3 各スケーラビリティクラスでサポートするべき最小 OS オブジェクト
機能

SC1 SC2 SC3 SC4

スケジュールテーブル数

2

8

2

8

ソフトウェアカウンタ数

8

8

8

8

OSAP 数00

2

2

スケーラビリティクラス間の互換性
本仕様を準拠したインターフェースであれば，下位のスケーラビリティクラスの OS に，上位のスケ
ーラビリティクラスの機能を追加実装してもよい【OS240】．

15

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
コンフォーマンスクラスとの関係
OSEK OS はコンフォーマンスクラスと呼ぶ詳細な機能セットを持つ(詳細は 2.3.2 節を参照)．OSEK
OS で定義されているシステムサービスは，すべてのスケーラビリティクラスから利用可能である【NOS0319】．
ATK2 では，表 2-4 に示す OS オブジェクト数および OSAP 数で実装する．
表 2-4 ATK2 における OS オブジェクト数および OSAP 数
SC1，SC2

機能

SC3，SC4

スケジュールテーブル数

ターゲット定義(※1) 【NOS1172】

ソフトウェアカウンタ数

ターゲット定義(※1) 【NOS1173】
信頼 OSAP：OSAP 数－ターゲット定義(※1) -非信頼 OSAP 数【NOS1174】
非信頼 OSAP：32【NOS1175】※1 unsigned int の上限値

16

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.3.2

コンフォーマンスクラス

コンフォーマンスクラスは，様々なアプリケーションからの要求やハードウェアの制約からの要求に対応するため機能セットである．
コンフォーマンスクラスにより異なる OS 機能を以下に示す．
・ タスクに対する多重起動要求の許可，禁止【COS0314】
・ 使用できるタスクの種別(詳細は 2.5.2 節を参照)【COS0315】
・ タスクごとの優先度数【COS0316】
2.3.2.1

コンフォーマンスクラスの種別

コンフォーマンスクラスは以下の 4 種類である．それぞれのコンフォーマンスクラスが持つ最小の機能の組み合わせを表 2-5 に示す．
表 2-5 各コンフォーマンスクラスでサポートすべき最小機能セット
コンフォーマンスクラス

基本タスクの多重起動要求
使用できるタスクの種別
同時に実行可能状態，実行状態になる

BCC1

BCC2

ECC1

ECC2

【COS0317】【COS0318】【COS0319】【COS0320】

不要

要

不要

要

基本タスク

基本タスク

および

および

拡張タスク

拡張タスク

基本タスク

基本タスク

8

8

16

16

1 優先度への複数タスクの割当て

不要

要

不要

要

1 タスクごとのイベント数

－

－

8

8

タスク優先度数

8

8

16

16

使用できるリソース数

1 (※1)

888

使用できる内部リソース数

2

2

2

2

使用できるアラーム数

1

1

1

1

使用できるアプリケーションモード

1

1

1

1

ことができるタスクの最大数※1：すべてのタスクに関連付いたリソースを１つ用意する(詳細は 2.9.6 節を参照)

17

文書番号：ATK2-0010
文書名：ATK2 外部仕様書

ATK2 では，表 2-6 に示す機能セットで実装する．
表 2-6 ATK2 における機能セット
ATK2
基本タスク：可【NOS1176】
タスクの多重起動要求〔COS0314〕〔COS0315〕〔COS0483〕
拡張タスク：不可【NOS1177】〔COS0315〕

同時に実行可能状態，実行状態になることができるタスクの最大数

ターゲット定義(※1) 【NOS1178】

1 優先度への複数タスクの割当て

可【NOS1179】

1 タスクごとのイベント数

32≪NOS1194≫

タスク優先度数

16≪NOS1192≫

使用できるリソース数

ターゲット定義(※2) 【NOS1180】

使用できる内部リソース数

ターゲット定義(※2) 【NOS1181】

使用できるアラーム数

ターゲット定義(※1) 【NOS1182】

使用できるアプリケーションモード

32【NOS1183】※1 unsigned int の上限値
※2 リソース数と内部リソース数の合計値が unsigned int の上限値
さらに ATK2 では，表 2-7 に示す機能制約がある．

18

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
表 2-7 ATK2 における機能制約
ATK2
タスクの最大起動要求回数

256≪NOS1193≫
255【NOS1184】

SuspendAllInterrupts 最大ネスト回数※全割込み禁止スピンロック獲得とのネスト回数との合計値とする【NOS1186】
255【NOS1185】

SuspendOSInterrupts 最大ネスト回数※OS 割込み禁止スピンロック獲得とのネスト回数との合計値とする【NOS1187】

スケジュールテーブルの最大満了点数
メモリセクション情報(OsMemorySection)の上限数
アクセスを許可するメモリ領域(OsMemoryArea)の上限数

254【NOS1188】
ターゲット定義【NOS1189】
ターゲット定義【NOS1190】

19

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.3.2.2

コンフォーマンスクラス間の互換性

低機能なコンフォーマンスクラスで動作していたアプリケーションは，アプリケーションを変更することなく，高機能なコンフォーマンスクラスで動作させることができる【COS0312】．OS の動作中にコンフォーマンスクラスを動的に変更することはできない【COS0313】．コンフォーマンスクラス間の互換性を図 2-4 に示す．

使用できるタスク種別は
基本タスクのみ使用できるタスク種別は
基本タスク，拡張タスク

タスク優先度毎に1タスク
タスクの多重起動なし

BCC1

ECC1

タスク優先度毎に複数タスク
基本タスクは多重起動可能

BCC2

ECC2

※矢印方向にコンフォーマンスクラスを変更可能

図 2-4 コンフォーマンスクラス間の互換性

2.4

マルチコア対応 OS

マルチコアシステム上での動作に対応した OS を，マルチコア対応 OS と呼ぶ．マルチコア対応 OSは，シングルコア OS に対して，以下の機能を追加したものである．本節では，マルチコア対応 OS の仕様を規定する．
・ コアを跨いだシステムサービス
・ OS の起動，終了のマルチコア対応
・ スピンロック・ コア間割込み
・ ミューテックス(参考仕様)
2.4.1

対象とするマルチコアシステムのハードウェア

マルチコアシステムは，複数のコアにより構成されているシステムであり，複数の処理単位を並行して同時に実行することが可能である【OS568】．本 OS が対象とするマルチコアシステムは，システムを構成する各コアはハードウェア的に均質(ホモジニアス)であり，少なくとも命令セット，エンディア
ンは同一であるものとする．詳細は「次世代車載システム向け RTOS ハードウェア要求仕様書」を参照．

20

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.4.2

OS オブジェクト

コアへの OS オブジェクトの割付け
マルチコア対応 OS では，SC1，SC2 であっても，OSAP のサポートが必須である【OS764】．リソ
ース，IOC，スピンロックを除く OS オブジェクトは，いずれかの OSAP に所属しているため，OSAPを割付けるコアを指定することで，OSAP に所属する各 OS オブジェクトが割付けられるコアが決定す
る．タスクは，タスクが所属する OSAP が割付けられたコアで実行される【OS570】．同様に ISR は，
ISR が所属する OSAP が割付けられたコアで実行される【OS571】．
OSAP へのコアの割付けは，コンフィギュレーション時に静的に指定する【OS573】〔MCOS_Conf1020〕．OS は，割込み発生時，ISR が起動するコアが静的に決定されるように，ハードウェアの初期化を行う【OS572】．
リソースは，OSAP に所属しないため，そのリソースを獲得するように指定されたタスク，C2ISR が割付けられるコアに割付く【NOS0914】．リソースは，同じコア内のタスク，C2ISR からのみ獲得可能であるので，リソースが割付くコアは一意に定まる．
スピンロックはコア間での排他制御に用いるため，OSAP にも所属せず，どのコアにも割付けられない【NOS0915】．IOC は，OSAP 間の通信であるので OSAP に所属せず，コアを跨いだ通信が可能であるので，どのコアにも割付けられない【NOS0916】．

Core1に割付けられた
OSオブジェクト
OSAP1

Spinlock1

OSAP2

Task1

Task2

OSAP3
Task3

Counter1
ISR1

Alarm1

Alarm2

Core2に割付けられた
OSオブジェクト

IOC1

Resource1

OSAP4
ISR2

Task4

Task5

Counter2
ISR3

Alarm3

Schedule
Table

Core1

Resource2

Core2

図 2-5 OS オブジェクトのコア割付け
OS は，各コアのタスクや ISR のスケジューリングを独立して実行する【OS569】．OS は，タスクやISR が割付いているコアを動的に変更することはできない【OSa117】．
このように，タスクが動作するコアを静的に決定しておく方式は，機能分散型マルチプロセッサ(Function Distributed Multiprocessor: FDMP)，もしくは非対称型マルチプロセッサ(Asymmetric21

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
Multiprocessor: AMP)と呼ばれる．対称型マルチプロセッサ(Symmetric Multiprocessor: SMP)と呼ばれる方式で行われるような，負荷分散を目的とした，OS による動的なタスクの移動はサポートしない．
OS オブジェクトの ID
マルチコア対応 OS においても，シングルコア OS におけるオブジェクト ID の規定を維持するものとし，すべてのコアにおいて，オブジェクト ID は一意とする【OS567】．OS オブジェクトのコアへの割付けは，コンフィギュレーション時に決定されるため，C 言語で記述されたソースコード上の OS オ
ブジェクト ID はコア割付けの影響を受けることはない．
2.4.3

コア ID

マルチコアシステムにおいてコアを一意に識別するために，各コアに ID を割り振り，これをコア IDと呼ぶ．ハードウェアレベルのコアを識別する方法に関係なく，本 OS におけるコア ID は，論理的に識別できるようにする【OSa118】〔OS627〕〔OS628〕．つまり，各コア ID を示す定数を用意し，アプ
リケーションからは，これらの定数を用いることで，コアを判別する(詳細は 3.6.2 節を参照)．

22

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.4.4

シングルコア OS 機能のマルチコア拡張

2.4.4.1

コアを跨ぐシステムサービス

システムサービスを呼び出した処理単位が割付けられたコアと，システムサービスのパラメータに指定された OS オブジェクトが割付けられたコアが異なる場合，システムサービスが「コアを跨ぐ」と表現する．
シングルコア OS で提供されるシステムサービスが，マルチコア OS においてどのように振る舞うかは，システムサービス毎に規定する．コアを跨いで呼び出すことができないシステムサービスを，コアを跨いで呼び出した場合，OS は，拡張エラーとして E_OS_CORE を返す【OS589】．
他のコアに対して，ディスパッチを伴うシステムサービスを呼び出した場合，呼出し先のコアに対して，割込み(コア間割込み)を発生させることで，ディスパッチを実行する【NOS0917】．したがって，割込み禁止状態となっているコアに対して，ディスパッチを伴うシステムサービスを発行した場合，その割込み禁止状態が解除されるまで，ディスパッチが保留される【NOS1068】．
なお，マルチコア対応 OS においては，OS 処理が実行されているコア以外のコアから，OS 処理の途中の状態が観測できる場合がある【NOS1056】．具体的には，1 つのシステムサービスにより複数の OS
オブジェクトの状態が変化する場合に，一部の OS オブジェクトの状態のみが変化し，残りの OS オブ
ジェクトの状態が変化していない過渡的な状態が観測できる場合がある．

OSAP1

OSAP2

Task1

Task2

OSAP3
Task3

コアを跨ぐ
システムサービス

Counter1
ISR1

Alarm1

Alarm2

Resource1

OSAP4
ISR2

Task4

Task5

Counter2
ISR3

Alarm3

Core1

Schedule
Table

Resource2

Core2

図 2-6 コアを跨ぐシステムサービス

2.4.4.2

OS の起動と終了

マルチコアシステムにおけるすべてのコアで，OS の起動および終了シーケンスにおけるいくつかのフェーズで，同期を行う(詳細は 2.24.4 節を参照)．
すべてのコアで OS シャットダウンを行うシステムサービスを呼び出した場合，他のすべてのコアに対して，割込み(コア間割込み)を発生させることで，OS シャットダウンを実行する【NOS0918】．

23

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.4.5

マルチコア追加機能

マルチコア対応 OS では，コアを跨いだアプリケーション間の連携動作に役立つ以下の機能を追加する．マルチコア対応 OS で追加されたシステムサービスは，CheckSpinlockAccess を除き，すべてのSC から利用可能である【NOS0339】．CheckSpinlockAccess は，SC3，SC4 のみで利用可能である【NOS1542】．
2.4.5.1

コア ID の取得

本 OS は，任意の処理単位からその処理単位が動作しているコアの ID を取得するシステムサービス
として GetCoreID を提供する(詳細は 3.9.63 節を参照)．
2.4.5.2

起動中のコア数の取得

マルチコアシステムにおいて，本 OS が起動しているコアの数を取得するシステムサービスとしてGetNumberOfActivatedCores を提供する(詳細は 3.9.62 節を参照)．
2.4.5.3

スピンロック本 OS は，異なるコアに割付けられているタスク，C2ISR 間の排他制御機能として，スピンロックを提供する(詳細は 2.26 節を参照)【OS648】〔OS686〕〔OS695〕〔OS703〕．
2.4.5.4

コア間割込み処理

本 OS は，あるコアに割付けられている処理単位から，任意の他のコアに対して割込みを発生させる
コア間割込み機能を提供する．割込み先のコアではユーザ定義の処理単位(コア間 ISR)を起動する(詳細は 2.27 節を参照)．
2.4.5.5

ミューテックス(参考仕様)

本 OS は，異なるコアに割付けられているタスク間で共有資源の排他制御機能を行うミューテックス
機能を提供する．スピンロックでは，タスクがスピンしてスピンロック解放を待つのに対し，ミューテックスでは，タスクがブロッキング(待ち状態へ移行)してミューテックス解放を待つ(詳細は 2.28 節を
参照)．

24

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.4.6

想定する実装方式

本節では，マルチコア対応 OS を効率的に実装するために，想定する実装方式を規定する．なお，これらの実装方式は OS の仕様には影響を与えないが，ハードウェアに対する要件に影響を与えるため，
本文書において規定する．この実装ができない場合，マニュアル等に明記する．
OS 実装方式
マルチコア対応 OS の実装方式として，1 リンクモデルを採用する【NOS0017】．これは本仕様にて規定されるすべての機能が，同一のメモリ空間で動作するように実装されることを意味する．
システムサービス実装方式
コアを跨いで実行するシステムサービスの実装は，直接操作法と呼ばれる方式を採用する【NOS0018】．これは他のコアに割付けられている OS オブジェクトに対するシステムサービスを実装する際に，他のコアの OS 内部データを直接操作して実現する方式である．

Task1

Task2

Task3

Task4

Core3

Core4

RTOS

Core1

Core2

Memory1

Memory2

Memory3

Memory4

OS内部データ

OS内部データ

OS内部データ

OS内部データInterconnection

GlobalMemory
図 2-7 直接操作法によるコア間システムサービス実装

25

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OS 実行コードの動作形態
マルチコアシステムを構成する各コアにおいて，同じ機能を持つ OS が動作する【NOS0019】．また，
OS の実行コードについては，すべてのコアで同一の実行コードを共有する【NOS1195】．OS 実行コードの持ち方によるメリットとデメリットを以下に示す．

表 2-8 OS 実行コードの持ち方によるメリットとデメリット
OS 実行コード

メリット

デメリット

コア毎に実行するコードが静的に決

コア数に比例して，OS の実行コード

各コアで独立したまっているため，コア番号をランタイが増加するため，コア数が 2 倍にな

実行コードを持つ

ムで取得する必要がなく，処理性能へると OS のメモリ使用量も 2 倍となの影響が少ない．

る．

OS の実行コード 1 本であるため，コ

動作中のコア番号をランタイムで取ア数が変化しても，OS のメモリ使用

得する処理が必要なため，処理性能量への影響が少ない．

が低下する可能性がある．

すべてのコアで同一の実行コードを共有する

26

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.5

タスク

タスクは OS によって実行されるプログラムの処理単位である．複数のタスクが存在する場合，タス
クはそれぞれ並列に実行され，実行順序は OS によってスケジューリングされる．本 OS では，タスクを制御するための機能を提供する【COS0401】．タスクは，タスク ID によって識別する．
2.5.1

タスク状態

本 OS では，同時に実行状態になることができるタスクは 1 つのみ(マルチコア対応 OS の場合はコアごとに 1 つ)であり，他の状態には複数のタスクがなることができる【COS0416】．
本 OS で，タスクが遷移する状態を以下に示す．
実行状態(RUNNING)
タスクがコアに割付けられ，タスクの処理を実行している状態．
実行可能状態(READY)
タスクを実行できる条件はすべて満たされているが，より高い優先度のタスクが実行中であるため，コアに割付けられておらず，タスクの処理を実行できない状態．スケジューラは，実行可能状態(実行状態も含まれる)のタスクの中から次に実行状態となるタスクを決定する．
待ち状態(WAITING)
1 つ以上のイベントを待っており，タスクの処理を継続できない状態(詳細は 2.8 節を参照)．
休止状態(SUSPENDED)
タスクが起動されておらず，タスクの処理が行われない状態．

27

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.5.2

タスクの種別本 OS では，基本タスクと拡張タスクを定義する．
基本タスク
タスクはシステムサービスによって起動され，実行可能状態となる．さらに，他に高い優先度のタス
クがなければコアに割付けられ，実行状態となる．基本タスクは以下の条件でコアを解放する．なお，
基本タスクは待ち状態に入ることはできない≪COS3549≫．
・ システムサービスによってタスク処理を終了した場合，コアを解放し休止状態となる【COS0408】．
・ タスクの処理を実行中に，より高い優先度のタスクが起動した場合，コアを解放し実行可能状態となる【COS0409】．
・ タスクの処理を実行中に割込みが発生した場合，タスクの状態は変更せずにコアを解放し，ISRの処理を実行する【COS0410】．
拡張タスク
拡張タスクは基本タスクの機能に加え，待ち状態に入ることができる【COS0412】．拡張タスクはシステムサービスによって待ち状態に入りコアを解放することで，より低い優先度のタスクをコアに割付けることができる．なお，本 OS では，休止状態から直接待ち状態となることはできない．
基本タスクと拡張タスクの比較
基本タスクは待ち状態に入ることがないため，拡張タスクに比べてタスク管理のためのメモリ領域として使用する RAM 容量を少なく実装することができる．一方，拡張タスクは待ち状態に入ることにより，1 つのタスクで処理を一貫して実行することができ，実行条件が整わない場合には待ち状態に入ることでデータやイベント待ちの同期を取ることができる．
また，コンフォーマンスクラスによっては，1 つの基本タスクに対して複数回の起動要求を行うことができるが，拡張タスクへはコンフォーマンスクラスによらず，複数回の起動要求を行うことはできな
い≪COS0314≫≪COS0483≫

28

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.5.3
2.5.3.1

タスクの状態遷移
基本タスクのタスク状態遷移

基本タスクの状態遷移を図 2-8 に示す．

実行可能状態
開始

開始

実行状態
RUNNING

READY

プリエンプト

起動

休止状態

終了

SUSPENDED
図 2-8 基本タスクのタスク状態遷移図
起動
システムサービスによってタスクが休止状態から実行可能状態となる状態遷移
開始
スケジューラによってタスクが実行可能状態から実行状態となる状態遷移
プリエンプト
スケジューラによってタスクが実行状態から実行可能状態となる状態遷移
終了
システムサービスによってタスクが実行状態から休止状態となる状態遷移29文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.5.3.2

拡張タスクのタスク状態遷移

拡張タスクの状態遷移を図 2-9 に示す．

開始

実行状態
RUNNING

実行可能状態
開始
READY

プリエンプト
待ち
解除

待ち

待ち状態
WAITING
起動

休止状態

終了

SUSPENDED
図 2-9 拡張タスクのタスク状態遷移図
起動
システムサービスによってタスクが休止状態から実行可能状態となる状態遷移
開始
スケジューラによってタスクが実行可能状態から実行状態となる状態遷移
プリエンプト
スケジューラによってタスクが実行状態から実行可能状態となる状態遷移
終了
システムサービスによってタスクが実行状態から休止状態となる状態遷移
待ちシステムサービスによって実行状態から待ち状態となる状態遷移
待ち解除
システムサービスによって待ち状態から実行可能状態となる状態遷移30

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.5.4
2.5.4.1

タスクの操作タスクの起動本 OS は，タスクを起動するシステムサービスとして ActivateTask，ChainTask を提供する(詳細は3.9.4 節，3.9.6 節を参照)．ActivateTask または ChainTask によってタスクが起動されると，タスクのプログラムコードの先頭から実行を開始できる状態となる【COS0432】．なお，本 OS ではタスクの起動時にパラメータを渡すことはできない【COS0482】．
タスクの多重起動
コンフォーマンスクラスによっては，1 つの基本タスクに対して複数回の起動要求を行うことができる【COS0483】．起動要求時に最大起動要求回数に達していない場合，起動要求回数がタスクごとにインクリメントされ，多重に起動要求されているタスクが終了した後，再度起動される【NOS0364】．
多重に起動要求されているタスクが不正終了，強制終了した場合も，再度起動される【NOS0380】．
多重に起動要求されているタスクが所属する OSAP が強制終了した場合は，再度起動されず，起動要求はクリアされる【NOS0381】．
最大起動要求回数は，コンフィギュレーション時に静的に指定する【COS0434】．
OSEK 仕様との違い
OSEK 仕様では，起動要求時に最大起動要求回数に達していない場合，起動要求はタスク優先度ごと，要求順にキューイングされると規定されている【COS0435】．しかし，タスクの起動順序は優先度によって確定できるため，起動要求の要求順を保持する必要性が不明確である．また，要求順を保持するには実装が複雑となり，メモリを消費することから，本仕様では要求順を保持する仕様を削除した≪
NOS0364≫．
2.5.4.2

タスクの終了本 OS は，タスク自身を終了するシステムサービスとして TerminateTask を提供する(詳細は 3.9.5
節を参照)．タスクはタスク自身からのみ終了することができる．また，タスクの終了と同時に他のタスクを起動するシステムサービスとして ChainTask を提供する(詳細は 3.9.6 節を参照)．
タスクは，タスクのプログラムコード末で，TerminateTask もしくは ChainTask を呼び出さなければならない．TerminateTask，ChainTask を呼び出すことで，OS はタスクを正常に終了する【COS1427】．
TerminateTask，ChainTask を呼び出さずに終了した場合，タスクの不正終了となる(詳細は 2.20.1.1
節を参照)．
SC2，SC3，SC4 においては，保護違反時処理によりタスクが強制終了されることがある(詳細は2.22.4.1 節を参照)．また，タスクが所属する OSAP が強制終了されることで，タスクが強制終了されることがある(詳細は 2.22.4.3 節を参照)．
2.5.4.3

実行中のタスク ID の取得

本 OS は，現在実行中のタスクの ID を取得するシステムサービスとして GetTaskID を提供する(詳31文書番号：ATK2-0010
文書名：ATK2 外部仕様書
細は 3.9.8 節を参照)．
2.5.4.4

タスク状態の取得

本 OS は，タスクの状態を取得するシステムサービスとして GetTaskState を提供する(詳細は 3.9.9
節を参照)．
2.5.4.5

タスクのイベント待ち

拡張タスクでは，イベント管理機能における WaitEvent というシステムサービスによって待ち状態に入ることができる(詳細は 2.8 節を参照)．
2.5.5

タスクの実装方法

タスクの本体記述
OS はタスク ID とタスクのエントリアドレスの対応情報を保持し，エントリアドレスを使用してタス
クを呼び出す【COS3293】．
タスクの本体記述を以下に示す【COS3294】〔COS0482〕．

TASK(<タスク ID>){}
タスク ID の生成方法
タスク ID はコンフィギュレーション時にジェネレータによって割り当てる【COS3295】．
タイミング保護機能の適用
SC2，SC4 ではタスクにタイミング保護機能が適用される(詳細は 2.17.2 節を参照)．タスクに対する時間制約はコンフィギュレーション時に静的に指定する．

32

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.5.6

タスク優先度

タスク優先度とは，実行可能状態のタスクの中から次に実行状態となるタスクを決定するために，タスクに割当てられる優先順位である．タスクは，タスク優先度に従ってコアに割付けられ，終了時にコアを解放する．
2.5.6.1

タスク優先度の範囲と優先順位

タスク優先度の最小値は 0 である【COS0441】．タスク優先度は値が大きいほど高い優先順位を持つ【COS0442】．
タスク優先度の指定
本 OS では，タスク優先度はコンフィギュレーション時に静的に割当てられ，システムサービスによる動的なタスク優先度の変更はサポートしない【COS0443】．コンフィギュレーション時に割当てられたタスク優先度を初期優先度と呼び，タスク実行中のタスク優先度を現在優先度と呼ぶ．
ただし，リソース管理機能における GetResource を使用した場合，OS によって一時的に優先度が引き上げられる(詳細は 2.9.2 節を参照)．現在優先度は，リソース獲得，解放によって変化する．
タスク状態遷移時のタスクの優先順位
プリエンプトされたタスクは同一優先度を持つ実行可能状態のタスクの中で最も高い優先順位となる【COS0446】．また，待ち解除されたタスクは同一優先度を持つ実行可能状態のタスクの中で最も低い優先順位となる【COS0447】．同様に，起動されたタスクは，同一優先度を持つ実行可能状態のタスクの中で最も低い優先順位となる≪COS0450≫．

33

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.5.7

スケジューラ

実行状態または実行可能状態であるタスクの中から，次に実行状態とすべきタスクを決定する処理をスケジューリングと呼び，スケジューリングを行う OS 機能をスケジューラと呼ぶ．
スケジューラは，実行状態のタスクと実行可能状態のタスクの中から，最も優先度の高いタスクを検索し，そのタスクを実行状態にする【COS0448】．同じ優先度のタスクが複数存在する場合，最初に実行可能状態もしくは実行状態に遷移したタスクを，次の実行タスクとする【COS0450】．

高

スケジューラ優先順位

低レディキュー(FIFO)

高・・・

n

次に実行するタスク

3
コアに割付けられた
タスク

優先度

2
コア

1

0
低

図 2-10 スケジューラによる実行タスクの検索

2.5.7.1

スケジューラの操作

本 OS は，明示的なスケジューリングを要求するシステムサービスとして Schedule を提供する(詳細は 3.9.7 節を参照)．
2.5.7.2

タスクディスパッチ機構

本 OS は，スケジューリングにより実行中のタスクを中断して，別のタスクに切り換えるプリエンプ
ト機能を持つ【COS0413】．中断したタスクの処理を，中断した箇所から再開するため，OS はタスク
切換え時にタスクコンテキストの保存と復帰を行う【COS0414】．

34

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.5.8

スケジューリングポリシ

本 OS では，3 種類のスケジューリングポリシをサポートする．スケジューラは，スケジューリング
ポリシで規定されたタイミングで起動され，タスクの再スケジューリングを行う【COS0438】．
スケジューラ起動時に，DisableAllInterrupts による割込み禁止状態であった場合，OS は割込み許可状態に戻す【NOS0648】．例えば，タスク終了時に DisableAllInterrupts による割込み禁止状態であった場合，次に起動するタスクが実行状態となった時点で，割込み許可状態となっている．
2.5.8.1

フルプリエンプティブスケジューリング

フルプリエンプティブスケジューリングでは，タスクディスパッチを伴うシステムサービスの他に，タスク実行中の任意のタイミングに，OS によって再スケジューリングが行われ実行中タスクがプリエンプトされる可能性がある【COS0451】．フルプリエンプティブスケジューリングで動作するタスクを，プリエンプティブタスクと呼ぶ．
フルプリエンプティブスケジューリングを使用する場合，タスクがユーザの意図しないタイミングでプリエンプトされる可能性がある．そのため，共有資源へのアクセスなど，処理の実行を不可分に行う
場合，ユーザは OS が提供する機能を用いて排他制御を行う必要がある．

T1の起動

優先度
高

タスクT1

低

タスクT2

T1の終了

T2の実行は遅延される

図 2-11 フルプリエンプティブスケジューリングの例

35

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
フルプリエンプティブスケジューリングの再スケジューリングタイミング
フルプリエンプティブスケジューリングで，再スケジューリングが行われる可能性があるのは以下のタイミングである．
・ タスクの終了時 (TerminateTask 発行時)≪COS3232≫
・ タスク終了とタスク起動要求の実行時 (ChainTask 発行時)≪COS3248≫
・ タスク起動処理要求の実行時 (ActivateTask 発行時)≪COS3216≫
・ 待ち状態への遷移時 (WaitEvent 発行時)≪COS3546≫
・ 待ち状態のタスクに対するイベントのセット時 (SetEvent 発行時)≪COS3553≫
・ リソース解放時 (ReleaseResource 発行時)≪COS3424≫
・ C2ISR 処理レベルからタスク処理レベルへの復帰時【COS0460】
・ タスクの不正終了時(詳細は 2.20.1.1 節を参照)
・ タスクの強制終了時(詳細は 2.22.4.1 節を参照)
・ タスクが所属する OSAP の強制終了時(詳細は 2.22.4.3 節を参照)
アプリケーション作成時の注意事項
フルプリエンプティブスケジューリングを使用する場合は，システムサービスによって明示的なスケ
ジューリングタイミングを OS に通知する必要はない．ただし，ノンプリエンプティブスケジューリン
グ向けに開発したアプリケーションを，フルプリエンプティブスケジューリングで使用する場合などにおいて，プリエンプティブタスクから Schedule を呼び出しても OS は何も処理をしないため，影響はない．

36

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.5.8.2

ノンプリエンプティブスケジューリング

ノンプリエンプティブスケジューリングは，実行状態のタスクがシステムサービスによって明示的にスケジューリングの要求を行わない限り，スケジューリングが発生しないスケジューリングである【COS0477】．ノンプリエンプティブスケジューリングで動作するタスクを，ノンプリエンプティブタ
スクと呼ぶ．
ノンプリエンプティブスケジューリングの再スケジューリングタイミング
ノンプリエンプティブスケジューリングで，再スケジューリングが行われる可能性があるのは以下のタイミングである．
・ タスクの終了時 (TerminateTask 発行時) 【COS0462】
・ タスク終了とタスク起動要求の実行時 (ChainTask 発行時) 【COS0463】
・ 明示的なスケジューラ呼出し時 (Schedule 発行時)≪COS3261≫
・ 待ち状態への遷移時 (WaitEvent 発行時) 【COS0465】
・ タスクの不正終了時(詳細は 2.20.1.1 節を参照)
・ タスクの強制終了時(詳細は 2.22.4.1 節を参照)
・ タスクが所属する OSAP の強制終了時(詳細は 2.22.4.3 節を参照)
アプリケーション作成時の注意事項
ノンプリエンプティブスケジューリングを使用する場合は，明示的なスケジューリング要求があるまでタスクがプリエンプトされないため，実行状態のタスクよりも高い優先度のタスクが実行可能状態になっても，ユーザが配置した次の再スケジューリングタイミングまで，高い優先度のタスクの実行が遅
延される．

T1の起動

T1の実行は遅延される

優先度
高

タスクT1

タスクT2
低
T2の終了

図 2-12 ノンプリエンプティブスケジューリングの例

37

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.5.8.3

混合プリエンプティブスケジューリング

プリエンプティブタスクと，ノンプリエンプティブタスクが混合している場合のスケジューリングを，
混合プリエンプティブスケジューリングと呼ぶ．
OS は，各タスクのスケジューリングポリシに従ってスケジューリングを行う．

T3がノンプリエンプティブのため
T2の実行は遅延される

優先度
高 タスクT1(フルプリエンプティブ)

T1の起動

T2がフルプリエンプティブのため
T2の実行は遅延される

T2の起動

タスクT2
(フルプリエンプティブ)

タスクT3
低

(ノンプリエンプティブ)
T3の終了

図 2-13 混合プリエンプティブスケジューリングの例

2.5.8.4

スケジューリングポリシの指定

スケジューリングポリシは，タスク毎にコンフィギュレーション時に静的に指定する【COS0470】．
つまり，プリエンプティブタスクと，ノンプリエンプティブタスクが，混在した場合が，混合プリエン
プティブスケジューリングとなる．

38

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.5.9

グループタスクグループタスクは複数のタスクの関連付けを行い，関連付けられたタスク間ではノンプリエンプティ
ブなスケジューリングを行う仕組みである．グループタスクは，内部リソース機能により実現する．
本 OS ではグループタスクの考え方を用いて，プリエンプティブスケジューリングとノンプリエンプ
ティブスケジューリングを組み合わせてタスクをスケジューリングすることが可能である．
2.5.9.1

グループタスク内タスクのスケジューリングポリシ

グループタスクに含まれるタスクのスケジューリングは，通常のタスクと同じく，タスク優先度とス
ケジューリングポリシに沿って行われる．グループタスクに含まれるタスクが通常のタスクと異なる点
は，スケジューラにより実行状態となった際に，グループタスク内のタスクはグループ内の他のタスクに対してノンプリエンプティブなタスクとして動作することである【COS0478】．一方，グループタス
クに含まれるタスクの最高優先度より高いタスクに対してはフルプリエンプティブなタスクとして動作する【COS0479】．
2.5.9.2

内部リソースによるグループタスクの実現方法

図 2-14 の例では，タスク T2 とタスク T3 がグループタスクとして定義されている．タスク T4 がタ
スク T3 を起動するとタスク T3 は内部リソースを自動的に獲得し，内部リソースの優先度までタスク優先度が引き上げられる．そのため，タスク T2 を起動してもタスク T2 にはタスクディスパッチしな
い．一方，グループタスクに含まれず内部リソースより優先度の高いタスク T1 を起動するとタスクディスパッチが行われ，タスク T1 が実行される．

起動

優先度
高

終了

タスクT1

内部リソース起動
リソース自動獲得

タスクT2

起動
タスクT3

リソース自動獲得

終了

グループ
タスク

リソース自動解放タスクT4
低図 2-14 グループタスクの動作例

39

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.5.10 マルチコア対応 OS におけるスケジューリング
マルチコア対応 OS におけるスケジューリングは各々のコアで独立に行われる≪OS569≫．つまり，各々のコアが個別にスケジューラとタスクディスパッチ機構を持っており，前述のスケジューリングポ
リシが適用される単位は，同じコアに割付けられているタスクの集合となる．
割込み禁止状態となっているコアに対して，ディスパッチを伴うシステムサービスを発行した場合，その割込み禁止状態が解除されるまで，ディスパッチが保留される【NOS0919】．
2.5.11 スタック共有
基本タスクは，待ち状態となることがないため，1 つの基本タスクが実行状態となってから終了するまでに，他の同一タスク優先度の基本タスクが実行状態となることがない．したがって，同一タスク優
先度の基本タスクが使用するスタックは，ジェネレータによって共有される【NOS0624】．同一タスク
優先度の基本タスクに設定したスタックサイズが異なる場合は，最も大きいサイズでスタック領域が確保され，それぞれのタスクのスタックサイズは最も大きいサイズに拡張される【NOS0630】．
ATK2 では，タスク毎にスタックの先頭番地を指定可能であるので，タスクの種別やタスク優先度に関わらず，同一番地を指定することで複数のタスクのスタックを共有することができる≪NOS1196≫≪
NOS1197≫．

40

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.6

アプリケーションモード

アプリケーションモードは，OS がアプリケーションプログラムに対して，異なる制御モードでの起動を提供するための機能である．
OS は 1 つ以上のアプリケーションモードをサポートしなければならない【COS0501】．アプリケー
ションモードは OS の動作開始以降，変更することはできない【COS0502】．アプリケーションモード
はすべてのコンフォーマンスクラスで使用できる．
2.6.1

アプリケーションモードによる OS 起動処理の制御

アプリケーションモードを使用することで，ユーザは OS 起動時に自動起動する OS オブジェクトを変更することができる【COS0505】．一方，アプリケーションモードは OS 終了時の処理には影響しな
い【COS0508】．
ユーザは，アプリケーションモードを，OS 起動前に決定する【COS0504】．アプリケーションモー
ドは，StartOS 実行時の引数によって決定する≪COS3709≫．
2.6.2

自動起動が可能な OS オブジェクト

OS が自動起動を行うことができる OS オブジェクトを以下に示す．
タスクの自動起動
コンフィギュレーション時に指定されたタスクを，OS 起動時に自動起動する【COS0506】〔COS0505〕．
アラームの自動起動
コンフィギュレーション時に指定されたアラームを，OS 起動時に自動起動する【OS476】〔COS0505〕．
スケジュールテーブルの自動起動
コンフィギュレーション時に指定されたスケジュールテーブルを，OS 起動時に自動起動する【NOS0670】〔COS0505〕．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，自動起動するタスク，アラームを起動した後で，スケジュールテーブルを起動すると規定されている【OS510】．しかし，オブジェクトの起動順序がユーザから観測できないため，
順序に関する規定を削除した．
2.6.3

指定されたアプリケーションモードの取得

本 OS は，OS 起動時に指定されたアプリケーションモードを取得するシステムサービスとしてGetActiveApplicationMode を提供する(詳細は 3.9.1 節を参照)．

41

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.6.4

自動起動オブジェクトの指定

タスク，アラーム，スケジュールテーブルが自動起動するアプリケーションモードを，コンフィギュ
レーション時に静的に指定する≪COS0506≫≪OS476≫≪NOS0670≫．1 つのオブジェクトを，複数のアプリケーションモードに指定することが可能である【NOS0370】．
2.6.5

マルチコア対応 OS におけるアプリケーションモード

マルチコアシステムでは，ユーザは，OS を起動するすべてのコアで StartOS を実行する【OS607】．
アプリケーションモードを選択せず，他コアで指定されたアプリケーションモードに従う場合は，StartOS に DONOTCARE を指定する【OS609】．ユーザは，OS を起動する少なくとも 1 つのコアで，
DONOTCARE 以外のアプリケーションモードを指定する必要がある【OS610】〔NOS0920〕．また，
複数のコアにおいて，DONOTCARE 以外の異なるアプリケーションモードを指定して，StartOS が呼び出された場合，OS は起動せず，すべてのコアで無限ループする【OS608】．すべてのコアにおいて，
DONOTCARE を指定して，StartOS が呼び出された場合も，OS は起動せず，すべてのコアで無限ループする【NOS0920】．つまり，マルチコアシステムを構成するすべてのコアで，共通のアプリケーションモードが適用されるため，コアごとに個別のアプリケーションモードを指定して OS を動作させることはできない．
本 OS は，各コアにおいて，StartOS で指定された共通のアプリケーションモードで自動起動するよ
うに，コンフィギュレーション時に指定されたタスクを，最初のスケジューリングの前に起動する【OS668】．本 OS は，各コアにおいて，StartOS で指定された共通のアプリケーションモードで自動起動するように，コンフィギュレーション時に指定されたアラームを，最初のスケジューリングの前に起動する【OS669】．本 OS は，各コアにおいて，StartOS で指定された共通のアプリケーションモー
ドで自動起動するように，コンフィギュレーション時に指定されたスケジュールテーブルを，最初のス
ケジューリングの前に起動する【OS670】．

42

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.7

割込み処理

割込み処理は割込みコントローラからの割込み要求をトリガとして起動される処理である．割込み処理は，スケジューリングポリシに関係なく，タスクの処理を中断することができる【COS0610】．割込
み処理の処理レベルはタスクより高いため，割込み処理中にタスクは動作しない【COS1429】．
ISR は ISR ID によって識別する．
2.7.1

ISR の種別

ISR には，C1ISR と C2ISR の 2 種類がある【COS0601】．
なお，ISR 中では使用できるシステムサービスが制限される(詳細は表 3-1 を参照)．
C1ISR
C1ISR は OS が管理しない ISR である．ただし，C1ISR 割込みと C2ISR 割込みの割込みベクタを分けることができないプロセッサにおける C1ISR 割込み出入り口処理は，ターゲット定義である【NOS1198】．また，C1ISR の処理内では，OS のシステムサービスは一部を除き使用してはならない【COS0602】．
C1ISR は OS が管理しない ISR であるため，C1ISR によりタスクの再スケジューリングが発生することはない【COS0603】．また，C1ISR は，C2ISR より割込み出入り口処理時間が短く，割込みが禁止される時間も短いため，応答性がよい．
C1ISR 実行中に，以下のシステムサービスを対で呼び出さなかった場合の動作は保証されない【NOS0378】．
・DisableAllInterrupts と EnableAllInterrupts
・SuspendOSInterrupts と ResumeOSInterrupts
・SuspendAllInterrupts と ResumeAllInterrupts
また，C1ISR も，C2ISR と同様に，ISR ID によって識別する【NOS0398】．C1ISR の ISR ID は，
SC3，SC4 において，システムサービスの引数に，C1ISR を指定した場合に，エラーを検出する際に使用される．
ATK2 は，C1ISR が動作していることを OS が管理するために，C1ISR の出入り口処理で，OS が管理する処理レベルを C1ISR 処理レベルへ変更することができる機能を持つ【NOS1199】．変更方法は
ATK2 のユーザーズマニュアルを参照．C1ISR の出入り口処理で C1ISR 処理レベルへ変更した場合，
C1ISR から使用できないシステムサービスを呼び出すと，OS は E_OS_CALLEVEL を返す【NOS1200】．
C2ISR
C2ISR は OS が管理する ISR である．OS は C2ISR 実行に必要な割込み出入り口処理を提供する【COS0604】．C2ISR の処理内では OS のシステムサービスを使用することができるため，C2ISR の出口処理ではタスクの再スケジューリングが発生する可能性がある．

43

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.7.2

再スケジューリングタイミング

OS は ISR 実行中に呼び出されたシステムサービスでは，再スケジューリングを行わない【COS0605】．
C2ISR 実行中に再スケジューリングが必要となった場合，OS はすべての C2ISR の実行が終了した後に，再スケジューリングを行う【COS0615】
．

優先度

割込み発生

高

T2に対してActivateTask発行

ISR INT1(C1ISR)

割込み発生
ISR INT2(C2ISR)

T2の起動

再スケジューリング

タスク T2

タスク T1低※T1のスケジューリングポリシーがフルプリエンプティブの場合

図 2-15 ISR 終了後の再スケジューリング動作の例

44

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.7.3

割込み管理の実装方法

C2ISR の本体記述
C2ISR の本体記述を以下に示す【COS3374】．
ISR(<ISR ID>){}
C1ISR の本体記述
ATK2 では，C2ISR と同様に，C1ISR 用の本体記述を用いて，C1ISR を宣言する．ATK2 における
C1ISR の本体記述を以下に示す【NOS1201】．
C1ISR(<ISR ID>){}
また，C1ISR は，C 言語とアセンブリ言語のどちらでも定義可能とする【NOS1202】．アセンブリ言語
で定義する場合のルーチン名は，以下である【NOS1203】．

C1ISRMain<ISR ID>
OSEK 仕様との関連
OSEK 仕様では，C1ISR の本体記述方法は実装定義であると規定している【COS3376】．本仕様において，C1ISR の本体記述方法を定義した≪NOS1201≫≪NOS1202≫≪NOS1203≫．
タイミング保護機能の適用
SC2，SC4 では C2ISR にタイミング保護機能が適用される(詳細は 2.17.2 節を参照)．C2ISR に対する時間制約はコンフィギュレーション時に静的に指定する必要がある．
OSAP の適用
SC3，SC4 の時に，C1ISR が信頼 OSAP に所属していない場合，ジェネレータはエラーを検出する【OS361】．
OS 自身が使用する割込みに対する制約
OS 自身が使用する割込み要因が，ISR のコンテナで指定された場合，エラーを検出する【NOS0363】．
また，SC3，SC4 の時に，OS 自身が使用する割込み要因が，OSAP のコンテナで指定された場合もエ45

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
ラーを検出する【OS177】．なお，OS 自身が使用する割込みとは，タイミング保護違反を検出するために使用する割込みなどのことである．
2.7.4

割込み優先度

割込み優先度とは，割込み処理中に発生した割込み要求を受け付けるかを決定するために，割込みに割当てられる優先順位である．処理中の割込み優先度より高い優先度を持つ割込みであれば要求は受け付けられ，同じか，もしくは低い割込み優先度をもつ割込みであれば，要求は受け付けられない．
2.7.4.1

割込み優先度の範囲

割込み優先度の段階数は，1 以上である【COS0303】．割込み優先度は値が大きいほど高い優先順位を持つ【NOS0897】．割込み優先度の最大値はターゲットの割込みコントローラに依存する【COS0607】．
ATK2 では，割込み優先度には，1 以上の値が割当てられる【NOS1204】．コンフィギュレーション
時のタスク優先度と割込み優先度は独立しており，割込み優先度は，タスク優先度の最大値より高くなるように解釈される【NOS1205】．これは，タスクの上限優先度が変更された際に，割込み優先度を変更する必要をなくすためである．
OSEK 仕様との違い
OSEK 仕様では，ISR に対する割込み優先度の割当ては，実装とハードウェアに依存すると規定している．本仕様では，コンフィギュレーション時に割込み優先度を設定できるよう規定した≪NOS0665≫．
2.7.4.2

割込み優先度の制約

C1ISR の割込み優先度は，すべての C2ISR の割込み優先度より高く指定しなければならない【NOS0369】．マルチコア対応 OS では，すべてのコアを通して C1ISR の割込み優先度が，C2ISR の割込み優先度より高くなるように指定しなければならない【NOS1055】．
C1ISR より高い割込み優先度を持つ C2ISR がある場合，図 2-16 のように C1ISR に対して C2ISRが割込むケースが発生する．このとき，C2ISR 中のシステムサービスでタスク切換えの必要が生じた場
合，C1ISR の出口処理では再スケジューリングが行われないため，再スケジューリング点が不定となる
可能性がある．

46

文書番号：ATK2-0010
文書名：ATK2 外部仕様書

システムサービスを使用するプログラムコード(e.g. ActivateTask, SetEvent)

優先度

割込み発生

高

C2ISR

低

C1ISR

OSを介さず
割込み元へ

システムサービスを使用しない
プログラムコード

再スケジューリングが行われない

図 2-16 C1ISR に C2ISR が割込んだ場合の問題点

2.7.5

実行中の ISRID の取得

本 OS は，現在実行中の ISR の ID を取得するシステムサービスとして GetISRID を提供する(詳細は3.9.16 節を参照)．
2.7.6

割込み禁止・許可状態の操作

本 OS は，割込みを禁止する機能と，許可する機能を提供する【COS0612】．割込みの禁止と許可は組で使用しなければならないが，割込みを禁止した状態で，タスクもしくは C2ISR を終了した場合は，サービス保護機能により割込みが許可される≪OS239≫≪OS368≫．ただし，割込みを禁止した状態で，
C1ISR を終了した場合の動作は保証されない【NOS0346】．
割込み禁止中に，割込みが発生した場合，割込みを許可した時点で，まだ割込み要求が保持されていれば，その時点で割込み要求を受け付ける【NOS1162】．
2.7.6.1

全割込みの禁止・許可状態の操作

本 OS は，すべての割込みを禁止するシステムサービスとして DisableAllInterrupts を提供する(詳細は 3.9.11 節を参照)．また，DisableAllInterrupts によって禁止された割込みを許可するシステムサービスとして EnableAllInterrupts を提供する(詳細は 3.9.10 節を参照)．
DisableAllInterrupts/EnableAllInterrupts は，割込み禁止状態をネストして操作することはできな
い．
本 OS は，すべての割込みを禁止するシステムサービスとして SuspendAllInterrupts を提供する．(詳細は 3.9.13 節を参照)．また，SuspendAllInterrupts によって禁止された割込みを許可するシステムサービスとして ResumeAllInterrupts を提供する(詳細は 3.9.12 節を参照)．
SuspendAllInterrupts/ResumeAllInterrupts は，割込み禁止状態をネストして操作することができ
る．

47

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.7.6.2

OS 割込みの禁止・許可状態の操作

本 OS は，すべての C2ISR を禁止するシステムサービスとして SuspendOSInterrupts を提供する．
(詳細は 3.9.15 節を参照)．また，SuspendOSInterrupts によって禁止された割込みを許可するシステ
ムサービスとして ResumeOSInterrupts を提供する(詳細は 3.9.14 節を参照)．
SuspendOSInterrupts/ResumeOSInterrupts は，割込み禁止状態をネストして操作することができ
る．
2.7.6.3

個別割込みの禁止・許可状態の操作

本 OS は，割込みを個別に禁止するシステムサービスとして DisableInterruptSource を提供する(詳細は 3.9.18 節を参照)．また，DisableInterruptSource によって禁止された割込みを許可するシステム
サービスとして EnableInterruptSource を提供する(詳細は 3.9.17 節を参照)．
2.7.6.4

マルチコア対応 OS における割込み禁止・許可システムサービス

割込み禁止，許可を行うシステムサービスの対象となる割込み要因は，システムサービスを呼び出した処理単位が割付いているコアに接続されている割込み要因のみとする≪OS590≫≪OS591≫≪
OS592≫≪OS593≫≪OS594≫≪OS595≫．
2.7.6.5

未使用の割込み番号の取り扱い

OS は，コンフィギュレーション時に指定されなかった割込み番号に対する割込みを，割込み禁止状
態として起動し，以後割込みを許可することはない【NOS0857】．ただし，ターゲットによっては，未定義の割込みが発生した場合に，CPU 例外として扱うことがある【NOS1138】．
2.7.7

スタック共有C2ISR は，待ち状態となることがないため，1 つの C2ISR が実行状態となってから終了するまでに，他の同一割込み優先度の C2ISR が実行状態となることがない．したがって，同一割込み優先度の C2ISRが使用するスタックは，ジェネレータによって共有される【NOS0651】．同一割込み優先度の C2ISRに設定したスタックサイズが異なる場合は，最も大きいサイズで確保され，それぞれの C2ISR のスタ
ックサイズは最も大きいサイズに拡張される【NOS0660】．

48

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.8

イベント

イベントはタスクが同期処理を行うための OS オブジェクトである．
2.8.1

イベントとタスクの関係

イベントは拡張タスクでのみ使用することができる【COS0702】．イベントは単独の OS オブジェク
トではなく，タスクが所有する OS オブジェクトである【COS0705】．タスクは複数のイベントを持つことができるが，タスクが持つことのできるイベント数には制限がある【COS0706】．
イベントは，所有するタスクとイベントマスク値によって識別される【COS0708】．
イベントの操作とタスク状態
イベント管理機能として，OS は以下の機能を提供する．
・ イベントのセットおよび待ち解除
タスクの持つイベントに対してイベントを通知すること．および，イベントの通知によってイベント待ちから実行可能状態とすること．
・ イベント待ちイベントの通知を待つこと．
・ イベントのクリア
通知済みのイベントをクリアすること．
・ イベントマスク値の取得
通知済みのイベントマスク値を取得すること．
これらの操作によって，タスクは，実行状態から待ち状態，待ち状態から実行可能状態へと遷移する．
イベントの表現形式
イベントはビットマスクで表現される【COS0710】．イベントの各ビットが持つ意味はアプリケーション依存である．
イベントの初期状態
タスクのイベントはタスク起動時に OS によってクリアされる【COS0709】．

49文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.8.2
2.8.2.1

イベントの操作
イベントのセット本 OS は，休止状態でない拡張タスクに対してイベントのセットを行うシステムサービスとしてSetEvent を提供する(詳細は 3.9.19 節を参照)．
2.8.2.2

イベントのクリア

本 OS は，イベントのクリアを行うシステムサービスとして ClearEvent を提供する(詳細は 3.9.20
節を参照)．イベントのクリアは ClearEvent を発行するタスク自身に対してのみ，行うことができる【COS0719】．
2.8.2.3

イベント待ち本 OS は，イベント待ちを行うためのシステムサービスとして WaitEvent を提供する(詳細は 3.9.22
節を参照)．タスク種別が拡張タスクの場合のみ，イベント待ちを行うことができる．
拡張タスクがイベント待ちを要求すると，指定されたイベントがセットされるまで待ち状態となる【COS0722】〔COS0412〕．指定されたイベントのうち，少なくとも 1 つがセットされた場合，拡張タ
スクは待ち状態から実行可能状態に遷移する【COS0720】．
イベント待ちを要求した時点で既にイベントがセットされていた場合，タスクは実行状態を継続する≪COS0721≫．
2.8.2.4

イベントマスク値の取得

本 OS は，タスクが保持しているイベントマスク値を取得するシステムサービスとして GetEvent を提供する(詳細は 3.9.21 節を参照)．

50

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.8.3

イベントの動作例

優先度
高スケジューラSET

T1のイベント

CLEAR

CLEAR

拡張タスクT1

イベントクリア

拡張タスクT2

イベント待ちイベントセット低

図 2-17 プリエンプティブタスクの同期例

図 2-17 の例では，待ち状態の T1 に対して T2 がイベントをセットすることにより，スケジューラが起動され T1 が実行可能状態へ遷移する．T1 の優先度は T2 より高いため，T2 は T1 にプリエンプトされる．その後，T1 がイベントクリアしてからイベント待ちすることにより再び待ち状態に遷移し，ス
ケジューラが起動して T2 が実行される．

優先度
高スケジューラSET

T1のイベント

CLEAR

CLEAR

拡張タスクT1

拡張タスクT2

イベントクリア

イベントセット

イベント待ち再スケジューリング

低図 2-18 ノンプリエンプティブタスクの同期例
図 2-18 の例では，図 2-17 と同様に T1 に対して T2 がイベントをセットするが，ノンプリエンプティブタスクであるため再スケジューリングがすぐには行われず，T2 が再スケジューリングを明示的に行うまで T2 はプリエンプトされない．

51

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.8.4

イベントマスク値の設定

イベントマスク値の設定方法は，実装によっていくつかの方法が考えられるが，本節では ATK2 における，イベントマスク値の設定について説明する．
ATK2 では，タスクごとに定義できるイベントの上限数を 32 とする【NOS1194】〔COS0706〕．また，
イベントの各ビットが持つ意味をタスク間で共有する使用方法を想定して，イベントは複数のタスクで使用可能とする【NOS1206】．イベントマスク値は，コンフィギュレーション時に指定するか，ジェネ
レータによって自動的に割り当てることで決定する．
コンフィギュレーション時に指定するイベントマスク値に，複数のビットが立った値を指定することができる【NOS1209】．
イベントマスク値を自動的に割り当てる際，設定済みのイベントマスク値と重複しないイベントマス
ク値を用意できない場合，ジェネレータはエラーを検出する【NOS1211】．

52

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.9

リソース

リソースは処理単位間で排他制御を行うための OS オブジェクトである．リソースはリソース ID によって識別する．
リソースを使用して排他区間を開始することをリソースの獲得と呼び，排他区間を終了することをリ
ソースの解放と呼ぶ．また，処理単位がリソースを獲得して，排他状態にあることを，リソースの占有と呼ぶ．リソースはすべてのコンフォーマンスクラスで使用できる【COS0801】．
本 OS ではリソースによる排他制御の方法として優先度上限プロトコルを採用する．
2.9.1

リソースの種別

リソースオブジェクトに対しては，標準リソース，内部リソース，リンクリソースのいずれかを指定することができる．どのリソースを指定しても排他制御の振る舞いは同様である【COS0830】．
標準リソース
処理単位がシステムサービスを呼び出すことにより獲得，解放するリソース．
内部リソース
タスクが実行状態へ遷移する時，実行状態となったタスクに対して OS が自動的に獲得するリソース【COS0833】．ノンプリエンプティブスケジューリングにおける再スケジューリング時に，実行状態でなくなったタスクから OS によって自動的に解放される【COS0834】．GetResource，ReleaseResource
により獲得，解放を行うことはできない【COS0829】．
リンクリソース
標準リソースにリンクされ，リンクされた標準リソースと同じ振る舞いをするリソース(処理単位がシ
ステムサービスを呼び出すことにより獲得，解放する)．

53文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.9.2

優先度上限プロトコルと上限優先度

本 OS では，優先度上限プロトコルを用いた排他制御を行う．
上限優先度
リソースは属性として上限優先度を持つ．リソースの上限優先度は，そのリソースを獲得するすべてのタスクの中で最も高いタスク優先度となる優先度である【COS0826】．
上限優先度の決定
ジェネレータはリソースを獲得するすべてのタスク優先度を解釈し，リソースの上限優先度を決定する【COS0825】．リソースを用いて排他制御を行うタスクに対して，コンフィギュレーション時に獲得するリソースを指定する必要がある．

54

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.9.3
2.9.3.1

リソースの操作
リソースの獲得

本 OS は，リソースを獲得するためのシステムサービスとして GetResource を提供する(詳細は 3.9.23
節を参照)．タスクがリソースを獲得した時，OS はタスクの現在優先度を，リソースの上限優先度まで引き上げる【COS0827】．リソースを獲得しタスク優先度を引き上げることで，タスク優先度がリソースの上限優先度以下のタスクが実行されることを防止し，共有資源の排他制御を行う【COS0805】〔COS0827〕．したがって，複数のタスクや C2ISR が，同時に同じリソースを占有することはない．
リソースを獲得するタスクの初期優先度がリソースの上限優先度より高い場合は，リソースを獲得することはできない【COS0804】．逆に，リソースを獲得するタスクの初期優先度がリソースの上限優先度以下の場合は，コンフィギュレーションに関係なく，リソースを獲得することができる【NOS0367】．
また，タスク，C2ISR は同一のリソースをネストして獲得することはできない【COS0810】．
同一リソースをネストして獲得する要求に対応するため，定義済みの標準リソースと全く同じ振る舞いをするリンクリソースを，コンフィギュレーションで定義可能とする【COS0839】． リンクリソース
は，リンク元の標準リソースとは別のリソース ID が振られ，リンクリソースとリンク元の標準リソー
スはネストして獲得可能である【COS0840】．標準リソースと同様に，同じリンクリソースは，ネスト
して獲得できない【COS0841】．
2.9.3.2

リソースの解放本 OS は，GetResource によって獲得したリソースを解放するためのシステムサービスとしてReleaseResource を提供する(詳細は 3.9.24 節を参照)．
リソースを解放した時点で，OS は再スケジューリングを行う【COS0821】．この時，リソースを解放したタスクがシステムの中で最高優先度のタスクでない場合，リソースを解放したタスクはプリエン
プトされ，OS は最高優先順位を持つタスクを開始する．
2.9.3.3

リソース占有中の状態

タスクはリソースを占有した状態で TerminateTask，ChainTask，Schedule，WaitEvent のシステ
ムサービスを呼出してはならない【COS0811】．また，C2ISR はリソースを占有した状態で処理を終了
してはならない≪OS369≫．ただし，これらの制約は内部リソース占有中には適用されない【COS0835】．
先に獲得したリソースの占有中に，異なるリソースをネストして獲得することができる【COS3412】．
リソースはネストして獲得することができるが，LIFO の順序で解放を行わなくてはならない【COS0813】．
使用上の注意リソースの獲得と解放は，同一の関数内で行うことを推奨する．

55

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.9.3.4

リソースの獲得と解放による排他例

優先度
高 タスク T0

リソース解放上限優先度

タスク T1

リソース解放リソース獲得タスク T2

タスク T3

タスク T4

リソース獲得低

図 2-19 リソースによるタスク間の排他例
図 2-19 では，T1 と T4 がリソースを獲得可能であり，T4 がリソースを占有している間は T1 が実行状態にならない．また，優先度が引き上げられることにより T2，T3 も実行状態にならず，優先度逆転も起こらないことを示している．

56

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.9.4

優先度上限プロトコルの C2ISR 処理レベルへの拡張

ATK2 では，優先度上限プロトコルを C2ISR 処理レベルまで拡張し，タスク－ISR 間，ISR－ISR 間
でリソースによる排他制御が可能である【NOS1212】．これを優先度上限プロトコルの C2ISR 処理レ
ベル拡張と呼ぶ．ただし，内部リソースに対しては，優先度上限プロトコルの C2ISR 処理レベル拡張はできない【NOS0718】．C2ISR 処理レベルへ拡張した優先度上限プロトコルと通常の優先度上限プロ
トコルの違いを以下に示す．
OSEK 仕様との関連
OSEK 仕様では，優先度上限プロトコルの C2ISR 処理レベル拡張はオプションであり，タスク―ISR間，ISR―ISR 間でリソースによる排他制御が可能な実装としてもよいと規定されている【COS0802】．
本仕様では，
優先度上限プロトコルの C2ISR 処理レベル拡張をサポートすると規定した≪NOS1212≫．
2.9.4.1

ISR によるリソースの獲得

タスク－ISR 間，ISR－ISR 間の場合，リソースを獲得するすべての ISR の中で最も高い割込み優先度を持つ ISR の優先度を，リソースの仮想的な上限優先度とする【COS0823】．ISR が獲得するリソー
スをタスクが獲得した場合，OS は，タスク優先度を仮想的な上限優先度まで引き上げる【NOS0719】．
ISR が獲得するリソースをタスクが獲得した場合，仮想的な上限優先度は，実際の割込み優先度と等しくなり，仮想的な上限優先度以下の割込み要求は受け付けられない【NOS0898】．
OSEK 仕様との違い
OSEK 仕様では，仮想的な上限優先度と割込み優先度の対応関係は実装定義であると規定されている【COS0824】．しかし，ISR が獲得するリソースをタスクが獲得した場合，引き上げられた仮想的な優先度以下の割込み要求を受け付けない必要があるので，本仕様では，実装定義ではなく，割込み優先度
は仮想的な割込み優先度と等しくなると規定した≪NOS0898≫．
2.9.4.2

ISR によるリソースの解放

リソース獲得により ISR との排他を行う場合，リソース解放時に再スケジューリングが行われるだけ
でなく，保留されていた ISR が起動されることがある【COS0809】．

57

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.9.4.3

ISR によるリソースの獲得と解放による排他例

優先度
割込み発生

高
ISR INT2

リソース解放

上限優先度
割込み発生
ISR INT1

タスク T3

タスク T2

タスク T1
低リソース獲得

図 2-20 タスク－C2ISR 間の排他例
図 2-20 の例では，
T1 と INT1 がリソースを獲得可能であり，
T1 がリソースを占有している間に T2，
T3 を起動してもリソースの獲得により優先度が引き上げられているため実行状態を継続する．また，
INT1 が起動しても INT1 の実行がペンディングされ，T1 は実行状態を継続する．一方，INT2 の優先
度は上限優先度より高いため，T1 実行中に割込みが発生すると INT2 が実行される．
その後 T1 がリソースを解放すると優先度が下がるため，
ペンディングされていた INT1 が実行され，さらに実行可能状態となった T2 と T3 が実行，終了してから T1 の実行が行われる．

58

文書番号：ATK2-0010
文書名：ATK2 外部仕様書

割込み発生

高
ISR INT3

上限優先度

リソース解放割込み発生

ISR INT2
割込み発生

ISR INT1

リソース獲得タスク T2

低タスク T1

図 2-21 C2ISR－C2ISR 間の排他例
図 2-21 の例では，INT1 と INT2 がリソースを獲得可能であり，INT1 実行中に INT2 が発生してもリソースの獲得により優先度が引き上げられているため，INT2 はペンディングされ INT１の実行が継続される．一方，INT3 は上限優先度より優先度が高いため，INT1 に割込んで実行され T2 を起動する．
INT3 の終了後に INT1 がリソースを解放するとペンディングしていた INT2 が実行され，INT2 の実行を終了後に INT1 の残りの処理を実行する．また，割込み処理が終了した時点で，T2 の優先度が T1 よ
り高いため，T2 が実行され，T2 の終了後に T1 が実行される．

59

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.9.5

内部リソースとグループタスクとの関係

同一の内部リソースを持つタスク群はグループタスクとして振舞う(詳細は 2.5.9 節を参照)．
2.9.6

スケジューラリソース

AUTOSAR 仕様では，スケジューラリソースをサポートしないため，本仕様においてもサポートしな
い．本節では，スケジューラリソースをサポートしないことによる影響と，その対応について説明する．
OSEK 仕様との互換性
OSEK 仕様では，スケジューラリソースは「RES_SCHEDULER」という ID を持つ．本 OS では，
OSEK 仕様で開発されたアプリケーションとの互換性のために，標準リソースを使用して，同様の振る舞いを実現することが可能である．具体的には，コンフィギュレーション時に，「RES_SCHEDULER」という ID の標準リソースを生成し，すべてのタスクから獲得するように指定する．C2ISR からは，
「RES_SCHEDULER」を獲得しない．
SC3，SC4 においては，「RES_SCHEDULER」に対して，すべての OSAP からのアクセス権を付与
する．
BCC1 における取扱い
OSEK 仕様では，BCC1 におけるリソースの最小機能セットは，「スケジューラリソースのみ」と規定されている≪COS0317≫．これは，スケジューラリソースへの GetResource により，タスクディス
パッチを禁止する状態を実現できることを想定していると考えられる．
AUTOSAR 仕様では，スケジューラリソースをサポートしないことから，表 2-5 における BCC1 の使用できる内部リソース数を 1 と変更してもよいが，タスクディスパッチを禁止するだけの実装であれば，リソースの実装は不要であるため，本仕様では「すべてのタスクに関連付いたリソースを１つ」と
した．
2.9.7

マルチコア対応 OS におけるリソース

リソースは，優先度上限プロトコルによって排他制御を行うが，スケジューリングは各コアで独立して実行するため，コア間でのリソースによる排他制御はできない．コア間での排他制御には，スピンロ
ックを使用する(詳細は 2.26 節を参照)．
同じリソースに，異なるコアに割付くタスク，C2ISR を関連付けした場合，ジェネレータはエラーを検出する【OS662】．

60

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.10 カウンタ
カウンタは，何らかの事象をカウントし，接続された他の OS オブジェクトに対して処理タイミングの通知を行うための OS オブジェクトである．カウンタはカウンタ ID によって識別する．
接続対象となる OS オブジェクトはアラームとスケジュールテーブルで，カウンタによって両者を駆動する．

アプリケーション

SetRelAlarm等
満了点設定

IncrementCounter
インクリメントOS

スケジュール
テーブル

満了処理

アラーム

C2ISR
ハードウェアカウンタの場合，
ターゲット依存の関数を呼び出す

満了処理

ソフトウェアカウンタ

ハードウェアターゲット
依存部

満了による割込み発生

ハードウェアカウンタ
制御関数

ハードウェア上の満了点をセット

ハードウェア
カウンタ
インクリメント

図 2-22 カウンタの概念図

2.10.1 ティック
カウンタはティックという単位で事象をカウントする．ティックが示すものはアプリケーション依存
でカウンタ毎に異なる【COS0904】．カウンタは，カウントしたティックを保持し，この値をカウント
値と呼ぶ．
2.10.2 カウンタの種別
カウンタは以下の 2 種類に分類される．
・ ソフトウェアカウンタ
ティックが OS によって管理され，システムサービスによりティックがインクリメントされる
カウンタ

61

文書番号：ATK2-0010
文書名：ATK2 外部仕様書

・ ハードウェアカウンタ
タイマなどのハードウェアによってティックが管理されるカウンタ
OSEK 仕様との違い
OSEK 仕様では，システムカウンタは少なくとも 1 つ常に存在すると規定している【COS3686】．本
仕様では，システムカウンタは必要に応じてアプリケーションで用意するものとして削除した．
2.10.3 カウンタの属性
カウンタは以下の属性を持つ．
・ カウンタ最大値
カウンタティックの最大値
・ 最小周期カウンタに接続する OS オブジェクトが指定できる最小周期
2.10.4 カウンタの設定
カウンタに接続する OS オブジェクトの指定やカウンタの属性の設定は，コンフィギュレーション時に静的に指定する【COS0927】．カウンタは複数の OS オブジェクトと接続することが可能である【COS0914】．
オブジェクトのコア割付けに関する制約
アラームが接続されるカウンタは，アラームと同一のコアに割付けられていなければならない【OS631】〔OS663〕．スケジュールテーブルが接続されるカウンタは，スケジュールテーブルと同一のコアに割付けられていなければならない【OS630】〔OS665〕．
2.10.5 カウンタの満了処理
カウンタがインクリメントされ，カウンタに接続するアラームやスケジュールテーブルで指定されたカウント値となったとき，カウンタは，アラームやスケジュールテーブルで指定されたアクション（満了処理）を実行する≪COS0906≫．カウンタに接続されたアラームやスケジュールテーブルの各満了処
理は，OS 処理レベルで動作する【NOS1165】．複数のアラーム，あるいは複数のスケジュールテーブ
ルの満了処理が同じ満了点に存在する場合，各満了処理が終了するごとに，満了処理を呼び出す前の処理レベル（ソフトウェアカウンタの場合は IncrementCounter を呼び出した処理レベル，ハードウェア
カウンタの場合は対応する C2ISR の処理レベル）に戻り，各満了処理を開始するときに OS 処理レベルとなる【NOS1166】．複数のアラーム，あるいは複数のスケジュールテーブルの満了処理が同じ満了点に存在する場合，先にセットされたものから順に満了処理を実行する【NOS1572】．

62

文書番号：ATK2-0010
文書名：ATK2 外部仕様書

タイミング保護機能の適用
SC2，SC4 において，満了処理中にタイミング保護違反が発生した場合，その満了処理が終了し，満了処理を呼び出す前の処理レベルに戻った時点で保護違反時処理を呼び出す【NOS1381】．
2.10.6 カウンタの操作
2.10.6.1 カウンタのインクリメントによるアクションの起動
OS はソフトウェアカウンタをインクリメントするシステムサービスとして IncrementCounter を提供する(詳細は 3.9.25 節を参照)．カウンタがインクリメントされ，カウンタに接続する OS オブジェク
トで指定されたティックになったとき，カウンタは OS オブジェクトに指定されたアクションを実行する【COS0906】．
カウンタのティックは，カウンタ最大値(OsCounterMaxAllowedValue)までインクリメントされ，カウント値がカウンタ最大値であるカウンタに対して，IncrementCounter を発行すると，カウント値は0 となる【OSa001】．
マルチコア対応 OS において，異なるコアに割付いているカウンタは，インクリメントできない【OS629】．したがって，アラーム，スケジュールテーブルの満了処理を実行するコアは，IncrementCounter を呼び出したコアとなる．
非信頼 OSAP に属するタスクから他 OSAP に属するカウンタをインクリメントすることは出来ない【NOS1567】．本制約は，信頼関数を経由してインクリメントする場合にも適用する【NOS1568】．
また，非信頼 OSAP に属するアラームの満了処理によって，他 OSAP に属するカウンタをインクリメ
ントすることは出来ない【NOS1569】
AUTOSAR 仕様との違い
AUTOSAR 仕様では，非信頼 OSAP に属する処理単位から他 OSAP に属するカウンタをインクリメ
ント出来ないという制約はない．しかし，非信頼 OSAP に属する処理単位から IncrementCounter を発
行し，
他 OSAP に属する満了処理実行中に IncrementCounter 発行元の OSAP が強制終了された場合，後続満了処理の実行が中断されてしまう．これを避けるためこのような制約を設けた≪NOS1567≫≪NOS1568≫≪NOS1569≫．
また，AUTOSAR 仕様では，OsCounterAccessingApplication コンテナによりある OSAP に対してあるカウンタへのアクセス権を付与することが出来る．しかし，上記と同様の理由により，アクセス権を付与した場合でも非信頼 OSAP に属する処理単位から他 OSAP に属するカウンタへのIncrementCounter によるアクセスは出来ない．
2.10.7 ハードウェアカウンタ
2.10.7.1 C2ISR による満了処理
ハードウェアカウンタに接続されたアラーム，スケジュールテーブルの満了処理は，ハードウェアカ
ウンタに対応する C2ISR によって実行される【NOS0671】．したがって，アラーム，スケジュールテ63文書番号：ATK2-0010
文書名：ATK2 外部仕様書
ーブルをハードウェアカウンタに接続して使用するには，満了時に起動する C2ISR が必要である【NOS0672】．ハードウェアカウンタに対応する C2ISR は，コンフィギュレーション時に静的に指定
する【NOS0673】．
複数アラーム，スケジュールテーブルが同時に満了する場合，各満了処理の間に，ハードウェアカウ
ンタより割込み優先度の高い C2ISR が起動する可能性がある【NOS0685】．
満了点の間隔が小さい場合やハードウェアカウンタより割込み優先度の高い C2ISR が起動している
場合に，セットされた満了時刻を経過しても満了処理が実行されない場合がある．このような場合，OSは満了処理が実行可能になった時点でセットされた順に実行する【NOS1573】．ただし，カウンタの最大値よりも遅延したものについては動作を保証せず，ユーザ責任とする【NOS1574】．
2.10.7.2 ハードウェアカウンタ制御関数
ハードウェアカウンタを制御する関数を，ハードウェアカウンタ制御関数と呼ぶ．ハードウェアカウ
ンタ制御関数の仕様を表 2-9 に示す．<counter id>は，コンフィギュレーション時にハードウェアカウ
ンタに付与するカウンタ ID を示す．
ハードウェアカウンタ制御関数は，OS 処理レベルで呼び出される【NOS0691】．
使用上の注意ハードウェアカウンタに対する満了点の設定や，現在ティックの取り出しなどの処理ユーザが用意する．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，ハードウェアカウンタの具体的な実装方法が定義されていないため，本仕様で規定を行った．

64

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
表 2-9 ハードウェアカウンタ制御関数仕様
関数定義

仕様

void init_hwcounter_<counter id><counter id>が示すハードウェアカウンタで必要な初(TickType maxval, TimeType nspertick)

期化処理を実行する．maxval で指定された値を最大【NOS0675】

値としてカウンタが循環するようにハードウェアへ設定する．nspertick は，OsSecondsPerTick で指定した値をナノ秒で表現した値である．
本関数は，OS の初期化処理によって実行される．

void start_hwcounter_<counter id> (void)<counter id>が示すハードウェアカウンタを開始す【NOS0676】

る．
本関数は，OS のハードウェアカウンタ初期化後に実行される．

void stop_hwcounter_<counter id>(void)<counter id>が示すハードウェアカウンタを停止す【NOS0677】

る．
本関数は，OS の終了処理によって実行される．

void set_hwcounter_<counter id><counter id>が示すハードウェアカウンタに対して満(TickType exprtick)【NOS0678】

了点を設定する．exprtick は次の満了点の絶対時刻を示す値である．
本関数は，アラーム，スケジュールテーブルの次回満了点を設定する OS 内部処理から実行される．

TickType get_hwcounter_<counter id><counter id>が示すハードウェアカウンタの現在カウ(void)【NOS0679】

ント値を取得して返す．ダウンカウンタの場合，アップカウンタとしての値を返す．
本関数は，GetCounterValue，GetElapsedValue が呼び出された際に，OS 内部処理から実行される．

void cancel_hwcounter_<counter id><counter id>が示すハードウェアカウンタに設定され(void)【NOS0680】ている満了点を削除する．
本関数は，アラーム，スケジュールテーブルの次回満了点をキャンセルする際に，OS 内部処理から実行される．

void trigger_hwcounter_<counter id><counter id>が示すハードウェアカウンタに対応する(void)【NOS0681】

C2ISR を起動する割込みを発生させる．
本関数は，満了点の間隔が小さい場合などに，1 つ目の満了点に対するキャンセル処理を実行中に，次の満了時刻が経過してしまった場合に，強制的に満了処理を実行するために，OS 内部処理から実行される．

65

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
void int_clear_hwcounter_<counter id><counter id>が示すハードウェアカウンタに対応する(void)【NOS0682】

C2ISR が起動した際に，割込み要求のクリアなどのハードウェアに対して行う処理を実行する．処理の必要がないハードウェアは空の関数とする．
本関数は，ハードウェアカウンタに対応する C2ISRが起動した直後に実行される．

void int_cancel_hwcounter_<counter id><counter id>が示すハードウェアカウンタに対応する(void)【NOS0683】

C2ISR に対する割込み要求がペンディングされている場合に，割込み要求をキャンセルする．一度発生した割込み要求をキャンセルできないハードウェアの場合は，空の関数とする．
本関数は，満了点の間隔が小さい場合などに，1 つ目の満了処理実行中に，次の満了時刻が経過してしまった場合に，不要な C2ISR の起動を抑止するために，
OS 内部処理から実行される．前述の例で，空の関数とした場合，何も処理を実行しない C2ISR が起動する．

void increment_hwcounter_<counter id>

本関数はデバッグ用であるので，空の関数とする．

(void)【NOS0684】

本関数を実装する場合は，<counter id>が示すハード
ウェアカウンタのティック値をインクリメントする．
ただし，stop_hwcounter_<counter id>によってハードウェアカウンタが停止している前提での使用を想定している．

66

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.11 ソフトウェアフリーランタイマ
ソフトウェアフリーランタイマは，物理的なタイマを複数のアプリケーションから共有するためにOS が提供する機能である．ソフトウェアフリーランタイマは，カウンタにより実現する．
タイマの初期化
OS が直接タイマの操作を行い，GPT ドライバが使用しないすべてのタイマの初期化と設定を行う【OS374】．ソフトウェアカウンタの初期値は 0 とし，ハードウェアカウンタの初期値は
init_hwcounter_<counter id>でユーザが設定する【NOS0396】．
タイマ機能の抽象化
OS が扱うタイマを，0 からカウントを開始し，カウント値が単調増加して一定値に達した後，0 に戻るタイマとして振舞うように抽象化する【OS384】．
カウンタの読出し
OS はカウンタの現在値を読み出すシステムサービスとして GetCounterValue を提供する(詳細は3.9.26 節を参照)．読み出される値は，カウンタがハードウェアカウンタである場合はタイマのカウントの値，ソフトウェアカウンタである場合はソフトウェアで管理されたティックの値となる．
また，OS はカウンタの過去の値と現在値の差分を求めるシステムサービスとして GetElapsedValueを提供する(詳細は 3.9.27 節を参照)．

67

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.12 アラーム
アラームは，繰り返し処理を行うための OS オブジェクトである．アラームはアラーム ID によって識別する．
アラームの動作を開始することをアラームのセット，アラームの動作を停止することをアラームの停止，アラームが処理するタイミングになったことをアラームの満了と呼ぶ．
アラームは別の OS オブジェクトであるカウンタに接続し，カウンタの駆動によって動作する【COS0903】．
マルチコア対応 OS においては，アラームに対する処理を，アラームが所属する OSAP が割付けられているコアにて実行する【OS634】．
2.12.1 アラームの満了タイミング
アラームの満了は，接続されたカウンタのティックが，あらかじめ設定したティックに到達した時に発生する【COS0910】．
2.12.2 アラーム満了時に実行させるアクション
アラーム満了時に実行させるアクション(1 つのみ)は，コンフィギュレーション時に指定を行う．ア
ラームに指定できるアクションを以下に示す【COS0908】．なお，これらの処理内容はユーザが呼び出すシステムサービスの処理内容と同じである【COS0920】．
タスクの起動コンフィギュレーション時に指定されたタスクを起動する．
マルチコア対応 OS においては，他のコアに割付いたタスクを起動することもできる【OS632】．
イベントのセット
コンフィギュレーション時に指定されたタスクに対して，指定されたイベントをセットする．
マルチコア対応 OS においては，他のコアに割付いたタスクのイベントをセットすることもできる【OS633】．
アラームコールバックの実行
コンフィギュレーション時に指定された関数をアラームコールバックとして実行する．
マルチコア対応 OS においては，アラームが割付いているコアにてアラームコールバックを実行する【OS635】．アラームコールバックは SC1 でのみ使用できる≪OS242≫．
カウンタの駆動
コンフィギュレーション時に指定されたカウンタのティックをインクリメントする【OS301】．
マルチコア対応 OS においては，他のコアに割付いたカウンタをインクリメントすることはできない

68文書番号：ATK2-0010
文書名：ATK2 外部仕様書≪OS629≫．
アラームの動作例
図 2-23 にアラームの動作例を示す．以下の動作例では，アラーム 1 はカウンタが 5 の時に単発でコールバック呼出しを行い，アラーム 2 はカウンタが 4 の時から 3 カウント周期でタスクの起動を行っている．

ISR INT1

カウンタ

0

1

2

3

4

5

6

7

8

9

10

アラーム2
(OS内部処理)
アラーム1(OS内部処理)アラーム
コールバックタスク

図 2-23 アラームの動作例

69

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.12.3 アラームの操作
2.12.3.1 アラームのセット
本 OS は，アラームに対して絶対時刻による満了時刻のセットを行うシステムサービスとしてSetAbsAlarm を提供する(詳細は 3.9.31 節を参照)．また，現在時刻からの相対時刻による満了時刻のセットを行うシステムサービスとして SetRelAlarm を提供する(詳細は 3.9.30 節を参照)．
アラームのセットは，以下のパラメータの組み合わせで動的に指定する．
起動回数の指定
アラームにセットするアクションの起動回数の種別として，以下の 2 つを提供する【COS0912】．
・ 単発アラーム
・ 周期アラーム
初回起動タイミングの指定
アラームのセット時に，初回の起動タイミングを指定する．
周期の指定
初回起動後，2 回目以降の起動周期を指定する【COS0922】．2 回目以降の起動周期を 0 とすることで，単発アラームとして指定することが可能である．
2.12.3.2 アラームの停止
本 OS は，アラームの停止を行うシステムサービスとして CancelAlarm を提供する(詳細は 3.9.32 節を参照)．
2.12.3.3 アラームの情報取得
本 OS は，アラームの情報を取得するシステムサービスとして GetAlarmBase を提供する(詳細は3.9.28 節を参照)．また，アラームが満了するまでのティック数を取得するシステムサービスとしてGetAlarm を提供する(詳細は 3.9.29 節を参照)．
2.12.4 アラームコールバック
アラームコールバックはアラーム満了時に，OS によって実行される処理単位である．
アラームコールバックは SC1 でのみ使用することができる【OS242】．
補足事項
アラームコールバックが SC2，SC3，SC4 で使用できない理由は，アラームコールバックに対するタ
イミング保護やメモリ保護の実現が非効率であるからである．アラームコールバックに対する時間保護70文書番号：ATK2-0010
文書名：ATK2 外部仕様書
やメモリ保護をサポートしなくても，アラームからタスクを起動することで，同等の処理が可能である．
2.12.4.1 アラームコールバックの処理レベル
アラームコールバックは OS 処理レベルで動作する【COS0925】．そのため，C2ISR が禁止された状態で実行される．アラームコールバックは呼出し可能なシステムサービスが制限される(詳細は表 3-1
を参照)．
2.12.4.2 アラームコールバックの記述方法
アラームコールバックの記述方法を示す．
アラームコールバックのプロトタイプ宣言
アラームコールバックのプロトタイプ宣言を以下に示す【COS0924】．
ALARMCALLBACK(AlarmCallbackRoutineName);
アラームコールバックの本体記述
アラームコールバックの本体記述を以下に示す【COS3691】．アラームコールバックは引数，返り値を持たない【COS0923】．

ALARMCALLBACK(<アラームコールバック名>){}
2.12.5 アラームの設定
アラームはコンフィギュレーション時に以下の情報を指定する．
・ アラームに接続するカウンタ【COS0915】
・ アラーム満了時に起動するタスク，イベント，アラームコールバック，カウンタ【COS0916】
オブジェクトの OSAP 所属に関する制約
OSAP が再起動する場合，OSAP に所属するカウンタは初期化されてから再スタートするので，他のOSAP に所属するアラームが接続されていると，正しいタイミングで満了処理を実行できない可能性がある．したがって，非信頼 OSAP に所属するカウンタに対して，他の OSAP に所属するアラームを接続することはできない【NOS1129】．
オブジェクトのコア割付けに関する制約
アラームは，接続するカウンタと同一のコアに割付けられていなければならない≪OS631≫．

71文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.13 スケジュールテーブル
スケジュールテーブルとは，タスク起動やイベントセットなどの一連の処理を，静的なテーブルに記述されたタイミングで実行するための OS オブジェクトである．スケジュールテーブルはスケジュール
テーブル ID によって識別する．
スケジュールテーブルは，別の OS オブジェクトであるカウンタに接続し，カウンタの駆動によって動作する．また，スケジュールテーブル制御は接続されたカウンタのティックと，異なる供給源を持つ
ティックを同期させる同期機能を提供する．
スケジュールテーブルを使用する利点
スケジュールテーブルを使うことにより，アラームでは停止とセットの組み合わせで実現しなければならないタスク起動やイベントセットなどの一連の処理を，静的な定義により実現することができる．
2.13.1 スケジュールテーブルの構成要素
スケジュールテーブルは以下の要素から構成される．
スケジュールテーブル周期
スケジュールテーブルの処理が一回りするティック数．
満了点
スケジュールテーブル内で，タスク起動，イベントセットを実行する時刻．スケジュールテーブルは
少なくとも 1 つの満了点を持つ【OS401】．1 つの満了点には，少なくとも 1 つの満了点処理を持つ【OS407】．すべての満了点は，一意なオフセットで満了時刻を指定する【OS442】．満了時刻は，スケ
ジュールテーブルの先頭からのオフセットで指定する【OS404】．
初期オフセット
スケジュールテーブルの先頭から先頭満了点までのティック数．初期オフセットは 0 か，もしくはスケジュールテーブルが接続されたカウンタの最小周期(OsCounterMinCycle)以上，カウンタの最大値(OsCounterMaxAllowedValue)以下でなくてはならない【OS443】．
遅延
満了点間のティック数．遅延はスケジュールテーブルが接続されたカウンタの最小周期(OsCounterMinCycle)以上，カウンタの最大値(OsCounterMaxAllowedValue)以下でなくてはならない【OS408】．
最終遅延
スケジュールテーブルの最終満了点からスケジュールテーブル終端までのティック数．最終遅延はス

72

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
ケジュールテーブルが接続されたカウンタの最小周期(OsCounterMinCycle)以上，カウンタ最大値(OsCounterMaxAllowedValue)以下でなくてはならない【OS444】．例外として，単発動作指定時のみ，
最終遅延を 0 以上，カウンタ最大値(OsCounterMaxAllowedValue)以下としてもよい【OS427】．
スケジュールテーブル時刻
スケジュールテーブルの現在のティック．
先頭満了点

最終満了点

満了点1

満了点2

満了点3

満了点4

タスク起動
TaskA
TaskB

タスク起動
なし

タスク起動
なし

タスク起動
TaskB
TaskE

イベントセット
EventP:TaskC
EventP:TaskD

イベントセット
EventP:TaskC
EventP:TaskD

イベントセット
EventP:TaskA
EventP:TaskF

イベントセット
EventP:TaskC

オフセット
5ティック

オフセット
10ティック

オフセット
20ティック

オフセット
25ティック

スケジュール
テーブル時刻初期オフセット = 5
最終遅延 = 55

遅延 = 510

遅延 = 1020

遅延 = 525
遅延 =初期オフセット + 最終遅延
= 10

スケジュールテーブル周期 = 30ティック

図 2-24 スケジュールテーブルの構成

73

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.13.2 スケジュールテーブルを制御するカウンタ
本 OS は 2 種類のカウンタによってスケジュールテーブルを制御する．
駆動カウンタスケジュールテーブルと接続されたカウンタ．駆動カウンタは本 OS で定義された OS オブジェクトのカウンタである．スケジュールテーブルは 1 つのカウンタで制御される【OS409】．1 つのカウンタ
は，少なくとも 1 つのスケジュールテーブルを駆動することができる【OS410】．
同期カウンタ
明示同期スケジュールテーブルで使用する絶対時刻の供給源．同期カウンタは OS オブジェクトのカ
ウンタではない．
2.13.3 スケジュールテーブルの種別
スケジュールテーブルは以下の 3 種類に分類される．
同期なしスケジュールテーブル
同期機能を使用しないスケジュールテーブル．
暗黙同期スケジュールテーブル
駆動カウンタと常に同期しているスケジュールテーブル．OS は暗黙同期のスケジュールテーブルに対して特別な機能を提供しない．
明示同期スケジュールテーブル
ユーザが同期カウンタの絶対時刻を OS に供給し，OS が駆動カウンタと同期カウンタを同期させる
スケジュールテーブル．
同期機能のユースケース
スケジュールテーブル時刻と，スケジュールテーブルに接続されたカウンタの周期(OsCounterMaxAllowedValue+1)が異なるため，スケジュールテーブルの先頭満了点処理が実行される
絶対時刻は一定でない．そこで，絶対時刻とスケジュールテーブル時刻を同期させるため，OS は同期
機能を提供する．

74

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.13.4 スケジュールテーブルの状態
スケジュールテーブルは以下の状態を持つ．
停止状態(SCHEDULETABLE_STOPPED)
スケジュールテーブルが停止している状態．満了点処理は実行されない．
動作状態(SCHEDULETABLE_RUNNING)
カウンタのティックに従って満了点処理を実行する状態．同期なしスケジュールテーブルにおいては，満了点処理は実行されるが，同期カウンタとは非同期である．
切換え待ち状態(SCHEDULETABLE_NEXT)
スケジュールテーブルの切換え待ち要求を受けた状態．具体的には，現在動作しているスケジュール
テーブルが，スケジュールテーブルの切換え要求を受けた際に，切換え後のスケジュールテーブルに指定され，現在動作しているスケジュールテーブルの終了を待っている状態．満了点処理は実行されない．
同期待ち状態(SCHEDULETABLE_WAITING)
明示同期スケジュールテーブルにおいて同期カウンタのティック供給を待っている状態．満了点処理は実行されない．
同期動作状態(SCHEDULETABLE_RUNNING_AND_SYNCHRONOUS)
明示同期スケジュールテーブルにおいて駆動カウンタと同期カウンタが同期しており，駆動カウンタのティックに従って満了点処理を実行する状態．暗黙同期スケジュールテーブルにおいては，カウンタのティックに従って満了点処理を実行する状態．
さらに，タイミングによって動作状態は，以下の状態に区別される．以下の状態は，本文書における便宜上の呼称であり，スケジュールテーブルの状態として OS で管理する際に区別するものではない．
動作開始待ち状態
スケジュールテーブルの開始要求を受けた後，指定されたティックとなるまでの間の状態．状態は，
SCHEDULETABLE_RUNNING であるが，満了点処理は実行されない．OS 管理上は，動作状態である．
切換え受付け済み動作状態
動作状態のスケジュールテーブルが，切換え要求を受けた状態．切換え要求を受けたスケジュールテーブルは，周期起動であっても，切換えと同時に停止する≪NOS0661≫．OS 管理上は，動作状態である．

75

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
切換え受付け済み同期待ち状態
同期待ち状態のスケジュールテーブルが，切換え要求を受けた状態．切換え要求を受けたスケジュー
ルテーブルは，周期起動であっても，切換えと同時に停止する≪NOS0661≫．OS 管理上は，同期待ち状態である．
切換え受付け済み同期動作状態
同期動作状態のスケジュールテーブルが，切換え要求を受けた状態．切換え要求を受けたスケジュー
ルテーブルは，周期起動であっても，切換えと同時に停止する≪NOS0661≫．OS 管理上は，同期動作状態である．
2.13.5 スケジュールテーブルの状態遷移
2.13.5.1 同期なしスケジュールテーブルの状態遷移
同期なしテーブルの状態遷移を図 2-25 に示す．

or スケジュール

停止状態
SCHEDULETABLE_STOPPED停止 テーブルの切換え
停止

停止
切換え待ち
要求

切換え
要求

開始

or 切換え受付け済み
動作状態のスケジュール
テーブルの停止or 別のスケジュールテーブルへの切換え待ち要求

切換え待ち状態のスケジュールテーブルの停止and 指定された
開始ティック未到達

動作開始待ち状態
SCHEDULETABLE_RUNNING

切換え待ち状態SCHEDULETABLE_NEXT

指定された
開始ティック到達

停止
切換え受付け済み
動作状態のスケジュール
テーブルの終了

切換え受付け済み動作状態
SCHEDULETABLE_RUNNING

切換え
要求

or スケジュール
テーブルの終了

切換え待ち状態のスケジュールテーブルの停止and 指定された
開始ティック到達

動作状態
SCHEDULETABLE_RUNNING

図 2-25 同期なしスケジュールテーブルの状態遷移図

76

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.13.5.2 暗黙同期スケジュールテーブルの状態遷移
暗黙同期スケジュールテーブルの状態遷移を図 2-26 に示す．

or スケジュール

停止状態
SCHEDULETABLE_STOPPED停止 テーブルの切換え
停止

停止
切換え待ち
要求

切換え
要求

開始

or 切換え受付け済み
動作状態のスケジュール
テーブルの停止or 別のスケジュールテーブルへの切換え待ち要求

切換え待ち状態のスケジュールテーブルの停止and 指定された
開始ティック未到達

動作開始待ち状態
SCHEDULETABLE_RUNNING_
AND_SYNCHRONOUS

切換え待ち状態SCHEDULETABLE_NEXT

指定された
開始ティック到達

停止
切換え受付け済み
動作状態のスケジュール
テーブルの終了

切換え受付け済み動作状態
SCHEDULETABLE_RUNNING_
AND_SYNCHRONOUS

切換え要求

or スケジュール
テーブルの終了

切換え待ち状態のスケジュールテーブルの停止and 指定された
開始ティック到達

同期動作状態SCHEDULETABLE_RUNNING_
AND_SYNCHRONOUS

図 2-26 暗黙同期スケジュールテーブルの状態遷移図

77

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.13.5.3 明示同期スケジュールテーブルの状態遷移
明示同期スケジュールテーブルの状態遷移を図 2-27 に示す．

or スケジュール

停止状態
SCHEDULETABLE_STOPPED停止 テーブルの切換え
停止

切換え
要求

停止
or スケジュール
テーブルの切換え

開始

停止

停止

停止

or スケジュール
テーブルの切換え

開始(同期待ち)

切換え
待ち
要求

or 切換え受付け済み
動作状態のスケジュール
テーブルの停止or 別のスケジュールテーブルへの切換え待ち要求

同期待ち状態SCHEDULETABLE_WAITING
切換え待ち状態のスケジュールテーブルの停止切換え
要求

切換え受付け済み
同期待ち状態SCHEDULETABLE_WAITING

停止

同期カウンタ
時刻通知

切換え
要求

切換え受付け済み
同期動作状態SCHEDULETABLE_RUNNING_
AND_SYNCHRONOUS

切換え
要求

切換え待ち状態のスケジュールテーブルの停止and 指定された
開始ティック到達

動作状態
SCHEDULETABLE_RUNNING

非同期設定
or カウンタ差分時間が規定値以上

同期動作状態SCHEDULETABLE_RUNNING_
AND_SYNCHRONOUS
切換え待ち状態のスケジュールテーブルの停止

指定された
開始ティック到達or スケジュール
テーブルの終了

切換え受付け済み
動作状態のスケジュール
テーブルの終了

同期カウンタ
時刻通知

切換え待ち状態のスケジュールテーブルの停止and 指定された
開始ティック未到達

動作開始待ち状態
SCHEDULETABLE_RUNNING

切換え待ち状態SCHEDULETABLE_NEXT
停止

切換え受付け済み動作状態
SCHEDULETABLE_RUNNING

同期カウンタ時刻通知
or カウンタ差分時間が
規定値未満

非同期設定
or カウンタ差分時間が規定値以上

同期カウンタ時刻通知
or カウンタ差分時間が規定値未満

図 2-27 明示同期スケジュールテーブルの状態遷移図

78

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.13.6 スケジュールテーブルの操作
2.13.6.1 スケジュールテーブルの開始
本 OS は，スケジュールテーブルを開始する機能を提供する．開始方法には以下の 4 種類がある．
マルチコア対応 OS においては，スケジュールテーブルに対する処理を，スケジュールテーブルが所
属する OSAP が割付けられているコアにて実行する【OS643】．
絶対時刻での開始
本 OS は，駆動カウンタが指定されたティックと一致した時にスケジュールテーブルを開始するためのシステムサービスとして StartScheduleTableAbs を提供する(詳細は 3.9.34 節を参照)．先頭満了点は駆動カウンタの値が(初期オフセット＋指定されたティック)に達した時である．
相対時刻での開始
本 OS は，駆動カウンタが現在のティックから指定されたティック分進んだ時に，スケジュールテー
ブルを開始するためのシステムサービスとして StartScheduleTableRel を提供する(詳細は 3.9.33 節を参照)．先頭満了点は駆動カウンタの値が(現在の駆動カウンタのティック＋指定されたティック＋初期
オフセット)に達した時である．
スケジュールテーブルの切換え
本 OS は，現在動作中のスケジュールテーブルの停止と，指定されたスケジュールテーブルの開始を不可分に行うためのシステムサービスとして NextScheduleTable を提供する(詳細は 3.9.36 節を参照)．
OS は現在動作中のスケジュールテーブルを最終遅延まで動作させた後，次に開始するスケジュールテーブルを先頭から開始する【OS414】．
同期待ちでの開始
本 OS は，同期カウンタの値が供給された後，同期カウンタの値が 0 となった時にスケジュールテー
ブルを開始するためのシステムサービスとして StartScheduleTableSynchron を提供する(詳細は3.9.37 節を参照)．
先頭満了点は駆動カウンタの値が同期カウンタ値通知時から(スケジュールテーブル周期－通知された同期カウンタ値＋初期オフセット)経過した時である．
2.13.6.2 スケジュールテーブルの繰り返し
スケジュールテーブルには 2 種類の動作モードがある．スケジュールテーブルの動作モードはコンフィギュレーション時に静的に指定する【OS413】．
単発動作
スケジュールテーブルを 1 周期だけ動作させる．最終満了点の後，最終遅延経過してから停止状態となる【OS009】．

79

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
周期動作
スケジュールテーブルを繰り返し動作させる．最終満了点の後，(最終遅延＋初期オフセット)経過してから先頭満了点に戻る【OS194】．

<スケジュールテーブルの構成>
満了点3

満了点1

満了点4

満了点2

0 1 2 3 4

9 10 11 0

5 6 7 8(動作開始待ち)

停止

動作
満了点3

満了点1

満了点4

満了点2

0 1 2 3 4

5 6 7 8

満了点3

満了点1
満了点2

9 10 11 0 1 2 3 4

5 6 7 8

満了点1
満了点4

9 10 11 0

満了点2

1 2 3 45 6駆動カウンタ値
1018

1020 1022

1019

1021

0 1 2 3 4

5 6 7 89 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32

1023

StartScheduleTableAbs(Tbl , 2)

図 2-28 絶対時刻でのスケジュールテーブル動作開始(動作開始待ち)

停止

動作
満了点3

満了点1

満了点4

満了点2

0 1 2 3 4

5 6 7 8

満了点3

満了点1
満了点2

9 10 11 0 1 2 3 4

5 6 7 8

満了点3

満了点1
満了点4

9 10 11 0

満了点2

1 2 3 45 6 7 8

満了点4

9 10 11駆動カウンタ値
1018

1020 1022

1019

1021

0 1 2 3 4

5 6 7 89 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34

1023

StartScheduleTableRel(Tbl , 2)

図 2-29 相対時刻でのスケジュールテーブル動作開始

80

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.13.6.3 開始されたスケジュールテーブルの動作
スケジュールテーブルが開始され，スケジュールテーブル状態が動作状態，同期動作状態の場合，OSは駆動カウンタが 1 ティック進むごとに，スケジュールテーブル時刻を 1 ティック進める【OS411】．
スケジュールテーブルの満了は，接続されたカウンタのティックが，あらかじめ設定した満了点のオフセットに到達した時に発生する．OS は先頭満了点から最終満了点までオフセットが小さいものから順にスケジュールテーブルを処理する【OS002】．
上記の処理を，OS は複数のスケジュールテーブルを並行して処理する【OS007】．
2.13.6.4 満了点処理
満了点処理では以下のアクションを 1 つ以上実行できる【NOS0884】．これらの処理内容は通常のシステムサービスと同じである【NOS0885】．同一満了点でのアクションは，タスクの起動をすべて行なってからイベントのセットを行う【OS412】．
タスクの起動
満了点処理として，コンフィギュレーション時に指定されたタスクを起動する【OS402】．
マルチコア対応 OS においては，他のコアに割付いたタスクを起動することもできる【OS641】．
イベントのセット満了点処理として，コンフィギュレーション時に指定されたタスクに対してイベントをセットする【OS403】．
マルチコア対応 OS においては，他のコアに割付いたタスクのイベントをセットすることもできる【OS642】．
2.13.6.5 スケジュールテーブルの停止
OS はスケジュールテーブルを即座に停止するシステムサービスである StopScheduleTable を提供する(詳細は 3.9.35 節を参照)．
スケジュールテーブルを停止すると，停止したスケジュールテーブル時刻が最終満了点の前であっても，次回起動時には先頭から実行される【OS428】．
2.13.6.6 スケジュールテーブル状態の取得
OS はスケジュールテーブル状態を取得するシステムサービスである GetScheduleTableStatus 機能を提供する(詳細は 3.9.40 節を参照)．

81文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.13.7 スケジュールテーブルの同期
2.13.7.1 暗黙同期の同期方法
OS は暗黙同期のスケジュールテーブルのために特別な機能を用意しない．
暗黙同期スケジュールテーブルは，常に駆動カウンタと同期していなければならない．OS は以下の2 つの制約によって暗黙同期スケジュールテーブルと駆動カウンタの同期を保証する．
暗黙同期スケジュールテーブルの周期に対する制約
暗黙同期スケジュールテーブルのスケジュールテーブル周期は接続される駆動カウンタの
OsCounterMaxAllowedValue+1 でなくてはならない【OS429】．
暗黙同期スケジュールテーブルの開始方法に対する制約
暗黙同期スケジュールテーブルは相対時刻での開始は行えない【OS430】．

(動作開始待ち)

停止

同期動作
満了点3

満了点1
満了点2

満了点3

満了点1
満了点4

満了点2

満了点4

0 1 2 3 4

5 6 7 89 10 11 0

1 2 3 45 6 7 89 10 11

9 10 11 0 1 2 3 4

5 6 7 89 10 11 0

1 2 3 45 6 7 89 10 11駆動カウンタ値
10 11 0 1 2 3 4

5 6 7 8StartScheduleTableAbs(Tbl , 0)

図 2-30 暗黙同期スケジュールテーブルの動作

82文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.13.7.2 明示同期の同期方法
明示同期では OS オブジェクトとして定義される駆動カウンタと，OS オブジェクトでない同期カウンタの 2 つを同期させるため，OS が同期を行う機能を提供する．
明示同期の前提条件
明示同期スケジュールテーブルでは，以下の条件を満たすことを前提とする．なお，(＊)が付く条件
は，ユーザが保証すべき条件である．
・ 明示同期スケジュールテーブルは駆動カウンタより大きな周期を持たない【OS431】
・ 明示同期スケジュールテーブルは同期カウンタと同じ周期を持つ(＊)【OS462】
・ 同期カウンタは駆動カウンタと同じ分解能を持つ(＊)【OS463】
明示同期スケジュールテーブルの開始機能
OS は明示同期スケジュールに対して 2 種類の開始方法を提供する．
・ 非同期スタート
非同期スタートでは同期カウンタ値が不定な状態でスケジュールテーブルの動作を開始する．
非同期スタートは，絶対時刻，相対時刻で開始することができ，駆動カウンタの値のみでスケ
ジュールテーブルを開始する．
・ 同期スタート
同期スタートでは同期カウンタ値が供給された状態でスケジュールテーブルの動作を開始す
る．同期スタートは，OS が提供する同期待ちでの開始により行うことができ，開始後に通知される同期カウンタ値と駆動カウンタ値によってスケジュールテーブルを開始する．この時のスケジュールテーブル状態は同期待ち状態である【OS435】．
同期カウンタ時刻の通知
OS はスケジュールテーブルに対して同期カウンタ時刻を通知するシステムサービスとしてSyncScheduleTable を提供する(詳細は 3.9.38 節を参照)【OS013】．
OS は通知された同期カウンタ値によってスケジュールテーブル時刻と同期カウンタの差分を求め，必要であれば同期制御を開始する．

83

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
同期制御方式と補正パラメータ同期制御では各満了点の遅延値を増加，減少させることにより満了点タイミングを変化させ，同期カ
ウンタと補正カウンタの差分を 0 に近づけていくことで同期を行う．
同期制御のために，ユーザは同期制御に必要な補正パラメータを，明示同期スケジュールテーブルのコンフィギュレーション時に静的に指定する．
・ 遅延値の最大増加量
ユーザは満了点に対して，遅延値の最大増加量をティックで指定する【OS416】．(遅延値の最大増加量＋前の満了点からの遅延値)は，スケジュールテーブルが接続されたカウンタのティッ
クの最大値より小さくなければならない【OS437】．遅延値の最大増加量は，スケジュールテー
ブル周期より小さくなければならない【OS559】．
・ 遅延値の最大減少量
ユーザは満了点に対して，遅延値の最大減少量をティックで指定する【OS415】．(遅延値の初期オフセット－最大減少量)は(初期オフセット＋接続されたカウンタの最小周期)より大きくなければならない【OS436】．
・ 許容誤差値
ユーザは明示同期スケジュールテーブルに許容誤差値(同期状態とみなすスケジュールテーブ
ル時刻－同期カウンタ値差分の絶対値)を 0 からスケジュールテーブル周期の範囲で指定する【OS438】．

84

文書番号：ATK2-0010
文書名：ATK2 外部仕様書＜同期不要の遅延＞

満了点1

満了点2

満了点3

タスク起動
・・・
イベントセット
・・・

タスク起動
・・・
イベントセット
・・・

タスク起動
・・・
イベントセット
・・・

オフセット
8ティック

オフセット
24ティック

オフセット
48ティック

遅延値の最大増加量
・・・
遅延値の最大減少量
・・・

遅延値の最大増加量
3ティック
遅延値の最大減少量
9ティック

遅延値の最大増加量
・・・
遅延値の最大減少量
・・・

遅延 = 16

遅延 = 24＜最大減少量適用時の遅延＞

満了点1

満了点2

満了点3

タスク起動
・・・
イベントセット
・・・

タスク起動
・・・
イベントセット
・・・

タスク起動
・・・
イベントセット
・・・

オフセット
8ティック

オフセット
24ティック

オフセット
48ティック

遅延値の最大増加量
・・・
遅延値の最大減少量
・・・

遅延値の最大増加量
3ティック
遅延値の最大減少量
9ティック

遅延値の最大増加量
・・・
遅延値の最大減少量
・・・

遅延 = 16-9 = 7

遅延 = 24＜最大増加量適用時の遅延＞

満了点1

満了点2

満了点3

タスク起動
・・・
イベントセット
・・・

タスク起動
・・・
イベントセット
・・・

タスク起動
・・・
イベントセット
・・・

オフセット
8ティック

オフセット
24ティック

オフセット
48ティック

遅延値の最大増加量
・・・
遅延値の最大減少量
・・・

遅延値の最大増加量
3ティック
遅延値の最大減少量
9ティック

遅延値の最大増加量
・・・
遅延値の最大減少量
・・・

遅延 = 16 + 3 = 19

遅延 = 24

図 2-31 補正パラメータの適用例

85

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
同期処理
明示同期スケジュールテーブルに同期カウンタ値が通知された後，OS は明示同期スケジュールテー
ブルの同期制御を開始する【OS417】．
同期カウンタ値が通知されると，OS は現在のスケジュールテーブル時刻と同期カウンタの差分値を算出する【OS206】．差分値が許容誤差値以下の場合，OS はスケジュールテーブルを同期動作状態に遷移させる【OS418】．差分値が許容誤差値より大きい場合，OS はスケジュールテーブルを動作状態に遷移させる【OS419】．
スケジュールテーブル時刻が同期カウンタに対して遅れている場合，OS は次の満了点の遅延値を遅延値－MIN (遅延値の最大減少量，進み量)に補正する【OS420】．一方，スケジュールテーブル時刻が同期カウンタに対して進んでいる場合，OS は次の満了点の遅延値を遅延値＋MIN(遅延値の最大増加量，遅れ量)に補正する【OS421】．
図 2-32 に，最大増加量 2，最大減少量 1 に設定されている場合における，明示同期スケジュールテーブルの動作例を示す．
停止

同期動作

同期待ち

動作
満了点3

満了点1

同期動作
満了点3

満了点1
満了点4

満了点2

動作

満了点2

満了点3

満了点1
満了点4

同期動作

満了点2

満了点4

+3
0 1 2 3 4

5 6 7 89 10 10 10 11

0 1 2 3 4

5 6 7 8-1
9 10 11 0 1 2 4 5

遅延= 満了点3遅延値+ MIN(最大増加量, 遅れ量)
=3+2=5-1-1
7 8 10 11 0
遅延
= 満了点2遅延値- MIN(最大減少量, 進み量)
=3-1=2

遅延= 満了点1遅延値- MIN(最大減少量, 進み量)
=3-1=2
同期カウンタ値?

? ?

? ? 10 11 0 1 2 3 4

5 6 4 5 6 7

8

9 10 11 0 1

2 3 4 5

SyncScheduleTable(Tbl, 4);
SyncScheduleTable(Tbl, 10);
↑現在のスケジュールテーブル時刻↑駆動カウンタ値= 次満了点オフセット= 現在の駆動カウンタ値- (次満了点時の駆動カウンタ値+ (スケジュールテーブル周期 - 10)- 現在の駆動カウンタ値)+ 初期オフセット= 8 – (9 - 8) = 7= 1023 + 2 + 2 = 3
差分 = 7 - 4 = 3

6 7

8 9 10 11 0 4

5 6 7

8 9 10 11 0

SyncScheduleTable(Tbl, 4);↑現在のスケジュールテーブル時刻= 次満了点オフセット- (次満了点時の駆動カウンタ値- 現在の駆動カウンタ値)= 2 – (30 - 29) = 1
差分 = 1 - 4 = -3

StartScheduleTableSyncron(Tbl);
駆動カウンタ値
1018

1020 1022

1019

1021

0 1 2 3 4

5 6 7 89 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 371023

図 2-32 明示同期スケジュールテーブルの動作例

2.13.7.3 同期制御の停止
OS はスケジュールテーブルの同期制御を即座に停止するシステムサービスとして86文書番号：ATK2-0010
文書名：ATK2 外部仕様書
SetScheduleTableAsync を提供する(詳細は 3.9.39 節を参照)．
2.13.8 スケジュールテーブルの設定
スケジュールテーブルに接続するカウンタの指定や満了点の設定は，コンフィギュレーション時に静的に指定する．
オブジェクトの OSAP 所属に関する制約
OSAP が再起動する場合，OSAP に所属するカウンタは初期化されてから再スタートするので，他のOSAP に所属するスケジュールテーブルが接続されていると，正しいタイミングで満了処理を実行できない可能性がある．したがって，非信頼 OSAP に所属するカウンタに対して，他の OSAP に所属する
スケジュールテーブルを接続することはできない【NOS1131】．
オブジェクトのコア割付けに関する制約
スケジュールテーブルは，接続するカウンタと同一のコアに割付けられていなければならない≪
OS630≫．

87

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.14 フックルーチン
フックルーチンは OS 処理内の特定のタイミングで，ユーザ定義の処理を実行する処理単位である．
フックルーチンの種別と，それぞれが定義可能な単位(システム，OSAP)の一覧を表 2-10 に示す．
表 2-10 フックルーチンが定義可能な単位システム定義OSAP 固有スタートアップフック○○

シャットダウンフック○○

プレタスクフック

○×

ポストタスクフック○

×

エラーフック○○プロテクションフック

○×

フックルーチン種別○：定義可能，×：定義不可能
2.14.1 フックルーチンの種別
2.14.1.1 システム定義のフックルーチン
システム定義のフックルーチンには以下の 6 つの種別がある．
システム定義のスタートアップフック
OS 起動処理におけるスケジューラ起動前に，システム定義のスタートアップフックが呼び出される【COS1110】．
マルチコア対応 OS においては，すべてのコアでシステム定義のスタートアップフックが呼び出される≪OS581≫．
システム定義のシャットダウンフック
OS シャットダウン時もしくは OS が何らかのエラーで異常終了する際に，システム定義のシャット
ダウンフックが呼び出される【COS1111】．
マルチコア対応 OS においては，すべてのコアでシステム定義のシャットダウンフックが呼び出される≪OS588≫．
システム定義のプレタスクフック
タスクディスパッチによるタスク切換え時において，次に実行されるタスクが動作する前にシステム
定義のプレタスクフックが呼び出される．なお，システム定義のプレタスクフックの次に実行されるタ
スクの状態は実行状態である【COS1163】．
マルチコア対応 OS においては，タスク切換えが発生したコアでのみシステム定義のプレタスクフッ

88文書番号：ATK2-0010
文書名：ATK2 外部仕様書
クが呼び出される【NOS0921】．
OSAP 強制終了処理開始時にプレタスクフックが呼び出される【NOS1584】〔NOS1583〕．
システム定義のポストタスクフック
タスクディスパッチによるタスク切換え時において，実行中タスクがプリエンプト，休止，待ち状態に入る前にシステム定義のポストタスクフックが呼び出される．なお，システム定義のポストタスクフ
ック実行中のタスクの状態は実行状態である【COS1162】．
マルチコア対応 OS においては，タスク切換えが発生したコアでのみシステム定義のポストタスクフ
ックが呼び出される【NOS0922】．
OSAP 強制終了処理終了時にポストタスクフックが呼び出される【NOS1585】〔NOS1583〕．
システム定義のエラーフック
ユーザが返り値のデータ型が StatusType のシステムサービスを呼出し，実行の結果，返り値が E_OK
でない場合に，システム定義のエラーフックが呼び出される【COS1126】．返り値のデータ型がStatusType でないシステムサービスであっても，状況によってエラーフックが呼び出される場合がある【NOS0409】．
また，エラーフックから呼び出されたシステムサービスでエラーが発生した場合にはエラーフックは呼び出されない【COS1127】．そのため，エラーフックでは，システムサービスの返り値でしかエラーを検知することはできない．
ユーザが明示的にシステムサービスを呼び出す以外に，アラーム満了時のアクションでエラーが発生した場合にもエラーフックは呼び出される【COS1129】．また，スケジュールテーブル満了時のアクションでエラーが発生した場合もエラーフックは呼び出される【NOS0655】．
マルチコア対応 OS においては，エラーが発生したコアでのみシステム定義のエラーフックが呼び出される【NOS0923】．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，返り値のデータ型が StatusType でないシステムサービスはエラーフックを呼び出さないと規定されている【OS367】．しかし，返り値が無効値となる場合など，エラーフックが呼び出されるべき状況があることから，本仕様では返り値のデータ型が StatusType でないシステムサー
ビスであっても，エラーフックが呼び出される場合があると規定した≪NOS0409≫．どの状況でエラーフックが呼び出されるかどうかは，システムサービス毎に規定した(詳細は 3.9 節を参照)．
システム定義のプロテクションフック
保護違反が発生した時に，違反の区別を示すエラーコードをパラメータとして，システム定義のプロ
テクションフックが呼び出される【NOS0125】．
プロテクションフック実行中に保護違反が発生した場合には，プロテクションフックは呼び出されずに，E_OS_PROTECTION_FATAL を終了要因のエラーコードとして OS シャットダウンを行う

89

文書番号：ATK2-0010
文書名：ATK2 外部仕様書【NOS0126】．
マルチコア対応 OS においては，保護違反が発生したコアでのみシステム定義のプロテクションフッ
クが呼び出される【NOS0924】．
AUTOSAR 仕様との違い
AUTOSAR 仕様におけるシステム定義のプロテクションフックの仕様で曖昧だった内容を，本仕様で規定した．
使用上の注意AUTOSAR 仕様では，シャットダウン中の保護違反によりプロテクションフックが起動した場合，シャットダウン処理とプロテクションフックが無限ループする可能性がある．これに対し，本仕様では，
シャットダウンフック実行中の保護違反に関する振る舞いを規定し，シャットダウンフック実行中の保護違反によるシャットダウン時には，シャットダウンフックを呼び出さないこととしたため，シャット
ダウンフック実行中の保護違反においては無限ループしない≪NOS0631≫．
2.14.1.2 OSAP 固有のフックルーチン（参考仕様）
AUTOSAR 仕様では，OSAP が有効な場合，システム定義のフックルーチンに加え，スタートアップ
フック，シャットダウンフック，エラーフックの 3 種類について，OSAP 固有のフックルーチンが使用できると規定されている(詳細は表 2-10 を参照)．本仕様において，ATK2 では，OSAP 固有のフックル
ーチンを提供しないこととした．まず，AUTOSAR 仕様では，OSAP 固有のフックルーチンは，そのフックルーチンが所属する OSAP のアクセス権を持った状態で実行されると規定されている．しかしながら，フックルーチンは，ECU インテグレータによって開発されると考えられ，信頼 OSAP と同等の信頼度でもって開発されるものと考えられるため，フックルーチンを信頼 OSAP と同等の扱いとし，シス
テム定義のフックルーチンと同じアクセス権を持って実行したほうがよいと考えた．さらに，その場合，
システム定義のフックルーチンと OSAP 固有のフックルーチンの差がほぼなく，システム定義のフック
ルーチンのみでも，GetApplicationID を呼び出し，現在実行中の OSAPID を取得し判断することで，OSAP 固有のフックルーチンと同等の処理は可能であると考えた．
本節では，参考仕様として，AUTOSAR 仕様に規定されている，OSAP 固有のフックルーチンについて記載する．
OSAP 固有のスタートアップフック
OS 起動処理におけるスケジューラ起動前，システム定義のスタートアップフックの後に，OSAP 固
有のスタートアップフックが呼び出される【OS236】．OSAP 固有のスタートアップフックは，スター
トアップフックが所属する OSAP のアクセス権を持った状態で実行される【OS226】．
OSAP が複数定義されている場合，OSAP 固有のスタートアップフックの呼出し順は，コンフィギュ
レーションファイルの記載順とする【NOS1213】．
マルチコア対応 OS においては，すべてのコアでシステム定義のスタートアップフックが呼び出され90文書番号：ATK2-0010
文書名：ATK2 外部仕様書
た後に，OSAP 固有のスタートアップフックが，スタートアップフックが所属する OSAP が割付けられいるコアでのみ，それぞれ呼び出される≪OS582≫．
OSAP 固有のシャットダウンフック
OS シャットダウン時もしくは OS が何らかのエラーで異常終了する際に，OSAP 固有のシャットダ
ウンフックの後に，システム定義のシャットダウンフックが呼び出される【OS237】．OSAP 固有のシャットダウンフックは，シャットダウンフックが所属する OSAP のアクセス権を持った状態で実行される【OS225】．
OSAP が複数定義されている場合，OSAP 固有のシャットダウンフックの呼出し順は，コンフィギュ
レーションファイルの記載順とする【NOS1369】．
マルチコア対応 OS においては，すべてのコアでシステム定義のシャットダウンフックが呼び出される前に，OSAP 固有のシャットダウンフックが，シャットダウンフックが所属する OSAP が割付けられいるコアでのみ，それぞれ呼び出される≪OS586≫．
OSAP 固有のエラーフック
システム定義のエラーフックが呼び出された場合，システム定義のエラーフックの後に，エラーが発生した OS オブジェクトが所属する OSAP の，OSAP 固有のエラーフックが呼び出される【OS246】．
OSAP 固有のエラーフックは，エラーフックが所属する OSAP のアクセス権を持った状態で実行される【OS085】．
アラーム満了時のアクションでエラーが発生した場合，システム定義のエラーフックが呼び出された後に，アラームが所属する OSAP の，OSAP 固有のエラーフックが呼び出される【NOS0903】．また，スケジュールテーブル満了時のアクションでエラーが発生した場合も，システム定義のエラーフックが呼び出された後に，スケジュールテーブルが所属する OSAP の，OSAP 固有のエラーフックが呼び出される【NOS0904】．
マルチコア対応 OS においては，エラーが発生した処理単位が割付けられいるコアで，エラーが発生した処理単位が所属する OSAP 固有のエラーフックが呼び出される【NOS0925】．
OSAP 固有のフックルーチンの命名規則
OSAP ごとに定義できるフックルーチンと命名規則を以下に示す．<App>は OSAPID である．
・ スタートアップフック：StartupHook_<App>【OS060】
・ シャットダウンフック：ShutdownHook_<App>【OS112】
・ エラーフック：ErrorHook_< App >≪OS246≫
OSEK 仕様との違い
OSEK 仕様では，フックルーチンは特殊なコンテキストで実行されると規定している．本仕様では，
OS 処理レベルを定義したため，フックルーチンは OS 処理レベルで動作すると規定した≪NOS0243≫．

91

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
また，OSEK 仕様では，フックルーチンの機能は標準化されないので，移植性がないと規定されている【COS1107】．本仕様では，処理レベルや実行タイミングを規定しているので，削除した．
2.14.2 フックルーチンの処理レベル
フックルーチンは OS から呼びだされ，OS 処理レベルで動作する【NOS0243】．プロテクションフ
ックの処理レベルは，保護違反を発生する要因ごとに定義される(詳細は 2.22.1 節を参照)．
2.14.3 フックルーチンで行う処理
フックルーチン内ではユーザの任意の処理を実行することができる【COS1106】．ただし，フックルーチン内で使用できるシステムサービスは制限されている(詳細は表 3-1 を参照)．
2.14.4 フックルーチンの指定
フックルーチンの動作の有無は，コンフィギュレーション時に静的に指定する【COS1109】．

92

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.15 エラー処理
エラー処理は，OS が提供するシステムサービスにおける異常を検出する機能である．
OS はエラーを起こした処理単位に対し，2 種類のエラー処理方法を提供する【COS1167】．
・ 集中エラー処理
OS が提供するシステムサービスでエラーが発生した時に，OS が提供するエラーフックを用いてエラー処理を行う方法を，集中エラー処理と呼ぶ．
・ 分散エラー処理
OS が提供するシステムサービスでエラーが発生した時に，システムサービスからの返り値を用いてエラー処理を行う方法を，分散エラー処理と呼ぶ．
発生したエラーに対する処理方法はユーザによって決定される【COS1120】．
2.15.1 エラー種別
本 OS ではエラーを 2 つに分類する．
アプリケーションエラー
OS は要求されたサービスを正常に処理しないが，OS の内部状態は正常である場合をアプリケーショ
ンエラーと呼ぶ．
この場合，OS はユーザに集中エラー通知を行った後，分散エラー処理のためのエラーコードをアプ
リケーションに返す．この時の出力パラメータの値は保証されない【COS1125】．
フェイタルエラー
OS が OS の内部状態が正常であることを保証しない場合をフェイタルエラーと呼ぶ．この場合，OSは OS シャットダウンを行う【COS1220】．この場合，E_OS_SYS_ASSERT_FATAL を終了要因のエ
ラーコードとして OS シャットダウンを行う【NOS0690】．
マルチコア対応 OS において，いずれかのコアでフェイタルエラーが発生した場合，同期 OS シャットダウンを行う【OS762】．

93

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.15.2 エラーコード種別
OS は，エラーが発生した際にエラー原因を特定するためのエラーコードを，アプリケーションに提供する【COS1122】．
エラー発生時に返すエラーコードを，本 OS では以下の 2 つに区分する【COS1123】．
標準エラー
常に検出するエラーを標準エラーと呼ぶ．デバッグ済みのアプリケーションでも起こりうるエラーで
ある．
拡張エラー
開発中にのみ検出する追加エラーを拡張エラーと呼ぶ．テスト時やデバッグされていないアプリケー
ション向けに使われるエラーである．
使用するエラーコード種別の選択基準
拡張エラーはテスト段階で検出されることが多いため，発生したすべての拡張エラーを取り除いた後は標準エラーのみの検出に変更することにより，実行速度の向上と省メモリ化を図ることができる．
ただし，SC3，SC4 では常に拡張エラーの検出を行う【OS327】．マルチコア対応した SC1，SC2 では，OSAP がサポートされるが，常に拡張エラーの検出を行う必要はなく，標準エラーのみ検出するよう指定できる【OS763】．
2.15.2.1 エラーコード種別の指定
拡張エラーを検出するかどうかは，コンフィギュレーション時に静的に指定する≪OS_Conf046≫．
拡張エラーを検出しないコンフィギュレーション時に，拡張エラーが発生する要因となる処理を実施した場合の動作は保証されない【NOS0348】．
2.15.3 システムサービスにおけるエラーチェック
ほとんどのシステムサービスは分散エラー処理のために返り値を返す．システムサービスが正常に終了した場合は E_OK を返し，何らかのエラーが検出された場合は E_OK 以外の値を返す【COS1208】．
本 OS がエラーチェックを行う順序は定義しない【COS1212】．また，複数のエラーが検出された場
合，その内いずれか一つのエラーを示すエラーコードが返る【COS1213】．
C1ISR から発行したシステムサービスにおいて，エラーが発生した場合の動作は保証されない【NOS0868】．
使用上の注意システムサービスが返す E_OK でないエラーコードの中には，OS が正常に動作中でも発生し，警告とし扱うことができるものがある(具体的なエラーコード名は各システムサービスの返り値欄に記載)．

94

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.15.4 エラーフック
システムサービスの返り値が E_OK でない場合，システム定義のエラーフックが有効になっていれば，
OS は集中エラー処理のためにシステム定義のエラーフックを呼び出す【COS1214】．また，返り値のデータ型が StatusType でないシステムサービスであっても，状況によってエラーフックが呼び出される場合がある≪NOS0409≫．
2.15.4.1 エラーを起こしたシステムサービスの情報の取得
エラーフックでの効率的なエラー処理のために，OS はエラーを起こしたシステムサービスの情報を取得する機能を提供する【COS1219】．なお，効率的な実装を許容するためにエラー情報構造の詳細は定義しない【COS1218】．
・ システムサービス ID の取得
OS はエラーを引き起こしたシステムサービスの ID をエラーフック内で取得する機能を提供する．
・ システムサービスパラメータの取得
OS はエラーを引き起こしたシステムサービスのパラメータをエラーフック内で取得する機能を提供する．
エラーフック内でのシステムサービス ID の取得方法
システム定義のエラーフック内では，OSErrorGetServiceId()マクロにより，エラーを引き起こしたシステムサービス ID を取得することができる【COS1130】〔COS1219〕．システムサービス ID は
OSServiceIdType 型で，OSServiceId_xxxx の形で定義される(xxxx には各システムサービス名が入る)【COS3835】．
例えば ActivateTask でエラーが発生した場合 OSErrorGetServiceId()マクロは
OSServiceId_ActivateTask を返す．
エラーフック内でのシステムサービスパラメータの取得方法
システム定義のエラーフック内では，OSError_Name1_Name2 マクロによりエラーを引き起こしたシステムサービスのパラメータを取得することができる【COS3836】〔COS1219〕．Name1 はシステム
サービス名である【COS1131】．Name2 はシステムサービスのパラメータ名である【COS1132】．
例えば SetRelAlarm の場合，・ OSError_SetRelAlarm_AlarmID()・ OSError_SetRelAlarm_increment()
・ OSError_SetRelAlarm_cycle()
によってシステムサービスパラメータを取得することができる．

95

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
ATK2 では，第 2 引数以降や，オブジェクト ID でないパラメータも含めた，すべてのシステムサー
ビスパラメータを取得可能である【NOS1214】．
OSEK 仕様との関連
OSEK 仕様では，システムサービスパラメータの中で，第 2 引数以降や，オブジェクト ID でないパラメータが，取得できるかは実装定義であると規定している【COS1168】．本仕様において，第 2 引数
以降や，オブジェクト ID でないパラメータも含めた，すべてのシステムサービスパラメータを取得可能であると規定した≪NOS1214≫．

96

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.15.4.2 エラーフックの指定
エラーフックの動作の有無は，コンフィギュレーション時に静的に指定する【OS439】〔COS1120〕〔COS1167〕．
システムサービス ID の取得機能とシステムサービスパラメータの取得機能の使用有無は，コンフィ
ギュレーション時に静的に指定する【COS1169】．
2.15.4.3 エラーフックの実装例
エラーフックの実装例を図 2-33 に示す．
void
ErrorHook(StatusType Error){
switch(Error){case E_OS_ACCESS:・・・
case E_OS_STATE:
・・・
case E_OS_ID:
・・・}
switch(OSErrorGetServiceId()){
case OSServiceId_ActivateTask:
・・・
case OSServiceId_SetRelAlarm:・・・
CallingTask = GetTaskID();
Param1 = OSError_SetRelAlarm_AlarmID();
Param2 = OSError_SetRelAlarm_increment();
Param3 = OSError_SetRelAlarm_cycle();・・・
case OSServiceId_StartScheduleTableRel:
・・・
}
・・・
}
図 2-33 エラーフック実装例

97文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.16 スタックモニタリング
スタックモニタリングはタスク，C2ISR のスタックオーバーフローを検出する機能である【OS067】．
スタックモニタリングはターゲットが持つハードウェア機能の可能な範囲で，スタックポインタを監視する．
2.16.1 スタックオーバーフローの検出方法
スタックオーバーフローの検出方法の代表的なものとして，スタックポインタチェック方式，マジッ
クナンバーチェック方式，スタック残量チェック方式がある．
2.16.1.1 スタックポインタチェック方式
ソフトウェアのみによるスタックポインタチェック方式は，スタックポインタが，対象処理単位のス
タック領域の範囲を超えていないかチェックする方式である【NOS0356】．スタックポインタをチェッ
クする時点で，スタックオーバーフローが発生している場合に検出可能である【NOS0365】．

スタックオーバーフロー
発生時

正常時

スタック
ポインタ
使
用
方
向

・
・
・

スタック
ポインタ

使
用
方
向

・
・
・

スタック領域の範囲

スタック領域の範囲

スタック領域

スタック領域

図 2-34 スタックポインタチェック方式

2.16.1.2 マジックナンバーチェック方式
マジックナンバーチェック方式は，OS 起動時に各処理単位のスタック領域の終端，もしくはスタッ
ク領域に隣接するメモリ領域に，特殊な値(マジックナンバー)を書き込んでおき，処理単位切換え時に，マジックナンバーが書き変わっていないかチェックする方式である【NOS0357】．処理単位実行時にス
タックオーバーフローが発生して，スタックの領域の境界に書き込んだ場合に検出可能である【NOS0366】．

98文書番号：ATK2-0010
文書名：ATK2 外部仕様書

使
用
方
向

正常時

スタックオーバーフロー
発生時

MagicNumber
MagicNumber

MagicNumber
Not MagicNumber

・
・
・

スタック
ポインタ

使
用
方
向

・
・
・

スタック領域の範囲

一時的に
超過して
書き換え

スタック
ポインタ
スタック領域の範囲

スタック領域

スタック領域

図 2-35 マジックナンバーチェック方式
マジックナンバーチェック方式におけるマジックナンバー領域のサイズは 4byte とする【NOS1216】．
マジックナンバーチェック方式におけるマジックナンバー領域は，各処理単位に割り当てられたスタックの最後に確保する．すなわち，各処理単位が使用可能なスタックのサイズは，割り当てサイズ - 4byteとなる【NOS1217】．マジックナンバーの値は，ターゲット定義とする【NOS1218】．
2.16.1.3 スタック残量チェック方式
スタック残量チェック方式は，多重割込みによる C2ISR 起動時に，現在のスタックポインタと，コ
ンフィギュレーション時に指定した C2ISR のスタックサイズを使用して，残りのスタックサイズが足りているかをチェックする方式である【NOS1069】．ある低割込み優先度の C2ISR を実行中に，中割
込み優先度の CI2SR が起動した場合，中割込み優先度以上の CI2SR が使用するスタックサイズの合計
値が，C2ISR 用スタック領域に残っていない場合，低割込み優先度の C2ISR がスタックを指定した以上に使用したと判断し，スタックオーバーフローとする(図 2-36 参照)．
異なる割込み優先度の C2ISR 用スタックを 1 つのスタック領域で確保する場合，スタックポインタ
チェック方式とマジックナンバー方式では，確保したスタック領域全体に対してスタックオーバーフロ
ーした場合しか検出することができない．そこで，スタック残量チェックにより，多重割込み発生時，それまで実行していた C2ISR がスタックを使い過ぎていないかのチェックが可能となる．

99

文書番号：ATK2-0010
文書名：ATK2 外部仕様書

使
用
方
向

正常時

スタックオーバーフロー発生時※低割込み優先度のC2ISR実行中に中割込み優先度のC2ISRが起動※低割込み優先度のC2ISR実行中に中割込み優先度のC2ISRが起動

・・・

高割込み優先度のC2ISR用スタックサイズ
中割込み優先度のC2ISR用スタックサイズ
スタックポインタ

使
用
方
向

・
・
・

高割込み優先度，中割込み優先度の
C2ISRが使用するスタックが不足する可能性がある
高割込み優先度のC2ISR用スタックサイズ
中割込み優先度のC2ISR用スタックサイズ
スタックポインタ
低割込み優先度のC2ISRが指定した以上にスタックを使用した

低割込み優先度のC2ISR用スタックサイズ

低割込み優先度のC2ISR用スタックサイズ

C2ISR用スタック領域

C2ISR用スタック領域

図 2-36 スタック残量チェック方式

ATK2 では，各方式によってスタックオーバーフローを検出可能な状況が異なるため，スタックポイ
ンタチェック方式，マジックナンバーチェック方式，スタック残量チェック方式の 3 つを併用する【NOS1215】．ただし，併用した場合でも以下のケースでは，スタックオーバーフローを検出できない．
・ スタックオーバーフローしたが，マジックナンバー領域を書き換えずに，スタック領域の範囲内に戻った場合．
・ マジックナンバー領域とは異なる領域を書き換えた場合．
2.16.2 スタックモニタリングの動作タイミング
SC3，SC4 では，非信頼タスク用スタック，非信頼 C2ISR 用スタックに対してスタックオーバーフ
ローが発生した場合は，メモリ保護機能により，即座にメモリ保護違反が発生する．信頼タスク用スタック，非信頼タスク用システムスタック，信頼 C2ISR 用スタック，非信頼 C2ISR 用システムスタックに対しては，SC１，SC2 と同様のスタックモニタリングを行う【NOS1071】．
ATK2 では以下のタイミングでスタックモニタリングを行う．

100

文書番号：ATK2-0010
文書名：ATK2 外部仕様書

割込み発生

優先度
高

ISR 2
(C2ISR)
③

④

割込み発生
ISR 1
(C2ISR)②④

タスク T2①

低タスク T1

使用中のスタック

T1スタックT2スタック

ISR スタック

T2スタック

図 2-37 ATK2 におけるスタックモニタリングのタイミング①：

タスクディスパッチによりタスクが切り換わるタイミングで，実行状態であったタスク(タスク T1)が，設定したスタックサイズを超過していないかチェックする【NOS1219】．①は，ス
タックポインタチェック方式，マジックナンバーチェック方式を使用する【NOS1220】．

②：

割込み発生時，実行状態であったタスク(タスク T2)が，設定したスタックサイズを超過していないかチェックする【NOS1221】．②は，スタックポインタチェック方式，マジックナンバ
ーチェック方式を使用する【NOS1222】．

③：

多重割込み発生時，実行状態であった C2ISR(ISR 1)が，設定したスタックサイズを超過していないかチェックする【NOS1223】．③は，スタック残量チェック方式，マジックナンバーチ
ェック方式を使用する【NOS1224】．

④：

割込み終了時，実行状態であった C2ISR(ISR 2/ISR 1)が，設定したスタックサイズを超過していないかチェックする【NOS1225】．C2ISR の終了は return によって行うので，スタック
ポインタが元に戻ることから，④は，マジックナンバーチェック方式のみ使用する【NOS1226】．

③，④のタイミングに対しては，システム定義のフックルーチン，信頼フック，および C2ISR が使用するスタックは 1 つの領域で確保するため，これらすべての処理単位で使用するスタック領域に対してスタックモニタリングを実行する【NOS1227】．したがって，システム定義のフックルーチンがスタ
ックオーバーフローを起こした場合にも，③，④のマジックナンバーチェック方式によって，スタック
オーバーフローを検出する可能性がある．
また，SC3，SC4 では，信頼関数終了時に，信頼タスク用スタック，非信頼タスク用システムスタック，信頼 C2ISR 用スタック，非信頼 C2ISR 用システムスタックに対して，スタックモニタリングを行

101

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
う【NOS1228】．ただし，信頼関数終了時のスタックモニタリングは，マジックナンバーチェック方式のみとする【NOS1229】．
実行状態のタスクが TerminateTask もしくは ChainTask を発行することにより，休止状態へと遷移する場合も，①のタイミングと同様にスタックモニタリングを実行する【NOS1230】．プロテクション
フックが有効の場合で，タスク終了時にスタックオーバーフローを検出した場合，ポストタスクフック
は呼び出されずに，プロテクションフックが呼び出される【NOS1231】．このプロテクションフックで，タスクを強制終了した場合，ポストタスクフックは呼び出されない【NOS1232】．
使用上の注意スタックモニタリングは，上記のタイミングでのみ実施されるため，チェック時に既にスタックポイ
ンタが範囲内に収まっている場合などに，エラーの検知が行えない可能性がある．
2.16.3 スタックオーバーフロー時の動作
プロテクションフックが有効な場合，スタックオーバーフローを検出すると，OS は
E_OS_STACKFAULT をパラメータとしてプロテクションフックを呼び出す【OS396】．プロテクションフックが無効な場合，スタックオーバーフローを検出すると，OS は E_OS_STACKFAULT をパラメータとして ShutdownOS を呼び出す【OS068】．
2.16.4 スタックモニタリングの指定
スタックモニタリングの使用有無はコンフィギュレーション時に静的に指定する．

102

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.17 タイミング保護タイミング保護機能は，タスク，C2ISR が指定された時間制約を守れているかを監視する機能である．
2.17.1 監視対象となる処理単位
SC2 の場合，指定されたタスクと C2ISR がタイミング保護の対象となる【OS397】．
SC4 の場合，非信頼 OSAP のすべてのタスク，C2ISR が保護対象となる【OS028】．また，信頼 OSAPの中で指定されたタスク，C2ISR も保護対象となる【OS089】．
C1ISR を実行中に保護違反が発生した場合，OS の一貫性を保つことができないため，C1ISR はタイ
ミング保護の対象としない．また，OS 起動前の処理単位はタイミング保護の対象としない．
2.17.2 監視対象となる時間
タイミング保護機能の対象となる時間を以下に示す．
2.17.2.1 実行時間
それぞれの処理単位に許された実行時間の最大値を実行時間バジェットと呼ぶ．
タスク実行時間
タスクが実行状態となってから休止状態もしくは待ち状態になるまでの時間をタスク実行時間と呼ぶ．タスク実行時間には，プロテクションフック，エラー処理(エラーフックを含む)，プレタスクフック，ポストタスクフック，システムサービスの実行時間を含む【NOS1386】．タスクが実行可能状態となっている時間，C2ISR に割込まれている時間はタスク実行時間に含まれない【NOS1387】．C1ISRは OS の管理外であり，その実行時間を OS で管理できないため，タスク実行中に C1ISR に割込まれている時間は，割込まれたタスクの実行時間に含まれる【NOS1388】．(図 2-38 を参照)

103

文書番号：ATK2-0010
文書名：ATK2 外部仕様書

C1ISRに割込まれた時間は含む
高優先度のタスクやC2ISRに割込まれた時間は含まない

優先度
高

ISR 2
(C1ISR)

ISR 1(C2ISR)起動
タスク T1

起動

低

タスク T2

タスクT2の実行時間

図 2-38 タスク実行時間

ATK2 における実行時間監視機能では，タスクの実行時間のみを監視対象とし，C2ISR の実行時間を監視しない．
AUTOSAR 仕様との違い
AUTOSAR 仕様書の用語定義では，実行時間にプロテクションフックの時間が含まれるかどうか明記
されていない．本仕様で，プロテクションフックの時間が実行時間に含まれることを明確化した≪
NOS1386≫．
AUTOSAR 仕様では，C2ISR 実行時間を，実行時間監視機能における監視対象と規定している【OS210】【OS474】．C2ISR 実行時間とは，C2ISR が発生してから終了するまでの時間であり，C2ISR
実行中のエラー処理，システムサービスの時間，プロテクションフックの実行時間を含む．より高い優
先度に割込まれた場合の時間は，C2ISR 実行時間に含まれない，C1ISR は OS の管理外であり，実行
時間を OS で管理できないため，C1ISR に割込まれている時間は，割込まれた C2ISR の実行時間に含む（図 2-39 を参照）
．本仕様において，ATK2 では C2ISR は信頼 OSAP にのみ所属し，その実行時間は信頼するものとして，C2ISR 実行時間の監視機能は提供しないこととした．一方，タスク実行時間の監視機能に関しては，タスクの所属する OSAP の信頼/非信頼に関わらず，監視機能を実現できるため，
信頼 OSAP のタスクの実行時間監視機能を提供しないことによる利点が少ないため実現することとした．
ここで，ATK2 は，C2ISR の到着間隔（後述）は監視することとしている．C2ISR は，その起動要
因が非信頼 OSAP である可能性もあるため，その到着間隔を監視することとした．

104

文書番号：ATK2-0010
文書名：ATK2 外部仕様書

優先度
割込み発生

高

C1ISR
割込み発生

C2ISR B

高優先度のC2ISRに割込まれた時間は含まない

割込み発生

C1ISRに割込まれた時間は含む

割込み発生

C2ISR A

C2ISR A低C2ISR Aの
実行時間

C2ISR Aの実行時間

図 2-39 C2ISR 実行時間

105

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.17.2.2 到着間隔
それぞれの処理単位に許された到着間隔の最小値をタイムフレームと呼ぶ．
基本タスク到着間隔
基本タスク到着間隔は基本タスクの起動間隔である．起動には休止状態から実行可能状態への遷移とタスク実行中の多重起動の双方が含まれる．(図 2-40 を参照)
基本タスクT2のタイムフレーム

基本タスクT2のタイムフレーム
基本タスクT2の到着間隔(2回目)

基本タスクT2の到着間隔
(1回目)
優先度

起動

高

基本タスクT2のタイムフレーム

起動

基本タスクT1

起動

起動

終了後すぐ
に起動

起動

基本タスクT2
低多重起動の場合も，新たな到着間隔の開始とする

図 2-40 基本タスクの到着間隔

拡張タスク到着間隔
拡張タスク到着間隔は拡張タスクの起動もしくは待ち解除間隔である．(図 2-41 を参照)
拡張タスクT2のタイムフレーム

拡張タスクT2のタイムフレーム

拡張タスクT2の到着間隔(1回目)

拡張タスクT2のタイムフレーム

拡張タスクT2の到着間隔
(2回目)
SET

優先度

高

T2のイベント

SET
CLEAR

CLEAR

拡張タスクT1

イベントセッ ト

イベントセッ ト

拡張タスクT2

CLEAR

イベントクリ ア低イベント待ちイベントクリ ア

イベント待ち既にセットされているイベントを待つ場合は，WAITING READY RUNNINGと状態遷移したものとみなし，新たな到着間隔の開始とする

図 2-41 拡張タスクの到着間隔
C2ISR 到着間隔
C2ISR の到着間隔は C2ISR の起動間隔である．(図 2-42 を参照)

106

文書番号：ATK2-0010
文書名：ATK2 外部仕様書

割込み発生

割込み発生

割込み発生

C2ISR

C2ISR Aの
タイムフレーム

C2ISR Aの
タイムフレーム

C2ISR Aの
タイムフレーム
C2ISR Aの到着間隔(1回目)

C2ISR Aの到着間隔(2回目)

図 2-42 C2ISR 到着間隔
2.17.2.3 ロック時間
リソース占有時間
タスクがリソースを占有する時間をリソース占有時間と呼ぶ．ただし，より高い優先度のタスクやC2ISR が実行されている時間は，リソース占有時間に含まれない．(図 2-43 を参照)
タスクのリソース占有時間の最大値をリソース占有時間バジェットと呼ぶ．

優先度

高優先度のタスクやカテゴリ2 ISRに割込まれた時間は含まない

起動高タスク T1

タスク T2
低リソース1占有期間

リソース1占有期間

リソース2占有期間

リソース1獲得

リソース2
解放

リソース2
獲得

リソース2の
占有時間

リソース1占有期間

リソース1占有期間

リソース1の占有時間

図 2-43 リソース占有時間
タスクに対してリソース占有時間の監視を行う場合，コンフィギュレーションにて，タスク毎にリソース占有時間監視設定を定義する≪NOS0193≫．

107

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
割込み禁止時間
タスクが割込みを禁止してから許可するまでの時間を割込み禁止時間と呼ぶ．割込み禁止時間には，
C2ISR の割込みを禁止する OS 割込み禁止時間と，すべての割込みを禁止する全割込み禁止時間がある(図 2-44 を参照) が，ATK2 では，OS 割込み禁止時間のみを監視する．
タスクの OS 割込み禁止時間の最大値を OS 割込み禁止時間バジェットと呼ぶ．
タスク
全割込み禁止期間

OS割込み禁止期間
OS割込み
禁止

OS割込み
許可

全割込み
禁止

OS割込み禁止時間

全割込み
許可

全割込み禁止時間

図 2-44 割込み禁止時間

AUTOSAR 仕様との違い
AUTOSAR 仕様では，C2ISR がリソースを占有する時間や OS 管理割込み（すべての C2ISR）を禁止する時間も，監視の対象と規定している【OS033】【OS037】．本仕様において，ATK2 では C2ISRは信頼 OSAP にのみ所属し，
そのリソース占有時間や OS 割込み禁止時間は信頼するものとして，
C2ISRのリソース占有時間や OS 割込み禁止時間の監視機能は提供しないこととした．
また， AUTOSAR 仕様では，全割込み禁止時間も，監視の対象と規定している【OS037】．本仕様において，ATK2 では，全割込み禁止時間監視機能を提供しないことと規定した．全割込み禁止時間監視違
反時処理は，C1ISR よりも高い優先度で実行されることとなるが，C1ISR は高い応答性が求められる
ため，C1ISR よりも高い優先度で実行されるプロテクションフックにも，より高い応答性が求められると考えられる．プロテクションフックから OSAP やタスクの強制終了をすることは，処理時間が多くかかるため，ほぼ実現不可能であると考えられる．よって，プロテクションフックでの現実的な選択肢はシャットダウンしかないと考えられるが，その場合，非信頼 OSAP から間接的に OS をシャットダウン
できてしまうため，問題がある．

108

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.17.3 タスクに対するタイミング保護機能
タスク実行時間の監視
タスクの実行時間バジェットを超えてタスクが実行状態を維持し続けていないか，OS が監視する．
タスク実行時間の監視では，コンフィギュレーションにて，タスク毎にタスク実行時間バジェットを定義する≪OS_Conf185≫．コンフィギュレーションにて，タスク実行時間バジェットが定義されない
場合，そのタスクに対してタスク実行時間の監視を行わない【NOS1389】．
監視対象タスクが実行状態となった時，タスク実行時間の監視を開始する【NOS1390】．タスクが休止状態か待ち状態になった時，OS はタスク実行時間を 0 にリセットする【OS473】．WaitEvent 発行
時に，その引数で渡された Mask で指定されたイベントマスク値が既にセットされた状態であったために，タスクが実行状態を継続する場合，OS はタスク実行時間を 0 にリセットする【NOS1391】．タス
クの実行時間がタスク実行時間バジェットを超えた時，OS は E_OS_PROTECTION_TIME_TASK をパラメータとして保護違反時処理を呼び出す【NOS0181】．
到着間隔の監視タスクが起動された時を，到着時刻とする【OS469】．同様に，タスクが待ち解除された時も，到着時刻とする【OS472】．WaitEvent 発行時に，その引数で渡された Mask で指定されたイベントマスク
値が既にセットされた状態であったために，タスクが実行状態を継続する場合，その時刻をそのタスク
インスタンスの到着時刻とする【NOS1392】．タスクの到着間隔がタスクのタイムフレーム以上である
ことを，OS が監視する【OS465】．タスク到着間隔の監視では，コンフィギュレーションにてタスク毎にタイムフレームを定義する≪OS_Conf391≫．コンフィギュレーションにて，タイムフレームが定義されない場合，そのタスクの到着間隔の監視を行わない【NOS1393】．
タスクの到着間隔がタイムフレーム未満である場合，OS はタスクの起動もしくは待ち解除は行なわず，E_OS_PROTECTION_ARRIVAL_TASK をパラメータとしてエラーフックを呼び出す【NOS1394】．
このとき，タスクは起動もしくは待ち解除されないため，到着時刻は更新しない【NOS0297】．
タスクの状態遷移とタイミング保護の対応を図 2-45 に示す．

109

文書番号：ATK2-0010
文書名：ATK2 外部仕様書

実行可能状態になっているタスクに対して起動要求があった場合でもタイムフレームを開始する

開始

待ち状態に入ろうとした時点で既にイベントがセットされていた場合，待ち状態に入ったあとに実行可能状態を経て実行可能になったとみなす

タスク実行時間開始

実行状態
RUNNING

実行可能状態
開始
READY

プリエンプト
タスク実行時間停止

待ち解除
タイムフレーム開始

起動
タイムフレーム開始

実行状態になっているタスクに対して起動要求があった場合でもタイムフレームを開始する

待ち状態
WAITING

タスク実行時間リセット

休止状態

終了

SUSPENDED

待ち

タスク実行時間リセット

図 2-45 タスクの状態遷移とタイミング保護の対応

リソース占有時間の監視
タスクがリソース占有時間バジェットを超えてリソースを占有し続けないか，OS が監視する．
タスクに対してリソース占有時間の監視を行う場合，コンフィギュレーションにて，タスク毎にリソース占有時間監視設定を定義する≪NOS0193≫．コンフィギュレーションにて，タスクにリソース占有時間監視設定が定義されない場合，または，False が定義された場合，そのタスクに対してリソース
占有時間の監視を行わない【NOS1395】．タスクのリソース占有時間の監視では，コンフィギュレーシ
ョンにてリソース毎にリソース占有時間を定義する≪NOS0208≫．リソースにリソース占有時間を定義しない場合，そのリソースに対して，リソース占有時間を監視しないものとする【NOS1396】．タスク実行時間監視中にリソース占有時間監視を行う場合，タスク実行時間も監視する【NOS1397】．リソースがネストして取得された場合，各リソースが監視対象であれば，取得された各リソースに対して監視を行う【NOS1398】．
タスクがリソース占有時間バジェットを超えてリソースを占有した時，OS は
E_OS_PROTECTION_LOCKED_RESOURCE をパラメータとして保護違反時処理を呼び出す【NOS0183】．
OS 割込み禁止時間の監視
タスクが OS 割込み禁止時間バジェットを超えて OS 割込みを禁止し続けないか，OS が監視する．
タスクに対して OS 割込み禁止時間の監視を行う場合，コンフィギュレーションにて，タスク毎にOS 割込み禁止監視設定を定義する≪NOS0192≫．コンフィギュレーションにて，タスクに OS 割込み
禁止監視設定が定義されない場合，または，False が定義された場合，そのタスクに対して OS 割り込
み禁止時間の監視を行わない【NOS1399】．タスクの OS 割込み禁止時間の監視では，コンフィギュレ110文書番号：ATK2-0010
文書名：ATK2 外部仕様書
ーションにてシステム全体で 1 つの OS 割込み禁止時間を定義する≪NOS0203≫．OS 割込み禁止時間を定義しない場合，OS 割込み禁止時間を監視しないものとする【NOS1400】．タスク実行時間監視中，
リソース占有時間監視中に OS 割込み禁止時間監視を行う場合，タスク実行時間やリソース占有時間も監視する【NOS1401】．
タスクが OS 割込み禁止時間バジェットを超えて OS 割込み禁止状態を維持した時，OS は
E_OS_PROTECTION_LOCKED_OSINT をパラメータとして保護違反時処理を呼び出す【NOS0184】．
保護違反時の動作
タスクがタスク実行時間，起動および待ち解除間隔，リソース占有時間，割込み禁止時間の時間制約に違反した場合に，保護違反時処理に渡すパラメータの一覧を表 2-11 に示す．
表 2-11 タスクの違反処理一覧
タスクの違反処理

保護違反時処理に渡すパラメータ

タスクの実行時間が実行時間バジェットを超えた． E_OS_PROTECTION_TIME_TASK≪NOS0181≫
タスクがリソース占有時間バジェットを超えてリ

E_OS_PROTECTION_LOCKED_RESOURCE

ソースを占有した．

≪NOS0183≫

タスクが OS 割込み禁止時間バジェットを超えて

E_OS_PROTECTION_LOCKED_OSINT

OS 割込みを禁止した．

≪NOS0184≫111

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
保護違反タスクタスクが実行時間，リソース占有時間，割込み禁止時間の時間制約に違反した場合の保護違反タスク
はその時間制約を越えて実行したタスクとし，タスクの起動要求もしくは待ち解除要求が時間制約に違反した場合の保護違反タスクは起動要求もしくは待ち解除要求を受けたタスクとする【NOS0244】．
AUTOSAR 仕様との違い
本仕様では，AUTOSAR 仕様で規定されていたエラーコードに対して，より詳細な情報が取得できる
よう細分化を行った．AUTOSAR 仕様から変更を行ったタイミング保護違反時のエラーコードを，表2-12 に示す．
表 2-12 タスクに対するタイミング保護違反時のエラーコードの定義の違い
AUTOSAR 仕様

本仕様

E_OS_PROTECTION_TIME【OS064】 E_OS_PROTECTION_TIME_TASK≪NOS0181≫
E_OS_PROTECTION_ARRIVAL

E_OS_PROTECTION_ARRIVAL_TASK≪NOS1394≫【OS466】
E_OS_PROTECTION_ARRIVAL【OS467】
E_OS_PROTECTION_LOCKED

E_OS_PROTECTION_LOCKED_RESOURCE≪NOS0183≫【OS033】
E_OS_PROTECTION_LOCKED

E_OS_PROTECTION_LOCKED_OSINT≪NOS0184≫【OS037】

全割込み禁止時間に対する割込み禁止時間監視はしない

112

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.17.4 C2ISR に対するタイミング保護機能
C2ISR 到着間隔の監視
C2ISR の処理が開始された時を到着時刻とする【OS471】．C2ISR の到着間隔がタイムフレーム以上であることを，OS が監視する【OS470】．C2ISR の到着間隔がタイムフレーム未満である場合，OS はC2ISR を実行せず，E_OS_PROTECTION_ARRIVAL_ISR をパラメータとして保護違反時処理を呼び出す【NOS0187】．このとき，C2ISR は実行されないため，到着時刻は更新しない【NOS0298】．
保護違反時の動作
C2ISR が到着間隔の時間制約に違反した場合に，保護違反時処理に渡すパラメータの一覧を表 2-13に示す．
表 2-13 C2ISR の違反処理一覧
C2ISR の違反処理
C2ISR の到着間隔がタイムフレーム未満である．

保護違反時処理に渡すパラメータ
E_OS_PROTECTION_ARRIVAL_ISR≪NOS0187≫

保護違反 C2ISR
C2ISR の到着間隔が時間制約に違反した場合の保護違反 C2ISR は発生した C2ISR とする【NOS0245】．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，C2ISR に対する実行時間の監視機能，リソース占有時間の監視機能，OS 割込
み禁止時間の監視機能，および，全割込み禁止時間の監視機能を提供すると規定している．本仕様では，
C2ISR は信頼 OSAP のみに所属するため，その実行にかかる時間は信頼できるものとし，C2ISR に対する実行時間の監視機能，リソース占有時間の監視機能，OS 割込み禁止時間の監視機能，および，全割込み禁止時間の監視機能を提供しないと規定した．よって，≪OS474≫の要求を削除した．
また，本仕様では，AUTOSAR 仕様で規定されていたエラーコードに対して，より詳細な情報が取得できるよう細分化を行った．AUTOSAR 仕様から変更を行ったタイミング保護違反時のエラーコードを，
表 2-14 に示す．

113

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
表 2-14 C2ISR に対するタイミング保護違反時のエラーコードの定義の違い
AUTOSAR 仕様
E_OS_PROTECTION_TIME

本仕様
C2ISR に対する実行状態監視はしない【OS210】
E_OS_PROTECTION_ARRIVAL

E_OS_PROTECTION_ARRIVAL_ISR≪NOS0187≫【OS048】
E_OS_PROTECTION_LOCKED≪OS033≫≪OS037≫

C2ISR に対するリソース占有時間監視はしない
C2ISR に対する OS 割込み禁止時間監視はしない
C2ISR に対する全割込み禁止時間監視はしない

114

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.17.5 タイミング保護違反時処理
タイミング保護違反が発生した場合，OS は原則的に，保護違反が発生した時点で，そのタイミング
保護に対する保護違反時処理を呼び出す．しかしながら，タイミング保護違反時処理は，OS 処理レベ
ルで動作するため，OS 処理レベル実行中にタイミング保護違反が発生した場合，OS 処理レベルでの実行が終了するまで，保護違反時処理は遅延される．OS 処理レベルでの実行が終了した時点で，そのタイミング保護違反に対する保護違反時処理を呼び出す【NOS1402】．タスクが OS 処理レベル実行中にタイミング保護違反をした後，保護違反時処理を呼び出す前に実行可能状態となった場合は，そのタスクが次回実行状態になり，OS 処理レベルでの実行を終了した時点で，そのタイミング保護違反に対す
る保護違反時処理を呼び出す【NOS1403】．ここで，タスクが OS 処理レベル実行中にタイミング保護違反をした後，保護違反時処理を呼び出す前に休止状態または待ち状態となった場合は，そのタイミン
グ保護違反に対する保護違反時処理を呼び出さない（タイミング保護違反をしたタスクが実行可能状態となり，その後強制終了などにより休止状態になった場合を含む）【NOS1404】．
タイミング保護機能を実現するための割込みに伴う制約
タイミング保護機能は，一般的にハードウェアタイマとその割込みによって実現されると考えられる．
タイミング保護機能を実現するための割込みは，OS 自身が使用するものであり，ターゲット定義である【NOS1529】．タイミング保護機能を実現するための割込みが ISR のコンテナで指定された場合，もしくは，OSAP のコンテナで指定された場合，エラーを検出する≪NOS0363≫≪OS177≫．

115

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.18 OS アプリケーション(OSAP)
2.18.1 OSAP の概要
本 OS は，複数の OS オブジェクトの集合として OSAP を定義する．OSAP は，SC3，SC4 でサポートされる機能である．OSAP が有効な場合，リソースを除く OS オブジェクトはいずれかの OSAP に所属しなければならない．リソースは OSAP に所属しない．
OSAP は，複数定義することが可能であり，OSAPID によって識別する．
2.18.2 OSAP の種別
OSAP には，信頼 OSAP と非信頼 OSAP の 2 種類が存在する【OS446】〔OS_Conf115〕．
信頼 OSAP
信頼 OSAP とは，ハードウェアへのアクセスやシステムサービスの使用に制限がない OSAP である．
ターゲットのハードウェアが特権モードをサポートする場合は，特権モード下での動作も許可される．
また，信頼 OSAP は他の OSAP に対して信頼関数を提供することができる(詳細は 2.18.8 節を参照)【OS464】．
非信頼 OSAP
非信頼 OSAP とは，ハードウェアへのアクセスやシステムサービスの使用が制限される OSAP である．ターゲットのハードウェアが特権モードをサポートする場合，特権モードでの動作は許可されない【OS058】．ただし，ターゲットのハードウェアが特権モードでもメモリ保護を実現できる場合，メモリ保護が有効かつ特権モードの状態で非信頼 OSAP を動作させることを許可する【NOS0237】．
OS の振る舞い
OS 自体は信頼 OSAP と同様の振る舞いをすることができる．ハードウェアでレジスタの保護がサポートされている場合には，OS が管理する制御レジスタに対して，非信頼 OSAP がアクセスすることを禁止する【OS096】．
また，システム定義のフックルーチンは，信頼 OSAP と同様の振る舞いをする【NOS0340】．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，ハードウェアが特権モードをサポートする場合は，非信頼 OSAP は非特権モードで動作することが義務付けられている．本仕様では，特権モードでもメモリ保護が実現できるハードウェア上で動作させる場合には，非信頼 OSAP を特権モードで動作させることを許可する≪
NOS0237≫．

116

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
表 2-15 信頼 OSAP と非信頼 OSAP の動作モードの違い

アプリケーションの種別
信頼 OSAP

プロセッサ

メモリ

AUTOSAR

動作モード

保護機能

仕様

特権モード

有効

○

○

無効

○

○

有効

×

×

無効

×

×

有効

×

○

無効

×

×

有効

○

○

無効

×

×

非特権モード
非信頼 OSAP

特権モード

非特権モード本仕様○：設定可能，×：設定不可能
2.18.3 OSAP の構成
OSAP は，信頼関数，タスク，ISR，アラーム，スケジュールテーブル，カウンタから構成される【NOS1526】〔OS_Conf114〕．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，OSAP は，信頼関数，タスク，ISR，アラーム，スケジュールテーブル，カウ
ンタと，OSAP 固有のスタートアップフック，エラーフック，シャットダウンフックから構成されると規定されている【OS445】〔OS_Conf114〕〔OS_Conf020〕．本仕様において，ATK2 では OSAP 固有のフックルーチンを提供しないこととしたため，OSAP は，信頼関数，タスク，ISR，アラーム，スケジュールテーブル，カウンタから構成されるものと規定した≪NOS1526≫．
2.18.4 OSAP の指定
OS オブジェクトが所属する OSAP をコンフィギュレーション時に静的に指定する．また，OSAP が保護違反時処理に使用するリスタートタスクを，コンフィギュレーション時に静的に指定する(詳細は2.22 節を参照)．リスタートタスクは，OSAP に所属するタスクの 1 つであり，OSAP 再起動時に OSによって起動されること以外は，通常のタスクと同じ振る舞いをする【NOS1139】．
SC3，SC4 で，タスク，C2ISR，カウンタ，アラーム，スケジュールテーブルがどの OSAP にも所属していない場合，ジェネレータはエラーを検出する【OS311】．
2.18.5 OSAP の状態
本 OS では，OSAP は以下の 3 つの状態を持つ．各 OSAP は以下の状態の中から，常に１つの状態を
とる．

117

文書番号：ATK2-0010
文書名：ATK2 外部仕様書

アプリケーション利用可能状態(APPLICATION_ACCESSIBLE)
OSAP に所属するオブジェクトを他の OSAP から利用できる状態．OS は，StartOS が呼び出された
後，StartupHook を呼び出す前に全ての OSAP の状態を APPLICATION_ACCESSIBLE に初期化す
る【OS500】．
アプリケーション再起動状態(APPLICATION_RESTARTING)
OSAP が再起動中であり，OSAP に所属するオブジェクトを他の OSAP から利用できない状態．
TerminateApplication や ProtectionHook によって OSAP が終了し，リスタート要求がある場合，OSは OSAP の状態を APPLICATION_RESTARTING とする【OS503】．
本状態は，他の OSAP から利用できないだけであり，自身の OSAP からのタスクの起動やアラーム，
スケジュールテーブルの開始は可能であり，満了処理も実行される【NOS1140】．
アプリケーション終了状態(APPLICATION_TERMINATED)OSAP が終了され，OSAP に所属するオブジェクトを他の OSAP から利用できない状態．
TerminateApplication や ProtectionHook によって OSAP が終了し，リスタート要求がない場合，OSは OSAP の状態を APPLICATION_TERMINATED とする【OS502】．OS は本状態から他の状態へ遷移を行わない．
OSAP 状態ごとのアクセス権限
OSAP の状態がアプリケーション利用可能状態以外である場合，他の OSAP に所属する OS オブジェ
クトからのアクセスを禁止する【OS504】．アプリケーション利用可能状態ではない OSAP に対して，
他の OSAP に所属する OS オブジェクトがシステムサービスの発行を行った場合，OS モジュールは
E_OS_ACCESS を返す【OS509】．

OSAP の状態遷移
OSAP の状態遷移を図 2-46 に示す．

118

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
StartOS実行後
かつ
StartupHook実行前

ProtectionHook(返り値：PRO_TERMINATEAPPL_RESTART)またはTerminateApplication(引数：RESTART)

アプリケーション利用可能状態
開始
APPLICATION_ACCESSIBLE

AllowAccessProtectionHook(返り値：PRO_TERMINATEAPPL)
またはTerminateApplication(引数：NO_RESTART)

アプリケーション再起動状態
APPLICATION_RESTARTING

ProtectionHook(返り値：PRO_TERMINATEAPPL)
またはTerminateApplication(引数：NO_RESTART)

アプリケーション終了状態
APPLICATION_TERMINATED
図 2-46 OSAP の状態遷移図

119

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.18.6 OSAP の操作
2.18.6.1 現在実行中の OSAPID の取得
本 OS は，現在実行中の OSAP の ID を取得するシステムサービスとして GetCurrentApplicationIDを提供する(詳細は 3.9.74 節を参照)．なお，現在実行中の OSAP とは，基本的には，実行中のタスク，
ISR が所属する OSAP を示す．信頼関数実行中のコンテキストでは，その信頼関数が所属する OSAPが現在実行中の OSAP となる．信頼関数実行中に，別の信頼関数を呼び出した場合，現在実行中の OSAP
は，後者の信頼関数が所属する OSAP に切り替わる．信頼関数からリターンした場合，現在実行中のOSAP は，その信頼関数を呼び出す直前の OSAP に戻る．カウンタの満了処理を実行中の場合，その満了処理に対応するアラーム，スケジュールテーブルの所属する OSAP が実行中の OSAP となる．例えば，あるアラームの満了処理でエラーが発生して呼び出されたエラーフックにおける実行中の OSAP は，
そのアラームが所属する OSAP となる．また，現在実行中の OSAP は，フックルーチンの呼出しによって変化せず，フックルーチン実行中の場合には，フックルーチンを呼び出した時点での実行中のOSAP が，現在実行中の OSAP となる．
また，本 OS は，現在実行中のタスク，ISR が所属する OSAP を取得するシステムサービスとして，
GetApplicationID を提供する（詳細は 3.9.41 節を参照）．GetCurrentApplicationID と
GetApplicationID の違いは，信頼関数実行中のコンテキストにおいて，その信頼関数が所属する
OSAPID を返すか，現在実行中のタスク/ISR が所属する OSAPID を返すか，また，カウンタ満了処理
中のコンテキストにおいて，それに対応するアラーム，スケジュールテーブルが所属する OSAP を返す
か，現在実行中のタスク/ISR が所属する OSAP を返すかのみである．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，「The running OS-Application is defined as the OS-Application to which thecurrently running Task or ISR belongs. In case of a hook routine the Task or ISR which caused thecall of the hook routine defines the running OS-Application.」と述べられている．本仕様において，満了処理実行中における実行中の OSAP に関する記述を追加した．
AUTOSAR 仕様では，GetApplicationID と GetCurrentApplicationID の返り値について「Note that
if the caller is not within a CallTrustedFunction() call the value is equal to the result of
GetApplicationID().」という≪SWS_Os_00797≫内での記述がある．ATK2 では，カウンタ満了処理中のコンテキストにおいても，GetApplicationID の返り値はタスク/ISR が所属する OSAP であるほうが設計，実装がシンプルになると考えたため，カウンタ満了処理中のコンテキストにおいてもこれらの返り値が異なるものとした．
2.18.6.2 OS オブジェクトが所属する OSAPID の取得
本 OS は，タスク，ISR，カウンタ，アラーム，スケジュールテーブルが所属する OSAPID を取得するシステムサービスとして，CheckTaskOwnership，CheckISROwnership，CheckAlarmOwnership，
CheckCounterOwnership，CheckScheduleTableOwnership を提供する(詳細は 3.9.53 節～3.9.57 節を
参照)．

120

文書番号：ATK2-0010
文書名：ATK2 外部仕様書

2.18.6.3 OS オブジェクトに対するアクセス権の取得
本 OS は，指定した OSAP が，指定したタスク，ISR，リソース，カウンタ，アラーム，スケジュー
ルテーブルにアクセス可能かを取得するシステムサービスとして CheckTaskAccess，CheckISRAccess，CheckAlarmAccess，CheckResourceAccess，CheckCounterAccess，CheckScheduleTableAccess を提供する(詳細は 3.9.45 節～3.9.50 節を参照)．
2.18.6.4 OSAP の終了
本 OS は，OSAP の終了を要求するシステムサービスとして TerminateApplication を提供する(詳細は 3.9.59 節を参照)．
OSAP の終了で行う処理を以下に示す【OS447】．
・ 終了する OSAP に所属するタスクと ISR の終了
・ 終了する OSAP に所属する ISR に対応する割込み要因の禁止
・ 終了する OSAP に所属するアラーム，スケジュールテーブルの停止
AUTOSAR 仕様との違い
AUTOSAR 仕様では，OSAP 終了時，OSAP 固有のシャットダウンフックは呼び出されないと規定されている【OSa178】．本仕様において，ATK2 では OSAP 固有のフックルーチンは提供しないこととしたため，本規定を削除した．
2.18.6.5 OSAP の利用許可
本 OS は，再起動状態の OSAP を利用可能状態へ遷移させるシステムサービスとして AllowAccessを提供する(詳細は 3.9.60 節を参照)．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，OSAP 再起動時，OSAP 固有のスタートアップフックは呼び出されないと規定されている【OSa179】．本仕様において，ATK2 では OSAP 固有のフックルーチンは提供しないこととしたため，本規定を削除した．
2.18.6.6 OSAP 状態の取得
本 OS は，OSAP の状態を取得するシステムサービスとして GetApplicationState を提供する(詳細は3.9.61 節を参照)．
2.18.7 OSAP に所属する OS オブジェクトの保護
OSAP に所属する OS オブジェクトは，他の非信頼 OSAP から不正なアクセスをされないよう，OSによって保護される．なお，信頼 OSAP は他の OSAP に対して自由にアクセスすることが許される．

121

文書番号：ATK2-0010
文書名：ATK2 外部仕様書

非信頼OSAP

アクセス
禁止(※)

OSオブジェクト
アクセス
許可
OSオブジェクト

非信頼OSAP

信頼OSAP

アクセス
禁止(※)

OSオブジェクト

アクセス
禁止(※)

アクセス
許可

OSオブジェクト

アクセス
許可

アクセス
許可

OSオブジェクト

OSオブジェクト

※アクセス権を付与することでアクセス可能となる

図 2-47 OSAP に所属する OS オブジェクトの保護

2.18.7.1 OS オブジェクトに対するアクセス権
OSAP に所属する処理単位は，同じ OSAP に所属するすべての OS オブジェクトに対してアクセスすることができる．しかし，非信頼 OSAP の場合，他の OSAP に所属する，アクセス権が付与されていない OS オブジェクトに対してアクセスすることは禁止されている．非信頼 OSAP から他の OSAP に所属する OS オブジェクトに対してアクセスを行うためには，コンフィギュレーション時にアクセス権を付与する必要がある【NOS1561】．リソースは OSAP に所属しないため，リソースへアクセス可能とする OSAP をコンフィギュレーション時に指定する必要がある【OSa013】〔OS_Conf051〕．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，OSAP の非信頼，信頼に関わらず，他の OSAP に所属する OS オブジェクトに対してアクセスを行うことはコンフィギュレーション時にアクセス権を付与した場合を除き禁止されている【OS448】．しかし，ATK2 では信頼 OSAP に対してアクセス権チェックを行わない方針としたため，本仕様を削除し，新たに仕様を規定した≪NOS1561≫．

122

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.18.8 信頼関数
信頼関数は信頼 OSAP が他の非信頼 OSAP に対して提供するサービスルーチンである．OS は信頼
OSAP が信頼関数を提供するための機能を提供する【OS451】〔OS097〕〔OS_Conf021〕．また，提供された信頼関数を呼び出すためのシステムサービスとして CallTrustedFunction を提供する(詳細は3.9.42 節を参照)．

非信頼OSAP

信頼OSAP非公開

OSオブジェクト

OSオブジェクト

公開
OSオブジェクト

信頼関数

信頼関数
呼出し機能
OS

図 2-48 信頼関数を呼び出すための機能

2.18.8.1 信頼関数のパラメータのチェック
本 OS は，信頼関数のパラメータとして指定されたメモリ領域に対して，信頼関数の呼出し元のタス
ク，C2ISR が，読出し，書込み，実行のアクセス権を持つかをチェックするための機能を持つ．また，渡されたパラメータが呼び出し元のタスク，C2ISR のスタック領域であるかをチェックするための機能を持つ．
なお，本 OS は，タスクが，指定された領域のアクセス権を持つか，また，スタック領域であるかをチェックするシステムサービスとして CheckTaskMemoryAccess を提供する(詳細は 3.9.44 節を参照)．
また，C2ISR が，指定された領域のアクセス権を持つか，また，スタック領域であるかをチェックするシステムサービスとして CheckISRMemoryAccess を提供する(詳細は 3.9.43 節を参照)．

123

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.18.8.2 信頼関数のアクセス権と優先度
信頼関数は，信頼関数が所属する信頼 OSAP と同じアクセス権で動作する≪NOS0326≫．
信頼関数がタスクから呼ばれた場合，信頼関数は呼び出されたタスクと同じタスク優先度で動作し，タスクで許可されたシステムサービスを使用することができる【OS365】．
信頼関数が C2ISR から呼ばれた場合，信頼関数は呼び出された C2ISR と同じ割込み優先度で動作し，
C2ISR で許可されたシステムサービスを使用することができる【OS364】．
2.18.8.3 信頼関数の記載方法
信頼関数の記載方法を示す．
信頼関数のプロトタイプ宣言
信頼関数のプロトタイプ宣言を以下に示す【NOS0374】．

StatusType TRUSTED_<信頼関数名>(TrustedFunctionIndexType FunctionIndex,
TrustedFunctionParameterRefType FunctionParams);
信頼関数の本体記述
信頼関数の本体記述を以下に示す【NOS0375】．信頼関数はユーザ定義のエラーコードを返す【NOS0179】．したがって，信頼関数がエラーを返した場合，OS はエラーフックを呼び出す【NOS0373】．
StatusType TRUSTED_<信頼関数名>(TrustedFunctionIndexType FunctionIndex,
TrustedFunctionParameterRefType FunctionParams){}
AUTOSAR 仕様との違い
AUTOSAR 仕様では，信頼関数の返り値は void 型と定義されていた≪OS312≫．本仕様では，信頼関数を StatusType 型とし，ユーザが定義した信頼関数の返り値を CallTrustedFunction の返り値とするよう規定した≪NOS0374≫≪NOS0375≫≪NOS0179≫．これにより，ユーザ定義の信頼関数がエラーを返した場合も，エラーフックを呼び出すよう規定した≪NOS0373≫．
ATK2 では，信頼関数のプロトタイプ宣言，本体記述のために，TRUSTEDFUNCTION マクロを提供する【NOS1233】．TRUSTEDFUNCTION マクロを用いた信頼関数の記載方法を示す．信頼関数の引数 FunctionIndex のデータ型は TrustedFunctionIndexType，FunctionParams のデータ型はTrustedFunctionParameterRefType である【NOS1234】．

124

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
信頼関数のプロトタイプ宣言
TRUSTEDFUNCTION(TRUSTED_<信頼関数名>, FunctionIndex, FunctionParams);
信頼関数の本体記述

TRUSTEDFUNCTION(TRUSTED_<信頼関数名>, FunctionIndex, FunctionParams){}
2.18.8.4 信頼関数の指定信頼関数は OSAP のコンフィギュレーションと共に，コンフィギュレーション時に静的に指定する．
2.18.8.5 信頼関数呼び出し時のスタックチェック
信頼関数の呼出し時に，信頼関数が使用するスタックの残り量と，信頼関数の実行時に使用するスタックサイズ(OsTrustedFunctionStackSize)を比較し，オーバーフローが起きないことをチェックする【NOS0399】．非信頼タスクから呼び出された信頼関数は，非信頼タスク用システムスタックを使用する【NOS0720】．同様に，非信頼 C2ISR から呼び出された信頼関数は，非信頼 C2ISR 用システムスタックを使用する【NOS0839】．スタックの残り量が，信頼関数が使用するスタックサイズ(OsTrustedFunctionStackSize)より少ない場合，CallTrustedFunction は，信頼関数を呼び出さずに，
E_OS_STACKINSUFFICIENT を返す【NOS0400】．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，信頼関数呼び出し時のスタックチェックについて規定されていない．信頼関数の実行は特権モードで行われるため，メモリ保護の対象外となる．しかし，非信頼 OSAP に所属する処
理単位から，スタックが残り少ない状態で信頼関数が呼び出された場合，信頼関数がスタックオーバー
フローを起こし，メモリ保護違反が検知できない場合がある．そこで，信頼関数の呼び出し時には，ス
タックの残り量と信頼関数が使用するスタック量を比較し，オーバーフローが起きないことをチェックするよう規定した≪NOS0399≫．また，スタックが不足した状態で信頼関数が呼び出されることを避けるため，スタックの残り量が，信頼関数が使用するスタック量より少ない場合， CallTrustedFunction
は，信頼関数を呼び出さずに，E_OS_STACKINSUFFICIENT を返すよう規定した≪NOS0400≫．
2.18.8.6 信頼関数呼び出し時の実行時間チェック
SC4 において，信頼関数の呼出し時に，呼出し元の処理単位の残り実行時間（信頼関数呼出し時点での実行時間と実行時間バジェットの差分）と，信頼関数の実行にかかる実行時間バジェット(OsTrustedFunctionExecutionBudget)を比較し，信頼関数の実行に必要な時間が残っていることをチェックする【NOS1405】．タスクから呼び出された信頼関数の実行時間は，呼出し元タスクの実行時間

125文書番号：ATK2-0010
文書名：ATK2 外部仕様書に含まれる【NOS1406】．同様に，信頼関数のリソース占有時間や OS 割込み禁止時間は，呼出し元タスクのリソース占有時間，OS 割込み禁止時間に含まれる【NOS1407】．信頼関数が，呼出し元タスクの実行時間，リソース占有時間，または，OS 割込み禁止時間のバジェットを超えて実行した場合，タ
イミング保護違反時処理を呼び出す【NOS1408】．信頼関数を呼び出した処理単位の実行時間バジェッ
トの残り時間が，信頼関数の実行にかかる実行時間(OsTrustedFunctionExecutionBudget)より少ない
場合，CallTrustedFunction は，信頼関数を呼び出さずに，E_OS_TIMEINSUFFICIENT を返す【NOS1409】．
使用上の注意信頼関数の実行時間バジェット（OsTrustedFunctionExecutionBudget）の見積もりを誤った場合，
アプリケーションが想定外の動作をすることがある．信頼関数の実行時間バジェットを，本来の値よりも大きく見積もった場合，CallTrustedFunction は，E_OS_TIMEINSUFFICIENT を返し，信頼関数が呼び出されない．信頼関数の実行時間バジェットを，本来の値よりも小さく見積もった場合，呼出し
元タスクの時間保護違反が発生し，OS がシャットダウンする可能性がある．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，信頼関数実行中にタイミング保護違反時処理を呼ばないように規定している≪
OS564≫≪OS565≫．本仕様では，信頼関数呼出し時に実行時間の残り時間をチェックし，信頼関数実行中であってもタイミング保護違反時処理を呼ぶように規定した≪NOS1405≫≪NOS1406≫≪
NOS1407≫≪NOS1408≫≪NOS1409≫．詳細は 3.9.42 節を参照．

126

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.18.8.7 信頼関数呼出しの記述例/* 引数の構造体をユーザが定義することにより，信頼関数に引数を渡すことができる */struct my_trusted_function_parameter{type1 parameter1;
type2 parameter2;};/* この関数をユーザが呼び出すことにより，信頼関数が使用できる */StatusType my_trusted_function_stub(
type1 parameter1,
type2 parameter2){/* 引数を構造体に格納 */struct my_trusted_function_parameter st;
st.parameter1 = parameter1;
st.parameter2 = parameter2;/* MY_TRUSTED_FUNCTION で指定した信頼関数を呼び出す */return(CallTrustedFunction(MY_TRUSTED_FUNCTION, &st));}/* CallTrustedFunction() システムサービスの実装概念例 */StatusType CallTrustedFunction(
TrustedFunctionIndexType idx,
TrustedFunctionParameterRefType ref){StatusType return_value;/* 信頼関数が登録されているかをチェック */if(idx > MAX_EX_SVC)
return(E_OS_SERVICEID);/* 信頼 OSAP が実行できる状態に移行 */...
/* idx で指定された信頼関数を呼び出す */return_value = (*(ex_svc_table[idx]))(idx, ref);/* 呼出し元の OSAP が実行できる状態に復帰 */...
/* 返り値を返す */return(return_value);}127文書番号：ATK2-0010
文書名：ATK2 外部仕様書/* CallTrustedFunction() から呼び出されるユーザ記述の信頼関数 */TRUSTEDFUNCTION(TRUSTED_my_function, idx, param_ref){
TaskType task;
type1 parameter1;
type2 parameter2;
StatusType return_value = E_OK;
struct my_trusted_function_parameter *ref = param_ref
if (GetTaskID(&task) != E_OK)
task = INVALID_TASK;
if(!OSMEMORY_IS_READABLE(
SVC_CALL(CheckTaskMemoryAccess)(task, ref, sizeof(*ref)))){/* アクセス権がない場合はエラー */return_value = E_OS_ACCESS;}
else{
parameter1 = ref->parameter1;
parameter2 = ref->parameter2;/* ISR から呼び出されたか？ */if(GetISRID() != INVALID_ISR){/* ISR から呼び出された場合はエラー */return_value = E_OS_ACCESS;}
else if(OSMEMORY_IS_WRITEABLE(
SVC_CALL(CheckTaskMemoryAccess)(task, parameter1, parameter2))){/* 信頼関数の本体を呼び出す */return_value = my_trusted_function_body(parameter1, parameter2);}
else{/* アクセス権がない場合はエラー */return_value = E_OS_ACCESS;}}/* 返り値を返す */return(return_value);}128

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.18.8.8 実装上の注意
信頼関数実行中は，ユーザが排他制御を行わない限り，途中で他の処理単位へ切り替わることがある
ので，以下の状況が発生する可能性がある．
(1) 他の処理単位が，実行中の信頼関数を呼び出す(リエントラントに使用する)．
(2) 信頼関数実行中の処理単位が所属する OSAP に所属する別の処理単位が，保護違反を発生し，その OSAP が強制終了する．
(3) 他の処理単位が，信頼関数実行中の処理単位が所属する OSAP を終了する．
したがって，信頼関数の中で，リエントラントに使用されたり，途中で終了されると，データ構造が一貫性のない状態になるなどの理由で問題が発生する処理においては，以下の処理単位との間で排他制
御しなければならない．
(1) 同じデータ構造をアクセスする信頼関数(自分自身を含む)を呼び出す他の処理単位．
(2) 信頼関数を呼び出した処理単位と同一の OSAP 内の他の処理単位．
(3) 信頼関数を呼び出した処理単位が属する OSAP を終了する(TerminateApplication を発行する)処
理単位．
この排他制御は，SuspendOSInterrupts/ ResumeOSInterrupts を使って実現するのが最も簡単であるが，割込み禁止時間を短くしたい場合には，リソースなどのより適切な方法を用いるべきである．
また，「信頼関数を呼び出した処理単位が属する OASP を終了する処理単位」に C2ISR が含まれていると，この排他制御は，少なくとも一部の割込みを禁止することになる．そのため，排他制御区間が長い場合，割込み禁止時間が長くなってしまう．
2.18.9 マルチコア対応 OS における OSAP
本 OS ではコアを跨ぐシステムサービスを直接操作法で実装することを前提としているが，コアを跨いだ OSAP の終了処理に関しては，遠隔呼出し法によって実装することを想定する．OSAP 終了処理において，OSAP に所属する各々の OS オブジェクトの終了処理を担うのは，終了する OSAP が割付けられているコアの OS である【NOS0112】．マルチコア対応 OS における OSAP の終了は，以下の手順に従う【NOS0113】．
(1) 終了する OSAPID を引数に与えて TerminateApplication()を呼び出す．
(2) 終了する OSAP が割付けられているコアに対して，コア間割込みによって OSAP の終了処理を要求する．直ちにシステムサービスの呼出し元にリターンする．
(3) コア間割込みによる終了処理要求を受理した各コアは，シングルコア OS と同様の OSAP 終了処
理を実行する．

129

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.18.10システムサービスの呼出し方法
本 OS の SC3，SC4 において，システムサービスは，ソフトウェア割込みによって呼出すのが基本である．システムサービス呼出しを通常の方法で記述した場合，そのシステムサービスは，ソフトウェア
割込みによって呼び出される【NOS1153】．一般に，ソフトウェア割込みによるシステムサービス呼出
しはオーバヘッドが大きい．そのため，信頼 OSAP に属する処理単位からは，関数呼出しによってシス
テムサービスを呼出すことで，オーバヘッドを削減することができる．そこで，信頼 OSAP に属する処
理単位から関数呼出しによってシステムサービスを呼出す機能を提供する．
信頼 OSAP に属する処理単位が実行する関数のみを含んだソースファイルでは，OS ヘッダファイル(Os.h)をインクルードする前に，信頼 OSAP であることを示すマクロを定義することで，システムサー
ビス呼出しを通常の方法で記述した場合に，そのシステムサービスは，関数呼出しによって呼び出される【NOS1154】．また，信頼 OSAP に属する処理単位が実行する関数と，非信頼 OSAP に属する処理単位が実行する関数の両方を含んだソースファイルでは，関数呼出しによってシステムサービスを呼出すための名称を作るマクロ(SVC_CALL)を用いることで，そのシステムサービスは，関数呼出しによって呼び出される【NOS1155】．
例えば，ActivateTask を関数呼出しによって呼出す場合には，次のように記述すればよい．
ercd = SVC_CALL(ActivateTask)(tskid);
一方，信頼 OSAP であることを示すマクロを定義したソースファイルであっても，ソフトウェア割込
みによるシステムサービス呼出しを呼出すための名称マクロ(SVC_TRAP)を用いることで，そのシステ
ムサービスは，ソフトウェア割込みによって呼び出される【NOS1156】．
ercd = SVC_TRAP(ActivateTask)(tskid);
また，拡張性のために，非信頼 OSAP に属する処理単位が実行する関数のみを含んだソースファイル
では，OS ヘッダファイル(Os.h)をインクルードする前に，非信頼 OSAP であることを示すマクロを定義する【NOS1157】．ATK2 では，信頼 OSAP，非信頼 OSAP を示すマクロを以下とする【NOS1235】〔NOS1157〕．
・ 信頼 OSAP：TOPPERS_TRUSTED
・ 非信頼 OSAP：TOPPERS_NON_TRUSTED
信頼 OSAP，非信頼 OSAP を示すマクロを，どちらも定義して OS ヘッダファイルをインクルードした場合は，エラーとする【NOS1236】．
例外として，DisableAllInterrupts，EnableAllInterrupts を呼び出す場合には，常に関数呼出しで呼び出される【NOS1523】．DisableAllInterrupts，EnableAllInterrupts を非信頼 OSAP から呼び出した場合の動作は，ターゲット依存である【NOS1524】．DisableAllInterrupts, EnableAllInterrupts は，ハードウェアの特性に合わせて最小限のオーバヘッドで実装すべき≪COS3318≫≪COS3838≫であり，さらに，ATK2 では全割込み禁止時間監視機能を提供しない（2.17.2.3 節の AUTOSAR 仕様との違いを参照）ことから，上記のように規定した．

130

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.19 メモリ保護
メモリ保護機能は，OSAP のメモリ領域や周辺デバイスが，不正なアクセスをされないよう，OS によって保護する機能である．
2.19.1 保護対象の OSAP
メモリ保護機能は，非信頼 OSAP がメモリ領域に対して不正なメモリアクセス(読出し，書込み，実行)を行ったときに，メモリ領域を不正なメモリアクセスから保護する機能である．
信頼 OSAP がメモリ領域に対してメモリアクセスを行うことに対しては保護を行わない【NOS0870】．
2.19.2 メモリ領域に対する保護の概要
メモリ保護機能では，アクセス対象となるメモリ領域に対して書込みアクセス保護と読出し(実行)ア
クセス保護を行う．
書込みアクセス保護はメモリに対する書込みアクセスの制御を行う．読出し(実行)アクセス保護はメ
モリからの読出しアクセスの制御を行う．実行アクセス時にはメモリに格納されたコードを読み出す必要があるため，読出し(実行)アクセス保護で保護を行う．ハードウェアでサポートされている場合は，読出しアクセスと実行アクセスに対して別々に保護を行ってもよい．
アクセス対象のメモリ領域に対する保護設定の一覧を表 2-16 に示す．

131

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
表 2-16 アクセス対象のメモリ領域に対する保護設定の一覧
アクセス先のアクセス先のデータアクセス元の処理単位
非信頼 OSAP

メモリ領域

信頼 OSAP

W

R

X

W

R

X

×

×

×

○

○

○

（OS のメモリ領域） 専有ライト共有リードデータ

×

○

S×

○

○

○

OSAP 専 同じ

同じ処理単位のスタック

○

○

S×

○

○

○

異なる処理単位のスタック

×

×

S×

○

○

○

コード

×

△

○

○

○

○

専有リードオンリーデータ

×

○

△

○

○

○

専有リードライトデータ

○

○

S×

○

○

○

専有ライト共有リードデータ

×

○

S×

○

○

○

専有周辺デバイス

※1

※1

※1

○

○

△

異なる

スタック

×

×

S×

○

○

○

OSAP

コード

×

×

×

○

○

○

専有リードオンリーデータ

×

×

×

○

○

○

専有リードライトデータ

×

×

S×

○

○

○

専有ライト共有リードデータ

×

○

S×

○

○

○

専有周辺デバイス

×

×

×

○

○

△

コード

×

△

○

○

○

○

リードオンリーデータ

×

○

△

○

○

○

リードライトデータ

○

○

S×

○

○

○

共有周辺デバイス

※1

※1

※1

○

○

○

×

×

×

△

△

△

カーネル専有領域

有領域

共有領域

OSAP

スタック，コード，データ保護領域が配置されていない領域
W：書込みアクセス○：アクセス許可

R：読出しアクセス

×：アクセス禁止

X：実行アクセス△：ターゲット定義
S×：ターゲットがサポートしている場合は個別にアクセス禁止にしてよい※1：ターゲット定義 ≪NOS1411≫

タスクと C2ISR のスタック領域の保護
OS は，タスク，C2ISR のスタック領域に対して，タスク，C2ISR 自身が，読出し，書込みアクセスすることを許可する【OS196】．

132

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
タスク，C2ISR のスタック領域に対して，同一の非信頼 OSAP に所属する他のタスク，C2ISR が，読出し，書込みアクセスすることを禁止する【NOS0260】．
タスク，C2ISR のスタック領域に対して，他の非信頼 OSAP に所属するタスク，C2ISR が，読出し，
書込みアクセスすることを禁止する【NOS0295】．
ハードウェアでサポートされている場合には，タスク，C2ISR のスタック領域に対して，非信頼 OSAPが実行アクセスすることを禁止する【NOS0213】．
OSAP の専有コード領域の保護
OS は，非信頼 OSAP の専有コード領域に対して，非信頼 OSAP 自身が実行アクセスすることを許可する【NOS0148】．非信頼 OSAP の専有コード領域に対して，非信頼 OSAP 自身が書込みアクセスをすることは禁止とする【NOS0251】．
非信頼 OSAP の専有コード領域に対して，非信頼 OSAP 自身が読出しアクセスすることを禁止する
かは，ターゲット定義とする【NOS1237】．
ある OSAP の専有コード領域に対して，他の非信頼 OSAP が読出し，書込み，実行アクセスすることを禁止する【NOS0252】．
OSAP の専有リードオンリーデータ領域の保護
OS は，非信頼 OSAP の専有リードオンリーデータ領域に対して，非信頼 OSAP 自身が読出しアクセ
スすることを許可し，書込みアクセスすることは禁止する【NOS0305】．
非信頼 OSAP の専有リードオンリーデータ領域に対して，非信頼 OSAP 自身が実行アクセスすることを禁止するかは，ターゲット定義とする【NOS1238】．
ある OSAP の専有リードオンリーデータ領域に対して，他の非信頼 OSAP が，読出し，書込み，実行アクセスすることを禁止する【NOS0306】．
OSAP の専有リードライトデータ領域の保護
OS は，非信頼 OSAP の専有リードライトデータ領域に対して，非信頼 OSAP 自身が読出し，書込み
アクセスすることを許可する【OS086】．
ある OSAP の専有リードライトデータ領域に対して，他の非信頼 OSAP が，読出し，書込みアクセ
スすることを禁止する【NOS0294】．
ハードウェアでサポートされている場合には，非信頼 OSAP が他 OSAP の専有リードライトデータ
領域に対して，実行アクセスすることを禁止する【NOS0214】．
OSAP の共有リード専有ライトデータ領域の保護
OS は，ある OSAP の共有リード専有ライトデータ領域に対して，すべての非信頼 OSAP が，読出しアクセスすることを許可する【NOS0250】．
ある OSAP の共有リード専有ライトデータ領域に対して，非信頼 OSAP 自身が書込みアクセスすることを許可するが，他の非信頼 OSAP が書込みアクセスすることを禁止する【NOS0296】

133

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
ハードウェアでサポートされている場合には，非信頼 OSAP が他 OSAP の共有リード専有ライトデータ領域に対して，実行アクセスすることを禁止する【NOS0216】．
OSAP の専有周辺デバイスの保護
OS は，信頼 OSAP が周辺デバイスに対して，読出し，書込みアクセスすることを許可する【OS209】．
信頼 OSAP が周辺デバイスに対して，実行アクセスできるかどうかはターゲット定義とする【NOS1565】．
非信頼 OSAP による，OSAP の専有周辺デバイスに対するアクセスを制御する機能を提供するかどうかは，ターゲット定義とする【NOS1411】．本機能を持つ場合，OS は専有周辺デバイスに対して OSAPのメモリ領域と同様の保護を行う【NOS0266】．本機能を持たない場合，OS は専有周辺デバイスに対して非信頼 OSAP が読出し，書込み，実行アクセスすることを一律禁止する【NOS0255】．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，メモリ領域に対する書込みアクセスの制御は必須であるのに対して，読出しア
クセスの制御はオプションまたは未規定となっている．
AUTOSAR 仕様から変更を行った OSAP のメモリ領域に対する保護設定の違いを，表 2-17 に示す．

表 2-17 OSAP のメモリ領域に対する保護設定の違い
AUTOSAR

本仕様

変更内容≪NOS0260≫

タスク，C2ISR のスタック領域に対して，同一の非信頼 OSAP に所属

仕様【OS208】

する他のタスク，C2ISR がアクセスする場合の規定が記述されている．
AUTOSAR 仕様では，書込みアクセスのみを禁止している≪OS208≫．
これに対して，書込み，読出しアクセスを禁止するよう規定した≪
NOS0260≫．
【OS355】≪NOS0295≫

タスク，C2ISR のスタック領域に対して，他の非信頼 OSAP に所属するタスク，C2ISR がアクセスする場合の規定が記述されている．
AUTOSAR 仕様では，書込みアクセスのみを禁止している≪OS355≫．
これに対して，書込み，読出しアクセスを禁止するよう規定した≪
NOS0295≫．

【OS027】≪NOS0252≫

OSAP の専有コード領域に対して，他の非信頼 OSAP がアクセスする
場合の規定が記述されている．

134

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
AUTOSAR

本仕様

変更内容

仕様
AUTOSAR 仕様では，実行アクセスを禁止してもよいと規定している≪OS027≫．
これに対して，書込み，読出し，実行アクセスを禁止と明記した≪
NOS0252≫．
【OS087】－

AUTOSAR 仕様では，タスク，C2ISR 毎の専有データ領域をサポートしているのに対して，本仕様ではサポートしない．

【OS195】【OS356】【OS026】≪NOS0294≫

OSAP の専有リードライトデータ領域に対して，他の非信頼 OSAP がアクセスする場合の規定が記述されている．
AUTOSAR 仕様では，読出しアクセスを禁止してもよいと規定している≪OS026≫．

【OS207】

また，書込みアクセスを禁止すると規定としている≪OS207≫．
これに対して，書込み，読出しアクセスの禁止を明記した≪NOS0294≫．

【OS083】≪NOS0266≫

専有周辺デバイス領域に対して，非信頼 OSAP がアクセスする場合の規定が記述されている．
AUTOSAR 仕様では，書込み許可に関してのみ規定されている≪
OS083≫．
しかし，本仕様では，より一般化して，OSAP のメモリ領域と同様の保護を行うと規定した≪NOS0266≫．

共有コード領域の保護
OS は共有コード(ライブラリ)領域に対して，すべての非信頼 OSAP が実行アクセスすることを許可する【OS081】．共有コード領域に対して，すべての非信頼 OSAP が書込みアクセスすることは禁止とする【NOS0217】．
共有コード領域に対して，すべての非信頼 OSAP が，読出しアクセスすることを禁止するかは，ター
ゲット定義とする【NOS1239】．
共有リードオンリーデータ領域の保護
OS は共有リードオンリーデータ領域に対して，すべての非信頼 OSAP が読出しアクセスすることを許可し，書込みアクセスすることを禁止する【NOS0308】．
共有リードオンリーデータ領域に対して，実行アクセスすることを禁止するかは，ターゲット定義とする【NOS1240】．

135文書番号：ATK2-0010
文書名：ATK2 外部仕様書
共有リードライトデータ領域の保護
OS は共有リードライトデータ領域に対して，すべての非信頼 OSAP が読出し，書込みアクセスすることを許可する【NOS0141】．
ハードウェアでサポートされている場合には，共有リードライトデータ領域に対して，実行アクセスすることを禁止する【NOS0215】．
共有周辺デバイスの保護
OS は，信頼 OSAP が周辺デバイスに対して，読出し，書込みアクセスすることを許可する≪OS209≫．
非信頼 OSAP による，共有周辺デバイスに対するアクセスを制御する機能を提供するかどうかは，ターゲット定義とする【NOS1412】．本機能を持つ場合，OS は共有周辺デバイスに対して共有メモリ領域と同様の保護を行う【NOS0256】．本機能を持たない場合，OS は共有周辺デバイスに対して非信頼
OSAP が読出し，書込み，実行アクセスすることを一律禁止する【NOS0153】．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，OSAP のメモリ領域と共有コード領域に関してのみ規定しているが，本仕様では，その他の共有メモリ領域に関する規定を追加した．
2.19.2.1 OS のメモリ領域
OS は，OS のメモリ領域に対して非信頼 OSAP が読出し，書込み，実行アクセスすることを禁止す
る【NOS0253】．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，OS のデータとスタック領域に対するアクセス保護の規定がされていた【OS198】．本仕様では，非信頼 OSAP が OS の全てのメモリ領域に対してアクセス禁止であることを明確に規定した≪NOS0253≫．
2.19.2.2 保護領域が配置されていない領域
保護領域が配置されていない領域の保護
保護領域が配置されていない領域に対して信頼 OSAP が読出し，書込み，実行アクセスできるかどうかは，ターゲット定義とする【NOS1241】．
OS は，保護領域が配置されていない領域に対して非信頼 OSAP が読出し，書込み，実行アクセスすることを禁止する【NOS0281】．
AUTOSAR 仕様との違い
本仕様では，非信頼 OSAP が保護領域として設定されていない領域に対してアクセス禁止であることを明確に規定した≪NOS0281≫．

136

文書番号：ATK2-0010
文書名：ATK2 外部仕様書

2.19.3 保護違反時の動作
OS は，メモリ保護違反を検出した場合，E_OS_PROTECTION_MEMORY をパラメータとして保護違反時処理を呼び出す【OS044】．

137

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.19.4 メモリ保護の設定における前提
メモリ領域の保護に関する設定は，コンフィギュレーション時に静的に指定する【NOS0220】．シス
テム動作中にメモリ保護に関する設定を変更する機能は提供しない．
オブジェクトモジュール
プログラムのオブジェクトコードとデータを含むファイルをオブジェクトモジュールと呼ぶ．オブジェクトファイルとライブラリファイルは，オブジェクトモジュールである．
標準のセクション
コンパイラに特別な指定をしないで出力されるセクションを，標準のセクションと呼ぶ．
標準のセクションには，以下のセクションが含まれるが，詳細はターゲット毎に異なる．
・ コードセクション・ 定数データセクション・ データセクション

初期値を持つデータセクション

初期値を持たないデータセクション

OS が提供する標準のセクション
ATK2 では，OS は以下のセクションを提供する【NOS1242】．これらのセクションは，コンフィギュレーション時に定義できない【NOS1243】．OS が提供するセクション名は，ターゲット定義とする【NOS1244】．
・ 非信頼 OSAP 毎の標準のセクションを配置するためのセクション
・ OS および信頼 OSAP のメモリ領域の標準のセクションを配置するためのセクション・ 共有領域の標準のセクションを配置するためのセクション
メモリリージョン
オブジェクトモジュールの配置対象となる同じ性質を持った一連のメモリ領域をメモリリージョンと呼ぶ．使用できるメモリリージョンは，実装毎に定める(詳細は 2.2.3 節を参照)．

138

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
メモリリージョンとメモリセクションの関係
図 2-49 にメモリリージョンとメモリセクションの関係を示す．ジェネレータは，コンフィギュレー
ションファイルに記述されたメモリセクションを，指定されたパラメータに従ってメモリリージョンに配置する．配置結果はリンカの入力として使われる情報ファイル(リンカスクリプト等)として出力され
る．

ROM
コード
セクション
リードオンリー
データセクション

メモリリージョン

メモリセクションRAM
リードライト
データセクション

図 2-49 メモリリージョンとセクションの関係

開発環境に関する前提
メモリ保護の設定を行うために，開発環境(コンパイラやリンカ)が，以下に挙げる機能を持つことが前提となる．
・ オブジェクトコードおよびデータが出力されるセクションを指定された名称のセクションに変更
できること．
・ 各セクションを配置するメモリリージョンと各セクションの配置順序を指定できること．
・ 各セクションを配置するアドレスをハードウェアが持つメモリ保護機構の制約に合致するようにアラインできること．
また，次の機能を持つことが望ましいが，必須とはしない．
・ 標準のセクションを配置するメモリリージョンと，そのメモリリージョン内での標準のセクションの配置順序を，オブジェクトモジュールごとに指定できること

139文書番号：ATK2-0010
文書名：ATK2 外部仕様書
AUTOSAR 仕様との違い
AUTOSAR 仕様では，メモリ保護のコンフィギュレーション方法が規定されていないため，本仕様で新たに規定した．
2.19.5 メモリ保護の設定方法
セクション名指定によるメモリ保護設定
ユーザは OsMemorySection コンテナを用いることで，指定したセクションを指定したメモリリージ
ョンに配置し，メモリ保護の設定として，書込み，読出し，実行アクセスの許可，禁止の指定ができる(詳細は 3.8.39 節を参照)【NOS0224】．
後述のオブジェクトモジュールごとのメモリ保護設定(OsMemoryModule コンテナ)がサポートされている場合には，ユーザは，標準のセクションのメモリ保護設定を，OsMemorySection コンテナで行うことはできない【NOS0908】．
オブジェクトモジュール指定によるメモリ保護設定
ユーザは OsMemoryModule コンテナを用いることで，指定したオブジェクトモジュールに含まれる標準のセクションを，セクションの種類別に定められたデフォルトのメモリリージョンに配置することができる【NOS0257】．なお，デフォルトのメモリリージョンはターゲット定義である(例：データセク
ションは RAM でなければならない)【NOS1247】．また，指定したオブジェクトモジュールに含まれる標準のセクションのメモリ保護属性は，ターゲット定義とする(詳細は 3.8.40 節を参照)【NOS1246】．
この機能を実現するためには，開発環境(コンパイラやリンカ)が，標準のセクションを配置するメモ
リリージョンとセクションの配置順序をオブジェクトモジュールごとに指定する機能を持っていることが必要である．
アドレス指定によるメモリ保護設定
ユーザは OsMemoryArea コンテナを用いることで，先頭アドレスとサイズで指定したメモリ領域に対して，メモリ保護属性の設定を指定できる(詳細は 3.8.41 節を参照)【NOS0226】．
この機能は，周辺デバイスが配置されたメモリ領域に対してメモリ保護設定を行うためのものである
が，コードやデータを配置する通常のメモリに対しても用いることができる．
スタック領域のメモリ保護設定
タスク，C2ISR が使用するスタック領域は，スタック確保の方法(自動/ユーザ指定)にかかわらずジェネレータにてメモリ保護設定を行う【NOS0259】．よって，ユーザはスタック領域のメモリ保護設定を行う必要はない．
メモリ保護関連のコンテナとそのパラメータによって設定されるデータのアクセス権を表 2-18 に示
す．

140文書番号：ATK2-0010
文書名：ATK2 外部仕様書

表 2-18 各メモリ保護設定とデータのアクセス権

OSAP 設定

コンテナ名
OsMemoryModule

関連付け

信頼/非信頼有効

信頼

Export 設定

true
false

非信頼

無効

OsMemorySection(※1)

有効OsMemoryArea

有効無効

カーネル専有領域
共有領域（※2）
カーネル専有領域
OSAP 専有領域
共有領域（※2）

データのアクセス権

カーネル専有ライト共有リード
カーネル専有リードライト
OSAP 専有ライト共有リード

false

OSAP 専有領域

OSAP 専有リードライト

true

共有領域

共有リードライト

false

共有領域

共有リードライトtrue

カーネル専有領域

カーネル専有ライト共有リード

false

カーネル専有領域

カーネル専有リードライト

true

OSAP 専有領域

OSAP 専有ライト共有リード

false

OSAP 専有領域

OSAP 専有リードライト

true

共有領域

共有リードライト

false

共有領域

共有リードライト

信頼-パラメータ設定に依存

カーネル専有リードライト

非信頼

-

同上

OSAP 専有リードライト

-

-

同上

共有リードライト

-

信頼

非信頼

無効

true

配置されるメモリ領域-(※1). ATK2 Release 1.4.2 では，OsMemorySection コンテナの設定によるメモリ保護は正しく動作しない．
(※2). コード，リードオンリーデータは共有領域に配置される．リードライトデータはそれぞれの専有領域に配置され，専有ライト共有リードデータとして扱われる．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，メモリ領域のコンフィギュレーションの仕組みが定義されていないため，本仕様で新たに規定した．

141

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.20 サービス保護サービス保護機能は，不正な動作から OS を保護する機能である．システムを危険な状態にする振る
舞いや，OSAP が起こすエラーに対する保護機能を提供する．
各 SC におけるサービス保護機能の適用一覧を表 2-19 に示す．
表 2-19 サービス保護機能の適用一覧
サービス保護機能の内容
処理単位の不正な処理に対する保護SC1 SC2 SC3 SC4※以下の分類を参照

タスクが不正終了した場合の保護

○

○

○

○

C2ISR が不正終了した場合の保護

○

○

○

○

フックルーチンが不正終了した場合の保護

○

○

○

○

○

○

非信頼 OSAP のシャットダウン要求からの保護システムサービスでの不正な処理への保護※以下の分類を参照

不正なアドレスパラメータに対する書込みの検知○○

不正な処理単位からのシステムサービス呼出しの検知

○

○

○

○

割込み許可状態での割込み許可システムサービス呼出しに対する保護

○

○

○

○

割込み禁止状態でのシステムサービス呼出し

○

○

○

○

システムサービスの引数への NULL ポインタ指定に対する保護

○

○

○

○

不正な ID を指定したシステムサービス呼出しの検知

○

○

○

○

C1ISR を指定したシステムサービス呼出しの検知

○

○

○

○

内部リソースを指定したシステムサービス呼出しの検知

○

○

○

○

異なる OSAP からのアクセス保護※以下の分類を参照

アクセス権を持たない処理単位からの OS オブジェクトアクセス保護○○

メモリ領域に対するアクセス権チェックサービスの提供○○

OS オブジェクトに対するアクセス権チェックサービスの提供

○

○

○

○

OS シャットダウン時のポストタスクフックの呼出し○○

AUTOSAR 仕様との違い
AUTOSAR 仕様におけるサービス保護機能には，OSEK 仕様に対する補完の仕様とメモリ保護に関する仕様が含まれており SC3，SC4 でのみサポートする仕様である．本仕様では OSEK 仕様に対する補完の仕様を SC1，SC2 でもサポートするよう拡張した．

142

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.20.1 処理単位の不正な処理に対する保護
2.20.1.1 タスクが不正終了した場合の保護タスクがシステムサービスによるタスクの終了を行わずにタスク処理を終了することを，タスクの不正終了と呼ぶ．タスクの不正終了時に，OS は以下の処理を順に行う【NOS0443】．
(1) マルチコア対応 OS において，不正終了したタスクがスピンロックを占有していた場合，OS は占有していたスピンロックを解放する【NOS1115】．
(2) 不正終了したタスクが，SuspendAllInterrupts，SuspendOSInterrupts による割込み禁止状態だ
った場合，OS は割込み許可状態に戻す【OS239】．DisableAllInterrupts による割込み禁止状態
は，スケジューラ起動時に許可状態に戻される≪NOS0648≫．
(3) 不正終了したタスクがリソースを占有していた場合，OS は占有していたリソースを解放する【OS070】．
(4) システム定義のエラーフックが有効の場合，不正終了したタスクが実行状態から休止状態に遷移する前に E_OS_MISSINGEND をパラメータとして，システム定義のエラーフックを呼び出す【OS069】．
(5) スタックモニタリングが有効の場合，不正終了したタスクのスタックモニタリングを行う【NOS1371】．プロテクションフックが有効の場合で，スタックオーバーフローを検出した場合，ポストタスクフックは呼び出されずに，プロテクションフックが呼び出される≪NOS1231≫．このプロテクションフックで，タスクを強制終了した場合，ポストタスクフックは呼び出されない≪NOS1232≫．
(6) OS はタスクの終了を行い，ポストタスクフックが有効な場合はポストタスクフックを呼び出す【OS052】．
2.20.1.2 C2ISR が不正終了した場合の保護
C2ISR が，割込み禁止状態もしくはリソースを占有した状態で C2ISR を終了した場合を，C2ISR の不正終了と呼ぶ．C2ISR の不正終了時に，OS は以下の処理を順に行う【NOS0445】．
(1) スタックモニタリングが有効の場合，不正終了した C2ISR のスタックモニタリングを行う【NOS1372】．
(2) マルチコア対応 OS において，不正終了した C2ISR がスピンロックを占有していた場合，OS は占有していたスピンロックを解放した後で，システム定義のエラーフックが有効であれば

143

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
E_OS_SPINLOCK をパラメータとしてシステム定義のエラーフックを呼び出す【NOS1116】．
(3) C2ISR が割込み禁止状態で処理を終了した場合，OS は割込み許可状態に戻した後で，システム
定義のエラーフックが有効であれば E_OS_DISABLEDINT をパラメータとしてシステム定義のエラーフックを呼び出す【OS368】．
(4) C2ISR が獲得したリソースを解放せずに処理を終了した場合，OS は解放されていないリソースを解放し，システム定義のエラーフックが有効であれば E_OS_RESOURCE をパラメータとして
システム定義のエラーフックを呼び出す【OS369】．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，タスクの不正終了時に OS が行う処理の順序が規定されていなかったため，本仕様では，まず不正終了を検知したことによるエラー処理であるエラーフックを行い，エラーの原因である割込み禁止の解除，リソースの解放を行った後，正常な状態でポストタスクフックを呼び出すよう規定した≪NOS0443≫．C2ISR も同様に順序を明確に規定した．≪NOS0445≫
2.20.1.3 フックルーチンが不正終了した場合
フックルーチンが，DisableAllInterrupts，SuspendAllInterrupts，SuspendOSInterrupts による割込み禁止状態，もしくはスピンロックを占有した状態（プロテクションフックのみ）で処理を終了した
場合，OS は動作を保証しない【NOS1543】．
2.20.1.4 非信頼 OSAP のシャットダウン要求からの保護使用できるシステムサービスは呼出し元の処理単位によって制限されているが，非信頼 OSAP では，加えてシステム全体に影響を与えるシステムサービスの使用を制限する．

144

文書番号：ATK2-0010
文書名：ATK2 外部仕様書

全システムサービス
呼び出し元処理単位での制限
信頼/非信頼に基づく制限図 2-50 システムサービス使用の制限
OS は非信頼 OSAP に所属する処理単位からの OS シャットダウン要求を無視する【OS054】．ただし，非信頼 OSAP のタスク，C2ISR から呼び出された信頼関数からの OS シャットダウンは可能である≪NOS0326≫．
2.20.1.5 信頼関数が不正終了した場合
信頼関数が，DisableAllInterrupts，SuspendAllInterrupts，SuspendOSInterrupts による割込み禁止状態，もしくはスピンロックを占有した状態で処理を終了した場合，OS は動作を保証しない【NOS1592】．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，フックルーチン，信頼関数が不正終了した場合の動作について規定されていな
い．本仕様では，信頼関数が不正終了した場合はユーザ責任とし，動作を保証しないこととした≪
NOS154≫≪NOS1592≫．

145

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.20.2 システムサービスでの不正な処理への保護
2.20.2.1 不正なアドレスパラメータに対する書込み
OSAP が有効な場合，システムサービスに渡されたアドレスが呼出し元の OSAP から書込みできない
メモリ領域を指している場合，OS は E_OS_ILLEGAL_ADDRESS を返す【OS051】．
CheckTaskMemoryAccess，CheckISRMemoryAccess を除いて，E_OS_ILLEGAL_ADDRESS は，非信頼 OSAP からの呼び出しでのみ返す【NOS0869】．
2.20.2.2 不正な処理単位からのシステムサービス呼出し
実行中の処理単位から呼び出せないシステムサービスを呼び出した場合，返り値の型が StatusTypeのシステムサービスは E_OS_CALLEVEL を返し，返り値の型が StatusType でないシステムサービス
は無効値を返す【OS088】．返り値の型が StatusType でないシステムサービスの場合，エラーコードを
E_OS_CALLEVEL としてエラーフックを呼び出すことでエラーを検知する【NOS0411】〔NOS0409〕．
返り値の型が，AccessType であるシステムサービスにおける無効値は，アクセス不可能を指す【NOS0520】．返り値の型が，ObjectAccessType であるシステムサービスにおける無効値は，
NO_ACCESS を指す【NOS0521】．
なお，C1ISR から呼び出せないシステムサービスを呼び出した場合の動作は保証しない【NOS0320】〔COS0602〕．
2.20.2.3 割込み禁止状態でのシステムサービス呼出し
タスク，C2ISR，フックルーチンが割込み禁止の状態で，返り値の型が StatusType のシステムサー
ビスを呼び出した場合，別に規定がない限りは，OS はシステムサービスの処理を行わず，
E_OS_DISABLEDINT を返す【OS093】〔COS3354〕〔COS3343〕〔COS3330〕〔COS3306〕〔COS3368〕．
返り値の型が StatusType でないシステムサービスの場合，別に規定がない限りは，OS はシステムサービスの処理を行わず，エラーコードを E_OS_DISABLEDINT としてエラーフックを呼び出すことでエラーを検知する【NOS0412】〔NOS0409〕．
DisableAllInterrupts と EnableAllInterrupts に よ る ク リ テ ィ カ ル セ ク シ ョ ン 中 に ，SuspendAllInterrupts，ResumeAllInterrupts，SuspendOSInterrupts，ResumeOSInterrupts を呼び出した場合，エラーコードを E_OS_DISABLEDINT として，エラーフックを呼び出す【NOS0712】〔NOS0409〕〔COS3306〕．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，C1ISR からの不正なシステムサービス呼出しの規定が記述されていなかったため，本仕様で明確に規定した≪NOS0320≫．
本仕様では，返り値の型が StatusType でないシステムサービスの場合でも，エラーフックが呼ばれると規定したことから，該当するシステムサービスにおいて，エラーフックが呼ばれた場合に渡される
エラーコードを規定した≪NOS0411≫≪NOS0412≫．
AUTOSAR 仕様では，割込み許可状態で割込み許可システムサービスを呼び出した場合，OS は処理

146

文書番号：ATK2-0010
文書名：ATK2 外部仕様書を行わないと規定されていた【OS092】．しかし，本仕様では，割込み許可システムサービスもエラー
フックを呼び出すよう規定したため，この仕様を削除した．
2.20.2.4 システムサービスの引数への NULL ポインタ指定に対する保護
引数にポインタを指定するシステムサービスにおいて，値が NULL であるポインタを指定した場合，
OS は E_OS_PARAM_POINTER を返す【OS566】．
AUTOSAR 仕様との違い
AUTOSAR 仕様 V5.0.0 (R4.0 Rev 3)では，NULL ポインタ指定に対するエラーコードがOS_E_PARAM_POINTER として規定されている≪OS566≫．しかし，他のエラーコードとプレフィックスが逆であり，誤記と思われるため，本仕様では，E_OS_PARAM_POINTER とした．なお，
AUTOSAR 仕様 V5.1.0 (R4.1 Rev 1)では，E_OS_PARAM_POINTER へ修正されている．
ATK2 では，互換性のために，E_OS_PARAM_POINTER と同じ値で，OS_E_PARAM_POINTERを定義する【NOS1374】．
2.20.2.5 返り値が StatusType でないシステムサービスに対するエラー
返り値の型が StatusType でなく，オブジェクト ID を指定するシステムサービスに対して，不正なID を指定して呼び出した場合，エラーコードを E_OS_ID としてエラーフックを呼び出す【NOS0519】〔NOS0409〕．
返り値の型が StatusType でなく，引数に ISRID を指定するシステムサービスに対して，C1ISR を指定して呼び出した場合，エラーコードを E_OS_ID としてエラーフックを呼び出す【NOS0699】〔NOS0409〕．
返り値の型が StatusType でなく，引数にリソース ID を指定するシステムサービスに対して，内部リソースを指定して呼び出した場合，エラーコードを E_OS_ID としてエラーフックを呼び出す【NOS0700】〔NOS0409〕．
2.20.2.6 OS 起動前と OS 終了後のシステムサービス呼出し
通常のシステムサービスは OS 起動前と OS シャットダウン後に使用してはならないが，
DisableAllInterrupts/EnableAllInterrupts と SuspendAllInterrupts/ResumeAllInterrupts の組は，例外として使用することができる(ただし，スタティック変数が初期化されていることを前提とする)【OS299】．また，マルチコア対応 OS においては，OS 起動前であっても，StartCore，StartNonAutosarCore，GetCoreID は，使用することができる【NOS1126】．
OS 起動前に，DisableAllInterrupts，EnableAllInterrupts，SuspendAllInterrupts，
ResumeAllInterrupts，StartCore，StartNonAutosarCore，GetCoreID，StartOS 以外のシステムサービスを呼び出した場合の動作は保証されない【NOS0850】．OS 起動前に呼び出すことができるシステムサービスにおいて，エラーが発生した場合は，エラーフックは呼び出されない【NOS1127】．

147

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.20.2.7 起動していないコアに対する呼出し
マルチコア対応 OS において，本 OS が起動していないコアに対して，返り値の型が StatusType のシステムサービスを呼び出した場合，OS はシステムサービスの処理を行わず，E_OS_CORE を返す【OSa120】．返り値の型が StatusType でないシステムサービスの場合，別に規定がない限りは，OSはシステムサービスの処理を行わず，エラーコードを E_OS_CORE としてエラーフックを呼び出すことでエラーを検知する【NOS0926】〔NOS0409〕．
2.20.3 異なる OSAP からのアクセス保護
OSAP が有効な場合，アクセス権のない OS オブジェクトやメモリへのアクセスを不正なアクセスとして検出する．
2.20.3.1 アクセス権を持たない処理単位からの OS オブジェクトアクセス保護
システムサービスのパラメータにアクセス権を持たない OS オブジェクトの ID を指定された場合，
OS は E_OS_ACCESS を返す【OS056】．
2.20.3.2 メモリ領域に対するアクセス権チェックサービスの提供
すべての非信頼 OSAP に対して，OS は特定のタスク，C2ISR のメモリ領域へのアクセス権があるかをチェックするシステムサービスとして CheckTaskMemoryAccess(詳細は 3.9.44 節を参照)とCheckISRMemoryAccess(詳細は 3.9.43 節を参照)を提供する【OS449】〔OS512〕〔OS513〕．
2.20.3.3 OS オブジェクトに対するアクセス権チェックサービスの提供
すべての非信頼 OSAP に対して，OS は特定の OS オブジェクトへのアクセス権があるかをチェックするシステムサービスとして CheckTaskAccess，CheckISRAccess，CheckAlarmAccess，CheckResourceAccess，CheckCounterAccess，CheckScheduleTableAccess を提供する(詳細は 3.9.45
節～3.9.50 節を参照)．

148

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.21 CPU 例外発生に対する処理
0 による除算，不正命令実行などの CPU 例外が発生した場合，OS は
E_OS_PROTECTION_EXCEPTION をパラメータとしてプロテクションフックを呼び出す【OS245】．
CPU 例外発生時に，プロテクションフックから CPU 例外要因を取得できる方法は，ターゲット定義とする【NOS1249】．

149

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.22 保護違反時処理
保護違反時処理は，保護違反が発生した際に保護違反に対するユーザ定義のエラー処理を実行する機能である．保護違反時処理を発生する要因はタイミング保護機能，メモリ保護機能，スタックモニタリ
ング，CPU 例外の 4 つがある．
OS が起動する前に保護違反が発生した際の動作は未定義である．
2.22.1 保護違反時処理が動作する処理レベル
保護違反を発生する要因ごとの保護違反時処理が動作する処理レベルを以下に示す．
・ タイミング保護
OS 処理レベルで動作する【NOS0635】．
・ メモリ保護OS 処理レベルで動作する【NOS0637】．
・ スタックモニタリング
OS 処理レベルで動作する【NOS0906】．
・ CPU 例外


C1ISR 以外の処理単位における CPU 例外
OS 処理レベルで動作する【NOS0638】．

C1ISR における CPU 例外
C1ISR 処理レベルで動作する【NOS0639】．

2.22.2 プロテクションフック
保護違反が発生した時に，プロテクションフックが有効であれば OS はプロテクションフックを呼び出す．プロテクションフックは OS の一部として実行される【OS211】．プロテクションフックには保護違反の要因を示すエラーコードがパラメータとして指定される．

150

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.22.2.1 プロテクションフックの指定
プロテクションフックの使用有無はコンフィギュレーション時に静的に指定する．
プロテクションフックがコンフィギュレーション時に無効とされている場合，OS は保護違反時処理として OS シャットダウンを行う【OS107】．このとき，OS シャットダウンのパラメータとして，違反の区別を示すエラーコードを指定する【NOS0271】．
AUTOSAR 仕様との違い
AUTOSAR 仕様では保護違反時処理から OS シャットダウンされた場合のエラーコードが規定されていないため，本仕様で規定した≪NOS0271≫．
2.22.3 保護違反に対して OS が提供する機能
プロテクションフック内でユーザ定義の処理を実行した後，OS は，プロテクションフックの返り値に応じて，保護違反を起こしたタスク，C2ISR，もしくは保護違反を起こしたタスク，C2ISR が所属する OSAP に対する処理を行う．プロテクションフックの返り値を保護違反時要求と呼ぶ．保護違反時要求に対して OS が提供する機能を以下に示す．
保護違反時要求として PRO_IGNORE が返された場合，OS は何もしない【NOS0909】．
PRO_TERMINATETASKISR が返された場合，OS は保護違反を起こしたタスク，C2ISR の強制終了を行う【OS553】．PRO_TERMINATEAPPL が返された場合，OS は保護違反を起こしたタスク，C2ISRが所属する OSAP の強制終了を行う【OS554】．
PRO_TERMINATEAPPL_RESTART が返された場合，保護違反を起こしたタスク，C2ISR が所属する OSAP の強制終了と，コンフィギュレーションで指定されたリスタートタスクの起動を行う【OS555】．PRO_SHUTDOWN が返された場合，OS は OS シャットダウンを行う【OS556】．
表 2-20 保護違反時要求に対して OS が提供する機能一覧
保護違反時要求

OS が提供する機能

SC1 SC2 SC3 SC4

PRO_IGNORE

何もしない

○

PRO_TERMINATETASKISR

保護違反を起こしたタスク，C2ISRの強制終了

PRO_TERMINATEAPPL

○

○

○

○

○

○

○

○

○

○

○

○

保護違反を起こしたタスク，C2ISRが所属する OSAP の強制終了

PRO_TERMINATEAPPL_RESTART 保護違反を起こしたタスク，C2ISRが所属する OSAP の強制終了と，コンフィギュレーションで指定されたリスタートタスクの起動
PRO_SHUTDOWN

OS シャットダウン

○

○

151

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
AUTOSAR 仕様との違い
AUTOSAR 仕様では，プロテクションフックから PRO_IGNORE を返すことができる保護違反要因
は，E_OS_PROTECTION_ARRIVAL のみと規定されている【OS106】．本仕様では，
E_OS_PROTECTION_ARRIVAL を拡張したので，PRO_IGNORE を返すことができる保護違反要因も拡張した≪NOS1394≫≪NOS0187≫≪NOS0909≫．また，CPU 例外発生時も，CPU 例外要因によっては無視してよい状況が考えられることから，PRO_IGNORE を返すことができると規定した≪
NOS0909≫．
2.22.3.1 保護違反時処理から OS シャットダウンを行う場合のエラーコード
プロテクションフックが無効と指定されている場合もしくは，プロテクションフックからの返り値として渡される保護違反時要求が PRO_SHUTDOWN であった場合，保護違反を示すエラーコードを引数として OS シャットダウンを行う【NOS0379】．
保護違反時要求に誤りがあり，OS シャットダウンを行う場合は E_OS_PROTECTION_FATAL を引数として OS シャットダウンを行う【NOS0272】．
2.22.3.2 保護違反を起こした処理単位の取得保護違反発生時に，プロテクションフックから保護違反を起こした処理単位を取得するシステムサー
ビスとして，GetFaultyContext を提供する(詳細は 3.9.73 節を参照)【NOS1250】．
2.22.3.3 保護違反時要求に誤りがあり OS シャットダウンとなる場合
プロテクションフックの返り値が PRO_TERMINATEAPPL または
PRO_TERMINATEAPPL_RESTART であるにも関わらず，OSAP が定義されていない場合，OS シャ
ットダウンを行う【OS244】．
コンフィギュレーション時に，リスタートタスクを設定していないにも関わらず，プロテクションフ
ックの返り値が PRO_TERMINATEAPPL_RESTART である場合，
OS シャットダウンを行う【OS557】．
プロテクションフックの返り値が未定義である場合，OS シャットダウンを行う【NOS0164】．
保護違反要因が E_OS_PROTECTION_ARRIVAL_ISR である場合，プロテクションフックの返り値が PRO_IGNORE，PRO_SHUTDOWN 以外の場合は OS シャットダウンを行う【NOS1413】．
プロテクションフックの返り値が PRO_IGNORE で，保護違反要因がE_OS_PROTECTION_EXCEPTION もしくは E_OS_PROTECTION_ARRIVAL_ISR 以外である場合，
OS シャットダウンを行う【NOS0003】
C1ISR，システム定義のスタートアップフック，システム定義のエラーフック，プレタスクフック，
ポストタスクフック実行中に呼び出されたプロテクションフックの返り値が PRO_IGNORE，
PRO_SHUTDOWN 以外である場合は OS シャットダウンを行う【NOS0643】．
C2ISR 実行中のプロテクションフックでプロテクションフックの返り値がPRO_TERMINATETASKISR 以外の場合は OS シャットダウンを行う【NOS0627】．
システム定義のシャットダウンフック実行中に保護違反が発生して呼び出されたプロテクションフ

152

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
ックの返り値が，PRO_IGNORE 以外の場合は，システム定義のシャットダウンフックを即座に終了し，シャットダウンを行う【NOS0631】．プロテクションフックが無効で，システム定義のシャットダウ
ンフック実行中に保護違反が発生した場合も，システム定義のシャットダウンフックを即座に終了し，シャットダウンを行う【NOS0912】．
信頼関数実行中に保護違反が発生して呼び出されたプロテクションフックの返り値が，PRO_IGNORE 以外の場合は，信頼関数を即座に終了し，シャットダウンを行う【NOS1141】．プロ
テクションフックが無効で，信頼関数実行中に保護違反が発生した場合，信頼関数を即座に終了し，シャットダウンを行う【NOS1145】．
信頼 OSAP（システムサービスや信頼関数実行中の非信頼 OSAP を含む）による保護違反に対するプ
ロテクションフックで PRO_IGNORE PRO_SHUTDOWN 以外の場合は OS シャットダウンを行う【NOS1533】．保護違反の要因が E_OS_STACKFAULT で，プロテクションフックの返り値がPRO_SHUTDOWN 以外である場合 OS シャットダウンを行う【NOS1534】．

AUTOSAR 仕様との違い
AUTOSAR 仕様では，保護違反時の OS 処理として何もしないを選択できるのは，保護違反要因がE_OS_PROTECTION_ARRIVAL の場合のみであった【OS475】．本仕様では，プロテクションフッ
クの返り値として，PRO_IGNORE を指定できる保護違反要因を拡張しているため，何もしないを選択できないにも関わらず選択した場合の保護違反要因も変更した≪NOS0003≫．
AUTOSAR 仕様では，プロテクションフックからの返り値が未定義であった場合，プロテクションフ
ックがないものとして処理を行うと記述されている【OS308】．AUTOSAR 仕様では，プロテクション
フックの返り値が未定義であった場合の規定が記述されていなかったため，本仕様で明確に規定した≪
NOS0164≫．
AUTOSAR 仕様では，保護違反の要因が E_OS_PROTECTION_ARRIVAL で，プロテクションフッ
クの返り値が PRO_IGNORE と PRO_SHUTDOWN 以外であった場合，ShutdownOS を呼び出すと規定されている【OS506】．本仕様では，E_OS_PROTECTION_ARRIVAL を拡張したため，保護違反の要因が E_OS_PROTECTION_ARRIVAL_ISR で，プロテクションフックの返り値が PRO_IGNOREと PRO_SHUTDOWN 以外であった場合，OS シャットダウンするように規定した≪NOS1394≫≪
NOS0187≫≪NOS1413≫．
AUTOSAR 仕様では，プロテクションフックの返り値が PRO_TERMINATETASKISR であるにも関わらず，対象のタスク，C2ISR が存在しない場合，実行中の OSAP を強制終了し，実行中の OSAP が存在しない場合シャットダウンを行うと規定されている【OS243】．しかし，保護違反を起こした処理
単位を特定する方法を用意することで，誤った保護違反時処理要求に対する処理を一律シャットダウンとしたほうが仕様が明確であることから，本規定を削除した． 本仕様では，保護違反を起こした処理
単位を取得する方法を規定した≪NOS1250≫．
本仕様では，信頼領域（信頼 OSAP 実行中のコンテキストおよび非信頼 OSAP がシステムサービス
や信頼関数を呼んでいる間のコンテキスト）で保護違反が発生した場合には，PRO_IGNORE もしくは

153

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
PRO_SHUTDOWN のみを選択できるようにした≪NOS1533≫≪NOS1534≫．信頼領域で保護違反が発生した場合は，OS の提供する保護機能を無効化でき，保護違反発生時にはすでに，ある OSAP から
他の OSAP に保護違反が波及している可能性がある．
AUTOSAR 仕様では，フックルーチン実行中に呼び出されたプロテクションフックの返り値に対する規定はない．本仕様では，フックルーチン毎に，プロテクションフックの返り値によって実行する処理を規定した≪NOS0631≫≪NOS0912≫．

154文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.22.4 強制終了処理
2.22.4.1 タスクの強制終了処理
OS はタスクの強制終了処理として，タスクが占有していたリソースをすべて解放し，割込み禁止状
態になっていた場合は割込み許可状態に戻す【OS108】．なお，タスクの強制終了時には，ポストタス
クフックの呼出しは行わない【NOS0323】．実行状態のタスクを強制終了した場合，次にスケジューラが起動するまで，そのタスクは実行状態を継続する【NOS0653】．
マルチコア対応 OS において，タスクがスピンロックを占有していた場合は，すべて解放する【OS613】．
2.22.4.2 C2ISR の強制終了処理
本仕様において，C2ISR は信頼 OSAP のみに所属する≪NOS0855≫ため，C2ISR の強制終了はサポ
ートしない
AUTOSAR 仕様との違い
AUTOSAR 仕様では，C2ISR の強制終了処理として，C2ISR が占有していたリソースをすべて解放
し，割込み禁止状態になっていた場合には割込み許可状態に戻すと規定している【OS109】．本仕様において，C2ISR は信頼 OSAP のみに所属するため，C2ISR の強制終了はサポートしないことと規定した．
2.22.4.3 OSAP の強制終了処理
OS は，OSAP の強制終了処理として，以下の処理を行う【OS110】．
・ OSAP の状態を，APPLICATION_TERMINATED か APPLICATION_RESTARTING へと遷移・ OSAP に所属するすべてのタスクと C2ISR の強制終了
・ OSAP に所属するすべてのアラームの停止
・ OSAP に所属するすべてのスケジュールテーブルの停止
・ OSAP に所属するすべての C2ISR の割込み要因を禁止
リスタートオプションが指定され，リスタートタスクが定義されている場合，OS はリスタートタス
クを起動する【OS111】．
マルチコア対応 OS においても，強制終了する OSAP が割付けられているコアで，シングルコア OSと同様の強制終了処理を行う【NOS0928】．
OSAP 強制終了処理は，対象 OSAP のリスタートタスクのコンテキストで実施する【NOS1583】．コ
ンフィギュレーション時にリスタートタスクが指定されていない場合，ジェネレータはリスタートタス
クを生成する【NOS1586】．ジェネレータによって生成されたリスタートタスクに対してシステムサー
ビスを利用してアクセスすることは出来ない【NOS1587】．ジェネレータによって生成されたリスター

155

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
トタスクは OSAP 再起動時に起動しない【NOS1588】．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，OSAP 強制終了処理の実現方法に関する記載はない．一般に，OSAP 強制終了処理はタスクや C2ISR の強制終了処理と比較して処理に時間がかかると考えられる．これにより，
C2ISR から強制終了処理要求を発行した場合は，その C2ISR よりも優先度の低い割込み処理が長時間受け付けられないということが起こりうる．これに対して，OSAP 強制終了処理をタスクコンテキストで実施することにより，途中で割込みを受け付ることが可能である．また，処理の実施をタスクコンテ
キストに限定することにより，OSAP 強制終了処理に関する設計をシンプルにすることが可能であると考えられる．よって，本仕様では OSAP 強制終了処理をタスクコンテキストで実施することを明記した≪NOS1583≫．さらに，1 つの OSAP に対してリスタートタスクは最大でも 1 つしかコンフィギュレーション出来ないため，各 OSAP のリスタートタスクのコンテキストを強制終了処理で使用することとした≪NOS1583≫．

156

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.23 ネストして呼び出された処理単位の振る舞い
本 OS では，タスクや ISR から呼び出されるフックルーチン実行中に，さらに別のフックルーチンが呼び出される場合がある．本節では，本 OS で発生しうるすべての状況における，処理単位の振る舞いについて規定する．
2.23.1 使用可能なシステムサービス
処理単位がネストして呼び出されている状態では，ネストされている処理単位におけるシステムサー
ビスの使用制限が適用される【NOS0506】．例えば，タスク実行中に呼び出されたエラーフックでは，GetTaskState を使用できるが，プロテクションフック実行中に呼び出されたエラーフックにおいては，
GetTaskState は使用できない．なお，C1ISR 実行中に呼び出されたフックルーチンから，C1ISR からの発行が動作保証されないシステムサービスを呼び出した場合も，動作保証されない【NOS0644】．
使用上の注意エラーフック，プロテクションフックからは，GetTaskID，GetISRID を発行できるが，スタートア
ップ，シャットダウンフックからは発行できない．したがって，スタートアップ，シャットダウンフック実行中に起動したエラーフック，プロテクションフックから，GetTaskID，GetISRID を発行した場合，不正な処理単位からの呼び出しとなる．
2.23.2 実行中のタスクおよび C2ISR
タスクもしくは C2ISR を実行中に，システム定義のエラーフック，プロテクションフックが相互にネストして呼び出されても，GetTaskID，GetISRID で取得する ID は，フックが呼び出される前に実行していたタスク，C2ISR の ID となる【NOS0507】．
また，タスクもしくは C2ISR から，信頼関数を呼び出した場合，GetTasID，GetISRID で取得する
ID は，信頼関数を呼び出したタスク，C2ISR の ID となる【NOS0509】．

157

文書番号：ATK2-0010
文書名：ATK2 外部仕様書

表 2-21 GetTaskID で取得出来るタスク ID
ネスト 0

ネスト 1

ネスト 2

ネスト 3

ネスト 4

GetTaskID で取得出来る ID

プレタスクフ *フック

実行中のタスク（これから実行

ック

するタスク）

タスク

実行中のタスク*信頼関数*アラーム，スケジ *フック

実行中のタスクューリングテーブ
ルの満了処理+C2ISR+C2ISR

実行中のタスク*信頼関数*アラーム，スケジ *フック

実行中のタスクューリングテーブ
ルの満了処理C2ISR*C2ISR*信頼関数*アラーム，スケジ *フック

INVALID_TASKューリングテーブ
ルの満了処理*フックはフックが 0 回以上呼ばれることを意味する．+フックは，1 回以上呼ばれることを意味する．

表 2-22 GetISRID で取得出来る ISRID
ネスト 0

ネスト 1

ネスト 2

ネスト 3

ネスト 4

GetISRID で取得出来る ID
INVALID_ISR

タスク
*信頼関数

*アラーム，スケジュ *フック

INVALID_ISR

ーリングテーブルの満了処理
実行中の C2ISR+C2ISR+C2ISR*信頼関数*アラーム，スケジ*フック

実行中の C2ISR*フック

実行中の C2ISRューリングテーブ
ルの満了処理C2ISR*C2ISR*信頼関数*アラーム，スケジューリングテーブ
ルの満了処理158

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.23.3 OSAPID の取得
タスク，C2ISR を実行中に，システム定義のエラーフック，プロテクションフック，シャットダウン
フックが相互にネストして呼び出されても，GetApplicationID，GetCurrentApplicationID が返す IDは，フックが呼び出される前に実行していたタスク，
C2ISR が所属する OSAP の ID となる【OSa005】．
また，システム定義のスタートアップフックと，StartOS 呼出し時に指定された Mode が不正であった場合に呼び出される，システム定義のシャットダウンフックにおいては，実行中のタスク，C2ISR は存在しないので，GetApplicationID，GetCurrentApplicationID は，INVALID_OSAPPLICATION を返す【NOS0511】．

表 2-23 GetApplicationID，GetCurrentApplicationID の戻り値
ネスト 0

ネスト 1

ネスト 2

ネスト 3

スタートアップフック， *フック

GetApplicationID の戻り値

GetCurrentApplicationID の戻り値

INVALID_OS_APPLICATIONINVALID_OS_APPLICATION

実行中のタスク（これから実行する

実行中のタスク（これから実行するタス

タスク）が所属する OSAPク）が所属する OSAP

実行中のタスク，C2ISR が所属する

実行中のタスク，C2ISR が所属する

OSAP

OSAP

実行中のタスク，C2ISR が所属する

実行中のタスク，C2ISR が所属する

OSAP

OSAP

実行中のタスク，C2ISR が所属する

信頼関数が所属する OSAP

シャットダウンフック（E_OS_MODE 時）
プレタスクフック*フックタスク，C2ISR

+フック

+信頼関数

*フック

OSAP
+信頼関数

+アラーム，ス*フック

ケジューリン

実行中のタスク，C2ISR が所属する

アラーム，スケジューリングテーブルがOSAP

所属する OSAP

実行中のタスク，C2ISR が所属する

アラーム，スケジューリングテーブルがOSAP

所属する OSAP

グテーブルの満了処理+アラーム，ス*フック

ケジューリン
グテーブルの満了処理

2.23.4 OS オブジェクトのアクセス保護
実行中のタスク，C2ISR の有無に関わらず，最後に呼び出されたフックルーチンが，システム定義のフックルーチンである場合は，オブジェクトへのアクセス保護は適用されない【NOS0513】．
プレタスクフック，ポストタスクフックは，システム定義のみであるため，アクセス保護は適用され

159

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
ない【OSa006】．
2.23.5 メモリ保護
実行中のタスク，C2ISR の有無に関わらず，最後に呼び出されたフックルーチンが，システム定義のフックルーチンである場合は，メモリ保護は行わない【NOS0516】．
プレタスクフック，ポストタスクフックは，システム定義のみであるため，メモリ保護は行わない【OSa007】．

160

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.24 システムの初期化と終了
2.24.1 システムの初期化手順
ターゲットリセット後の初期化処理はターゲットに依存するため，ユーザは OS を起動する前にター
ゲットハードウェアに依存した初期化処理を行う必要がある【COS1142】．
本 OS では，OS を起動するシステムサービスとして StartOS を提供する(詳細は 3.9.2 節を参照)．ユーザはターゲット初期化処理が終了した後，StartOS に指定するアプリケーションモードを決定し，StartOS の呼び出しを行う．
本 OS が提供するシステムの初期化手順を以下に示す．(＜＞は図 2-51 の処理に対応する)＜OS 起動要求＞(1)

ユーザはアプリケーションモードを指定して，OS の起動処理である StartOS を呼び出す．

＜OS 内部初期化処理＞(2)

OS は，OS の内部初期化処理を実行する【COS1146】．

＜スタートアップフック実行＞(3)

OS はコンフィギュレーションでシステム定義のスタートアップフックが有効な場合，スタートア
ップフックを呼び出す【COS1147】．スタートアップフック実行中は OS 割込み禁止状態である【COS1149】．

(4)

ユーザは，任意の初期化処理をシステム定義のスタートアップフック内で実行することができる【COS1148】．スタートアップフック内で，アプリケーションモードによって異なった処理を実行するために，OS はアプリケーションモードを取得する機能として GetActiveApplicationMode を提供する(詳細は 3.9.1 節を参照)．

＜OS 実行開始＞(5)

OS は，指定されたアプリケーションモードに従って自動起動するタスク，アラーム，スケジュー
ルテーブルを起動状態とする【NOS0669】．スケジューリングを開始すると共に OS 割込み許可状
態にする【COS1150】．同一のタスク優先度に指定されたタスクの起動順序は規定しない【COS1152】．

＜タスク，ISR 実行＞(6)

OS は OS 起動処理を終了し，タスク，ISR の実行を開始する．ユーザは OS 初期化後に動作する
特別なタスクを定義する必要はない【COS1134】．

161

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OSEK 仕様との違い
OSEK 仕様では，自動起動するタスクを起動した後で，アラームを起動すると規定されている【COS1151】．しかし，オブジェクトの起動順序がユーザから観測できないため，順序に関する規定を削除した≪NOS0669≫．
Reset

ハードウェア初期化

OS起動
要求

ユーザ依存部分

OS内部
初期化処理

スタートアップ
フック実行
OS初期化

OS実行開始タスク，ISR実行※実行状態のタスクがなければアイドル処理

OS実行中

図 2-51 システム初期化シーケンス

2.24.2 オブジェクトの自動起動
本 OS では，タスク，アラーム，スケジュールテーブルの自動起動指定によって，OS 初期化後に直ちに動作するタスク，アラーム，スケジュールテーブルを指定することができる【COS1135】．
2.24.3 システムの終了手順
本 OS では，OS を終了するためのシステムサービスとして ShutdownOS を提供する(詳細は 3.9.3 節を参照)．またフェイタルエラーが発生した場合，OS は OS 内部からの要求でシャットダウンする可能性がある【COS1155】．
ポストタスクフックが有効な場合でも，シャットダウン処理では OS はポストタスクフックを呼び出さない【OS071】．
OS がシャットダウンを要求された場合，シャットダウンフックを呼び出した後に OS の終了を行う【COS1156】．
システム定義のシャットダウンフック内ではユーザはいかなる振る舞いを実装してもよく，システム
定義のシャットダウンフックからリターンしなくてもよい【COS1157】．OS はシステム定義のシャッ
トダウンフックがリターンした後，割込みをすべて禁止し，無限ループする【OS425】．

162

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.24.4 マルチコアシステムの初期化と終了
コアが動作を開始することを単に「起動する」と呼び，OS が動作する状態にすることを「OS を起動する」と呼ぶ．
マスタ／スレーブ構成
マルチコアシステムは，ハードウェアに依らず，システム起動時に唯一起動するマスタコアと，他のコアから起動される 1 つ以上のスレーブコアが存在するマスタ／スレーブ構成とする．ハードウェアでマスタ／スレーブ構成がサポートされていなくても，ソフトウェアでこの構成をエミュレートする【OS577】．ただし，エミュレートされたスレーブコアは，他のコアから起動される前に main 関数を実行してはならない【OS578】．
マスタコアは，他のコアを起動することができる【OS574】〔OS676〕〔OS682〕．同様にスレーブコ
アも，他のコアを起動することができる【OS575】〔OS676〕〔OS682〕．ハードウェア上のすべてのコ
アを，本 OS を使用するコアとして起動しなくてもよい【OS576】〔OS682〕．本 OS を使用可能とするコアの上限数は，コンフィギュレーション時に静的に指定する．また，指定しない場合は，コアの上限数を 1 とする【OS583】．
バリア同期
OS 上で動作するアプリケーション(タスク，ISR)の初期状態における振る舞いの再現性を確保するために，システム初期化，終了処理では必要なタイミングで同期を行う．具体的には，マルチコアシステ
ムを構成するすべてのコアで，所定の処理が完了するのを待ち合わせる方法により同期する．このような同期方法を「バリア同期」と呼ぶ．
OS 管理外のコア
本 OS を使用しないが，他の OS や OS レスのアプリケーションを使用するなどの目的で起動するコ
アを，「OS 管理外のコア」と呼ぶ．本 OS は，OS 管理外のコアを起動するシステムサービスとして，
StartNonAutosarCore を提供する(詳細は 3.9.65 節を参照)【OS584】〔OS682〕．StartOS を呼び出す
前のコアからでも，呼び出した後のコアからでも，OS 管理外のコアを起動することができる【OS585】．
OS 管理外のコアから，本 OS が提供するシステムサービスを呼び出し場合の動作は保証しない【OSa121】．
2.24.4.1 マルチコアシステムの初期化手順
本 OS が提供するマルチコアシステムの初期化手順を以下に示す．
(1) マスタコアが，本 OS を使用するスレーブコアを StartCore により起動する【OSa122】．
(2) マスタコアから StartOS を呼び出し，マスタコアの OS を起動する【OSa123】．
(3) 起動したスレーブコアは，
他に本 OS を使用するスレーブコアがあれば StartCore により起動し，なければ，StartOS によりスレーブコアの OS を起動する【OSa124】．

163

文書番号：ATK2-0010
文書名：ATK2 外部仕様書(4) StartOS の呼び出しにより，マスタコアと，起動されたすべてのスレーブコアにおいて，OS オ
ブジェクトの初期化を行う【OSa125】．IOC を使用する場合，IOC の初期化も行う【OS611】．
(5) バリア同期(同期 1)を行う【OS580】．
(6) システム定義のスタートアップフックが有効な場合，すべてのコアでシステム定義のスタートア
ップフックを呼び出す【OS581】．
(7) バリア同期(同期 2)を行う【OS579】．
(8) 各コアでタスク，ISR の実行を開始する【OSa126】．
Reset

Core0
(Master)

HW
初期化

システム定義のスタートアップ
フック

StartCore(Core1)

StartOSHW
初期化

StartCore(Coren)StartOS

OSオブ ジェクト
初期化

HW
初期化

StartOS

OSオブ ジェクト 同
初期化
期

同期

システム定義のスタートアップ
フック

同期

同期

ディスパッチTask11

ディスパッチTask21

ディスパッチ

Taskn1･･･

Core1OSオブ ジェクト
初期化Core nシステム定義のスタートアップ
フック

同期1

同期2

図 2-52 マルチコアシステムの初期化手順
AUTOSAR 仕様との違い
AUTOSAR 仕様では，システム定義のスタートアップフックを呼び出した後，引き続き，各コアに割付けられた OSAP の OSAP 固有のスタートアップフックが有効な場合，OSAP 固有のスタートアップ
フックを，それぞれのコアで非同期に呼び出すと規定されている【OS582】．本仕様において，ATK2
では OSAP 固有のフックルーチンは提供しないこととしたため，本規定を削除した．
2.24.4.2 マルチコアシステムの終了手順
本 OS では，2 種類のマルチコアシステムの終了手順を提供する．1 つは，ShutdownAllCores によりすべてのコアを同時に終了する手順で，「同期 OS シャットダウン」と呼ぶ．もう 1 つは，ShutdownOS
によりそれぞれのコアを終了する手順で，「個別 OS シャットダウン」と呼ぶ．別に規定がない限り，本仕様の「OS シャットダウン」に関する仕様は，マルチコア対応 OS においては，「同期 OS シャットダウン」を指す．
同期 OS シャットダウン
本 OS が提供するマルチコアシステムの同期 OS シャットダウン手順を以下に示す．

164

文書番号：ATK2-0010
文書名：ATK2 外部仕様書(1) 本 OS が起動しているいずれかのコア(マスタコアとは限らない)で，ShutdownAllCores を呼び出す【OS621】．
(2) ShutdownAllCores が呼び出されたコアから，他のすべてのコアに OS 終了要求が通知される【OSa127】〔OS714〕．
(3) バリア同期を行う【OS587】．
(4) システム定義のシャットダウンフックが有効な場合，すべてのコアでシステム定義のシャットダ
ウンフックを呼び出す【OS588】．
(5) すべてのコアで OS オブジェクトクリーンアップを行う【NOS0929】．
(6) 必要に応じて，すべてのコアでハードウェアの終了処理を行う【NOS0930】．
(7) すべてのコアを無限ループへ移行する【OSa128】．

Core0(Master)

Task11システム定義のシャットダウンフック

同期

OSオブ ジェクト
クリーン

HW終了

無限ループ

OS終了要求Task21

･･･

Core1

Coren

Shutdown
AllCoresシステム定義のシャット ダウンフック

同期

OSオブ ジェクト
クリーン

HW終了

無限ループ

OS終了要求Taskn1

同期

システム定義のシャット ダウンフック

OSオブ ジェクト
クリーン

HW終了

無限ループ

同期
図 2-53 同期 OS シャットダウンによるマルチコアシステム終了手順
AUTOSAR 仕様との違い
AUTOSAR 仕様では，ShutdownAllCores を呼び出したコア，および OS 終了要求を受理したコアで，各コアに割付けられた OSAP の OSAP 固有のシャットダウンフックが有効な場合，OSAP 固有のシャットダウンフックを，それぞれのコアで非同期に呼び出すと規定されている【OS586】．本仕様において，ATK2 では OSAP 固有のフックルーチンは提供しないこととしたため，本規定を削除した．
個別 OS シャットダウン
本 OS が提供するマルチコアシステムの個別 OS シャットダウン手順を以下に示す．
(1) いずれかのコア(マスタコアとは限らない)で，ShutdownOS を呼び出す【OS616】．
(2) ShutdownOS を呼び出したコアのみ，シングルコアと同様に OS シャットダウンを行う(詳細は2.24.3 節を参照)【OS617】．
(3) すべてのコアで ShutdownOS を呼び出された時点で，システム終了となる【NOS0931】．

165文書番号：ATK2-0010
文書名：ATK2 外部仕様書
一度，ShutdonwOS を発行したコアに割付いているタスクや，OSAP は起動することはできない【OS618】．ShutdonwOS は，同時に複数のコアで呼び出すことができる【OS619】．ShutdownOS を呼び出したコアに，スピンロックを占有している処理単位が存在する場合，スピンロックを解放する【OS620】．

166

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.25 IOC(Inter-OS-Application Communicator)
IOC は，コアやメモリ保護の境界を跨いで通信するために用意された OSAP 間のデータ通信機能である．IOC は，SC3，SC4，および，マルチコア対応 OS でサポートされる機能である【OSa151】．
IOC は，OS の機能として提供され，RTE による OSAP 内通信および，COM-Stack による ECU 間
通信とは別のデータ通信機能である【OS671】．

Core 1OSAP1Core 2
OSAP2

OSAP3

OSAP4

OSAP内
通信

RTE
COM-Stackハードウェア
ECU間通信

RTE
IOC

IOC

BufferBuffer

コア間通信

コア内通信
(OSAP間通信)

図 2-54 IOC によるデータ通信

2.25.1 IOC の構成
IOC は，センダ，レシーバ，IOC バッファで構成される．IOC は，IOC ID で識別する．
センダ
センダは，IOC によるデータ通信の送信側となる処理単位の集合である．センダは，OSAP 単位で管理される≪MCOS_Conf1014≫．センダは，1 つの IOC に 1 つ以上存在するため，センダ ID で識別す
る．
レシーバ
レシーバは，IOC によるデータ通信の受信側となる処理単位の集合である．レシーバは，OSAP 単位で管理される≪MCOS_Conf1012≫．レシーバは，1 つの IOC に 1 つのみ存在するため，識別する必要はない．
IOC バッファIOC バッファは，センダが送信データを格納するメモリ領域である．レシーバは，IOC バッファからデータを取得することで，センダが送信したデータを受信する【OSa153】．IOC によるデータ通信では，
センダとレシーバが，異なるコアや異なる OSAP であっても，センダとレシーバからアクセス可能なメ

167

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
モリ領域を確保する【OSa154】．IOC によるデータ通信では，センダがデータを送信してから，レシー
バがデータを受信するまで，データの一貫性が保証される【OSa155】．
IOC では，コア間のエンディアンの変換はサポートしない【OSa156】．
2.25.2 IOC の種別
2.25.2.1 センダの数
1 つの IOC にはセンダは 1 つ以上存在する≪MCOS_Conf1015≫．1 つの IOC に 1 つのセンダのみ存在するデータ通信を，1:1 通信と呼ぶ．1 つの IOC に 2 つ以上のセンダが存在するデータ通信を，N:1通信と呼ぶ．
なお，1 つの IOC にはレシーバは 1 つのみ存在する≪MCOS_Conf1017≫．複数のレシーバで受信する 1:N 通信は，RTE によってサポートされる．

OSAP1

OSAP2

OSAP3

OSAP4

OSAPx

・・・・・・・・・・・・・・

RTE
IOC

IOC

BufferBuffer

N:1通信

1:1通信

図 2-55 1:1 通信と N:1 通信
1:1 通信において，センダ OSAP とレシーバ OSAP が同じである場合，RTE による OSAP 内通信を使用したほうが効率的であるので，1:1 通信の場合は，センダ OSAP とレシーバ OSAP を同じにすることはできない【OSa158】．ただし，N:1 通信の場合は，複数のセンダ OSAP の中に，レシーバ OSAPと同じ OSAP が存在してもよい【OSa159】．
2.25.2.2 キューの有無
IOC は，キューあり通信と，キューなし通信をサポートする【OSa160】〔MCOS_Conf1001〕．
キューあり通信の IOC では，IOC バッファにキュー管理領域を持ち，通信データを FIFO で送受信する【OSa161】．キュー管理領域のキューサイズは，コンフィギュレーション時に静的に指定する≪
MCOS_Conf1001≫．
キューなし通信の IOC では，キュー管理領域を持たず，常に最後に送信されたデータが，IOC バッ
ファに格納される【OSa162】．

168

文書番号：ATK2-0010
文書名：ATK2 外部仕様書

OSAP1

OSAP2

OSAP1

RTE

OSAP1

RTE

0xAA

OSAP2

2回目
送信

Buffer
0xAA

OSAP1

RTE

0x55

IOC

1回目
送信

OSAP2

OSAP2
RTE

0x55

IOC

IOC

Buffer0x55

Buffer
0x55

0x55

IOC

1回目
受信

2回目
受信

Buffer0x55

キューなし通信

OSAP1

OSAP2

OSAP1

OSAP2

RTE

RTE

0xAA
1回目
送信

0x55

IOC
BufferBufferキューあり通信

Buffer
0xAA

2回目
送信

IOC
BufferBuffer0x55

OSAP1

Buffer
0xAA

OSAP2

OSAP1

OSAP2

RTE

RTE
0xAA

IOC
BufferBufferBuffer
0x55

0x55
1回目
受信

IOC
BufferBufferBuffer

2回目
受信

図 2-56 キューなし通信とキューあり通信

2.25.2.3 データの数
IOC は，単一通信と，グループ通信をサポートする【OSa163】〔MCOS_Conf1023〕．
単一通信は，
1 回の送受信処理にて，1 つのデータのみを送受信処理する【OSa164】〔OS718〕〔OS738〕．
単一通信は，1:1 通信，N:1 通信のどちらでも使用できる≪MCOS_Conf1015≫．
グループ通信は，1 回の送受信処理にて，2 つ以上のデータを送受信処理する【OSa165】〔OS728〕〔OS746〕．グループ通信は，1:1 通信でのみ使用できる≪MCOS_Conf1015≫．

169

文書番号：ATK2-0010
文書名：ATK2 外部仕様書

OSAP1

OSAP2

OSAP3

OSAP4

Data1
Data2
・・・
Datax

Data1
Data2
・・・
Datax

RTE
Data

Data

IOC
Buffer
Data

IOC
Buffer
Data1
Data2
・・・
Datax

単一通信

グループ通信図 2-57 単一通信とグループ通信

2.25.3 IOC の操作
本 OS は，IOC を操作するための API として，IOC 用システムサービスを提供する．IOC 用システ
ムサービスは，IOC 用システムサービス名に IOC ID やセンダ ID が含まれ，IOC 用システムサービス
自体が，ジェネレータによって生成される【OSa166】．生成した IOC 用システムサービスを使用するために必要な定義や宣言は，IOC ヘッダファイル(Ioc.h)として出力する【OSa167】．
IOC 用システムサービスは，OS 処理レベルで実行される【OSa168】．
2.25.3.1 データ送信
本 OS は，IOC に対してデータを送信するための IOC 用システムサービスとして，IOC の種別毎に，以下を提供する．<IocId>には IOC ID が入り，<SenderId>にはセンダ ID が入る．1:1 通信の場合，[_<SenderId>]は省略される．
キューあり通信，単一通信
IocSend_<IocId>[_<SenderId>](詳細は 3.10.1 節を参照)

キューなし通信，単一通信
IocWrite_<IocId>[_<SenderId>](詳細は 3.10.2 節を参照)

キューあり通信，グループ通信
IocSendGroup_<IocId> (詳細は 3.10.3 節を参照)
キューなし通信，グループ通信
IocWriteGroup_<IocId>(詳細は 3.10.4 節を参照)

170

文書番号：ATK2-0010
文書名：ATK2 外部仕様書

2.25.3.2 データ受信
本 OS は，IOC からデータを受信するための IOC 用システムサービスとして，IOC の種別毎に，以下を提供する．<IocId>には IOC ID が入る．
キューあり通信，単一通信
IocReceive_<IocId> (詳細は 3.10.5 節を参照)
キューなし通信，単一通信
IocRead_<IocId> (詳細は 3.10.6 節を参照)
キューあり通信，グループ通信
IocReceiveGroup_<IocId>(詳細は 3.10.7 節を参照)

キューなし通信，グループ通信
IocReadGroup_<IocId> (詳細は 3.10.8 節を参照)
2.25.3.3 キューの初期化
キューあり通信の IOC において，キューに格納されたすべてのデータを削除し，キューを空の状態にすることを，キューの初期化と呼ぶ．本 OS は，キューあり通信の IOC に対して，キューを初期化するための IOC 用システムサービスとして，IocEmptyQueue_<IocId>を提供する(詳細は 3.10.9 節を参照)．<IocId>には IOC ID が入る．
キューの初期化は，レシーバのみが実行することができる【NOS1075】．
2.25.4 通信データ
IOC では，任意のデータ型のデータを通信することができる【OSa169】．IOC で通信するデータ型
は，コンフィギュレーション時に静的に指定する≪MCOS_Conf1005≫．
コンフィギュレーション時に指定したデータ型が，引数のデータ型となるように，IOC 用システムサービスが，ジェネレータによって生成される≪OSa166≫．
2.25.4.1 汎整数型
汎整数型を IOC のデータ型として指定した場合，データ送信用の IOC 用システムサービスの引数は値渡しとなる≪OS723≫≪OS733≫．
2.25.4.2 汎整数型以外のデータ型
汎整数型以外のデータ型を IOC のデータ型として指定した場合，データ送信用の IOC 用システムサービスの引数は参照渡しとなる≪OS723≫≪OS733≫．なお，汎整数型かどうかは，IOC のデータ型の171

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
参照先(OsIocDataTypeRef)の IMPLEMENTATION-DATA-TYPE で決定する．(詳細は，Software
Component Template 仕様を参照)
2.25.5 IOC 用システムサービスに対するサービス保護
ユーザが返り値の IOC 用システムサービスを呼出し，実行の結果，返り値が IOC_E_OK でない場合，
かつシステム定義のエラーフックが有効な場合，システム定義のエラーフックが呼び出される【NOS1163】．
2.25.5.1 不正な処理単位からのシステムサービス呼出し
IOC 用システムサービスは，タスクと C2ISR からのみ呼び出すことができる【NOS1077】．タスクと C2ISR 以外の処理単位から呼び出した場合，IOC 用システムサービスは IOC_E_NOK を返す【NOS1078】．
2.25.5.2 割込み禁止状態でのシステムサービス呼出し
IOC 用システムサービスは，割込み禁止状態では，呼び出すことができない【NOS1080】．割込み禁止状態で呼び出した場合，IOC 用システムサービスは IOC_E_NOK を返す【NOS1081】．
2.25.5.3 IOC 用システムサービスの呼び出し元チェック
データ送信の IOC 用システムサービスは，そのシステムサービス名に含まれる IOC のセンダ OSAPと実行中の OSAP が等しい場合のみ呼び出すことができる【NOS1083】．
データ受信の IOC 用システムサービスは，そのシステムサービス名に含まれる IOC のレシーバ OSAPと実行中の OSAP が等しい場合のみ呼び出すことができる【NOS1563】．
N:1 通信におけるデータ送信の IOC 用システムサービスに関しては，そのシステムサービス名に含まれる IOC のセンダ OSAP と実行中の OSAP が等しい場合のみ呼び出すことができる【NOS1084】．
データ送信の IOC 用システムサービスを呼び出す際，そのシステムサービス名に含まれる IOC のセ
ンダ OSAP と実行中の OSAP が異なる場合，IOC 用システムサービスは IOC_E_NOK を返す【NOS1085】．データ受信の IOC 用システムサービスを呼び出す際，そのシステムサービス名に含まれる IOC のレシーバ OSAP と実行中の OSAP が異なる場合，IOC 用システムサービスは IOC_E_NOKを返す【NOS1564】．

2.25.5.4 エラーを起こした IOC 用システムサービスの情報の取得
通常のシステムサービス同様，IOC 用システムサービスの呼出しによって起動したエラーフックからも，システムサービス ID の取得およびシステムサービスパラメータの取得が可能である【NOS1087】．
システムサービス ID は，OSEK 仕様で規定された命名規則とは異なり，AUTOSAR 仕様で規定されている(詳細は 3.6.9 節を参照)．
IOC 用システムサービスでは，コンフィギュレーションによって引数が変化するので，システムサー

172文書番号：ATK2-0010
文書名：ATK2 外部仕様書
ビスパラメータとして，IOC 用システムサービス名に含まれる IOC ID およびセンダ ID を取得するマクロを提供する(詳細は 3.5.4 節を参照)【NOS1088】．
2.25.6 IOC 用システムサービスに対するメモリ保護
IOC 用システムサービスに渡されたアドレスが，呼出し元の OSAP からアクセスできないメモリ領域を指している場合，そのメモリ領域へアクセスする際に，メモリ保護違反が発生する【NOS1375】．
なお，キューあり通信の IOC において，データ受信用の IOC 用システムサービスを呼び出しにより，
メモリ保護違反が発生した場合，データの受信(書込み)に失敗するが，キューからは 1 つデータが取り出される【NOS1376】．
2.25.7 IOC 用システムサービスに対するアドレスチェック
IOC 用システムサービス自体は，ジェネレータによって生成される≪OSa166≫．これにより， IOC用システムサービス内に生成された変数が不正なアドレスに配置されている場合，IOC 用システムサー
ビスは E_OS_SYS_ILLEGAL _ADDRESS を返す【NOS1560】．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，IOC にデータが送信されたタイミングで，レシーバ側にコールバック関数を呼び出す，データ受信通知機能をオプションとして提供すると規定されている【OSa170】．
・ ReceiverPullCB の概要【OS757】
・ 関数名のコンフィギュレーション方法【OS758】
・ コールバック関数名【OS759】
・ コールバック関数の処理レベル【OS760】
・ データ受信通知のサポート範囲【OS761】
しかし，本仕様では，以下の理由からデータ受信通知機能はサポートしない．
・ データ受信通知機能に関する仕様は未完成である【OSa171】．
・ ActivateTask によるレシーバ側のタスク起動や，コア間割込みによる通知で同等の機能の実現が可能である．
2.25.8 IOC 用システムサービスに対するアドレスチェック
センダ OSAP，レシーバ OSAP が信頼 OSAP のみの場合，その IOC 用システムサービスをその OSAPの専有領域に配置する．センダ OSAP，レシーバ OSAP に非信頼 OSAP が含まれる場合，その IOC 用
システムサービスを共有領域に配置する．非信頼 OSAP からその OSAP 以外の専有領域に配置された
IOC 用システムサービスを呼び出した場合メモリ保護違反が発生する．
2.25.9 IOC 用システムサービスの呼出し方法
IOC 用システムサービスの呼出し方法は，実行効率の観点から関数呼出しとする．そのため，IOC用システムサービスのうち，信頼 OSAP が呼び出すものはカーネル専有領域に配置する【NOS1589】．

173

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
IOC 用システムサービスのうち，非信頼 OSAP が呼び出すものは共有領域に配置する【NOS1590】．
非信頼 OSAP がカーネル専有領域に配置された IOC 用システムサービスを呼び出した場合，メモリ保護違反が発生する【NOS1591】．

174

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.26 スピンロック
スピンロックは異なるコアに割付けられた処理単位間で排他制御を行うための OS オブジェクトであり，マルチコア対応 OS でのみ使用する．スピンロックはスピンロック ID によって識別する．
スピンロックを使用して排他区間を開始することをスピンロックの獲得と呼び，排他区間を終了することをスピンロックの解放と呼ぶ．また，処理単位がスピンロックを獲得して，排他状態にあることを，
スピンロックの占有と呼ぶ．スピンロックはすべてのコンフォーマンスクラスで使用できる【NOS0932】．
2.26.1 スピンロックの種別
スピンロックオブジェクトに対しては，標準スピンロック，OS 割込み禁止スピンロック，全割込み禁止スピンロックのいずれかを指定することができる．スピンロック獲得後に，スピンロックを獲得した処理単位が割り付けられたコアの割込み禁止状態が変化すること以外は，どのスピンロックを指定しても排他制御の振る舞いは同様である．
標準スピンロック
スピンロック獲得後，スピンロックを獲得した処理単位が割り付けられたコアの割込み禁止状態を変更しないスピンロック．
OS 割込み禁止スピンロック
スピンロック獲得と同時に，スピンロックを獲得した処理単位が割り付けられたコアを，OS 割込み
禁止状態とするスピンロック．
全割込み禁止スピンロック
スピンロック獲得と同時に，スピンロックを獲得した処理単位が割り付けられたコアを，全割込み禁止状態とするスピンロック．
2.26.2 スピンロックの操作
2.26.2.1 スピンロックの獲得
本 OS は，スピンロックを獲得するためのシステムサービスとして GetSpinlock を提供する(詳細は3.9.66 節を参照)．GetSpinlock によって獲得しようとしたスピンロックが，他のコアの処理単位によって既に獲得されている場合，スピンロックが獲得できるまで，スピン(実行状態のままビジーウェイト)する【OS649】〔OS687〕．
本 OS は，スピンロックを獲得するためのシステムサービスとして TryToGetSpinlock を提供する(詳細は 3.9.68 節を参照)．TryToGetSpinlock によって獲得しようとしたスピンロックが，他のコアの処理単位によって既に獲得されている場合，スピンせずに即リターンする【OS652】．
本 OS は，タスクが獲得しようとしたスピンロックが，既に同じコアに割付けられている処理単位に175

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
よって占有されている場合，エラーとする【OS658】〔OS690〕．同様に C2ISR 獲得しようとしたスピンロックが，既に同じコアに割付けられている処理単位によって占有されている場合も，エラーとする【OS659】〔OS690〕．これは，図 2-58 に示すような，デッドロックが発生するのを避けるためである．
T1の起動

優先度
高

タスクT1
(Core1)

低タスクT2(Core1)

スピンロック1獲得

スピンロック1解放前にプリエンプト

スピンロック1が解放されることがないため，デッドロック発生

スピンロック1獲得

図 2-58 スピンロックによるデッドロックの例 1

また，複数のスピンロックをネストして獲得する場合，すべてのコアで特定の獲得順序で獲得しないと，図 2-59 に示すようなデッドロックが発生する可能性がある．
タスクT11(Core1)
タスクT21(Core2)

スピンロック1獲得

スピンロック2獲得

スピンロック1，スピンロック2が互いに解放されることがないため，
デッドロック発生
スピンロック2獲得

スピンロック1獲得

図 2-59 スピンロックによるデッドロックの例 2

このデッドロックを防止するために，本 OS は，スピンロック獲得順序を管理する機能を提供する【OS660】〔MCOS_Conf1022〕．同一の処理単位において，スピンロックをネストして獲得する際，コンフィギュレーション時に獲得順序を指定しておき，指定された獲得順序と異なる順序でスピンロックを獲得しようとした場合，エラーとする．また，獲得順序が指定されていないスピンロックを獲得している場合に，他のスピンロックを獲得しようとした場合も，エラーとする【OS661】．

176

文書番号：ATK2-0010
文書名：ATK2 外部仕様書

Task1

スピンロック0(順序指定なし)

スピンロック1

Task3

スピンロック2

Task2

設定順序

スピンロック3

獲得可能

スピンロック4

スピンロック5(順序指定なし)

獲得不可能

図 2-60 スピンロックの獲得可否

使用上の注意
獲得順序のチェックは，処理単位毎に行うため，図 2-61 のような操作を行った場合，デッドロックが発生する可能性がある．このデッドロックは，標準スピンロックの場合でのみ発生する．
T11の起動優先度
高タスクT11(Core1)

スピンロック1解放前にプリエンプト低 タスクT12(Core1)

スピンロック1獲得

T21の起動優先度
高タスクT21(Core2)

スピンロック2解放前にプリエンプト低 タスクT22(Core2)

スピンロック2獲得

スピンロック2獲得

スピンロック1，スピンロック2が互いに解放されることがないため，デッドロック発生

スピンロック1獲得

スピンロック1，スピンロック2の獲得順序の設定に関わらず，
デッドロックが発生する

図 2-61 スピンロックによるデッドロックの例 3

解放されたスピンロックを獲得する順序あるコアが占有中のスピンロックを獲得しようとするコアが 3 つ以上存在する場合，スピンロック獲
得待ちのコアの到着順を OS が管理しないと，
スピンロック獲得までの最悪実行時間が見積れなくなる．
そのため，リアルタイム性を考慮し，スピンロック獲得待ちのコアを FIFO で管理して，その先頭コアが獲得する【NOS0054】．ただし，ハードウェアによって FIFO で管理できない場合は，マニュアル等に明記する．
2.26.2.2 スピンロックの解放
本 OS は，スピンロックを解放するためのシステムサービスとして ReleaseSpinlock を提供する(詳細は 3.9.67 節を参照)．ReleaseSpinlock によって，占有していないスピンロックを解放しようとした場

177文書番号：ATK2-0010
文書名：ATK2 外部仕様書
合，エラーとする【OS655】〔OS699〕．スピンロックは，LIFO の順序で解放を行わなくてはならない≪OS701≫．
解放されたスピンロックの獲得を待っている他のコアの処理単位が存在する場合，最初に獲得待ちとなっていたコアの処理単位がスピンロックを獲得する≪NOS0054≫．
2.26.2.3 スピンロック占有中の状態
タスクはスピンロックを占有した状態で TerminateTask，ChainTask，Schedule，WaitEvent のシ
ステムサービスを呼出してはならない≪OS612≫≪OS624≫≪OS622≫．また，C2ISR はスピンロックを占有した状態で処理を終了してはならない【NOS0933】．
OS 割込み禁止スピンロック占有中の処理単位が割付いているコアは，OS 割込み禁止状態となる【NOS0934】．全割込み禁止スピンロック占有中の処理単位が割付いているコアは，全割込み禁止状態となる【NOS0935】．したがって，これらのスピンロックによる割込み禁止状態においても，割込み禁止状態から呼び出すことができないシステムサービスを呼び出した場合，E_OS_DISABLEDINT エラーとなる≪OS093≫≪NOS0412≫．
しかし，これらのスピンロックによる割込み禁止状態と，SuspendOSInterrupts，
SuspendAllInterrupts，DisableAllInterrupts による割込み禁止状態は，互いに影響を与えないものとする【NOS0936】．例えば，OS 割込み禁止スピンロックを獲得して OS 割込み禁止状態となったコア
で，ResumeOSInterrupts を発行しても，OS 割込み禁止スピンロックによる OS 割込み禁止状態は解除されない．
使用上の注意あるコアの処理単位がスピンロックを占有している間，同じスピンロックを獲得しようとした他のコ
アの処理単位はスピンするため，スピンロックによる排他区間が長大化するに従い，スピンによるプロ
セッサ時間消費も長大化し，システム全体性能に影響を及ぼす要因になりうる．そのため，スピンロッ
クによる排他区間は極力短くする．

178

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.27 コア間割込み
コア間割込み機能は，マルチコアシステムにおける他の任意のコアに対し割込みを発生させ，ユーザ定義のコア間割込みサービスルーチン(以降，ICISR と略す)を実行する機能である【NOS0060】．
本 OS は，ディスパッチやシャットダウン要求のために，コア間割込みを使用する≪NOS0917≫≪
NOS0918≫．このコア間割込みに，ユーザ定義の ICISR を実行する処理を追加し，コア間割込みを発生させるシステムサービスを用意することで，自由度の高いコア間同期・通信をユーザに提供する．
ICISR は，C2ISR と同等の機能を有する OS 管理下の処理単位である【NOS0061】．定義可能なユー
ザ定義の ICISR の上限数はコア毎に 32 個である【NOS1377】．
ICISR の ID
ICISR は ISR ID によって識別する【NOS0062】．ISR ID は，C1ISR，C2ISR と合わせて，すべてのコアにおいて，一意とする【NOS0063】．ICISR 実行中に，GetISRID を呼び出すと，ICISR の IDが返る【NOS0937】．
ICISR の割込み優先度
ICISR の割込み優先度はターゲット定義であり，ユーザは指定できない【NOS1378】．
2.27.1 ICISR の起動
OS は，指定されたコアに指定されたコア間割込みを発生させるシステムサービスとしてRaiseInterCoreInterrupt を提供する(詳細は 3.9.70 節を参照)．割込みが発生したコアでは，ISR ID に対応した ICISR を起動する．
指定された ICISR が割付いているコアが，割込み禁止状態などの理由で対象の ICISR を起動できない状態の場合，指定した ICISR に対する割込み要求は最大 1 回まで保留可能である【NOS0067】．
2.27.2 ICISR の生成
ICISR の本体記述
ICISR の本体記述を以下に示す【NOS0064】．
ICISR(<ISR ID>){}2.27.3 ICISR の機能
システムサービス
ICISR から呼出し可能なシステムサービスは，C2ISR と同一である【NOS0938】．

179文書番号：ATK2-0010
文書名：ATK2 外部仕様書
リソースによる排他制御
ICISR は，タスク－ICISR 間，C2ISR－ICISR 間，ICISR－ICISR 間でリソースによる排他制御が可能である【NOS0939】．
スタックモニタリング
ICISR がスタックオーバーフローした場合，C2ISR と同等のスタックモニタリングによって検出される【NOS0940】．1 つのコアに複数の ICISR が割付いていて，同時に複数の ICISR に対する起動要求が発生した場合，1 つの ICISR を終了する毎にスタックモニタリングを行う【NOS1379】．
タイミング保護SC2，SC4 では，ICISR に対して C2ISR と同等のタイミング保護機能が適用される【NOS0942】．
ICISR に対する時間制約の指定はコンフィギュレーション時にユーザが静的に指定する【NOS0069】．
OSAP
ICISR は，C2ISR 同様，いずれかの OSAP に所属する【NOS0943】．1 つの OSAP に複数の ICISR
を 所 属 さ せ る こ と も 可 能 で あ る 【 NOS0944 】． ICISR 実 行 中 に ， GetApplicationID ，
GetCurrentApplicationID を 呼 び 出 す と ， ICISR が 所 属 す る OSAP ID が 返 る 【 NOS0945 】．
CheckISROwnership により，ICISR が所属する OSAP ID を取得できる【NOS0946】．
メモリ保護
SC3，SC4 では，ICISR に対して C2ISR と同等のメモリ保護機能が適用される【NOS0947】．
サービス保護ICISR が不正終了する場合，C2ISR と同等のサービス保護が適用される【NOS0948】．
個別割込みの禁止・許可状態の操作
ICISR に対しても，割込みを個別に禁止，許可するシステムサービスである DisableInterruptSource，EnableInterruptSource を使用することができる【NOS1044】．

180

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.28 ミューテックス管理(参考仕様)
ミューテックスは異なるコアに割付けられたタスク間で排他制御を行うための OS オブジェクトであり，スピンロックに類似した機能である．
ミューテックスを使用して排他区間を開始することをミューテックスの獲得，排他区間を終了することをミューテックスの解放と呼ぶ．また，タスクがミューテックスを獲得して，排他状態にあることを，ミューテックスの占有と呼ぶ．
ミューテックスはミューテックス ID を持つ．排他制御の方法として優先度上限プロトコルを採用する【NOS0083】．
スピンロックとの違い
ミューテックスはスピンロックに類似した機能であるが，以下の点でスピンロックと大きく異なる．
・ ミューテックス獲得待ちをブロッキングで実現
Waiting 状態へ移行し，他タスクに実行権を譲る．
・ ミューテックスを獲得できる処理単位は拡張タスクのみ
基本タスクと ISR から獲得することはできない．
2.28.1 優先度上限プロトコルと上限優先度
ミューテックス機能では優先度上限プロトコルによる排他制御を行う．
上限優先度
ミューテックスは属性として上限優先度を持つ．ミューテックスの上限優先度は，そのミューテック
スを共有しているすべてのタスクの中で最も高い優先度である【NOS0084】．ミューテックスの上限優
先度は，コンフィギュレーション時に静的に決定する【NOS0085】．
2.28.2 ミューテックスの操作
2.28.2.1 ミューテックスの獲得
本 OS は，ミューテックスを獲得するためのシステムサービスとして GetMutex を提供する(詳細は3.9.71 節を参照)．
タスクがミューテックスを獲得した時，OS はタスクの現在優先度をミューテックスの上限優先度まで引き上げる【NOS0086】．ミューテックスを獲得しタスク優先度を引き上げることで，同じコア内においてミューテックスの上限優先度以下の優先度を持つタスクが実行されることを防止し，コアに閉じた排他制御を行う．既に獲得中のミューテックスを他のコアのタスクが獲得しようとした場合，そのタ
スクを Waiting 状態に移行することで，コアを跨った排他制御を行う【NOS0087】．
ミューテックスを獲得するタスクの初期優先度がミューテックスの上限優先度より高い場合は，ミューテックスを獲得することはできない【NOS0088】．
タスクはリソースを獲得した状態でミューテックスを獲得することはできない．

181

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.28.2.2 ミューテックスの解放
本 OS は，GetMutex によって取得したミューテックスを解放するためのシステムサービスとしてReleaseMutex を提供する(詳細は 3.9.72 節を参照)．
タスクがミューテックスを解放した時，OS はタスクの現在優先度をそのミューテックスを獲得した
際の優先度に戻す【NOS0089】．ミューテックスを解放した時点で，OS はミューテックスの獲得を待っている待ち状態のタスクを実行可能状態に移行させる【NOS0090】．複数のミューテックス待ちタス
クが存在した場合，タスクの優先度が高いものから先に待ち解除させる【NOS0091】．
また，ミューテックスを解放した時点で，ミューテックスを解放したタスクが動作しているコアにおいて OS は再スケジューリングを行う【NOS0092】．この時，ミューテックスを解放したタスクがシス
テムの中で最高優先度のタスクでない場合，ミューテックスを解放したタスクはプリエンプトされ，OSは最高優先順位を持つタスクへのタスクディスパッチを行う．
タスクは獲得していないミューテックスの解放操作をすることはできない≪NOS0106≫．
2.28.2.3 ミューテックス占有中の状態
タスクはミューテックスを占有した状態で TerminateTask，ChainTask，Schedule，WaitEvent のシステムサービスを呼出すことはできない【NOS0096】．
ミューテックスの獲得と解放はネストさせることができるが，LIFO の順序で獲得と解放を行わなくてはならない【NOS0093】．また，ミューテックスの獲得と解放は，同一の関数内で行うことを推奨す
る．なお，タスクは同一のミューテックスをネストして獲得することはできない．
2.28.3 ミューテックスの生成
ジェネレータは，ミューテックスを共有しているすべてのタスク優先度を解釈し，ミューテックスの上限優先度を決定する【NOS0290】．ユーザはコンフィギュレーション時に，ミューテックスを用いて排他制御を行うタスクに対して，共有するミューテックスの ID を指定する必要がある．

182

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.29 コンフィギュレーション方法

コンフィギュレー
ションファイル

読み込み

生成/コンフィギュレーション

ジェネレータOS
コンフィギュレーション
情報ファイル生成

リンカファイル制御

オブジェクト
ファイル

リンカ

入力セクション

実行ファイル

出力セクション

図 2-62 コンフィギュレーション手順

2.29.1 コンフィギュレーションファイルの記述
本 OS ではコンフィギュレーションファイルと呼ぶファイルに OS オブジェクトの定義を記述する．
ユーザは OS が提供する定義方法を用いて，OS オブジェクトを静的に定義する【COS1201】．本 OS
では動的に OS オブジェクトを生成することはできない【COS1225】．

183

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.29.2 コンフィギュレーション処理
コンフィギュレーション情報ファイルの生成には外部ツールが必要である(以降，ジェネレータと呼ぶ)【COS1226】．ジェネレータはコンフィギュレーション情報に追加や修正を加えることができる．
ジェネレータは以下の処理を行う．
・ コンフィギュレーションファイルを読み込む【OS172】．
・ コンフィギュレーションファイルの整合性をチェックする【OS173】．
・ エラーを検出した場合は，コンフィギュレーション情報ファイルを生成しない【OS179】．
ジェネレータは，指定されたスケーラビリティクラスと一致しないコンフィギュレーション情報がある場合(例：SC1 を選択して，タスクや C2ISR の実行時間バジェットを指定する)，警告を出力する【OS320】．
コンフィギュレーション情報に浮動小数点型のパラメータがある場合，以下のパラメータを除いては，
OS で扱える値へ丸める【OSa010】．
・ タイミング保護に使用する実行時間は切り捨てる【OSa011】．
・ タイムフレームは切り捨てる【OSa012】．
・ 時間パーティショニングに使用する，システム周期やタイムウィンドウに関する時間は切り捨て
る【NOS1414】．
タイミング保護に使用する実行時間もしくはタイムフレームのパラメータを丸めた結果，OS で扱うことのできる最小値よりも小さい値となった場合，もしくは，最大値よりも大きい値となった場合，ジェネレータはエラーを検出する【NOS1415】．OS で扱うことのできる最小値および最大値は，ターゲット定義とする【NOS1416】．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，サービス保護を使用する場合に拡張エラーを選択しないとエラーとすると規定している【OS050】．サービス保護には，OSAP が起こすエラーに対する保護が含まれるが，SC1，SC2のマルチコア対応 OS では，拡張エラーを使用しないことが可能である≪OS763≫．したがって，本規定を削除した．
また，AUTOSAR 仕様では，コンフィギュレーション情報に設定できる実行時間やタイムフレームの最小値，最大値に関する仕様が存在しなかったため，本仕様で規定した≪NOS1415≫≪NOS1416≫．
さらに，時間パーティショニングに使用する，システム周期やタイムウィンドウに関する時間は切り捨
てることを規定した≪NOS1414≫．
2.29.3 コンフィギュレーション情報の出力
ジェネレータは，ベクタテーブルを含む再配置可能なコンフィギュレーション情報を出力する【OS336】．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，OS 内部で使用するタイマの情報をコンソールやリストファイルの形式で出力

184文書番号：ATK2-0010
文書名：ATK2 外部仕様書すると規定されている【OS370】．本仕様では，OS 内部で使用するタイマをターゲット定義と明記したため，本規定を削除した≪NOS1437≫≪NOS1529≫．
2.29.4 OS オブジェクトのアクセス方法
ユーザは，OS オブジェクトへの参照の宣言無しに，コンフィギュレーション時に静的に指定した名称を用いて，OS オブジェクトにアクセスできる【OSa004】．
OSEK 仕様との違い
OSEK 仕様では，ジェネレータによって生成された OS オブジェクトにアクセスするためにはアプリ
ケーションプログラムで OS オブジェクトへの参照を宣言すると規定されている【COS1232】．しかし，
AUTOSAR 仕様では，移植性のために，宣言の有無に関係なくアクセスできると説明されているため，本仕様では宣言に対する仕様を削除した≪OSa004≫．ただし，OSEK 仕様に準拠して開発されたアプ
リケーションとの互換性のため，OS オブジェクトへの参照の宣言があってもエラーとしない(詳細は 3.7
節を参照)．
OSEK 仕様では，オブジェクトを識別するためのデータ型の定義は実装依存であると規定されている【COS1203】．ATK2 では，オブジェクトを識別するためのデータ型（TaskType など）を整数型で定義している．しかしながら，OSEK 仕様において実装依存と規定されており，ATK2 以外の AUTOSAR
OS が必ずしも整数型でオブジェクトを識別するためのデータ型を定義しているわけではないため，ユーザはそのデータ型に依存した開発をすべきではない．以上の理由から，本仕様ではオブジェクトを識別するためのデータ型は規定しない．

185

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.30 ファイル構成
2.30.1 OS ヘッダファイル
本 OS を使用するために必要な定義や宣言は，OS ヘッダファイル(Os.h)および OS ヘッダファイルからインクルードされるファイルに含まれる．本 OS を使用する場合には，OS ヘッダファイルをインクルードする【OS546】．
本 OS を使用するために必要な定義の中で，コンフィギュレーションによって生成される定義は，OS
ヘッダファイルとは別ファイル(Os_Cfg.h)に定義し，OS ヘッダファイルからインクルードする【OSa008】．また，本 OS と他の関連モジュールで共通に用いる定義も同様に，OS ヘッダファイルとは別ファイル(Rte_Os_Type.h，Std_Types.h，MemMap.h)に定義し，OS ヘッダファイルからインクルードする【OSa009】．Rte_Os_Type.h は，OS ヘッダファイルからインクルードされ，システム全体で共通的に使用するデータ型が定義された Rte_Type.h をインクルードする【OS765】．
ATK2 では，プリコンパイルが必要な情報のみを Os_Cfg.h に定義し，アプリケーションとのリンク
時に必要な情報を Os_Lcfg.h へ定義する【NOS1251】．
2.30.2 ファイルの互換性チェック
本 OS では，プレコンパイル時のチェックにて，ファイルの互換性のチェックを行う．OS が他のモジュールのバージョンに依存する場合は，インクルードするヘッダファイル(Os.h)に以下のバージョン情報を記述し，他のモジュールのバージョンをチェックし，未サポートのバージョンである場合，本OS はエラーを返す【OS552】．
・ OS_AR_RELEASE_MAJOR_VERSION
・ OS_AR_RELEASE_MINOR_VERSION
他のモジュールのヘッダファイルにも，以下の命名規則でバージョン情報が記述される．
・ <MODULENAME>_AR_RELEASE_MAJOR_VERSION
・ <MODULENAME>_AR_RELEASE_MINOR_VERSION

186

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.30.3 デバッグサポート
AUTOSAR 仕様との違い
AUTOSAR 仕様では，アプリケーション実装時のデバッグをサポートするため，デバッグに使用する
情報を OS ヘッダファイルより公開すると規定している．
・ グローバル変数での定義【OS551】
・ Os.h による変数アクセス【OS550】
・ sizeof 演算子によるサイズ取得【OS549】
しかし，ヘッダファイルを 1 つにまとめることでデバッグが容易になるという根拠が不明確であるため，本仕様では規定しない．なお，AUTOSAR 仕様 V5.1.0 (R4.1 Rev 1)では，これらの規定は削除さ
れている．

187

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.31 ポートインターフェイス
ポートインターフェイスの仕様については，現在検討中である．
・ OsService ポートインターフェイス定義【OS560】
・ Os ポート定義【OS561】

188

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.32 時間パーティショニング
時間パーティショニング機能（TP 機能と呼ぶ）は，ある OSAP で生じた時間の違反が，他の OSAPに波及することを防ぐことを目的とした機能である．OSAP ごとにプロセッサコアを利用できる時間を静的に指定することで，プロセッサ時間を OSAP ごとに分割し，OSAP のタイミングフォールトの波及を防ぐ．TP 機能に対応した OS では，静的に指定された固定周期（システム周期と呼ぶ）のうちで，OSAP ごとに静的に指定された時間（タイムウィンドウと呼ぶ）を割り当て，そのタイムウィンドウの中で，タイムウィンドウが割り当てられた OSAP に所属するタスクを実行状態とする【NOS1417】．
一方で，ISR は自身の所属する OSAP やタイムウィンドウによらず実行される【NOS1418】．ISR では，高応答性が求められる処理を実現することが多く，タイムウィンドウが割り当てられるまでの遅延時間が許容されない可能性がある．
タイムウィンドウが割り当てられた OSAP に所属するタスクが実行状態であるときに C2ISR が実行された場合，その C2ISR の実行時間分だけ，そのタイムウィンドウを延長する（言い換えると，C2ISR
実行中にタイムウィンドウは消費しない）【NOS1419】．これは，C2ISR が任意のタイミングで実行されると，C2ISR の実行により，OSAP に割り当てられたタイムウィンドウを保証できず，OSAP に所属するタスクの最大応答時間を保証できない可能性があるためである．
C1ISR については，OS 管理外の処理単位であり，その割込み出入口処理はターゲット定義である≪
NOS1198≫ため，上記のタイムウィンドウの延長を実施するかどうかはターゲット定義である【NOS1420】．
タイムウィンドウを切り替え，実行する OSAP の切り替えを発生させる処理レベルを，OSAP スケジ
ューラ処理レベルと呼ぶ．タイムウィンドウの間に OSAP スケジューラ処理レベル以上の処理を実行し，その処理が終了する前にそのタイムウィンドウが満了した場合，その処理が終了するまで，そのタイムウィンドウの満了を遅延する【NOS1421】．OSAP スケジューラ処理レベル以上の処理としては，以下のものがある．
・ C1ISR・ システムサービス実行中の OS 内クリティカルセクション（OS 処理レベル）・ フックルーチン（OS 処理レベル）
・ OS/全割込み禁止中（OS 処理レベル）
・ C2ISR（ただし，C2ISR 実行中は，タイムウィンドウが延長される）・ C2ISR と共有するリソース取得中・ OSAP 間で共有するリソース取得中（2.32.7 節参照）
上記の処理を実行中にタイムウィンドウ（処理単位）を切替えてしまうと，OS 状態の不整合や他のOSAP との排他が成立しない可能性があるため，上記の処理レベルは OSAP スケジューラ処理レベル以上とし，タイムウィンドウ（OSAP）は切替えない．
OSAP スケジューラ処理レベルは，一般的に，タイムウィンドウを切り替えるためのタイマ割込み優189文書番号：ATK2-0010
文書名：ATK2 外部仕様書
先度によって実現されると考えられる．
よって，TP 機能に対応した OS においては，OS の持つ処理レベルは以下の 6 種類で，記載順に高い
処理レベルを持つ【NOS1422】．
・ C1ISR 処理レベル
・ OS 処理レベル
・ C2ISR 処理レベル
・ OSAP スケジューラ処理レベル
・ スケジューラ処理レベル
・ タスク処理レベル
ISR の実行によるタイムウィンドウの延長や OSAP スケジューラとの排他制御によるタイムウィン
ドウの遅延によって生じた時間を吸収するために，システム周期の最後に，アイドルウィンドウと呼ばれるタイムウィンドウを置く．システム周期のうち，OSAP にタイムウィンドウとして割り当てられなかった時間がアイドルウィンドウとなる【NOS1423】．アイドルウィンドウは，システム周期の最後にのみ置くことができる【NOS1424】．アイドルウィンドウでは，タイムウィンドウを割り当てられなかった OSAP に所属するタスクが実行状態となる【NOS1425】．タイムウィンドウの延長によってアイドルウィンドウ割り当てられた時間を保証するために，TP 機能に対応した OS では，C2ISRの発生回数を監視する機能を提供する【NOS1426】．
2.32.1 システム周期とタイムウィンドウシステム周期とは，OSAP を繰り返しスケジュールする周期である【NOS1427】．システム周期の長さは，ユーザがコンフィギュレーション時に静的に指定する．タイムウィンドウとは，システム周期を分割した連続する時間区間である【NOS1428】．システム周期内での各タイムウィンドウの開始時刻と長さは，ユーザがコンフィギュレーション時に静的に指定する．
1 つのタイムウィンドウは，1 つの OSAP に割り当てることができる【NOS1429】．タイムウィンド
ウが割り当てられた OSAP（プロパーOSAP と呼ぶ）に所属するタスク（プロパータスクと呼ぶ）は，そのタイムウィンドウ内でのみ実行状態となる【NOS1430】．さらに，1 つの OSAP には複数のタイム
ウィンドウを割り当てることができる【NOS1431】．連続するタイムウィンドウが同じ OSAP に割当てられている場合，コンフィギュレーション時に警告を表示する【NOS1432】．OSAP に割り当てられなかったタイムウィンドウは，アイドルウィンドウとなる≪NOS1423≫．アイドルウィンドウは，シス
テム周期内に高々1 つ存在し，アイドルウィンドウが開始してからシステム周期が満了するまでに，別のタイムウィンドウが開始することはない【NOS1433】〔NOS1424〕．タイムウィンドウが割り当てられなかった OSAP（アイドル OSAP と呼ぶ）に所属するタスク（アイドルタスクと呼ぶ）は，アイドル
ウィンドウ内，もしくは，タイムウィンドウ内で，そのプロパーOSAP に実行状態もしくは実行可能状
態のタスクが存在しない場合に実行される【NOS1434】．アイドル OSAP は，0 個以上の OSAP 群であ190

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
る【NOS1435】．また，タイムウィンドウが割り当てられなかった OSAP に所属するタスクが，OSAP
間リソースを取得していた場合は，タイムウィンドウ内で，そのタイムウィンドウが割り当てられた
OSAP に実行可能状態のタスクが存在する場合でも，実行状態となることがある（2.32.7 節参照）．
タイムウィンドウが満了したとき，実行中の処理レベルが OSAP スケジューラ処理レベル以上である
場合，現在のタイムウィンドウの満了点は遅延され，後続のタイムウィンドウを開始しない≪NOS1421≫．タイムウィンドウの満了点が遅延されている状態で，実行中の処理レベルが OSAP スケジューラ処理レベル未満となった場合，現在のタイムウィンドウを満了し，後続のタイムウィンドウを開始する【NOS1436】．
システム周期とタイムウィンドウは，一般的にハードウェアタイマとその割込みによって実現されると考えられる．システム周期とタイムウィンドウを実現するための割込みは，OS 自身が使用するものである【NOS1437】．ユーザが，システム周期とタイムウィンドウを実現するための割込みを，コンフィギュレーションによって OsIsr コンテナに指定した場合，ジェネレータはエラーを検出する≪
NOS0363≫≪OS177≫．
2.32.2 スケジューラの拡張
TP 機能を実現するための，スケジューラ(2.5.7 節を参照)の変更点について述べる．OSAP に割り当てられたタイムウィンドウ内では，スケジューラはまず，そのタイムウィンドウでのプロパータスクで，実行状態もしくは実行可能状態のタスクの中から，最も優先度の高いタスクを検索し，そのタスクを実行状態にする【NOS1438】．ここで，同じ優先度のプロパータスクが複数存在する場合，最初に実行可能状態もしくは実行状態に遷移したプロパータスクを，次の実行タスクとする【NOS1439】〔COS0450〕．
タイムウィンドウ内において，プロパータスクで実行状態もしくは実行可能状態のタスクが存在しない
場合，すべてのアイドルタスクで，実行状態もしくは実行可能状態のタスクの中から，最も優先度の高いタスクを検索し，そのタスクを実行状態にする【NOS1440】．ここで，同じ優先度のアイドルタスク
が複数存在する場合，最初に実行可能状態もしくは実行状態に遷移したアイドルタスクを，次の実行タ
スクとする【NOS1441】〔COS0450〕．タイムウィンドウを割り当てられた OSAP に所属するタスクは，
そのタイムウィンドウ以外では実行状態とならない≪NOS1430≫．
アイドルウィンドウ内では，スケジューラは，すべてのアイドルタスクで，実行状態もしくは実行可能状態のタスクの中から，最も優先度の高いタスクを検索し，そのタスクを実行状態にする【NOS1442】．
ここで，同じ優先度のタスクが複数存在する場合，最初に実行可能状態もしくは実行状態に遷移したタ
スクを，次の実行タスクとする【NOS1443】〔COS0450〕．
タイムウィンドウもしくはシステム周期が満了し，後続のタイムウィンドウが開始すると，OSAP ス
ケジューラが起動し，タスクの再スケジューリングを行う【NOS1444】．

191

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
2.32.3 スケジューリングポリシへの影響
TP 機能によって，2.5.8 節で述べたスケジューリングポリシに生じる影響について述べる．
フルプリエンプティブスケジューリング
再スケジューリングが行われる可能性があるタイミングとして，タイムウィンドウもしくはシステム
周期の満了時が加わる≪NOS1444≫．
ノンプリエンプティブスケジューリング
ノンプリエンプティブタスクは原則として，システムサービスによって明示的にスケジューリング要求を行わない限り，スケジューリングは発生しない≪COS0477≫が，TP 機能に対応した OS では，プ
ロパーOSAP 内部，また，アイドル OSAP 内部(アイドル OSAP に所属するすべてのタスク間)でのみノンプリエンプティブスケジューリングが有効となる【NOS1445】．ノンプリエンプティブタスクがプロ
パータスクの場合，割り当てられたタイムウィンドウが満了するタイミングで，OSAP スケジューラによるタスク切替えが発生した場合，スケジューリングが発生する≪NOS1444≫≪NOS1445≫．また，
ノンプリエンプティブタスクがアイドルタスクの場合，タイムウィンドウが満了したり，プロパータス
クが起動したりして，OSAP スケジューラによりプロパータスクが実行可能となったタイミングで，ス
ケジューリングが発生する≪NOS1444≫≪NOS1434≫．
ノンプリエンプティブタスクが OSAP スケジューラによりプリエンプトされたあと，再度そのタスクが所属する OSAP が OSAP スケジューラによって実行状態となった場合，プリエンプトされたノンプ
リエンプティブタスクが最初に実行される【NOS1446】．
よって，ノンプリエンプティブスケジューリングで，再スケジューリングが行われる可能性があるタ
イミングとして，タイムウィンドウもしくはシステム周期の満了時，タスク起動処理要求の実行時（ActivateTask 発行時），待ち状態のタスクに対するイベントのセット時（SetEvent 発行時），リソー
ス解放時（ReleaseResource 発行時）
，C2ISR 処理レベルからタスク処理レベルへの復帰時が加わる．
2.32.4 グループタスクへの影響
TP 機能によって，2.5.9 節で述べたグループタスクに生じる影響について述べる．
グループタスクは，1 つの OSAP 内部でのみ構成可能である．これは，グループタスクを実現するための内部リソースが，1 つの OSAP に所属するタスク群でのみ共有可能なためである（詳細は 2.32.7
節を参照）．
2.32.5 スタック共有への影響
TP 機能によって，2.5.11 節で述べたスタック共有に生じる影響について述べる．

192

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
基本タスクは，原則として，その実行が終了するまでは，他の同一タスク優先度の基本タスクが実行状態となることはないが，TP 機能に対応した OS では，OSAP スケジューラにより，ある基本タスクがその実行を終了する前に，他の同一優先度の基本タスクが実行状態となる可能性がある．したがって，
同じ OSAP に所属する同一タスク優先度の基本タスクでのみ，それらの基本タスクが使用するスタック
はジェネレータによって共有される【NOS1447】．
ここで，アイドルタスクについては，すべてのアイドル OSAP に所属するタスクを併合してスケジューリングするため，任意のアイドル OSAP に所属するタスク群に関しては，ある基本タスクが実行を終了するまでは，他の同一タスク優先度の基本タスクが実行状態となることはない．したがって，任意のアイドル OSAP に所属する同一タスク優先度の基本タスクでは，それらの基本タスクが使用するスタッ
クはジェネレータによって共有される【NOS1448】．
2.32.6 割込み処理への影響
TP 機能によって，2.7 節で述べた割込み処理に生じる影響について述べる．
ISR は，タイムウィンドウによらず実行可能であり，従来と同じタイミングで実行することができる≪NOS1418≫．
C1ISR は OS が管理しない ISR であり，割込み出入口処理がターゲット定義であることから，タイ
ムウィンドウの延長を実施するかどうかはターゲット定義である≪NOS1420≫．
C2ISR は OS が管理する ISR であり，C2ISR の実行によって，プロパータスクの最大応答時間を保証できなくなる可能性があることから，プロパータスクの実行中に C2ISR が実行した場合，そのタイ
ムウィンドウを延長する≪NOS1419≫．アイドルウィンドウの間に C2ISR が実行した場合，アイドル
ウィンドウは延長しない【NOS1449】．
アイドルウィンドウ以外のタイムウィンドウで，プロパータスクの実行中以外に C2ISR が実行した
場合，タイムウィンドウを延長するかどうかはターゲット定義とする【NOS1450】．
仕様決定の理由
タイムウィンドウの延長は，プロパータスクの最大応答時間を保証するための機能であり，アイドル
ウィンドウを延長する必要性はない．また，アイドルウィンドウは，タイムウィンドウの延長による時間を補間する目的で存在するものであり，アイドルウィンドウの延長を実施すると，アイドルウィンド
ウの長さとして，システム周期 2 周分での C2ISR の実行時間の合計をマージンとして取る必要が出てくるため，無駄が大きくなる．
また，アイドルウィンドウ以外のタイムウィンドウで，プロパータスクの実行中以外に C2ISR が実行した場合，タイムウィンドウを延長しなかったとしても，プロパータスクの最大応答時間の保証には影響がなく，また，タイムウィンドウの延長の有無が，OS 実装の容易さに影響する可能性がある．

193

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
システム周期における割込み発生回数の監視システム周期内において，各 C2ISR がコンフィギュレーション時に静的に指定された最大回数以上実行されていないかどうか，OS が監視する≪NOS1426≫．システム周期の起点で，すべての C2ISRの発生回数を 0 とする【NOS1451】．C2ISR 実行中にシステム周期が満了した場合，その C2ISR の発生事象を後続のシステム周期での発生回数に含める【NOS1452】．C2ISR が最大回数を超えて呼び出されたとき，OS は E_OS_PROTECTION_COUNT_ISR をパラメータとして保護違反時処理を呼び出す【NOS1453】．
TP 機能を実現するための割込みに伴う制約
TP 機能は，一般的にハードウェアタイマとその割込みによって実現されると考えられる．TP 機能を実現するための割込みは，OS 自身が使用するものであり，ターゲット定義である≪NOS1437≫．TP機能を実現するための割込みが ISR のコンテナで指定された場合，もしくは，OSAP のコンテナで指定された場合，エラーを検出する≪NOS0363≫≪OS177≫．
TP 機能を実現するための割込み優先度はターゲット定義である【NOS1454】．また，TP 機能を実現するための割込み優先度は，OSAP スケジューラの処理レベルに等しい【NOS1455】．よって，C2ISRの割込み優先度は，TP 機能を実現するための割込み優先度よりも高く指定しなければならない【NOS1456】．
任意の処理単位が，すべての C2ISR もしくはすべての割込みを禁止した状態でタイムウィンドウが満了した場合，その処理単位の優先度が OSAP スケジューラ処理レベル以上となっているため，後続のタイムウィンドウに切り替えない≪NOS1421≫．すべての C2ISR もしくはすべての割込みが禁止された状態が解除されたときに，その処理単位の優先度が OSAP スケジューラ処理レベル未満であり，かつ，
タイムウィンドウが満了していた場合，後続のタイムウィンドウに切り替える．
非信頼 OSAP の処理単位は，すべての C2ISR を禁止状態にすること（SuspendOSInterrupts を呼ぶこと）ができない【NOS1457】．また，非信頼 OSAP の処理単位は，すべての割込みを禁止状態にすること（DisableAllInterrupts，SuspendAllInterrupts を呼ぶこと）ができない【NOS1458】．
2.32.7 リソースへの影響
TP 機能によって，2.9 節で述べたリソースに生じる影響について述べる．
TP 機能に対応した OS では，リソースの種別として，標準リソース，内部リソース，リンクリソー
スという分類とは別に，OSAP 内リソースと OSAP 間リソースに分類される【NOS1459】．
OSAP 内リソースは，唯一の OSAP に所属するタスク群からのみ獲得され，C2ISR から獲得されないリソースである【NOS1460】．OSAP 内リソースの上限優先度は，そのリソースを獲得するすべての

194

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
タスクの中で最も高い優先度を持つタスクの優先度である【NOS1461】．
プロパータスクが OSAP 内リソースを獲得すると，そのタスクの現在優先度をリソースの上限優先度まで引き上げる．プロパータスクが OSAP 内リソースを獲得中にタイムウィンドウが満了した場合，後続のタイムウィンドウに切り替わり，そして，そのタスクが所属する OSAP に後続するタイムウィンド
ウが割り当てられていなかった場合，そのタスクはプリエンプトされる【NOS1462】．OSAP 内リソー
スを獲得中のタスクが実行可能状態の場合でも，そのタスクの所属する OSAP に割り当てられていない
タイムウィンドウでは，そのリソースの上限優先度以下の優先度を持つタスクを実行状態とすることができる【NOS1463】．プロパータスクが OSAP 内リソースを解放すると，そのタスクの現在優先度を，
そのリソースを獲得する前のタスク優先度に戻す．
アイドルタスクが OSAP 内リソースを獲得すると，そのタスクの現在優先度をリソースの上限優先度まで引き上げる．アイドルタスクが OSAP 内リソースを獲得中に，プロパータスクが実行可能状態となった場合，そのプロパータスクの優先度に関わらず，アイドルタスクはプリエンプトされ，プロパータ
スクが実行状態となる【NOS1464】．アイドルタスクが OSAP 内リソースを獲得中にタイムウィンドウが満了した場合，後続のタイムウィンドウに切り替わり，後続するタイムウィンドウが割り当てられた
OSAP に所属するタスクで，実行可能状態のタスクがいた場合，そのアイドルタスクはプリエンプトされる≪NOS1464≫．アイドルタスクが OSAP 内リソースを解放すると，そのタスクの現在優先度を，
そのリソースを獲得する前のタスク優先度に戻す．
OSAP 間リソースは，そのリソースを獲得するタスク群が唯一の OSAP に所属していない，もしくは，
C2ISR から獲得されるリソースである【NOS1465】．OSAP 間リソースの上限優先度は，OSAP スケジ
ューラ処理レベル以上で，かつ，そのリソースを獲得するすべての C2ISR の中で最も高い優先度を持
つ C2ISR の優先度である【NOS1466】．
任意の処理単位が OSAP 間リソースを獲得すると，その処理単位の現在優先度をリソースの上限優先度まで引き上げる．任意の処理単位が OSAP 間リソースを獲得中にタイムウィンドウが満了した場合，その処理単位の優先度は，OSAP スケジューラ処理レベル以上となっているため，後続のタイムウィン
ドウに切り替えない≪NOS1421≫．任意の処理単位が OSAP 間リソースを獲得中に，別の OSAP に所属するタスクが実行可能状態となった場合，そのタスクの優先度に関わらず，リソース獲得中の処理単
位はプリエンプトされず，リソース獲得中の処理単位が実行状態を維持する【NOS1467】．OSAP 間リ
ソースを獲得中の処理単位が OSAP 間リソースを解放すると，その処理単位の優先度を，そのリソースを獲得する前のタスク優先度に戻す．OSAP 間リソースを解放したときに，タイムウィンドウがすでに満了していた場合，後続のタイムウィンドウに切り替える≪NOS1436≫．
標準リソースは，OSAP 内リソースと，OSAP 間リソースのどちらかである【NOS1468】．内部リソ
ースは OSAP 内リソースであり，OSAP 間リソースとはならない【NOS1469】．リンクリソースは，リンクされた標準リソースが OSAP 内リソースの場合は OSAP 内リソースであり，リンクされた標準リソースが OSAP 間リソースの場合は OSAP 間リソースである【NOS1470】．
内部リソースは OSAP 内リソースであるため，グループタスクは，同一の OSAP に所属するタスク

195

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
群からのみ構成される
標準リソースが OSAP 内リソースか OSAP 間リソースかどうかは，ジェネレータがそのリソースを獲得するすべてのタスク，C2ISR を解釈し，その処理単位が所属する OSAP を解釈して決定する．
OSAP 間リソースは，非信頼 OSAP のタスクから獲得することはできない【NOS1471】．
2.32.8 アラームへの影響
TP 機能によって，2.12 節で述べたアラームに生じる影響について述べる．
TP 機能に対応した OS では，アラームコールバックは使用できない【NOS1472】．
2.32.9 フックルーチンへの影響
TP 機能によって，2.14 節で述べたフックルーチンに生じる影響について述べる．
システム定義のプレタスクフック
TP 機能に対応した OS において，タイムウィンドウが満了したときにタスクディスパッチが発生した場合，後続のタイムウィンドウが開始した後にプレタスクフックを呼び出し，その後，次に実行状態となるタスクを実行する【NOS1473】．
システム定義のポストタスクフック
TP 機能に対応した OS において，タイムウィンドウが満了したときに実行状態のタスクがプリエンプトされた場合，後続のタイムウィンドウが開始した後にタスクを実行可能状態とした後，ポストタス
クフックを呼び出す【NOS1474】．
2.32.10 OSAP への影響
TP 機能によって，2.18 節で述べた OSAP に生じる影響について述べる．
TP 機能に対応した OS では，すべての SC において OSAP がサポートされる【NOS1475】．しかし，
SC1，SC2 では，以下の機能制限がある．
・信頼 OSAP，非信頼 OSAP ともに，特権モード下での動作が許可され，メモリ保護機能を無効とし，制御レジスタへのアクセスを許可できる≪OS058≫≪OS096≫．
・信頼関数を提供しない≪OS464≫≪OS445≫．
・タスクがどの OSAP にも所属していない場合のみジェネレータはエラーを検出し，それ以外のオブジェクトが OSAP に所属していた場合，ジェネレータはエラーを検出する【NOS1476】〔OS311〕〔OS445〕．
・OSAP は状態（詳細は 2.18.5 節を参照）を持たない≪OS500≫≪OS503≫≪OS502≫．

196

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
・OSAP の操作（詳細は 2.18.6 節を参照）をサポートしない．
・OSAP に所属する OS オブジェクトの保護（詳細は 2.18.7 節を参照）をサポートしない．
TP 機能に対応した OS において，OSAP が強制終了された場合でも，システム周期，タイムウィン
ドウ，各タイムウィンドウで実行状態となりうるタスクは変化しない【NOS1477】．
2.32.11 保護違反時処理への影響
TP 機能によって，2.22 節で述べた保護違反時処理に生じる影響について述べる．
システム周期が満了した時点で，満了していないタイムウィンドウが存在した場合，OS は
E_OS_PROTECTION_TIMEWINDOW をパラメータとして，保護違反時処理を呼び出す【NOS1478】．
C2ISR が最大回数を超えて呼び出されたとき，OS は E_OS_PROTECTION_COUNT_ISR をパラメータとして保護違反時処理を呼び出す≪NOS1453≫．
上記の 2 つの保護違反時処理は，OS 処理レベルで動作する【NOS1479】．
TP 機能に対応した OS において，時間パーティショニング機能の保護違反時処理で呼ばれるプロテクションフックから，PRO_SHUTDOWN 以外の値を返した場合，OS は E_OS_PROTECTION_FATAL
をパラメータとして，OS をシャットダウンする【NOS1480】．
使用上の注意信頼 OSAP のタスクが割込み禁止や OSAP 間リソースを獲得し続け，OSAP スケジューラ処理レベルをマスクし続けた場合，タイムウィンドウの保護違反時処理が遅延する可能性がある．この事象を検出するために，WatchdogManager のアライブ監視などを併用することを推奨する．
2.32.12システムの初期化と終了への影響
TP 機能によって，2.24 節で述べたシステムの初期化と終了に生じる影響について述べる．
TP 機能に対応した OS は，指定されたアプリケーションモードに従って自動起動するタスク，アラーム，スケジュールテーブルを起動状態とした後≪NOS0669≫，かつ，スケジューリングを開始すると共に OS 割込み許可状態にする≪COS1150≫前に，システム周期を開始する【NOS1481】． システ
ム周期を開始する前にスタートアップフックが実行されるため，スタートアップフックの実行時間はタ
イムウィンドウに含まない．
TP 機能に対応した OS がシャットダウンを要求された場合，まず，システム周期を停止する【NOS1482】．そして，シャットダウンフックを呼び出した後に OS の終了を行う≪COS1156≫．シス

197

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
テム周期を停止した後にシャットダウンフックが実行されるため，シャットダウンフックの実行時間はタイムウィンドウに含まない．
2.32.13 OSAP の強制終了処理への影響
TP 機能によって，2.22.4.3 節で述べた OSAP の強制終了処理に生じる影響について述べる．
TP 機能に対応した OS は，OSAP の強制終了が要求されると，まず，以下の処理を行う【NOS1535】〔OS110〕．
・ OSAP の状態を，APPLICATION_TERMINATED か APPLICATION_RESTARTING へと遷移・ OSAP に所属するすべてのアラームの停止
・ OSAP に所属するすべてのスケジュールテーブルの停止
そして，強制終了対象の OSAP が割り当てられたタイムウィンドウにおいて，以下の処理を，強制終了対象の OSAP に所属するすべての処理単位（アイドル OSAP の場合にはすべてのアイドルタスク）に優先して行う【NOS1536】〔OS110〕．
・ OSAP に所属するすべてのタスクと C2ISR の強制終了
・ OSAP に所属するすべての C2ISR の割込み要因を禁止

198

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3. API 仕様
3.1

API の実装ルール

API のインターフェース記述と実装
システムサービスのインターフェースは ISO/ANSI-C に基づいて記載する．通常の実装ではISO/ANSI-C であるが，必要に応じて C 言語マクロなどで実装してもよい【COS1228】．
データ型の実装
データ型の実装方法は特に規定しない【COS1234】．
3.2

各処理単位が使用できるシステムサービス

システムサービスは各処理単位から呼び出すことができる【COS1205】．しかし，処理単位によって使用することのできるシステムサービスは制限される．さらに，コンフォーマンスクラスによっても制限される【COS1229】．詳細は各システムサービスの仕様を参照．
各処理単位から呼び出すことのできるシステムサービスを表 3-1 に示す．

ProtectionHook

PostTaskHook

AlarmCallback

PreTaskHook

TerminateTask【OSa062】○

ChainTask【OSa063】○

Schedule【OSa064】○

GetTaskID【OSa065】

○

○

○

○

○

GetTaskState【OSa066】

○

○

○

○

○

DisableAllInterrupts【OSa067】

○

○

○

○

○

○

○

○

○

○

EnableAllInterrupts【OSa068】

○

○

○

○

○

○

○

○

○

○

SuspendAllInterrupts【OSa069】

○

○

○

○

○

○

○

○

○

○

ResumeAllInterrupts【OSa070】

○

○

○

○

○

○

○

○

○

○

SuspendOSInterrupts【OSa071】

○

○

○

○

○

○

○

○

○

○

ResumeOSInterrupts【OSa072】

○

○

○

○

○

○

○

○

○

○

StartupHook

ErrorHook○

C2 ISR

ActivateTask【OSa061】

C1 ISR

System Service

Task

ShutdownHook

表 3-1 各処理単位から呼出し可能なシステムサービス

○

○

199

ProtectionHook

AlarmCallback

ShutdownHook

○

○

○

○

○

○

○

○

GetAlarm【OSa080】

○

○

○

○

○

SetRelAlarm【OSa081】○○

SetAbsAlarm【OSa082】○○

CancelAlarm【OSa083】○○

GetActiveApplicationMode【OSa084】

○

○

○

○

○

ShutdownOS【OSa086】

○

○

○

GetApplicationID【OSa087】

○

○

○

○

○

○

○

○

GetCurrentApplicationID【NOS1549】

○

○

○

○

○

○

○

○

GetISRID【OSa088】

○

○

○

○

CallTrustedFunction【OSa089】○○

CheckISRMemoryAccess【OSa090】

○

○

○

○

CheckTaskMemoryAccess【OSa091】

○

○

○

○

CheckTaskAccess【OSa092】

○

○

○

○

CheckISRAccess【OSa093】

○

○

○

○

CheckAlarmAccess【OSa094】

○

○

○

○

CheckResourceAccess【OSa095】

○

○

○

○

CheckCounterAccess【OSa096】

○

○

○

○

CheckScheduleTableAccess【OSa097】

○

○

○

○

CheckTaskOwnership【OSa098】

○

○

○

○

CheckISROwnership【OSa099】

○

○

○

○

CheckAlarmOwnership【OSa100】

○

○

○

○

CheckCounterOwnership【OSa101】

○

○

○

○

CheckScheduleTableOwnership

○

○

○

○

System Service

Task

C2 ISR○

C1 ISR

PostTaskHook○

PreTaskHook○

ErrorHook

StartupHook

文書番号：ATK2-0010
文書名：ATK2 外部仕様書

GetResource【OSa073】○※1

ReleaseResource【OSa074】○※1

SetEvent【OSa075】○○

ClearEvent【OSa076】○

GetEvent【OSa077】○

WaitEvent【OSa078】○

GetAlarmBase【OSa079】

StartOS【OSa085】○

200

StartupHook

ShutdownHook○○

StartScheduleTableSynchron【OSa105】 ○○StopScheduleTable【OSa106】○○

NextScheduleTable【OSa107】○○

SyncScheduleTable【OSa108】○○

GetScheduleTableStatus【OSa109】○○

SetScheduleTableAsync【OSa110】○○

IncrementCounter【OSa111】○○

GetCounterValue【OSa112】○○

GetElapsedValue【OSa113】○○

TerminateApplication【NOS1525】○○

AllowAccess【OSa115】○○

GetApplicationState【OSa116】

○

○

○

○

○

○

○

○

DisableInterruptSource【NOS0500】

○

○

○

○

○

○

○

○

EnableInterruptSource【NOS0501】

○

○

○

○

○

○

○

○

AlarmCallback

PostTaskHook

StartScheduleTableAbs【OSa104】

ErrorHook○

C2 ISR○

C1 ISR

StartScheduleTableRel【OSa103】

System Service

Task

PreTaskHook

ProtectionHook

文書番号：ATK2-0010
文書名：ATK2 外部仕様書【OSa102】

GetNumberOfActivatedCores【NOS0949】
GetCoreID【OSa129】

※2

○

○

○

○

○

○

○

○

○

○

○

○

○

○

○

○

○

○

○

○

StartCore【OSa130】
StartNonAutosarCore【OSa131】
GetSpinlock【OS650】
GetSpinlock【OS651】

○

○

○

○

○

○

○

○

○

GetSpinlock【NOS1121】
ReleaseSpinlock【OS656】
ReleaseSpinlock【OS657】
ReleaseSpinlock【NOS1122】
TryToGetSpinlock【OS653】
TryToGetSpinlock【OS654】
TryToGetSpinlock【NOS1123】

201

RaiseInterCoreInterrupt【NOS0502】

○

○

○

○

○

GetMutex【NOS0504】○

ReleaseMutex【NOS0505】○

GetFaultyContext【NOS1367】

○

○

○

○

○

○

ProtectionHook○

AlarmCallback○

ShutdownHook○

StartupHook

ErrorHook

PostTaskHook

C2 ISR

ShutdownAllCores【OSa132】

C1 ISR

System Service

Task

PreTaskHook

文書番号：ATK2-0010
文書名：ATK2 外部仕様書

○
○

○

○

○

○

○：呼出し可能※1：オプションにより呼出し可能≪NOS1212≫※2：現在実行中の OSAP を終了する場合のみ呼出し可能≪NOS1558≫
AUTOSAR 仕様との違い
AUTOSAR 仕様では，GetNumberOfActivatedCores を呼出し可能な処理単位は，タスクと C2ISRと規定されている【OSa133】．しかし，GetNumberOfActivatedCores をタスクと C2ISR 以外の処理単位から呼び出すことによる不都合が想定できないため，本仕様では呼び出すことができると規定した≪NOS0949≫．
AUTOSAR 仕様では，GetSpinlock，ReleaseSpinlock，TryToGetSpinlock はタスクと C2ISR からのみ呼出し可能と規定されている≪OS650≫≪OS651≫≪OS656≫≪OS657≫≪OS653≫≪OS654≫．
しかし，RTE によって生成されるコードでは，プロテクションフックからもスピンロックを使用する可能性があるので，本仕様では，プロテクションフックからも GetSpinlock，ReleaseSpinlock，
TryToGetSpinlock を呼出し可能と規定した≪NOS1121≫≪NOS1122≫≪NOS1123≫．
AUTOSAR 仕様では，TerminateApplication を呼出し可能な処理単位として，タスクと C2ISR，および，OSAP 固有エラーフックが自身の所属する OSAP を終了する場合と規定されている【OSa114】【OSa180】．本仕様において，ATK2 では，OSAP 固有のフックルーチンを提供しないこととしたため，
TerminateApplication を呼出し可能な処理単位は，タスクと C2ISR，および，システム定義のエラー
フックが現在実行中の OSAP を終了する場合のみと規定した≪NOS1525≫．

202

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.3

API 仕様記載凡例

API 仕様記載の凡例を示す．
システムサービス名
C 言語 I/F
パラメータ[in]パラメータ[in/out]＜C 言語 I/F を記載する＞＜システムサービスパラメータで入力となるものを記載する＞＜システムサービスパラメータで入力と出力となるものを記載する＞

パラメータ[out]＜システムサービスパラメータで出力となるものを記載する＞＜システムサービスの返り値で標準エラーとなるものと，該当エラ

標準エラーーが発生する条件を記載する．(W)と付いている場合は警告として扱ってもよい＞

返り値
拡張エラー＜システムサービスの返り値で拡張エラーとなるものと，該当エラーが発生する条件を記載する＞＜返り値の型が StatusType でないシステムサービスにおいて，標準

標準エラー

エラーフックにエラーとしてエラーフックが呼び出されるものと，該当するエラーが発生する条件を記載する＞

渡される＜返り値の型が StatusType でないシステムサービスにおいて，拡張

エラーコード

拡張エラー

エラーとしてエラーフックが呼び出されるものと，該当するエラーが発生する条件を記載する＞

コンフォーマンスクラス＜使用できるコンフォーマンスクラスを記載する＞＜使用できるスケーラビリティクラスを記載する＞

スケーラビリティクラス＜マルチコア対応 OS の場合にサポートされるスケーラビリティク
ラスを「マルチコア：」に続けて記載する＞

機能＜システムサービスの機能を記載する＞

データ型名＜データ型の ID 名を記載する＞

概要＜データ型が示す内容を記載する＞

マクロ名＜マクロの ID 名を記載する＞

概要＜マクロの定義内容を記載する＞

データ型名

マクロ名

203

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
定数名
定数名＜定数の ID 名を記載する＞

概要＜定数が示す内容を記載する＞

宣言記述名
宣言記述名

＜宣言記述の名称と，引数を記載する＞

概要＜宣言記述の内容を記載する＞

コンフォーマンスクラス＜使用できるコンフォーマンスクラスを記載する＞

スケーラビリティクラス＜使用できるスケーラビリティクラスを記載する＞

コンテナ名＜コンテナ名称の末尾のみを記載する＞
コンテナ名＜コンテナ名称をフルパスで記載する＞

概要＜コンテナの概要を記載する＞

多重度＜コンテナの多重度を記載する＞

パラメータ
サブコンテナ＜コンテナが含むパラメータ名を列挙する＞：＜コンテナが含むサブコンテナを列挙する＞：

コンテナパラメータ名＜コンテナパラメータの末尾のみを記載する＞
パラメータ名＜コンテナパラメータ名称をフルパスで記載する＞

概要＜コンテナパラメータの概要を記載する＞

型＜コンテナパラメータのデータ型を記載する＞

値の範囲＜コンテナパラメータの値範囲を記載する＞

多重度＜コンテナパラメータの多重度を記載する＞

制限事項＜制限事項がある場合，コンテナパラメータへの制約を記載する＞

204

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.4

データ型

3.4.1

StatusType
データ型名
概要

StatusType【COS3101】
システムサービス要求に対する結果

StatusType に対する命名規則
システムサービスのエラーコードは「E_」から始まる名称をつける【COS3102】．
OS による予約語「E_OS_」で始まる ID は OS の予約語である．
システムサービスエラーコード定義
システムサービスが正常に終了した場合の StatusType の値は E_OK(=0)である【COS3104】〔COS1208〕．
それ以外の場合はエラーコードで，以下の値を定義する．
・ E_OS_ACCESS = 1【COS3105】〔COS3102〕〔COS1208〕
・ E_OS_CALLEVEL = 2【COS3106】〔COS3102〕〔COS1208〕
・ E_OS_ID = 3【COS3107】〔COS3102〕〔COS1208〕
・ E_OS_LIMIT = 4 【COS3108】〔COS3102〕〔COS1208〕
・ E_OS_NOFUNC = 5【COS3109】〔COS3102〕〔COS1208〕
・ E_OS_RESOURCE = 6【COS3110】〔COS3102〕〔COS1208〕
・ E_OS_STATE = 7【COS3111】〔COS3102〕〔COS1208〕
・ E_OS_VALUE = 8【COS3112】〔COS3102〕〔COS1208〕
・ E_OS_SERVICEID= 9【NOS1252】〔COS3102〕〔COS1208〕
・ E_OS_ILLEGAL_ADDRESS= 10【NOS1253】〔COS3102〕〔COS1208〕
・ E_OS_MISSINGEND= 11【NOS1254】〔COS3102〕〔COS1208〕
・ E_OS_DISABLEDINT= 12【NOS1255】〔COS3102〕〔COS1208〕
・ E_OS_STACKFAULT = 13【NOS1256】〔COS3102〕〔COS1208〕
・ E_OS_PROTECTION_MEMORY= 14【NOS1257】〔COS3102〕〔COS1208〕
・ E_OS_PROTECTION_TIME_TASK= 15【NOS1258】〔COS3102〕〔COS1208〕
・ E_OS_PROTECTION_TIME_ISR= 16【NOS1259】〔COS3102〕〔COS1208〕
・ E_OS_PROTECTION_ARRIVAL_TASK= 17【NOS1260】〔COS3102〕〔COS1208〕
・ E_OS_PROTECTION_ARRIVAL_ISR= 18【NOS1261】〔COS3102〕〔COS1208〕
・ E_OS_PROTECTION_LOCKED_RESOURCE= 19【NOS1262】〔COS3102〕〔COS1208〕
・ E_OS_PROTECTION_LOCKED_OSINT= 20【NOS1263】〔COS3102〕〔COS1208〕
・ E_OS_PROTECTION_LOCKED_ALLINT= 21【NOS1264】〔COS3102〕〔COS1208〕205

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
・ E_OS_PROTECTION_EXCEPTION= 22【NOS1265】〔COS3102〕〔COS1208〕
・ E_OS_PROTECTION_FATAL= 23【NOS1266】〔COS3102〕〔COS1208〕
・ E_OS_MODE= 24【NOS1269】〔COS3102〕〔COS1208〕
・ E_OS_SHUTDOWN_FATAL= 25【NOS1270】〔COS3102〕〔COS1208〕
・ E_OS_PARAM_POINTER= 26【NOS1271】〔COS3102〕〔COS1208〕
・ E_OS_SYS_ASSERT_FATAL= 27【NOS1272】〔COS3102〕〔COS1208〕
・ E_OS_STACKINSUFFICIENT= 28【NOS1273】〔COS3102〕〔COS1208〕
・ E_OS_CORE= 29【NOS1274】〔COS3102〕〔COS1208〕
・ E_OS_SPINLOCK= 30【NOS1275】〔COS3102〕〔COS1208〕
・ E_OS_INTERFERENCE_DEADLOCK= 31【NOS1268】〔COS3102〕〔COS1208〕
・ E_OS_NESTING_DEADLOCK= 32【NOS1267】〔COS3102〕〔COS1208〕
・ E_OS_SHUTDOWN_OTHER_CORE= 33【NOS1276】〔COS3102〕〔COS1208〕
・ E_OS_TIMEINSUFFICIENT= 34【NOS1483】〔COS3102〕〔COS1208〕
・ E_OS_PROTECTION_TIMEWINDOW= 35【NOS1484】〔COS3102〕〔COS1208〕
・ E_OS_PROTECTION_COUNT_ISR= 36【NOS1485】〔COS3102〕〔COS1208〕
・ E_OS_SYS_ILLEGAL_ADDRESS= 37【NOS1562】〔COS3102〕〔COS1208〕
OS 内エラーコード定義（参考仕様）
本 OS では OS 内で発生したエラーに対して「E_OS_SYS_」から始まるエラーコードを実装定義で定義してもよい【COS3113】．ただし，これらのエラーコードは移植性がないため，注意が必要である．
OS 内エラーコードは，システムサービスと同様に，アプリケーションから使用することができる【COS3114】
．
3.4.2

3.4.3

AppModeType
データ型名

AppModeType【COS3701】

概要

アプリケーションモード型

OSServiceIdType
データ型名
概要

3.4.4

OSServiceIdType【COS3801】
システムサービス ID 型

TaskType
データ型名
概要

TaskType【COS3201】
タスク ID

206

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.4.5

3.4.6

TaskRefType
データ型名

TaskRefType【COS3202】

概要

タスク ID へのポインタ型

TaskStateType
データ型名
概要

3.4.7

概要

TaskStateRefType【COS3204】
タスク状態へのポインタ型

ISRType
データ型名
概要

3.4.9

タスク状態

TaskStateRefType
データ型名

3.4.8

TaskStateType【COS3203】

ISRType【OSa014】
ISRID

EventMaskType
データ型名
概要

EventMaskType【COS3501】
イベントマスク型

3.4.10 EventMaskRefType
データ型名
概要

EventMaskRefType【COS3502】
イベントマスクへのポインタ型

3.4.11 ResourceType
データ型名
概要

ResourceType【COS3401】
リソース ID

3.4.12 CounterType
データ型名
概要

CounterType【OSa018】
カウンタ ID

3.4.13 TickType
データ型名
概要

TickType【COS3601】
ティック

207

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.4.14 TickRefType
データ型名

TickRefType【COS3602】

概要

ティックへのポインタ型

3.4.15 AlarmType
AlarmType【COS3609】

データ型名

アラーム ID

概要
3.4.16 AlarmBaseType
データ型名
概要

AlarmBaseType【COS3603】
アラーム情報
データ型

メンバ変数

メンバ名

TickType

maxallowedvalue

TickTypeticksperbase

TickTypemincycle

メンバ変数の概要
システムサービスで指定できるティックの最大値
カウンタ固有の値(OS は不使用)
アラームのセットに指定できる
最小のサイクル数

3.4.17 AlarmBaseRefType
データ型名
概要

AlarmBaseRefType【COS3608】
アラーム情報へのポインタ型

3.4.18 ScheduleTableType
データ型名
概要

ScheduleTableType【OSa015】
スケジュールテーブル ID

3.4.19 ScheduleTableStatusType
データ型名
概要

ScheduleTableStatusType【OSa016】
スケジュールテーブル状態型

3.4.20 ScheduleTableStatusRefType
データ型名

ScheduleTableStatusRefType【OSa017】

概要

スケジュールテーブル状態へのポインタ型

208文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.4.21 PhysicalTimeType
データ型名
概要

PhysicalTimeType【OSa019】
ティックから時間に換算するマクロで使用される型

3.4.22 ApplicationType
データ型名
概要

ApplicationType【OSa020】
OSAPID

3.4.23 ApplicationStateType
データ型名
概要

ApplicationStateType【OSa021】
OSAP の状態を示すデータ型

3.4.24 ApplicationStateRefType
データ型名
概要

ApplicationStateRefType【OSa022】
OSAP の状態を示すデータへのポインタ型

3.4.25 TrustedFunctionIndexType
データ型名
概要

TrustedFunctionIndexType【OSa023】
信頼関数 ID

3.4.26 TrustedFunctionParameterRefType
データ型名
概要

TrustedFunctionParameterRefType【OSa024】
信頼関数パラメータへのポインタ型．
TrustedFunctionParameterRefType は任意のデータ型へのポ
インタをキャストせずに渡せるように，void*で定義する．

3.4.27 AccessType
データ型名

AccessType【OSa025】

概要

メモリ領域アクセス権

3.4.28 ObjectAccessType
データ型名

ObjectAccessType【OSa026】

概要

OS オブジェクトアクセス権

209文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.4.29 ObjectTypeType
データ型名
概要

ObjectTypeType【OSa027】
OS オブジェクト種別

3.4.30 MemoryStartAddressType
データ型名
概要

MemoryStartAddressType【OSa028】
メモリ領域先頭へのポインタ型

3.4.31 MemorySizeType
データ型名
概要

MemorySizeType【OSa029】
メモリ領域サイズ

3.4.32 RestartType
データ型名
概要

RestartType【OSa030】
OSAP 強制終了時のリスタートタスク起動有無

3.4.33 ProtectionReturnType
データ型名

ProtectionReturnType【OSa031】

概要

保護違反に対する OS の処理種別

3.4.34 Std_ReturnType
データ型名
概要

Std_ReturnType【OSa172】
IOC 用システムサービス要求に対する結果

IOC 用システムサービスエラーコード定義
IOC 用システムサービスが正常に終了した場合の Std_ReturnType の値は IOC_E_OK (=0)である【OSa173】．それ以外の場合はエラーコードで，以下の値を定義する．
・ IOC_E_NOK = 1【OSa174】
・ IOC_E_LIMIT = 130【OSa175】
・ IOC_E_LOST_DATA = 64【OSa176】
・ IOC_E_NO_DATA = 131 【OSa177】

210

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.4.35 IocType
データ型名
概要

IocType【NOS1089】
IOC ID3.4.36 SenderIdType
データ型名
概要

SenderIdType【NOS1090】
センダ ID3.4.37 CoreIdType
データ型名
概要

CoreIdType【OSa134】
コア ID

3.4.38 SpinlockIdType
データ型名
概要

SpinlockIdType【OSa135】
スピンロック ID

3.4.39 TryToGetSpinlockType
データ型名
概要

TryToGetSpinlockType【OSa136】
TryToGetSpinlock 実行結果情報

3.4.40 MutexType
データ型名
概要

MutexType【NOS0098】
ミューテックス ID

3.4.41 StackType
データ型名
概要

StackType【NOS0841】
スタック領域を用意するためのデータ型

3.4.42 TimeType
データ型名
概要

TimeType【NOS0859】
ハードウェアカウンタにおける 1 ティック当たりの実時間をナ
ノ秒単位で管理するためのデータ型

211文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.4.43 FaultyContextType
データ型名
概要

FaultyContextType【NOS1277】
保護違反を起こした処理単位情報を管理するためのデータ型

212

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.5

マクロ

3.5.1

メモリアクセス

OSMEMORY_IS_READABLE
マクロ名
概要

OSMEMORY_IS_READABLE(AccessType)【OSa032】
指定されたメモリが読出し可能である場合，0 以外の値を返す

OSMEMORY_IS_WRITEABLE
マクロ名

OSMEMORY_IS_WRITEABLE(AccessType) 【OSa033】

概要

指定されたメモリが書込み可能である場合，0 以外の値を返す

OSMEMORY_IS_EXECUTABLE
マクロ名

OSMEMORY_IS_EXECUTABLE(AccessType) 【OSa034】

概要

指定されたメモリが実行可能である場合，0 以外の値を返す

OSMEMORY_IS_STACKSPACE
マクロ名
概要
3.5.2

OSMEMORY_IS_STACKSPACE(AccessType) 【OSa035】
指定されたメモリがスタック領域である場合，0 以外の値を返す

システムサービス呼出し

SVC_CALL
マクロ名
概要

SVC_CALL(SystemServiceName)(Parameter)【NOS0292】
Parameter で指定された引数で，SystemServiceName で指定されたシステムサービスを，明示的に関数呼出しにて発行する．

SVC_TRAP
マクロ名
概要

SVC_TRAP(SystemServiceName)(Parameter)【NOS0293】
Parameter で指定された引数で，SystemServiceName で指定されたシステムサービスを，明示的にソフトウェア割込みにて発行する．

AUTOSAR 仕様との違い
OS のシステムサービスを，関数呼出しで行うか，ソフトウェア割込みで行うかを明示的に区別するため，本仕様では，SVC_CALL と SVC_TRAP の 2 つのインターフェースを定義する≪NOS0292≫≪
NOS0293≫．信頼 OSAP に所属する処理単位は，関数呼出しでシステムサービスを発行できる【NOS1278】．

213

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.5.3

システムサービス ID 取得

OSErrorGetServiceId
マクロ名
概要
3.5.4

OSErrorGetServiceId()【COS3834】〔COS1130〕
システムサービスエラー発生時のシステムサービス ID の取得．

システムサービスパラメータ取得

OSError_StartOS_Mode
マクロ名
概要

OSError_StartOS_Mode()≪COS3836≫
システムサービスエラー発生時の StartOS 実行第 1 引数の取得．

OSError_ShutdownOS_Error
マクロ名
概要

OSError_ShutdownOS_Error()≪COS3836≫
システムサービスエラー発生時の ShutdownOS 実行第 1 引数の取得．

OSError_ActivateTask_TaskID
マクロ名
概要

OSError_ActivateTask_TaskID()≪COS3836≫
システムサービスエラー発生時の ActivateTask 実行第 1 引数の取得．

OSError_ChainTask_TaskID
マクロ名
概要

OSError_ChainTask_TaskID()≪COS3836≫
システムサービスエラー発生時の ChainTask 実行第 1 引数の取得．

OSError_GetTaskID_TaskID
マクロ名
概要

OSError_GetTaskID_TaskID()≪COS3836≫
システムサービスエラー発生時の GetTaskID 実行第 1 引数の取得．

OSError_GetTaskState_TaskID
マクロ名
概要

OSError_GetTaskState_TaskID()≪COS3836≫
システムサービスエラー発生時の GetTaskState 実行第 1 引数の取得．

214

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OSError_GetTaskState_State
マクロ名
概要

OSError_GetTaskState_State()≪COS3836≫
システムサービスエラー発生時の GetTaskState 実行第 2 引数の取得．

OSError_EnableInterruptSource_EnableISR
マクロ名
概要

OSError_EnableInterruptSource_EnableISR()≪COS3836≫
システムサービスエラー発生時の EnableInterruptSource 実行第 1
引数の取得．

OSError_DisableInterruptSource_DisableISR
マクロ名
概要

OSError_DisableInterruptSource_DisableISR()≪COS3836≫
システムサービスエラー発生時の DisableInterruptSource 実行第 1
引数の取得．

OSError_SetEvent_TaskID
マクロ名
概要

OSError_SetEvent_TaskID()≪COS3836≫
システムサービスエラー発生時の SetEvent 実行第 1 引数の取得．

OSError_SetEvent_Mask
マクロ名
概要

OSError_SetEvent_Mask()≪COS3836≫
システムサービスエラー発生時の SetEvent 実行第 2 引数の取得．

OSError_ClearEvent_Mask
マクロ名
概要

OSError_ClearEvent_Mask()≪COS3836≫
システムサービスエラー発生時の ClearEvent 実行第 1 引数の取得．

OSError_GetEvent_TaskID
マクロ名
概要

OSError_GetEvent_TaskID()≪COS3836≫
システムサービスエラー発生時の GetEvent 実行第 1 引数の取得．

OSError_GetEvent_Event
構文

OSError_GetEvent_Event()≪COS3836≫

記述

システムサービスエラー発生時の GetEvent 実行第 2 引数の取得．

215

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OSError_WaitEvent_Mask
マクロ名
概要

OSError_WaitEvent_Mask()≪COS3836≫
システムサービスエラー発生時の WaitEvent 実行第 1 引数の取得．

OSError_GetResource_ResID
マクロ名
概要

OSError_GetResource_ResID()≪COS3836≫
システムサービスエラー発生時の GetResource 実行第 1 引数の取得．

OSError_ReleaseResource_ResID
マクロ名
概要

OSError_ReleaseResource_ResID()≪COS3836≫
システムサービスエラー発生時の ReleaseResource 実行第 1 引数の取得．

OSError_IncrementCounter_CounterID
マクロ名
概要

OSError_IncrementCounter_CounterID()≪COS3836≫
システムサービスエラー発生時の IncrementCounter 実行第 1 引数の取得．

OSError_GetCounterValue_CounterID
マクロ名
概要

OSError_GetCounterValue_CounterID()≪COS3836≫
システムサービスエラー発生時の GetCounterValue 実行第 1 引数の取得．

OSError_GetCounterValue_Value
マクロ名
概要

OSError_GetCounterValue_Value()≪COS3836≫
システムサービスエラー発生時の GetCounterValue 実行第 2 引数の取得．

OSError_GetElapsedValue_CounterID
マクロ名
概要

OSError_GetElapsedValue_CounterID()≪COS3836≫
システムサービスエラー発生時の GetElapsedValue 実行第 1 引数の
取得．

216

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OSError_GetElapsedValue_Value
マクロ名
概要

OSError_GetElapsedValue_Value()≪COS3836≫
システムサービスエラー発生時の GetElapsedValue 実行第 2 引数の取得．

OSError_GetElapsedValue_ElapsedValue
マクロ名
概要

OSError_GetElapsedValue_ElapsedValue()≪COS3836≫
システムサービスエラー発生時の GetElapsedValue 実行第 3 引数の取得．

OSError_GetAlarmBase_AlarmID
マクロ名
概要

OSError_GetAlarmBase_AlarmID()≪COS3836≫
システムサービスエラー発生時の GetAlarmBase 実行第 1 引数の取得．

OSError_GetAlarmBase_Info
マクロ名
概要

OSError_GetAlarmBase_Info()≪COS3836≫
システムサービスエラー発生時の GetAlarmBase 実行第 2 引数の取得．

OSError_GetAlarm_AlarmID
マクロ名
概要

OSError_GetAlarm_AlarmID()≪COS3836≫
システムサービスエラー発生時の GetAlarm 実行第 1 引数の取得．

OSError_GetAlarm_Tick
マクロ名
概要

OSError_GetAlarm_Tick()≪COS3836≫
システムサービスエラー発生時の GetAlarm 実行第 2 引数の取得．

OSError_SetRelAlarm_AlarmID
マクロ名
概要

OSError_SetRelAlarm_AlarmID()≪COS3836≫
システムサービスエラー発生時の SetRelAlarm 実行第 1 引数の取得

OSError_SetRelAlarm_increment
マクロ名
概要

OSError_SetRelAlarm_increment()≪COS3836≫
システムサービスエラー発生時の SetRelAlarm 実行第 2 引数の取得

217

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OSError_SetRelAlarm_cycle
マクロ名
概要

OSError_SetRelAlarm_cycle()≪COS3836≫
システムサービスエラー発生時の SetRelAlarm 実行第 3 引数の取得．

OSError_SetAbsAlarm_AlarmID
マクロ名
概要

OSError_SetAbsAlarm_AlarmID()≪COS3836≫
システムサービスエラー発生時の SetAbsAlarm 実行第 1 引数の取得．

OSError_SetAbsAlarm_start
マクロ名
概要

OSError_SetAbsAlarm_start()≪COS3836≫
システムサービスエラー発生時の SetAbsAlarm 実行第 2 引数の取得．

OSError_SetAbsAlarm_cycle
マクロ名
概要

OSError_SetAbsAlarm_cycle()≪COS3836≫
システムサービスエラー発生時の SetAbsAlarm 実行第 3 引数の取得．

OSError_CancelAlarm_AlarmID
マクロ名
概要

OSError_CancelAlarm_AlarmID()≪COS3836≫
システムサービスエラー発生時の CancelAlarm 実行第 1 引数の取得．

OSError_StartScheduleTableRel_ScheduleTableID
マクロ名
概要

OSError_StartScheduleTableRel_ScheduleTableID()≪COS3836≫
システムサービスエラー発生時の StartScheduleTableRel 実行第 1
引数の取得．

218

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OSError_StartScheduleTableRel_Offset
マクロ名
概要

OSError_StartScheduleTableRel_Offset()≪COS3836≫
システムサービスエラー発生時の StartScheduleTableRel 実行第 2
引数の取得．

OSError_StartScheduleTableAbs_ScheduleTableID
マクロ名
概要

OSError_StartScheduleTableAbs_ScheduleTableID()≪COS3836≫
システムサービスエラー発生時の StartScheduleTableAbs 実行第 1
引数の取得．

OSError_StartScheduleTableAbs_Start
マクロ名
概要

OSError_StartScheduleTableAbs_Start()≪COS3836≫
システムサービスエラー発生時の StartScheduleTableAbs 実行第 2
引数の取得．

OSError_StopScheduleTable_ScheduleTableID
マクロ名
概要

OSError_StopScheduleTable_ScheduleTableID()≪COS3836≫
システムサービスエラー発生時の StopScheduleTable 実行第 1 引数の取得．

OSError_NextScheduleTable_ScheduleTableID_From
マクロ名
概要

OSError_NextScheduleTable_ScheduleTableID_From()≪
COS3836≫
システムサービスエラー発生時の NextScheduleTable 実行第 1 引数の取得．

OSError_NextScheduleTable_ScheduleTableID_To
マクロ名
概要

OSError_NextScheduleTable_ScheduleTableID_To()≪COS3836≫
システムサービスエラー発生時の NextScheduleTable 実行第 2 引数
の取得．

219

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OSError_StartScheduleTableSynchron_ScheduleTableID
マクロ名
概要

OSError_StartScheduleTableSynchron_ScheduleTableID()≪
COS3836≫
システムサービスエラー発生時の StartScheduleTableSynchron 実
行第 1 引数の取得．

OSError_SyncScheduleTable_ScheduleTableID
マクロ名
概要

OSError_SyncScheduleTable_ScheduleTableID()≪COS3836≫
システムサービスエラー発生時の SyncScheduleTable 実行第 1 引数の取得．

OSError_SyncScheduleTable_Value
マクロ名
概要

OSError_SyncScheduleTable_Value()≪COS3836≫
システムサービスエラー発生時の SyncScheduleTable 実行第 2 引数の取得．

OSError_SetScheduleTableAsync_ScheduleTableID
マクロ名
概要

OSError_SetScheduleTableAsync_ScheduleTableID()≪COS3836≫
システムサービスエラー発生時の SetScheduleTableAsync 実行第 1
引数の取得．

OSError_GetScheduleTableStatus_ScheduleTableID
マクロ名
概要

OSError_GetScheduleTableStatus_ScheduleTableID()≪COS3836≫
システムサービスエラー発生時の GetScheduleTableStatus 実行第 1
引数の取得．

OSError_GetScheduleTableStatus_ScheduleStatus
マクロ名
概要

OSError_GetScheduleTableStatus_ScheduleStatus()≪COS3836≫
システムサービスエラー発生時の GetScheduleTableStatus 実行第 2
引数の取得．

220

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OSError_CallTrustedFunction_FunctionIndex
マクロ名
概要

OSError_CallTrustedFunction_FunctionIndex()≪COS3836≫
システムサービスエラー発生時の CallTrustedFunction 実行第 1 引
数の取得．

OSError_CallTrustedFunction_FunctionParams
マクロ名概要

OSError_CallTrustedFunction_FunctionParams()≪COS3836≫
システムサービスエラー発生時の CallTrustedFunction 実行第 2 引
数の取得．

OSError_CheckISRMemoryAccess_ISRID
マクロ名
概要

OSError_CheckISRMemoryAccess_ISRID()≪COS3836≫
システムサービスエラー発生時の CheckISRMemoryAccess 実行第 1
引数の取得．

OSError_CheckISRMemoryAccess_Address
マクロ名
概要

OSError_CheckISRMemoryAccess_Address()≪COS3836≫
システムサービスエラー発生時の CheckISRMemoryAccess 実行第 2
引数の取得．

OSError_CheckISRMemoryAccess_Size
マクロ名
概要

OSError_CheckISRMemoryAccess_Size()≪COS3836≫
システムサービスエラー発生時の CheckISRMemoryAccess 実行第 3
引数の取得．

OSError_CheckTaskMemoryAccess_TaskID
マクロ名
概要

OSError_CheckTaskMemoryAccess_TaskID()≪COS3836≫
システムサービスエラー発生時の CheckTaskMemoryAccess 実行第1 引数の取得．

OSError_CheckTaskMemoryAccess_Address
マクロ名
概要

OSError_CheckTaskMemoryAccess_Address()≪COS3836≫
システムサービスエラー発生時の CheckTaskMemoryAccess 実行第2 引数の取得．

221

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OSError_CheckTaskMemoryAccess_Size
マクロ名
概要

OSError_CheckTaskMemoryAccess_Size()≪COS3836≫
システムサービスエラー発生時の CheckTaskMemoryAccess 実行第3 引数の取得．

OSError_CheckTaskAccess_ApplID
マクロ名
概要

OSError_CheckTaskAccess_ApplID()≪COS3836≫
システムサービスエラー発生時の CheckTaskAccess 実行第 1 引数の取得．

OSError_CheckTaskAccess_TaskID
マクロ名
概要

OSError_CheckTaskAccess_TaskID()≪COS3836≫
システムサービスエラー発生時の CheckTaskAccess 実行第 2 引数の取得．

OSError_CheckISRAccess_ApplID
マクロ名
概要

OSError_CheckISRAccess_ApplID()≪COS3836≫
システムサービスエラー発生時の CheckISRAccess 実行第 1 引数の取得．

OSError_CheckISRAccess_ISRID
マクロ名
概要

OSError_CheckISRAccess_ISRID()≪COS3836≫
システムサービスエラー発生時の CheckISRAccess 実行第 2 引数の取得．

OSError_CheckAlarmAccess_ApplID
マクロ名
概要

OSError_CheckAlarmAccess_ApplID()≪COS3836≫
システムサービスエラー発生時の CheckAlarmAccess 実行第 1 引数の取得．

OSError_CheckAlarmAccess_AlarmID
マクロ名
概要

OSError_CheckAlarmAccess_AlarmID()≪COS3836≫
システムサービスエラー発生時の CheckAlarmAccess 実行第 2 引数
の取得．

222

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OSError_CheckResourceAccess_ApplID
マクロ名
概要

OSError_CheckResourceAccess_ApplID()≪COS3836≫
システムサービスエラー発生時の CheckResourceAccess 実行第 1 引
数の取得．

OSError_CheckResourceAccess_ResID
マクロ名
概要

OSError_CheckResourceAccess_ResID()≪COS3836≫
システムサービスエラー発生時の CheckResourceAccess 実行第 2 引
数の取得．

OSError_CheckCounterAccess_ApplID
マクロ名
概要

OSError_CheckCounterAccess_ApplID()≪COS3836≫
システムサービスエラー発生時の CheckCounterAccess 実行第 1 引
数の取得．

OSError_CheckCounterAccess_CounterID
マクロ名
概要

OSError_CheckCounterAccess_CounterID()≪COS3836≫
システムサービスエラー発生時の CheckCounterAccess 実行第 2 引
数の取得．

OSError_CheckScheduleTableAccess_ApplID
マクロ名
概要

OSError_CheckScheduleTableAccess_ApplID()≪COS3836≫
システムサービスエラー発生時の CheckScheduleTableAccess 実行
第 1 引数の取得．

OSError_CheckScheduleTableAccess_ScheduleTableID
マクロ名
概要

OSError_CheckScheduleTableAccess_ScheduleTableID()≪
COS3836≫
システムサービスエラー発生時の CheckScheduleTableAccess 実行
第 2 引数の取得．

OSError_CheckSpinlockAccess_ApplID
マクロ名
概要

OSError_CheckSpinlockAccess_ApplID()≪COS3836≫
システムサービスエラー発生時の CheckSpinlockAccess 実行第 1 引
数の取得．

223

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OSError_CheckSpinlockAccess_SpinlockId
マクロ名
概要

OSError_CheckSpinlockAccess_SpinlockId()≪COS3836≫
システムサービスエラー発生時の CheckSpinlockAccess 実行第 2 引
数の取得．

OSError_CheckTaskOwnership_TaskID
マクロ名
概要

OSError_CheckTaskOwnership_TaskID()≪COS3836≫
システムサービスエラー発生時の CheckTaskOwnership 実行第 1 引
数の取得．

OSError_CheckISROwnership_ISRID
マクロ名
概要

OSError_CheckISROwnership_ISRID()≪COS3836≫
システムサービスエラー発生時の CheckISROwnership 実行第 1 引
数の取得．

OSError_CheckAlarmOwnership_AlarmID
マクロ名
概要

OSError_CheckAlarmOwnership_AlarmID()≪COS3836≫
システムサービスエラー発生時の CheckAlarmOwnership 実行第 1
引数の取得．

OSError_CheckCounterOwnership_CounterID
マクロ名
概要

OSError_CheckCounterOwnership_CounterID()≪COS3836≫
システムサービスエラー発生時の CheckCounterOwnership 実行第1 引数の取得．

OSError_CheckScheduleTableOwnership_ScheduleTableID
マクロ名
概要

OSError_CheckScheduleTableOwnership_ScheduleTableID()≪
COS3836≫
システムサービスエラー発生時の CheckScheduleTableOwnership
実行第 1 引数の取得．

OSError_TerminateApplication_Application
マクロ名
概要

OSError_TerminateApplication_Application()≪COS3836≫
システムサービスエラー発生時の TerminateApplication 実行第 1 引
数の取得．

224

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OSError_TerminateApplication_RestartOption
マクロ名
概要

OSError_TerminateApplication_RestartOption()≪COS3836≫
システムサービスエラー発生時の TerminateApplication 実行第 2 引
数の取得．

OSError_GetApplicationState_Application
マクロ名
概要

OSError_GetApplicationState_Application()≪COS3836≫
システムサービスエラー発生時の GetApplicationState 実行第 1 引
数の取得．

OSError_GetApplicationState_Value
マクロ名
概要

OSError_GetApplicationState_Value()≪COS3836≫
システムサービスエラー発生時の GetApplicationState 実行第 2 引
数の取得．

OSError_IocSend_IocId
マクロ名

OSError_IocSend_IocId()≪NOS1088≫
IOC 用システムサービスエラー発生時の概要

IocSend_<IocId>[_<SenderId>]，IocSendGroup_<IocId>で実行された<IocId>の取得．

OSError_IocSend_SenderId
マクロ名
概要

OSError_IocSend_SenderId()≪NOS1088≫
IOC 用システムサービスエラー発生時のIocSend_<IocId>_<SenderId>で実行された<SenderId>の取得．

OSError_ioc_send_generic_WrapperId
マクロ名
概要

OSError_ioc_send_generic_WrapperId ()【NOS1595】
IOC 用システムサービス IocSend_<IocId>_<SenderId>が呼び出す
内部関数エラー発生時の第 1 引数の取得．

225

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OSError_IocWrite_IocId
マクロ名

OSError_IocWrite_IocId()≪NOS1088≫
IOC 用システムサービスエラー発生時の概要

IocWrite_<IocId>[_<SenderId>]，IocWriteGroup_<IocId>で実行された<IocId>の取得．

OSError_IocWrite_SenderId
マクロ名
概要

OSError_IocWrite_SenderId()≪NOS1088≫
IOC 用システムサービスエラー発生時のIocWrite_<IocId>_<SenderId>で実行された<SenderId>の取得．

OSError_ioc_write_generic_WrapperId
マクロ名
概要

OSError_ioc_write_generic_WrapperId ()【NOS1596】
IOC 用システムサービス IocWrite_<IocId>_<SenderId>が呼び出す
内部関数エラー発生時の第 1 引数の取得．

OSError_IocReceive_IocId
マクロ名
概要

OSError_IocReceive_IocId()≪NOS1088≫
IOC 用システムサービスエラー発生時の IocReceive_<IocId>，
IocReceiveGroup_<IocId>で実行された<IocId>の取得．

OSError_IocRead_IocId
マクロ名
概要

OSError_IocRead_IocId()≪NOS1088≫
IOC 用システムサービスエラー発生時の IocRead_<IocId>，
IocReadGroup_<IocId>で実行された<IocId>の取得．

OSError_IocEmptyQueue_IocId
マクロ名
概要

OSError_IocEmptyQueue_IocId()≪NOS1088≫
IOC 用システムサービスエラー発生時の IocEmptyQueue_<IocId>で実行された<IocId>の取得．

OSError_StartCore_CoreID
マクロ名
概要

OSError_StartCore_CoreID()≪COS3836≫
システムサービスエラー発生時の StartCore 実行第 1 引数の取得．

226

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OSError_StartCore_Status
マクロ名
概要

OSError_StartCore_Status()≪COS3836≫
システムサービスエラー発生時の StartCore 実行第 2 引数の取得．

OSError_StartNonAutosarCore_CoreID
マクロ名
概要

OSError_StartNonAutosarCore_CoreID()≪COS3836≫
システムサービスエラー発生時の StartNonAutosarCore 実行第 1 引
数の取得．

OSError_StartNonAutosarCore_Status
マクロ名
概要

OSError_StartNonAutosarCore_Status()≪COS3836≫
システムサービスエラー発生時の StartNonAutosarCore 実行第 2 引
数の取得．

OSError_GetSpinlock_SpinlockId
マクロ名
概要

OSError_GetSpinlock_SpinlockId()≪COS3836≫
システムサービスエラー発生時の GetSpinlock 実行第 1 引数の取得．

OSError_ReleaseSpinlock_SpinlockId
マクロ名
概要

OSError_ReleaseSpinlock_SpinlockId()≪COS3836≫
システムサービスエラー発生時の ReleaseSpinlock 実行第 1 引数の取得．

OSError_TryToGetSpinlock_SpinlockId
マクロ名
概要

OSError_TryToGetSpinlock_SpinlockId()≪COS3836≫
システムサービスエラー発生時の TryToGetSpinlock 実行第 1 引数の取得．

OSError_TryToGetSpinlock_Success
マクロ名
概要

OSError_TryToGetSpinlock_Success()≪COS3836≫
システムサービスエラー発生時の TryToGetSpinlock 実行第 2 数の取得．

227文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OSError_ShutdownAllCores_Error
マクロ名
概要

OSError_ShutdownAllCores_Error()≪COS3836≫
システムサービスエラー発生時の ShutdownAllCores 実行第 1 引数の取得．

OSError_RaiseInterCoreInterrupt_ISRID
マクロ名
概要

OSError_RaiseInterCoreInterrupt_ISRID ()≪COS3836≫
システムサービスエラー発生時の RaiseInterCoreInterrupt 実行第 1
引数の取得．

OSError_GetMutex_MtxID
マクロ名
概要

OSError_GetMutex_MtxID()≪COS3836≫
システムサービスエラー発生時の GetMutex 実行第 1 引数の取得．

OSError_ReleaseMutex_MtxID
マクロ名
概要

OSError_ReleaseMutex_MtxID()≪COS3836≫
システムサービスエラー発生時の ReleaseMutex 実行第 1 引数の取得．

228

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.6

定数

3.6.1

タスク状態

RUNNING
定数名

RUNNING【COS3288】

概要

タスクが実行状態であることを示す定数

定数名

WAITING【COS3289】

概要

タスクが待ち状態であることを示す定数

定数名

READY【COS3290】

概要

タスクが実行可能状態であることを示す定数

定数名

SUSPENDED【COS3291】

概要

タスクが休止状態であることを示す定数

WAITINGREADY

SUSPENDED

3.6.2

ID

INVALID_TASK
定数名

INVALID_TASK【COS3292】

概要

いずれのタスクの ID でもないことを示す定数

定数名

INVALID_ISR【OSa036】

概要

いずれの ISR の ID でもないことを示す定数

INVALID_ISR

INVALID_OSAPPLICATION
定数名

INVALID_OSAPPLICATION【OSa037】

概要

いずれの OSAPID でもないことを示す定数229

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OS_CORE_ID_MASTER
定数名

OS_CORE_ID_MASTER【OS628】
マスタコアのコア ID を示す定数．

概要

マスタコアとなるコア ID を示す OS_CORE_ID_<No>と同じ値となる．

OS_CORE_ID_<No>
定数名

OS_CORE_ID_<No>【OS627】
各コアのコア ID を示す定数．

概要<No>は，0 から OsNumberOfCores-1 までの連番となる．
本マクロの値はターゲット定義である【NOS1544】
．

3.6.3

アラーム設定以下 3 つの定数はすべてのカウンタに対して GetAlarmBase で取得できるパラメータを定数値として定義するものである．よって，カウンタの名前が自明な場合はシステムサービスを使用してアラーム情報を取得する必要がない【COS3685】．
OSMAXALLOWEDVALUE_<Cnt>
定数名

OSMAXALLOWEDVALUE_<Cnt>【COS3682】
カウンタオブジェクト<Cnt>に対してシステムサービスで指概要定できるティックの最大値．
すべてのカウンタに対して定義する．

OSTICKSPERBASE_<Cnt>
定数名

OSTICKSPERBASE_<Cnt>【COS3683】
カウンタオブジェクト<Cnt>のカウンタ固有の値(OS は不使

概要

用)．
すべてのカウンタに対して定義する．

OSMINCYCLE_<Cnt>
定数名

OSMINCYCLE_<Cnt>【COS3684】
カウンタオブジェクト<Cnt>に接続されたアラームのセット

概要に指定できるサイクルの最小値．
すべてのカウンタに対して定義する．

230

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.6.4

スケジュールテーブル状態

SCHEDULETABLE_STOPPED
定数名
概要

SCHEDULETABLE_STOPPED【OSa038】
ScheduleTableStatusType 型のスケジュールテーブルが停止状態であることを示す定数

SCHEDULETABLE_NEXT
定数名
概要

SCHEDULETABLE_NEXT【OSa039】
ScheduleTableStatusType 型のスケジュールテーブルが切換
え待ち状態であることを示す定数

SCHEDULETABLE_WAITING
定数名
概要

SCHEDULETABLE_WAITING【OSa040】
ScheduleTableStatusType 型のスケジュールテーブルが同期待ち状態であることを示す定数

SCHEDULETABLE_RUNNING
定数名
概要

SCHEDULETABLE_RUNNING【OSa041】
ScheduleTableStatusType 型のスケジュールテーブルが動作状態であることを示す定数

SCHEDULETABLE_RUNNING_AND_SYNCHRONOUS
定数名
概要

3.6.5

SCHEDULETABLE_RUNNING_AND_SYNCHRONOUS【OSa042】
ScheduleTableStatusType 型のスケジュールテーブルが同期動作状態であることを示す定数

OSAP 状態

APPLICATION_ACCESSIBLE
定数名
概要

APPLICATION_ACCESSIBLE【OSa043】
ApplicationStateType 型の OSAP が利用可能状態であること
を示す定数

231

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
APPLICATION_RESTARTING
定数名
概要

APPLICATION_RESTARTING【OSa044】
ApplicationStateType 型の OSAP が再起動状態であることを示す定数

APPLICATION_TERMINATED
定数名
概要

3.6.6

APPLICATION_TERMINATED【OSa045】
ApplicationStateType 型の OSAP が終了状態であることを示
す定数

アクセス情報ACCESS
定数名
概要

ACCESS【OSa046】
ObjectAccessType 型の OS オブジェクトにアクセスできることを示す定数

NO_ACCESS
定数名
概要

3.6.7

NO_ACCESS【OSa047】
ObjectAccessType 型の OS オブジェクトにアクセスできない
ことを示す定数

オブジェクト情報

OBJECT_TASK
定数名
概要

OBJECT_TASK【OSa048】
ObjectTypeType 型の OS オブジェクトがタスクであることを示す定数

OBJECT_ISR
定数名
概要

OBJECT_ISR【OSa049】
ObjectTypeType 型の OS オブジェクトが ISR であることを示
す定数

232

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OBJECT_ALARM
定数名
概要

OBJECT_ALARM【OSa050】
ObjectTypeType 型の OS オブジェクトがアラームであることを示す定数

OBJECT_RESOURCE
定数名
概要

OBJECT_RESOURCE【OSa051】
ObjectTypeType 型の OS オブジェクトがリソースであることを示す定数

OBJECT_COUNTER
定数名
概要

OBJECT_COUNTER【OSa052】
ObjectTypeType 型の OS オブジェクトがカウンタであることを示す定数

OBJECT_SCHEDULETABLE
定数名
概要

OBJECT_SCHEDULETABLE【OSa053】
ObjectTypeType 型の OS オブジェクトがスケジュールテーブ
ルであることを示す定数

OBJECT_SPINLOCK
定数名
概要

3.6.8

OBJECT_SPINLOCK【NOS0950】
ObjectTypeType 型の OS オブジェクトがスピンロックである
ことを示す定数

リスタート情報RESTART
定数名
概要

RESTART【OSa054】
RestartType 型のリスタートタスクを起動することを示す定数

NO_RESTART
定数名
概要

NO_RESTART【OSa055】
RestartType 型のリスタートタスクを起動しないことを示す
定数233

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.6.9

サービス ID

OSServiceId_GetActiveApplicationMode
定数名

OSServiceId_GetActiveApplicationMode≪COS3835≫

概要

GetActiveApplicationMode のサービス ID

OSServiceId_StartOS
定数名

OSServiceId_StartOS≪COS3835≫

概要

StartOS のサービス ID

OSServiceId_ShutdownOS
定数名

OSServiceId_ShutdownOS≪COS3835≫

概要

ShutdownOS のサービス ID

OSServiceId_ActivateTask
定数名

OSServiceId_ActivateTask≪COS3835≫

概要

ActivateTask のサービス ID

OSServiceId_TerminateTask
定数名

OSServiceId_TerminateTask≪COS3835≫

概要

TerminateTask のサービス ID

OSServiceId_ChainTask
定数名

OSServiceId_ChainTask≪COS3835≫

概要

ChainTask のサービス ID

OSServiceId_Schedule
定数名

OSServiceId_Schedule≪COS3835≫

概要

Schedule のサービス ID

OSServiceId_GetTaskID
定数名

OSServiceId_GetTaskID≪COS3835≫

概要

GetTaskID のサービス ID

234

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OSServiceId_GetTaskState
定数名

OSServiceId_GetTaskState≪COS3835≫

概要

GetTaskState のサービス ID

OSServiceId_EnableAllInterrupts
定数名

OSServiceId_EnableAllInterrupts≪COS3835≫

概要

EnableAllInterrupts のサービス ID

OSServiceId_DisableAllInterrupts
定数名

OSServiceId_DisableAllInterrupts≪COS3835≫

概要

DisableAllInterrupts のサービス ID

OSServiceId_ResumeAllInterrupts
定数名

OSServiceId_ResumeAllInterrupts≪COS3835≫

概要

ResumeAllInterrupts のサービス ID

OSServiceId_SuspendAllInterrupts
定数名

OSServiceId_SuspendAllInterrupts≪COS3835≫

概要

SuspendAllInterrupts のサービス ID

OSServiceId_ResumeOSInterrupts
定数名

OSServiceId_ResumeOSInterrupts≪COS3835≫

概要

ResumeOSInterrupts のサービス ID

OSServiceId_SuspendOSInterrupts
定数名

OSServiceId_SuspendOSInterrupts≪COS3835≫

概要

SuspendOSInterrupts のサービス ID

OSServiceId_GetISRID
定数名

OSServiceId_GetISRID≪COS3835≫

概要

GetISRID のサービス ID

OSServiceId_EnableInterruptSource
定数名

OSServiceId_EnableInterruptSource≪COS3835≫

概要

EnableInterruptSource のサービス ID

235

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OSServiceId_DisableInterruptSource
定数名

OSServiceId_DisableInterruptSource≪COS3835≫

概要

DisableInterruptSource のサービス ID

OSServiceId_SetEvent
定数名

OSServiceId_SetEvent≪COS3835≫

概要

SetEvent のサービス ID

OSServiceId_ClearEvent
定数名

OSServiceId_ClearEvent≪COS3835≫

概要

ClearEvent のサービス ID

OSServiceId_GetEvent
定数名

OSServiceId_GetEvent≪COS3835≫

概要

GetEvent のサービス ID

OSServiceId_WaitEvent
定数名

OSServiceId_WaitEvent≪COS3835≫

概要

WaitEvent のサービス ID

OSServiceId_GetResource
定数名

OSServiceId_GetResource≪COS3835≫

概要

GetResource のサービス ID

OSServiceId_ReleaseResource
定数名

OSServiceId_ReleaseResource≪COS3835≫

概要

ReleaseResource のサービス ID

OSServiceId_IncrementCounter
定数名

OSServiceId_IncrementCounter≪COS3835≫

概要

IncrementCounter のサービス ID

OSServiceId_GetCounterValue
定数名

OSServiceId_GetCounterValue≪COS3835≫

概要

GetCounterValue のサービス ID

236

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OSServiceId_GetElapsedValue
定数名

OSServiceId_GetElapsedValue≪COS3835≫

概要

GetElapsedValue のサービス ID

OSServiceId_GetAlarmBase
定数名

OSServiceId_GetAlarmBase≪COS3835≫

概要

GetAlarmBase のサービス ID

OSServiceId_GetAlarm
定数名

OSServiceId_GetAlarm≪COS3835≫

概要

GetAlarm のサービス ID

OSServiceId_SetRelAlarm
定数名

OSServiceId_SetRelAlarm≪COS3835≫

概要

SetRelAlarm のサービス ID

OSServiceId_SetAbsAlarm
定数名

OSServiceId_SetAbsAlarm≪COS3835≫

概要

SetAbsAlarm のサービス ID

OSServiceId_CancelAlarm
定数名

OSServiceId_CancelAlarm≪COS3835≫

概要

CancelAlarm のサービス ID

OSServiceId_StartScheduleTableRel
定数名

OSServiceId_StartScheduleTableRel≪COS3835≫

概要

StartScheduleTableRel のサービス ID

OSServiceId_StartScheduleTableAbs
定数名

OSServiceId_StartScheduleTableAbs≪COS3835≫

概要

StartScheduleTableAbs のサービス ID

OSServiceId_StopScheduleTable
定数名

OSServiceId_StopScheduleTable≪COS3835≫

概要

StopScheduleTable のサービス ID

237

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OSServiceId_NextScheduleTable
定数名

OSServiceId_NextScheduleTable≪COS3835≫

概要

NextScheduleTable のサービス ID

OSServiceId_StartScheduleTableSynchron
定数名

OSServiceId_StartScheduleTableSynchron≪COS3835≫

概要

StartScheduleTableSynchron のサービス ID

OSServiceId_SyncScheduleTable
定数名

OSServiceId_SyncScheduleTable≪COS3835≫

概要

SyncScheduleTable のサービス ID

OSServiceId_SetScheduleTableAsync
定数名

OSServiceId_SetScheduleTableAsync≪COS3835≫

概要

SetScheduleTableAsync のサービス ID

OSServiceId_GetScheduleTableStatus
定数名

OSServiceId_GetScheduleTableStatus≪COS3835≫

概要

GetScheduleTableStatus のサービス ID

OSServiceId_GetApplicationID
定数名

OSServiceId_GetApplicationID≪COS3835≫

概要

GetApplicationID のサービス ID

OSServiceId_CallTrustedFunction
定数名

OSServiceId_CallTrustedFunction≪COS3835≫

概要

CallTrustedFunction のサービス ID

OSServiceId_CheckISRMemoryAccess
定数名

OSServiceId_CheckISRMemoryAccess≪COS3835≫

概要

CheckISRMemoryAccess のサービス ID

OSServiceId_CheckTaskMemoryAccess
定数名

OSServiceId_CheckTaskMemoryAccess≪COS3835≫

概要

CheckTaskMemoryAccess のサービス ID

238

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OSServiceId_CheckTaskAccess
定数名

OSServiceId_CheckTaskAccess≪COS3835≫

概要

CheckTaskAccess のサービス ID

OSServiceId_CheckISRAccess
定数名

OSServiceId_CheckISRAccess≪COS3835≫

概要

CheckISRAccess のサービス ID

OSServiceId_CheckAlarmAccess
定数名

OSServiceId_CheckAlarmAccess≪COS3835≫

概要

CheckAlarmAccess のサービス ID

OSServiceId_CheckResourceAccess
定数名

OSServiceId_CheckResourceAccess≪COS3835≫

概要

CheckResourceAccess のサービス ID

OSServiceId_CheckCounterAccess
定数名

OSServiceId_CheckCounterAccess≪COS3835≫

概要

CheckCounterAccess のサービス ID

OSServiceId_CheckScheduleTableAccess
定数名

OSServiceId_CheckScheduleTableAccess≪COS3835≫

概要

CheckScheduleTableAccess のサービス ID

OSServiceId_CheckSpinlockAccess
定数名

OSServiceId_CheckSpinlockAccess≪COS3835≫

概要

CheckSpinlockAccess のサービス ID

OSServiceId_CheckTaskOwnership
定数名

OSServiceId_CheckTaskOwnership≪COS3835≫

概要

CheckTaskOwnership のサービス ID

OSServiceId_CheckISROwnership
定数名

OSServiceId_CheckISROwnership≪COS3835≫

概要

CheckISROwnership のサービス ID

239

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OSServiceId_CheckAlarmOwnership
定数名

OSServiceId_CheckAlarmOwnership≪COS3835≫

概要

CheckAlarmOwnership のサービス ID

OSServiceId_CheckCounterOwnership
定数名

OSServiceId_CheckCounterOwnership≪COS3835≫

概要

CheckCounterOwnership のサービス ID

OSServiceId_CheckScheduleTableOwnership
定数名

OSServiceId_CheckScheduleTableOwnership≪COS3835≫

概要

CheckScheduleTableOwnership のサービス ID

OSServiceId_TerminateApplication
定数名

OSServiceId_TerminateApplication≪COS3835≫

概要

TerminateApplication のサービス ID

OSServiceId_AllowAccess
定数名

OSServiceId_AllowAccess≪COS3835≫

概要

AllowAccess のサービス ID

OSServiceId_GetApplicationState
定数名

OSServiceId_GetApplicationState≪COS3835≫

概要

GetApplicationState のサービス ID

IOCServiceId_IOC_Send
定数名

IOCServiceId_IOC_Send≪OS718≫

概要

IocSend のサービス ID

IOCServiceId_IOC_Write
定数名

IOCServiceId_IOC_Write≪OS718≫

概要

IocWrite のサービス ID

IOCServiceId_IOC_SendGroup
定数名

IOCServiceId_IOC_SendGroup≪OS728≫

概要

IocSendGroup のサービス ID

240文書番号：ATK2-0010
文書名：ATK2 外部仕様書
IOCServiceId_IOC_WriteGroup
定数名

IOCServiceId_IOC_WriteGroup≪OS728≫

概要

IocWriteGroup のサービス ID

IOCServiceId_IOC_Receive
定数名

IOCServiceId_IOC_Receive≪OS738≫

概要

IocReceive のサービス ID

IOCServiceId_IOC_Read
定数名

IOCServiceId_IOC_Read≪OS738≫

概要

IocRead のサービス ID

IOCServiceId_IOC_ReceiveGroup
定数名

IOCServiceId_IOC_ReceiveGroup≪OS746≫

概要

IocReceiveGroup のサービス ID

IOCServiceId_IOC_ReadGroup
定数名

IOCServiceId_IOC_ReadGroup≪OS746≫

概要

IocReadGroup のサービス ID

IOCServiceId_IOC_EmptyQueue
定数名

IOCServiceId_IOC_EmptyQueue≪OS754≫

概要

IocEmptyQueue のサービス ID

OSServiceId_StartCore
定数名

OSServiceId_StartCore≪COS3835≫

概要

StartCore のサービス ID

OSServiceId_StartNonAutosarCore
定数名

OSServiceId_StartNonAutosarCore≪COS3835≫

概要

StartNonAutosarCore のサービス ID

OSServiceId_GetSpinlock
定数名

OSServiceId_GetSpinlock≪COS3835≫

概要

GetSpinlock のサービス ID

241文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OSServiceId_ReleaseSpinlock
定数名

OSServiceId_ReleaseSpinlock≪COS3835≫

概要

ReleaseSpinlock のサービス ID

OSServiceId_TryToGetSpinlock
定数名

OSServiceId_TryToGetSpinlock≪COS3835≫

概要

TryToGetSpinlock のサービス ID

OSServiceId_ShutdownAllCores
定数名

OSServiceId_ShutdownAllCores≪COS3835≫

概要

ShutdownAllCores のサービス ID

OSServiceId_RaiseInterCoreInterrupt
定数名

OSServiceId_RaiseInterCoreInterrupt≪COS3835≫

概要

RaiseInterCoreInterrupt のサービス ID

OSServiceId_GetMutex
定数名

OSServiceId_GetMutex≪COS3835≫

概要

GetMutex のサービス ID

OSServiceId_ReleaseMutex
定数名

OSServiceId_ReleaseMutex≪COS3835≫

概要

ReleaseMutex のサービス ID

OSServiceId_TaskMissingEnd
定数名

OSServiceId_TaskMissingEnd【NOS0155】

概要

タスクの不正終了時のサービス ID

OSServiceId_ISRMissingEnd
定数名

OSServiceId_ISRMissingEnd【NOS0158】

概要

C2ISR，ICISR の不正終了時のサービス ID

OSServiceId_HookMissingEnd
定数名

OSServiceId_HookMissingEnd【NOS0647】

概要

フックルーチンの不正終了時のサービス ID

242

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OSServiceId_GetCurrentApplicationID
定数名

OSServiceId_GetCurrentApplicationID≪COS3835≫

概要

GetCurrentApplicationID のサービス ID

3.6.10 プロテクションフックの返り値
PRO_IGNORE
定数名
概要

PRO_IGNORE【OSa056】
ProtectionReturnType 型の保護違反時処理を行わないことを示す定数

PRO_TERMINATETASKISR
定数名
概要

PRO_TERMINATETASKISR【OSa057】
ProtectionReturnType 型の保護違反時処理としてタスク，
C2ISR を強制終了することを示す定数

PRO_TERMINATEAPPL
定数名
概要

PRO_TERMINATEAPPL【OSa058】
ProtectionReturnType 型の保護違反時処理として OSAP を強制終了することを示す定数

PRO_TERMINATEAPPL_RESTART
定数名
概要

PRO_TERMINATEAPPL_RESTART【OSa059】
ProtectionReturnType 型の保護違反時処理として OSAP を強制終了し，リスタートタスクを起動することを示す定数

PRO_SHUTDOWN
定数名
概要

PRO_SHUTDOWN【OSa060】
ProtectionReturnType 型の保護違反時処理として OS をシャットダウンすることを示す定数243

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.6.11 処理単位情報
FC_TASK
定数名

FC_TASK【NOS1279】

概要

タスクが保護違反を起こしたことを示す定数

定数名

FC_C2ISR【NOS1280】

概要

C2ISR が保護違反を起こしたことを示す定数

FC_C2ISRFC_SYSTEM_HOOK
定数名
概要

FC_SYSTEM_HOOK【NOS1281】
システム定義のフックルーチンが保護違反を起こしたことを示す定数

FC_TRUSTED_FUNC
定数名

FC_TRUSTED_FUNC【NOS1283】

概要

信頼関数が保護違反を起こしたことを示す定数

定数名

FC_INVALID【NOS1284】

概要

保護違反を起こした処理単位を特定できないことを示す定数

FC_INVALID

3.6.12 無効値
INVALID_APPMODETYPE
定数名
概要

INVALID_APPMODETYPE【NOS0344】
GetActiveApplicationMode がエラーを検出したときに返る定数244文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.7

宣言記述

AUTOSAR 仕様では，移植性のために，ジェネレータが生成する OS オブジェクトの実現方法に関係なく，ユーザは OS オブジェクトにアクセスできると説明されている≪OSa004≫．しかし，OSEK 仕様に準拠して開発されたアプリケーションとの互換性のため，以下に示す OS オブジェクトへの参照の宣言があってもエラーとしない【NOS0451】．
3.7.1

DeclareTask
宣言記述名
概要

3.7.2

TaskIdentifier で指定されたタスクオブジェクトの外部参照宣言コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC1，SC2，SC3，SC4

DeclareEvent
宣言記述名
概要

3.7.3

DeclareTask(TaskIdentifier)【COS3205】

DeclareEvent(EventIdentifier)【COS3503】
EventIdentifier で指定されたイベントオブジェクトの外部参照
宣言

コンフォーマンスクラス

ECC1，ECC2

スケーラビリティクラス

SC1，SC2，SC3，SC4

DeclareResource
宣言記述名
概要

DeclareResource(ResourceIdentifier)【COS3402】
ResourceIdentifier で指定されたリソースオブジェクトの外部参照宣言

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC1，SC2，SC3，SC4245

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.7.4

DeclareAlarm
宣言記述名
概要

DeclareAlarm(AlarmIdentifier)【COS3610】
AlarmIdentifier で指定されたアラームオブジェクトの外部参照宣言

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC1，SC2，SC3，SC4

246

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.8

オブジェクトコンテナ

OS で設定するパラメータのコンフィギュレーションクラスは，以下のパラメータのみプレコンパイ
ルタイムとし，他のパラメータはすべてリンクタイムとする【NOS1285】〔COS1201〕〔COS1225〕．
したがって，各パラメータに対するコンフィギュレーションクラスの説明は省略する．
・ /AUTOSAR/EcucDefs/Os/OsOS/OsScalabilityClass・ /AUTOSAR/EcucDefs/Os/OsOS/OsViolationHandlingLevel
・ /AUTOSAR/EcucDefs/Os/OsOS/OsTimingProtectionLevel
・ /AUTOSAR/EcucDefs/Os/OsOS/OsMemoryProtectionLevel
・ /AUTOSAR/EcucDefs/Os/OsOS/OsStackMonitoring
・ /AUTOSAR/EcucDefs/Os/OsOS/OsStatus
・ /AUTOSAR/EcucDefs/Os/OsOS/OsUseGetServiceId
・ /AUTOSAR/EcucDefs/Os/OsOS/OsUseParameterAccess・ /AUTOSAR/EcucDefs/Os/OsOS/OsHooks/OsErrorHook
・ /AUTOSAR/EcucDefs/Os/OsOS/OsHooks/OsPostTaskHook
・ /AUTOSAR/EcucDefs/Os/OsOS/OsHooks/OsPreTaskHook
・ /AUTOSAR/EcucDefs/Os/OsOS/OsHooks/OsProtectionHook
・ /AUTOSAR/EcucDefs/Os/OsOS/OsHooks/OsShutdownHook
・ /AUTOSAR/EcucDefs/Os/OsOS/OsHooks/OsStartupHook・ /AUTOSAR/EcucDefs/Os/OsApplication/OsApplicationHooks/OsAppErrorHook (※1)
・ /AUTOSAR/EcucDefs/Os/OsApplication/OsApplicationHooks/OsAppShutdownHook (※1)
・ /AUTOSAR/EcucDefs/Os/OsApplication/OsApplicationHooks/OsAppStartupHook (※1)
※1：すべての OSAP において false となるか，1 つでも true である OSAP が存在するかの切り替わり
で，プレコンパイルタイムとなる．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，OS で設定するパラメータのコンフィギュレーションクラスは，すべてプレコ
ンパイルタイムであると規定している【OS558】〔COS1225〕〔COS1201〕．本仕様において，一部のパラメータのみプレコンパイルタイムとして，他のパラメータはすべてリンクタイムとした≪NOS1285≫．

247

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.8.1

Os
コンテナ名

/AUTOSAR/EcucDefs/Os【NOS0892】

概要

OS トップコンテナ

多重度

0 .. 1

パラメータ

－
OsOS
OsAppMode
OsTask
OsIsr
OsEvent
OsResource
OsCounter
OsAlarm
OsScheduleTable
OsApplication

サブコンテナ

OsMemoryRegion
OsMemorySection
OsMemoryModule
OsMemoryArea
OsLinkSection
OsStandardMemoryRegion
OsIoc
OsSpinlock
OsInterCoreInterrupt
OsInclude
OsMutex

制限事項

本コンテナが存在しない場合，ジェネレータはエラーを検出する【NOS0893】．

248

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.8.2

OsOS
コンテナ名

/AUTOSAR/EcucDefs/Os/OsOS【OS_Conf044】

概要

OS 設定コンテナ

多重度

1
OsScalabilityClass
OsStackMonitoring
OsStatus

パラメータ

OsUseGetServiceId
OsUseParameterAccess
OsNumberOfCores
OsMasterCoreId
OsHooks
OsHookStack

サブコンテナOsNonTrustedHookStack
OsOsStack
OsTimingProtection
OsSystemCycle

OsScalabilityClass
パラメータ名/AUTOSAR/EcucDefs/Os/OsOS/
OsScalabilityClass【OS_Conf259】

概要

スケーラビリティクラス．

型

列挙型

値の範囲

適用する SC1，SC2，SC3，SC4

多重度

0 .. 1

制限事項

ATK2 では，スケーラビリティクラス毎にソースコードを分けているため，OsScalabilityClass を省略した場合，使用したソースコー
ドのスケーラビリティクラスとなる【NOS1286】．

249

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsStackMonitoring
パラメータ名/AUTOSAR/EcucDefs/Os/OsOS/
OsStackMonitoring【OS_Conf307】

概要

スタックモニタリングの使用有無

型

ブール型

値の範囲

true：スタックモニタリング有効
false：スタックモニタリング無効

多重度

1

制限事項

－

OsStatus
パラメータ名/AUTOSAR/EcucDefs/Os/OsOS/OsStatus【OS_Conf046】〔COS1123〕

概要

エラーコード種別の指定

型

列挙型

値の範囲
多重度
制限事項

STANDARD：標準エラーのみ検出
EXTENDED：標準エラーと拡張エラーを検出
1
SC3，SC4 で本パラメータが EXTENDED でない場合，ジェネレ
ータはエラーを検出する【OS328】．

OsUseGetServiceId
パラメータ名/AUTOSAR/EcucDefs/Os/OsOS/
OsUseGetServiceId【OS_Conf047】〔COS1169〕

概要

OSErrorGetServiceId()の使用有無

型

ブール型

値の範囲

true：OSErrorGetServiceId 有効
false：OSErrorGetServiceId 無効

多重度

1

制限事項

－

250

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsUseParameterAccess
パラメータ名/AUTOSAR/EcucDefs/Os/OsOS/
OsUseParameterAccess【OS_Conf048】〔COS1169〕

概要

エラーが発生したシステムサービスの引数取得の使用有無

型

ブール型

値の範囲

true：エラーが発生したシステムサービスの引数取得有効
false：エラーが発生したシステムサービスの引数取得無効

多重度

1

制限事項

－

OsNumberOfCores
パラメータ名/AUTOSAR/EcucDefs/Os/OsOS/
OsNumberOfCores【MCOS_Conf1019】

概要

本 OS を起動するコア数の最大値

型

整数型

値の範囲

1 .. 65535

多重度

0 .. 1

制限事項

マルチコア対応 OS のみで使用可能．
本パラメータに，ハードウェア上に存在するコアの数より大きい値を指定した場合，ジェネレータはエラーを検出する【NOS0951】．
本パラメータを省略した場合，1 とする≪OS583≫．

OsMasterCoreId
パラメータ名/AUTOSAR/EcucDefs/Os/OsOS/OsMasterCoreId【NOS1151】

概要

マスタコアのコア ID

型

整数型

値の範囲

0 .. 65534

多重度

0 .. 1

制限事項

マルチコア対応 OS のみで使用可能．
本パラメータに，ターゲット定義のマスタコア ID と異なる ID を指定した場合，ジェネレータはエラーを検出する【NOS1152】．

AUTOSAR 仕様との違い
AUTOSAR 仕様では，OsUseResScheduler というコンテナで，スケジューラリソースを有効とする
か無効とするかを指定している【OS_Conf049】．しかし，AUTOSAR 仕様では，スケジューラリソー
スをサポートしないため，OsUseResScheduler は使用されない．そのため，OsUseResScheduler コン

251

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
テナは削除する．
一部の BSW は，マスタコアでしか使用できないため，RTE が OS のコンフィギュレーションファイ
ルを読み込んだ際に，どの OSAP がマスタコアに割付いているかを判断できる必要がある．よって，本仕様では，OsMasterCoreId を新設した≪NOS1151≫．
3.8.3

OsHooks
コンテナ名/AUTOSAR/EcucDefs/Os/OsOS/OsHooks【OS_Conf035】〔COS1109〕

概要

フック設定コンテナ

多重度

1
OsErrorHook
OsPostTaskHook

パラメータ

OsPreTaskHook
OsProtectionHook
OsShutdownHook
OsStartupHook

サブコンテナ－

OsErrorHook
パラメータ名/AUTOSAR/EcucDefs/Os/OsOS/OsHooks/
OsErrorHook【OS_Conf036】〔COS1109〕〔OS439〕概要

エラーフックの呼出し有無

型

ブール型

値の範囲

true：システム定義のエラーフック有効
false：システム定義のエラーフック無効

多重度

1

制限事項

－

252

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsPostTaskHook
パラメータ名/AUTOSAR/EcucDefs/Os/OsOS/OsHooks/
OsPostTaskHook【OS_Conf037】〔COS1109〕

概要

ポストタスクフックの呼出し有無

型

ブール型

値の範囲

true：ポストタスクフック有効
false：ポストタスクフック無効

多重度

1

制限事項

タスク実行時間には，プレタスクフック，ポストタスクフックの実
行時間も含まれるので，SC2，SC4 において，本パラメータに trueを指定した場合，ジェネレータは警告を表示する【OS562】．
同様に，TP 機能に対応した OS において，本パラメータに true を指定した場合，ジェネレータは警告を表示する【NOS1486】．

OsPreTaskHook
パラメータ名/AUTOSAR/EcucDefs/Os/OsOS/OsHooks/
OsPreTaskHook【OS_Conf038】〔COS1109〕

概要

プレタスクフックの呼出し有無

型

ブール型

値の範囲

true：プレタスクフック有効
false：プレタスクフック無効

多重度

1

制限事項

タスク実行時間には，プレタスクフック，ポストタスクフックの実
行時間も含まれるので，SC2，SC4 において，本パラメータに trueを指定した場合，ジェネレータは警告を表示する≪OS562≫．
同様に，TP 機能に対応した OS において，本パラメータに true を指定した場合，ジェネレータは警告を表示する≪NOS1486≫．

253

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsProtectionHook
パラメータ名/AUTOSAR/EcucDefs/Os/OsOS/OsHooks/
OsProtectionHook【OS_Conf214】〔COS1109〕

概要

プロテクションフックの呼出し有無

型

ブール型

値の範囲

true：プロテクションフック有効
false：プロテクションフック無効

多重度

0 .. 1

制限事項

本仕様では，SC1 でもプロテクションフックをサポートするが，
AUTOSAR 仕様では SC1 でプロテクションフックをサポートしていないため，本パラメータの多重度は 0..1 である．SC1 において，
本パラメータを省略してもよく，本パラメータを省略した場合，プ
ロテクションフックを無効とする【NOS0692】．

OsShutdownHook
パラメータ名/AUTOSAR/EcucDefs/Os/OsOS/OsHooks/
OsShutdownHook【OS_Conf039】〔COS1109〕

概要

シャットダウンフックの呼出し有無

型

ブール型

値の範囲

true：システム定義のシャットダウンフック有効
false：システム定義のシャットダウンフック無効

多重度

1

制限事項

－

OsStartupHook
パラメータ名/AUTOSAR/EcucDefs/Os/OsOS/OsHooks/
OsStartupHook【OS_Conf040】〔COS1109〕

概要

スタートアップフックの呼出し有無

型

ブール型

値の範囲

true：システム定義のスタートアップフック有効
false：システム定義のスタートアップフック無効

多重度

1

制限事項

－

254

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.8.4

OsHookStack
コンテナ名
概要

/AUTOSAR/EcucDefs/Os/OsOS/OsHookStack【NOS0824】
SC1，SC2 の場合は，フック用スタック設定コンテナ．
SC3，SC4 の場合は，信頼フック用スタック設定コンテナ．

多重度
パラメータ
サブコンテナ

0 .. *
OsHookStackSize
OsHookStackCoreAssignment－
OsHookStackCoreAssignment が同じ値の本コンテナを複数指定した場
合，ジェネレータはエラーを検出する【NOS1052】．
ATK2 では，SC1，SC2 で，フックルーチンを使用する場合に本コンテナ

制限事項を省略した場合，ターゲット定義のサイズでフック用スタックが確保される【NOS1287】．
ATK2 では，SC3，SC4 で，信頼フック用スタックを使用する場合に本コンテナを省略した場合，ターゲット定義のサイズで信頼フック用スタックが確保される【NOS1288】．

OsHookStackSize
パラメータ名概要/AUTOSAR/EcucDefs/Os/OsOS/OsHookStack/
OsHookStackSize【NOS0825】
SC1，SC2 の場合は，フック用スタックのサイズ（単位：byte）．
SC3，SC4 の場合は，信頼フック用スタックのサイズ（単位：byte）
．

型

整数型

値の範囲

－

多重度

1

制限事項

－

255

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsHookStackCoreAssignment/AUTOSAR/EcucDefs/Os/OsOS/OsHookStack/

パラメータ名OsHookStackCoreAssignment【NOS0952】
SC1，SC2 の場合は，フック用スタックを使用するコア ID．

概要

SC3，SC4 の場合は，信頼フック用スタックを使用するコア ID．
型

3.8.5

整数型

値の範囲

0 .. 65534

多重度

0 .. 1

制限事項

マルチコア対応 OS のみで使用可能

OsOsStack
コンテナ名
概要/AUTOSAR/EcucDefs/Os/OsOS/OsOsStack【NOS1296】
SC1，SC2 の場合は，C2ISR 用スタックとフック用スタックを 1 つのス
タックで確保するための設定コンテナ．
SC3，SC4 の場合は，信頼 C2ISR 用スタックと信頼フック用スタックを
1 つのスタックで確保するための設定コンテナ．
本コンテナが省略された場合，C2ISR に対して OsIsrStackSize で指定された値の，割込み優先度毎の最大値を合計した値と，OsHookStackSize
で指定された値(省略された場合は DEFAULT_HOOKSTKSZ)の合計値
を，ターゲット定義の最小値に足した値のスタックを確保する．

多重度

0 .. *OsOsStackSize

パラメータ

OsOsStackStartAddress
OsOsStackCoreAssignment

サブコンテナ
制限事項－
OsOsStackCoreAssignment が同じ値の本コンテナを複数指定した場合，ジェネレータはエラーを検出する【NOS1054】．
非タスクコンテキスト(C2ISR とフックを除く)用スタックの最小値はターゲット定義とする【NOS1575】．

256

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsOsStackSize
パラメータ名概要/AUTOSAR/EcucDefs/Os/OsOS/OsOsStack/
OsOsStackSize【NOS1297】
SC1，SC2 の場合は，C2ISR 用スタックとフック用スタックを 1 つのスタックで確保する場合のサイズ（単位：byte）．
SC3，SC4 の場合は，信頼 C2ISR 用スタックと信頼フック用スタッ
クを 1 つのスタックで確保する場合のサイズ（単位：byte）．

型

整数型

値の範囲

－

多重度

1

制限事項

C2ISR に対して OsIsrStackSize で指定された値の，割込み優先度毎の最大値を合計した値と，OsHookStackSize で指定された値の合計
値を，ターゲット定義の最小値に足した値より，小さい値を指定した
場合，ジェネレータはエラーを検出する【NOS1298】．
非タスクコンテキスト(C2ISR とフックを除く)用スタックの最小値
はターゲット定義とする【NOS1576】．
OsOsStackStartAddress が指定されている場合，かつ本パラメータで指定された値が，ターゲット定義のアライメント制約を満たしていない場合，ジェネレータはエラーを検出する【NOS1299】．
OsOsStackStartAddress が指定されていない場合，かつ本パラメー
タで指定された値が，ターゲット定義の制約に合致しない場合には，ターゲット定義の制約に合致するように大きい方に丸めたサイズでスタック領域が確保される【NOS1530】．

257

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsOsStackStartAddress
パラメータ名/AUTOSAR/EcucDefs/Os/OsOS/OsOsStack/
OsOsStackStartAddress【NOS1300】
SC1，SC2 の場合は，C2ISR 用スタックとフック用スタックを 1 つのスタッ

概要

クで確保する場合の先頭番地．
SC3，SC4 の場合は，信頼 C2ISR 用スタックと信頼フック用スタックを 1
つのスタックで確保する場合の先頭番地．
本パラメータを省略した場合，ジェネレータが， OsOsStackSize で指定したサイズのスタック領域を確保する．
型

文字列型

値の範囲

－

多重度

0 .. 1

制限事項

本パラメータで指定された値が，ターゲット定義のアライメント制約を満たしていない場合，ジェネレータはエラーを検出する【NOS1301】．

OsOsStackCoreAssignment
パラメータ名/AUTOSAR/EcucDefs/Os/OsOS/ OsOsStack/
OsOsStackCoreAssignment【NOS0954】

概要

SC1，SC2 の場合は，1 つの領域で確保される C2ISR 用スタックとフック用スタックを使用するコア ID．
SC3，SC4 の場合は，1 つの領域で確保される信頼 C2ISR 用スタ
ックと信頼フック用スタックを使用するコア ID．

型

整数型

値の範囲

0 .. 65534

多重度

0 .. 1

制限事項

マルチコア対応 OS のみで使用可能

AUTOSAR 仕様との違い
ATK2 では，信頼フック，C2ISR が使用するスタックを 1 つの領域で確保して使用するため，このス
タックのサイズ，先頭番地を指定するパラメータをそれぞれ追加した≪NOS1297≫≪NOS1300≫．

258

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.8.6

OsTimingProtection
コンテナ名/AUTOSAR/EcucDefs/Os/OsOS/OsTimingProtection【NOS0201】

概要

タイミング保護設定コンテナ

多重度

0 .. 1

パラメータ
サブコンテナ
制限事項

OsAllInterruptLockBudget
OsOsInterruptLockBudget－
SC2，SC4 のみで使用可能
SC2，SC4 において本コンテナを省略した場合，OS 割込み禁止時間を監視しない【NOS1487】．

OsOsInterruptLockBudget
パラメータ名/AUTOSAR/EcucDefs/Os/OsOS/OsTimingProtection/
OsOsInterruptLockBudget【NOS0203】

概要

OS 割込み禁止バジェット(単位：秒)型

浮動小数点型値の範囲

0 .. 無限大

多重度

0 .. 1

制限事項

SC2，SC4 のみで使用可能
本パラメータに設定可能な最小値，最大値はターゲット定義とする≪
NOS1416≫．本パラメータに設定可能な最小値未満，もしくは，最大値を超える値を設定した場合，ジェネレータはエラーを検出する≪
NOS1415≫．

AUTOSAR 仕様との違い
AUTOSAR 仕様では，OS 割込み禁止時間バジェットを，/AUTOSAR/EcucDefs/Os/OsTask/OsTaskTimingProtection/OsTaskOsInterruptLockBudget にて，タ
スク毎に設定すると規定されている【OS_Conf086】．本仕様では，OS 割込み禁止時間バジェットの管理にかかる実装オーバヘッドを軽減するため，OS 割込み禁止時間バジェットの設定を本コンテナで行
い，タスク毎に OS 割込み禁止時間監視を有効とするかどうかを，/AUTOSAR/EcucDefs/Os/OsTask/OsTaskTimingProtection/OsTaskOsInterruptLockMonitor にて設定するように規定した≪NOS0192≫≪NOS0203≫．

259

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.8.7

OsSystemCycle
コンテナ名/AUTOSAR/EcucDefs/Os/OsOS/OsSystemCycle【NOS1488】

概要

システム周期設定コンテナ

多重度

0 .. 1

パラメータ

OsSystemCycleTime

サブコンテナOsSystemCycleTimeWindow

制限事項

TP 機能に対応した OS のみで使用可能．
TP 機能に対応した OS において，本パラメータを省略した場合，ジェネ
レータはエラーを検出する【NOS1489】．

OsSystemCycleTime
パラメータ名/AUTOSAR/EcucDefs/Os/OsOS/OsSystemCycle/
OsSystemCycleTime【NOS1490】

概要

システム周期時間(単位：秒)型

浮動小数点型値の範囲

0 .. 無限大

多重度

1

制限事項

TP 機能に対応した OS のみで使用可能．
本パラメータに設定可能な最小値，最大値はターゲット定義とする≪
NOS1416≫．本パラメータに設定可能な最小値未満，もしくは，最大値を超える値を設定した場合，ジェネレータはエラーを検出する≪
NOS1415≫．

260

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.8.8

OsSystemCycleTimeWindow
コンテナ名/AUTOSAR/EcucDefs/Os/OsOS/OsSystemCycle/
OsSystemCycleTimeWindow【NOS1491】

概要

タイムウィンドウ設定コンテナ

多重度

1 .. *

パラメータ

OsSystemCycleTimeWindowStart
OsSystemCycleTimeWindowLength

サブコンテナ
制限事項－
TP 機能に対応した OS のみで使用可能．
システム周期のうち，タイムウィンドウでない時間は，アイドルウィンド
ウとなる≪NOS1423≫．
システム周期の中で，ある 2 つのタイムウィンドウの間，もしくは，システム周期の開始時刻とタイムウィンドウの間にアイドルウィンドウが存在する場合，ジェネレータはエラーを検出する【NOS1492】〔NOS1433〕．
システム周期の中にアイドルウィンドウが存在しない場合，ジェネレータ
は警告を表示する【NOS1493】．

OsSystemCycleTimeWindowStart/AUTOSAR/EcucDefs/Os/OsOS/ OsSystemCycle/
OsSystemCycleTimeWindow/

パラメータ名OsSystemCycleTimeWindowStart【NOS1494】
概要

タイムウィンドウ開始時刻(単位：秒)型

浮動小数点型値の範囲

0 .. 無限大

多重度

1

制限事項

TP 機能に対応した OS のみで使用可能．
本パラメータに設定可能な最小値，最大値はターゲット定義とする≪
NOS1416≫．本パラメータに設定可能な最小値未満，もしくは，最大値を超える値を設定した場合，ジェネレータはエラーを検出する≪
NOS1415≫．

261

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsSystemCycleTimeWindowLength/AUTOSAR/EcucDefs/Os/OsOS/ OsSystemCycle/
OsSystemCycleTimeWindow/

パラメータ名OsSystemCycleTimeWindowLength【NOS1495】
概要

タイムウィンドウ終了時刻(単位：秒)型

浮動小数点型値の範囲

0 .. 無限大

多重度

1

制限事項

TP 機能に対応した OS のみで使用可能．
本パラメータに設定可能な最小値，最大値はターゲット定義とする≪
NOS1416≫．本パラメータに設定可能な最小値未満，もしくは，最大値を超える値を設定した場合，ジェネレータはエラーを検出する≪
NOS1415≫．

AUTOSAR 仕様との違い
システム周期とタイムウィンドウを設定するためのコンテナ，パラメータを追加した≪NOS1488≫≪NOS1490≫≪NOS1491≫≪NOS1494≫≪NOS1495≫．

262

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.8.9

OsAppMode
コンテナ名/AUTOSAR/EcucDefs/Os/OsAppMode【OS_Conf022】〔COS0504〕

概要

アプリケーションモードコンテナ

多重度

1 .. *

パラメータ－

サブコンテナ－

制限事項

ATK2 では，使用可能なアプリケーションモードの上限数は，32である≪NOS1183≫．

OSEK 仕様との違い
OSEK 仕様では，OSDEFAULTAPPMODE はデフォルトのアプリケーションモードで，StartOS に対して常に有効なパラメータであると規定している【COS3725】．
本仕様では，
OSDEFAULTAPPMODE
は，必要に応じてユーザが用意するものとして削除した．OSDEFAULTAPPMODE を使用する場合，本コンテナで定義する．
3.8.10 OsTask
コンテナ名/AUTOSAR/EcucDefs/Os/OsTask【OS_Conf073】

概要

タスクオブジェクトコンテナ

多重度

0 .. *
OsTaskActivation
OsTaskPriority
OsTaskSchedule
OsTaskAccessingApplication
OsTaskEventRef

パラメータ

OsTaskResourceRef
OsTaskStackSize
OsTaskStackStartAddress
OsTaskSystemStackSize
OsTaskSystemStackStartAddress
OsTaskMutexRef

サブコンテナ

OsTaskAutostart
OsTaskTimingProtection263

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsTaskActivation
パラメータ名/AUTOSAR/EcucDefs/Os/OsTask/OsTaskActivation【OS_Conf074】〔COS0434〕

概要

最大起動要求回数

型

整数型

値の範囲

1 .. 256【NOS1193】

多重度

1

制限事項

対象のタスクが拡張タスクである場合に，本パラメータに 1 以外を設定すると，ジェネレータはエラーを検出する【NOS0802】．

OsTaskPriority
パラメータ名/AUTOSAR/EcucDefs/Os/OsTask/OsTaskPriority【OS_Conf075】〔COS0443〕

概要

タスク優先度

型

整数型

値の範囲

0 .. 15【NOS1192】〔COS0316〕

多重度

1

制限事項

－

OsTaskSchedule
パラメータ名/AUTOSAR/EcucDefs/Os/OsTask/OsTaskSchedule【OS_Conf076】〔COS0470〕

概要

タスクのスケジューリングポリシ

型

列挙型

値の範囲

FULL：フルプリエンプティブスケジューリング
NON：ノンプリエンプティブスケジューリング

多重度

1

制限事項

本パラメータに NON を設定し，OsTaskResourceRef に内部リソースを指定した場合，ジェネレータはエラーを検出する．

264

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsTaskAccessingApplication
パラメータ名/AUTOSAR/EcucDefs/Os/OsTask/
OsTaskAccessingApplication【OS_Conf077】

概要

タスクにアクセス可能な OSAP

型

/AUTOSAR/EcucDefs/Os/OsApplication への参照

値の範囲

－

多重度

0 .. *

制限事項

SC3，SC4 のみで使用可能

OsTaskEventRef
パラメータ名/AUTOSAR/EcucDefs/Os/OsTask/
OsTaskEventRef【OS_Conf078】

概要

タスクの持つイベント

型/AUTOSAR/EcucDefs/Os/OsEvent への参照

値の範囲

－

多重度

0 .. *

制限事項

－

265

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsTaskResourceRef
パラメータ名/AUTOSAR/EcucDefs/Os/OsTask/
OsTaskResourceRef【OS_Conf079】

概要

タスクが獲得するリソース

型/AUTOSAR/EcucDefs/Os/OsResource への参照

値の範囲

－

多重度

0 .. *

制限事項

内部リソースは，1 つのみ指定することができる【COS0832】．
SC3，SC4 で，本パラメータに内部リソースを指定した場合，かつタスクが所属する OSAP が，指定した内部リソースのアクセス権を持たない場合，ジェネレータはエラーを検出する【NOS0654】．
本パラメータで指定したリソースがリンクリソースの場合，ジェネ
レータはエラーを検出する【NOS0703】．
マルチコア対応 OS において，同じリソースに異なるコアに割付く
タスク，C2ISR を関連付けした場合，ジェネレータはエラーを検出する≪OS662≫．
TP 機能に対応した OS において，本パラメータに指定したリソースが，本パラメータに対応するタスクが所属する OSAP とは異なる
OSAP に所属するタスク，もしくは ISR から参照されている場合，そのリソースは OSAP 間リソースとなる【NOS1496】〔NOS1465〕．
TP 機能に対応した OS において，本パラメータに内部リソースを指定した場合，かつその内部リソースが，本パラメータに対応する
タスクが所属する OSAP とは異なる OSAP に所属するタスクから参照されている場合，ジェネレータはエラーを検出する【NOS1497】〔NOS1469〕．
TP 機能に対応した SC3，SC4 の OS において，本コンテナに対応するタスクが非信頼 OSAP に所属し，かつ本パラメータに指定したリソースが OsTaskResourceRef もしくは OsIsrResourceRef によって異なる OSAP に所属するタスクもしくは C2ISR から参照されている場合，ジェネレータはエラーを検出する【NOS1527】〔NOS1471〕．

266

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsTaskStackSize
パラメータ名/AUTOSAR/EcucDefs/Os/OsTask/OsTaskStackSize【NOS0282】
SC1，SC2 の場合は，タスク用スタックのサイズ（単位：byte）．
SC3，SC4 の場合は以下となる．
信頼タスクの場合，本パラメータで指定したサイズ（単位：byte）

概要と，OsTaskSystemStackSize に指定されたサイズとの合計値を，
信頼タスク用スタックのサイズとして確保する．
非信頼タスクの場合，非信頼タスク用スタックのサイズ（単位：byte）となる．

型

整数型

値の範囲

－

多重度

0 .. 1
本パラメータに 0 を指定した場合，ジェネレータはエラーを検出する【NOS0444】．
ATK2 では，スタックサイズの最小値をターゲット定義とする【NOS1302】．
SC1，SC2 もしくは SC3，SC4 における非信頼タスクの場合，本パラメータに，ターゲット定義の最小値より小さい値を指定した場
合，ジェネレータはエラーを検出する【NOS0818】．
SC3，SC4 における信頼タスクの場合，本パラメータで指定したサ
イズと，OsTaskSystemStackSize に指定されたサイズとの合計値
が，ターゲット定義の最小値より小さい値を指定した場合，ジェネ
レータはエラーを検出する【NOS0820】．

制限事項

本パラメータを省略した場合，ターゲット定義のサイズで対象のスタックが確保される【NOS0896】．
ATK2 では，OsTaskStackStartAddress が指定されている場合，かつ本パラメータで指定された値が，ターゲット定義のアライメン
ト制約を満たしていない場合，ジェネレータはエラーを検出する【NOS1303】．
OsTaskStackStartAddress を指定した場合の OsTaskStackSize のアライメント制約はターゲット定義とする【NOS1577】．
OsTaskStackStartAddress が指定されていない場合，かつ本パラ
メータで指定された値が，ターゲット定義の制約に合致しない場合には，ターゲット定義の制約に合致するように大きい方に丸めたサイズでスタック領域が確保される【NOS1531】．

267

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsTaskStackStartAddress
パラメータ名/AUTOSAR/EcucDefs/Os/OsTask/
OsTaskStackStartAddress【NOS1196】
SC1，SC2 の場合は，タスク用スタックの先頭番地．
SC3，SC4 における信頼タスクの場合は，信頼タスク用スタックの概要

先頭番地．非信頼タスクの場合は，非信頼タスク用スタックの先頭
番地．
本パラメータを省略した場合，ジェネレータが， OsTaskStackSize
で指定したサイズのスタック領域を確保する．

型

文字列型

値の範囲

－

多重度

0 .. 1
本パラメータで指定された値が，アライメント制約を満たしていな

制限事項

い場合，ジェネレータはエラーを検出する【NOS1304】．
OsTaskStackStartAddress のアライメント制約はターゲット定義とする【NOS1578】．

使用上の注意ATK2 では，タスク毎にスタックの先頭番地を指定可能であり，タスクの種別やタスク優先度に 関わらず，同一番地を指定することで複数のタスクのスタックを共有できてしまうため，注意が必要である．

268

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsTaskSystemStackSize
パラメータ名/AUTOSAR/EcucDefs/Os/OsTask/
OsTaskSystemStackSize【NOS0283】
信頼タスクの場合，本パラメータで指定したサイズ（単位：byte）と，OsTaskStackSize に指定されたサイズとの合計値を，タスクのスタックサイズとして確保する．

概要

非信頼タスクの場合，非信頼タスク用システムスタックのサイズ（単位：byte）となる．非信頼タスクで，本パラメータが省略された場合，ターゲット定義の最小値を指定されたものとする≪
NOS1302≫．

型

整数型

値の範囲

－

多重度

0 .. 1
SC3，SC4 のみで使用可能．
SC3，SC4 における非信頼タスクの場合で，本パラメータに，ター
ゲット定義の最小値より小さい値もしくは 0 を指定した場合，ジェネレータはエラーを検出する【NOS0819】．
ATK2 では，信頼タスクに対して， OsTaskStackStartAddress が指定されているとき，本パラメータを省略しない，もしくは 0 以外を指定した場合，ジェネレータはエラーを検出する【NOS1305】．
ATK2 では，OsTaskSystemStackStartAddress が指定されている

制限事項

場合，かつ本パラメータで指定された値が，アライメント制約を満たしていない場合，ジェネレータはエラーを検出する【NOS1306】．
OsTaskSystemStackStartAddress を指定した場合のOsTaskSystemStackSize のアライメント制約はターゲット定義とする【NOS1579】．
OsTaskSystemStackStartAddress が指定されていない場合，かつ本パラメータで指定された値が，ターゲット定義の制約に合致しない場合には，ターゲット定義の制約に合致するように大きい方に丸めたサイズでスタック領域が確保される【NOS1532】．

269

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsTaskSystemStackStartAddress
パラメータ名/AUTOSAR/EcucDefs/Os/OsTask/
OsTaskSystemStackStartAddress【NOS1197】
非信頼タスク用システムスタックのスタック先頭番地．

概要

本パラメータを省略した場合，ジェネレータが，OsTaskSystemStackSize で指定したサイズのスタック領域を確保
する．

型

文字列型

値の範囲

－

多重度

0 .. 1
SC3，SC4 のみで使用可能．
信頼タスクに対して，本パラメータを指定した場合，ジェネレータ
はエラーを検出する【NOS1307】．
非信頼タスクに対して， OsTaskSystemStackSize を指定せずに，
本パラメータを指定した場合，ジェネレータはエラーを検出する

制限事項【NOS1308】．
本パラメータで指定された値が，アライメント制約を満たしていな
い場合，ジェネレータはエラーを検出する【NOS1309】．
OsTaskSystemStackStartAddress のアライメント制約はターゲッ
ト定義とする【NOS1580】．
本パラメータで，非信頼 OSAP からアクセス可能な領域を指定した
場合，ジェネレータはエラーを検出する【NOS1310】．

使用上の注意ATK2 では，タスク毎にスタックの先頭番地を指定可能であり，タスクの種別やタスク優先度に 関わらず，同一番地を指定することで複数のタスクのスタックを共有できてしまうため，注意が必要である．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，タスク用に確保するスタックサイズを指定するパラメータが存在しなかった．
そのため，本仕様ではスタックサイズのパラメータを追加した．また，OSAP に対応するために，非信頼 OSAP 用と信頼 OSAP 用のスタックサイズのパラメータをそれぞれ追加した≪NOS0282≫≪
NOS0283≫．
ATK2 では，タスクのスタック共有をサポートするため，タスクスタックの先頭番地を指定するパラメータを追加した．また，OSAP に対応するために，非信頼 OSAP 用と信頼 OSAP 用のタスクスタッ
クの先頭番地を指定するパラメータをそれぞれ追加した≪NOS1196≫≪NOS1197≫．
TP 機能に対応した OS では，OSAP 間リソースをサポートするため，タスクから参照するリソース

270文書番号：ATK2-0010
文書名：ATK2 外部仕様書を指定するパラメータに制限事項を追加した≪NOS1496≫≪NOS1497≫．
OsTaskMutexRef
パラメータ名/AUTOSAR/EcucDefs/Os/OsTask/OsTaskMutexRef【NOS0291】

概要

タスクが共有するミューテックス

型/AUTOSAR/EcucDefs/Os/OsMutex への参照

値の範囲

－

多重度

0 .. *

制限事項－

3.8.11 OsTaskAutostart
コンテナ名/AUTOSAR/EcucDefs/Os/OsTask/
OsTaskAutostart【OS_Conf080】〔COS1135〕

概要

タスクオブジェクトの自動起動指定コンテナ

多重度

0 .. 1

パラメータ

OsTaskAppModeRef

サブコンテナ－

制限事項

リスタートタスクに対して，本コンテナが指定された場合，ジェネ
レータは警告を表示する【NOS1136】．

OsTaskAppModeRef
パラメータ名/AUTOSAR/EcucDefs/Os/OsTask/OsTaskAutostart/
OsTaskAppModeRef【OS_Conf081】〔COS0506〕

概要

自動起動するアプリケーションモード

型/AUTOSAR/EcucDefs/Os/OsAppMode への参照

値の範囲

－

多重度

1 .. *

制限事項

－

271

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.8.12 OsTaskTimingProtection
コンテナ名/AUTOSAR/EcucDefs/Os/OsTask/
OsTaskTimingProtection【OS_Conf325】

概要

タスクオブジェクトタイミング保護設定コンテナ

多重度

0 .. 1OsTaskExecutionBudget

パラメータ

OsTaskOsInterruptLockMonitor
OsTaskTimeFrame
OsTaskResourceLockMonitor

制限事項

SC2，SC4 のみで使用可能

OsTaskExecutionBudget
パラメータ名/AUTOSAR/EcucDefs/Os/OsTask/OsTaskTimingProtection/
OsTaskExecutionBudget【OS_Conf185】

概要

タスク実行時間バジェット(単位：秒)型

浮動小数点型値の範囲

0 .. 無限大

多重度

0 .. 1

制限事項

SC2，SC4 のみで使用可能
SC2，SC4 において本パラメータを省略した場合，対象タスクの実
行時間を監視しない【NOS1498】．
本パラメータに設定可能な最小値，最大値はターゲット定義とする≪NOS1416≫．本パラメータに設定可能な最小値未満，もしくは，最大値を超える値を設定した場合，ジェネレータはエラーを検出する≪NOS1415≫．

272

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsTaskOsInterruptLockMonitor
パラメータ名/AUTOSAR/EcucDefs/Os/OsTask/OsTaskTimingProtection/
OsTaskOsInterruptLockMonitor【NOS0192】

概要

OS 割込み禁止監視設定

型

ブール型

値の範囲

true：OS 割込み禁止時間を監視する
false：OS 割込み禁止時間を監視しない

多重度

0 .. 1

制限事項

SC2，SC4 のみで使用可能
SC2，SC4 において本パラメータを省略した場合，対象タスクの OS
割込み禁止時間を監視しない【NOS1499】．

OsTaskTimeFrame
パラメータ名/AUTOSAR/EcucDefs/Os/OsTask/OsTaskTimingProtection/
OsTaskTimeFrame【OS_Conf391】

概要

タスクタイムフレーム(単位：秒)型

浮動小数点型値の範囲

0 .. 無限大

多重度

0 .. 1

制限事項

SC2，SC4 のみで使用可能
SC2，SC4 において本パラメータを省略した場合，対象タスクの到着間隔を監視しない【NOS1500】．
本パラメータに設定可能な最小値，最大値はターゲット定義とする≪
NOS1416≫．本パラメータに設定可能な最小値未満，もしくは，最大値を超える値を設定した場合，ジェネレータはエラーを検出する≪
NOS1415≫．

273

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsTaskResourceLockMonitor
パラメータ名/AUTOSAR/EcucDefs/Os/OsTask/OsTaskTimingProtection/
OsTaskResourceLockMonitor【NOS0193】

概要

リソース占有時間監視設定

型

ブール型

値の範囲

true：リソース占有時間を監視する
false：リソース占有時間を監視しない

多重度

0 .. 1

制限事項

SC2，SC4 のみで使用可能
SC2，SC4 において本パラメータを省略した場合，対象タスクのリ
ソース占有時間を監視しない【NOS1501】．

AUTOSAR 仕様との違い
AUTOSAR 仕様では，リソース占有時間バジェットを，OsTaskResourceLock【OS_Conf082】，
OsTaskResourceLockBudget【OS_Conf083】，OsTaskResourceLockResourceRef【OS_Conf084】に
よって，タスク毎に，各リソースに対する占有時間バジェットを設定すると規定されている．本仕様では，リソース占有時間バジェットの管理にかかるオーバヘッドを低減するために，タスクがリソースを獲得する際のリソース占有時間バジェットの設定はリソースオブジェクトで行い，タスクオブジェクト
では獲得するリソースの占有時間の監視を行うかの設定を行うように規定した≪NOS0193≫．
タスクが OS 割込み禁止状態にする際の OS 割込み禁止バジェットの設定も，AUTOSAR 仕様においては，OsTaskOsInterruptLockBudget【OS_Conf086】によって設定すると規定されているが，本仕様
では，OS 割込み禁止時間バジェットをシステム全体で一つ（OsOsInterruptLockBudget）≪NOS0203≫設定し，タスクオブジェクトでは OS 割込み禁止時間の監視を行うかどうかを設定するように規定した≪NOS0192≫．
また，AUTOSAR 仕様では，全割込み禁止時間バジェットを設定するためのパラメータ
OsTaskAllInterruptLockBudget が規定されている【OS_Conf085】．本仕様では，全割込み禁止時間の監視機能を提供しないこととした（詳細は，2.17.2.3 節を参照）ため，全割込み禁止時間バジェットを設定するためのパラメータを削除した．
よって，AUTOSAR 仕様において要求されている，OsTaskAllInterruptLockBudget【OS_Conf085】，
OsTaskOsInterruptLockBudget【OS_Conf086】，OsTaskResourceLock【OS_Conf082】，
OsTaskResourceLockBudget【OS_Conf083】，OsTaskResourceLockResourceRef【OS_Conf084】については，ATK2 において使用しないため，未実装である．

274

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.8.13 OsIsr
コンテナ名/AUTOSAR/EcucDefs/Os/OsIsr【OS_Conf041】

概要

ISR オブジェクトコンテナ

多重度

0 .. *
OsIsrCategory
OsIsrInterruptNumber
OsIsrInterruptPriority
OsIsrInterruptSource

パラメータ

OsIsrAccessingApplication
OsIsrResourceRef
OsIsrStackSize
OsIsrInterruptTrigger
OsIsrMaxFrequency

サブコンテナOsIsrTimingProtection

OsIsrCategory
パラメータ名/AUTOSAR/EcucDefs/Os/OsIsr/OsIsrCategory【OS_Conf042】

概要

ISR のカテゴリ

型

列挙型

値の範囲
多重度
制限事項

CATEGORY_1：C1ISRCATEGORY_2：C2ISR
1
SC2，SC4 で本パラメータが CATEGORY_1 の場合，ジェネレー
タは警告を出力する【OS045】．

275

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsIsrInterruptNumber
パラメータ名/AUTOSAR/EcucDefs/Os/OsIsr/
OsIsrInterruptNumber【NOS0663】

概要

ISR が使用する割込み番号

型

整数型

値の範囲

定義なし

多重度

1
他の ISR で指定された割込み番号を，本パラメータに指定した場
合，ジェネレータはエラーを検出する【NOS0799】．

制限事項

ATK2 では，割込み番号の有効値はターゲット定義とする【NOS1311】．
ターゲット定義の有効値以外を指定した場合，ジェネレータはエラーを検出する【NOS0664】．

OsIsrInterruptPriority
パラメータ名/AUTOSAR/EcucDefs/Os/OsIsr/
OsIsrInterruptPriority【NOS0665】〔COS0303〕

概要

ISR の割込み優先度

型

整数型

値の範囲

定義なし

多重度

1
C2ISR に指定した割込み優先度以下の割込み優先度を，C1ISR に指定した場合，ジェネレータはエラーを検出する【NOS0666】〔NOS0369〕．

制限事項

ATK2 では，割込み優先度の有効値はターゲット定義とする【NOS1312】〔COS0607〕．
ターゲット定義の有効値以外を指定した場合，ジェネレータはエラーを検出する【NOS0856】．

276

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsIsrInterruptSource
パラメータ名/AUTOSAR/EcucDefs/Os/OsIsr/
OsIsrInterruptSource【NOS0667】

概要

ISR の割込み要因の初期状態

型

列挙型

値の範囲
多重度

ENABLE：有効
DISABLE：無効
1
OsIsrCategory に CATEGORY_1 を指定した場合に，本パラメータに DISABLE を指定した場合，ジェネレータはエラーを検出する【NOS0668】．

制限事項

本パラメータを省略した場合，ジェネレータはエラーを検出する【NOS0891】．
本パラメータに DISABLE を指定し，対応する C2ISR の割込み要因が有効化できない場合，ジェネレータはエラーを出力する【NOS1541】．

OsIsrAccessingApplication
パラメータ名/AUTOSAR/EcucDefs/Os/OsIsr/
OsIsrAccessingApplication【NOS0694】

概要

ISR にアクセス可能な OSAP

型

/AUTOSAR/EcucDefs/Os/OsApplication への参照

値の範囲

－

多重度

0 .. *

制限事項

SC3，SC4 のみで使用可能．
OsIsrCategory に CATEGORY_1 を指定した場合に，本パラメータを指定した場合，ジェネレータはエラーを検出する【NOS0708】．

277

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsIsrResourceRef
パラメータ名/AUTOSAR/EcucDefs/Os/OsIsr/OsIsrResourceRef【OS_Conf043】

概要

ISR が獲得するリソース

型/AUTOSAR/EcucDefs/Os/OsResource への参照

値の範囲

－

多重度

0 .. *

制限事項

本パラメータに，内部リソースを指定した場合，ジェネレータはエラーを検出する【COS0831】〔NOS0718〕．
OsIsrCategory に CATEGORY_1 を指定した場合に，本パラメータを指定した場合，ジェネレータはエラーを検出する【NOS0687】．
本パラメータで指定したリソースがリンクリソースの場合，ジェネ
レータはエラーを検出する【NOS0704】．
マルチコア対応 OS において，同じリソースに異なるコアに割付く
タスク，C2ISR を関連付けした場合，ジェネレータはエラーを検出する≪OS662≫．

OsIsrStackSize
パラメータ名/AUTOSAR/EcucDefs/Os/OsIsr/OsIsrStackSize【NOS0284】
SC1，SC2 の場合は，C2ISR 用スタックのサイズ（単位：byte）．
SC3，SC4 の場合は以下となる．

概要

信頼 C2ISR の場合，本パラメータで指定したサイズ（単位：byte）と，OsIsrSystemStackSize に指定されたサイズとの合計値を，信頼 C2ISR スタックのサイズとして確保する．
非信頼 C2ISR の場合，
非信頼 C2ISR 用スタックのサイズ（単位：byte）となる．

型

整数型

値の範囲

－

多重度

0 .. 1
本パラメータに 0 を指定した場合，ジェネレータはエラーを検出する【NOS0442】．
対象の ISR が，C1ISR である場合に，本パラメータを指定すると，

制限事項

ジェネレータはエラーを検出する【NOS0743】．
対象の ISR が，C2ISR である場合に，本パラメータを省略した場
合，ターゲット定義のサイズで対象のスタックが確保される【NOS0745】．

278

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsIsrInterruptTrigger
パラメータ名/AUTOSAR/EcucDefs/Os/OsIsr/
OsIsrInterruptTrigger【NOS0777】

概要

割込み要因のトリガ設定．
本パラメータの使用可否はターゲット定義である【NOS1313】
．

型

－

値の範囲

－

多重度

0 .. 1

制限事項－

OsIsrMaxFrequency
パラメータ名/AUTOSAR/EcucDefs/Os/OsIsr/
OsIsrMaxFrequency【NOS1502】

概要

システム周期内での割込みの最大発生回数．

型

整数型

値の範囲

－

多重度

0 .. 1

制限事項

TP 機能に対応した OS のみで使用可能．
本パラメータに 0 を指定した場合，ジェネレータはエラーを検出する【NOS1503】．
OsIsrCategory に CATEGORY_1 を指定した場合に，本パラメータを指定すると，ジェネレータはエラーを検出する【NOS1504】．
OsIsrCategory に CATEGORY_2 を指定し，本パラメータを省略した場合，OS は該当 C2ISR の割込み発生回数を監視しない【NOS1505】．

AUTOSAR 仕様との違い
AUTOSAR 仕様では，
C2ISR 用に確保するスタックサイズを指定するパラメータが存在しなかった．
そのため，本仕様ではスタックサイズのパラメータを追加した≪NOS0284≫．
また，ターゲットシステムによっては，割込み要因に対する属性を指定できる場合があるので，予約するパラメータを規定した≪NOS0777≫．
TP 機能に対応した OS において，システム周期内での C2ISR ごとの割込み発生回数を監視するために，割込みの最大発生回数を指定するパラメータを追加した≪NOS1502≫．

279

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.8.14 OsIsrTimingProtection
コンテナ名/AUTOSAR/EcucDefs/Os/OsIsr/OsIsrTimingProtection【OS_Conf326】

概要

ISR オブジェクトタイミング保護設定コンテナ

多重度

0 .. 1

パラメータ

OsIsrTimeFrame

制限事項

SC2，SC4 のみで使用可能
OsIsrCategory に CATEGORY_1 を指定した場合に，本コンテナを指定した場合，ジェネレータはエラーを検出する【NOS1506】．

OsIsrTimeFrame
パラメータ名/AUTOSAR/EcucDefs/Os/OsIsr/OsIsrTimingProtection/
OsIsrTimeFrame【OS_Conf223】

概要

ISR タイムフレーム(単位：秒)型

浮動小数点型値の範囲

0 .. 無限大

多重度

0 .. 1

制限事項

SC2，SC4 において本パラメータを省略した場合，対象 ISR の到着間隔を監視しない【NOS1507】．
本パラメータに設定可能な最小値，最大値はターゲット定義とする≪
NOS1416≫．本パラメータに設定可能な最小値未満，もしくは，最大値を超える値を設定した場合，ジェネレータはエラーを検出する≪
NOS1415≫．

AUTOSAR 仕様との違い
AUTOSAR 仕様では，全割込み禁止時間バジェットを設定するためのパラメータ
OsIsrAllInterruptLockBudget【OS_Conf229】，実行時間バジェットを設定するためのパラメータ
OsIsrExecutionBudget【OS_Conf222】，OS 割込み禁止時間バジェットを設定するためのパラメータ
OsIsrOsInterruptLockBudget【OS_Conf387】が規定されている．本仕様では，ISR の全割込み禁止
時間，実行時間，OS 割込み禁止時間の監視機能を提供しないこととした（詳細は，2.17.2 節を参照）ため，上記のバジェットを設定するためのパラメータを削除した．
よって，AUTOSAR 仕様において要求されている，OsIsrAllInterruptLockBudget≪OS_Conf229≫，
OsIsrExecutionBudget≪OS_Conf222≫，OsIsrOsInterruptLockBudget≪OS_Conf387≫については，
未実装である．
また，AUTOSAR 仕様では，リソース占有時間バジェットを設定するためのサブコンテナ，および，パラメータ OsIsrResourceLock【OS_Conf388】，OsIsrResourceLockBudget【OS_Conf389】，
OsIsrResourceLockResourceRef【OS_Conf390】が規定されている．本仕様では，ISR のリソース占280

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
有時間の監視機能を提供しないこととした（詳細は，2.17.2 節を参照）ため，上記のバジェットを設定するためのパラメータを削除した．
よって，AUTOSAR 仕様において要求されている，OsIsrResourceLock≪OS_Conf388≫，
OsIsrResourceLockBudget≪OS_Conf389≫，OsIsrResourceLockResourceRef≪
OS_Conf390≫については，未実装である．
3.8.15 OsEvent
コンテナ名/AUTOSAR/EcucDefs/Os/OsEvent【OS_Conf033】

概要

イベントオブジェクトコンテナ

多重度

0 .. *

パラメータ

OsEventMask

サブコンテナ－OsEventMask
パラメータ名/AUTOSAR/EcucDefs/Os/OsEvent/OsEventMask【OS_Conf034】

概要

イベントマスク値

型

整数型

値の範囲

1 .. 0xffffffff【NOS1191】

多重度

0 .. 1

制限事項

本パラメータを省略した場合，イベントマスク値は自動的に設定される．
本パラメータに 0 を指定した場合，ジェネレータはエラーを検出する【NOS0800】．
本パラメータを省略した場合に，設定可能なビットマスクが存在しない場合，ジェネレータはエラーを検出する【NOS0801】．

281

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.8.16 OsResource
コンテナ名/AUTOSAR/EcucDefs/Os/OsResource【OS_Conf252】

概要

リソースオブジェクトコンテナ

多重度

0 .. *
OsResourceProperty

パラメータ

OsResourceAccessingApplication
OsResourceLinkedResourceRef

サブコンテナ
制限事項

OsResourceTimingProtection
ATK2 では，いずれの OsTaskResourceRef，OsIsrResourceRef にも指定されていないリソースが存在する場合，ジェネレータは警告を出力し，該当リソースの生成は行わない【NOS1314】．

OsResourceProperty
パラメータ名/AUTOSAR/EcucDefs/Os/OsResource/
OsResourceProperty【OS_Conf050】

概要

リソース種別型

列挙型
STANDARD：標準リソース

値の範囲

INTERNAL：内部リソース
LINKED：リンクリソース

多重度

1
本パラメータに LINKED を指定した場合に，制限事項

OsResourceLinkedResourceRef 以外のパラメータ，サブコンテナを指定すると，ジェネレータはエラーを検出する【NOS0705】．

282

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsResourceAccessingApplication
パラメータ名/AUTOSAR/EcucDefs/Os/OsResource/
OsResourceAccessingApplication【OS_Conf051】

概要

リソースにアクセス可能な OSAP

型

/AUTOSAR/EcucDefs/Os/OsApplication への参照

値の範囲

－

多重度

0 .. *

制限事項

SC3，SC4 のみで使用可能
TP 機能に対応した SC3，SC4 の OS において，本パラメータで指定した OSAP が複数であり，かつそれらに非信頼 OSAP が含まれる場合，ジェネレータはエラーを検出する【NOS1567】〔NOS1471〕．
TP 機能に対応した OS において、本パラメータに指定された OSAPの集合と，OsTaskResourceRef もしくは OsIsrResourceRef によって本リソースを参照しているタスクもしくは C2ISR が所属する
OSAP の集合が等しくない場合、ジェネレータはエラーを検出する【NOS1528】〔NOS1417〕

OsResourceLinkedResourceRef/AUTOSAR/EcucDefs/Os/OsResource/
OsResourceLinkedResourceRef【OS_Conf052】

パラメータ名〔COS0839〕
概要

リンクリソースにおけるリンク先リソース

型/AUTOSAR/EcucDefs/Os/OsResource への参照

値の範囲

－

多重度

0 .. 1OsResourceProperty が LINKED 以外で，本パラメータを指定した場合，ジェネレータは無視する．

制限事項

OsResourceProperty が LINKED の場合は，本パラメータを省略すると，ジェネレータはエラーを検出する【NOS0784】．
本パラメータで指定するリソースが，標準リソースでない場合，ジェネレータはエラーを検出する【NOS0707】．

283

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.8.17 OsResourceTimingProtection
コンテナ名/AUTOSAR/EcucDefs/Os/OsResource/
OsResourceTimingProtection【NOS0207】

概要

リソースオブジェクトタイミング保護設定コンテナ

多重度

0 .. 1

パラメータ

OsResourceLockBudget

サブコンテナ－

制限事項

SC2，SC4 のみで使用可能

OsResourceLockBudget
パラメータ名/AUTOSAR/EcucDefs/Os/OsResource/OsResourceTimingProtection/
OsResourceLockBudget【NOS0208】

概要

リソース占有時間バジェット(単位：秒)型

浮動小数点型値の範囲

0 .. 無限大

多重度

0 .. 1SC2，SC4 のみで使用可能
SC2，SC4 において本パラメータを省略した場合，対象リソースのリ
ソース占有時間を監視しない【NOS1508】．
本パラメータに設定可能な最小値，最大値はターゲット定義とする≪
NOS1416≫．本パラメータに設定可能な最小値未満，もしくは，最大値を超える値を設定した場合，ジェネレータはエラーを検出する≪

制限事項

NOS1415≫．

内部リソースにリソース占有時間バジェットを設定した場合，ジェネレータにてエラーとする【NOS1509】．
本パラメータの該当リソースが，リンクリソース，または，他のリソースからリンクされたリソースであった場合，該当リソースに関連するすべてのリンク先およびリンク元のリソースに設定されたOsResourceLockBudget のうち，最大の値が該当リソースの占有時

間バジェットとなる【NOS1510】．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，リソース占有時間バジェットを，OsTaskResourceLock≪OS_Conf082≫，
OsTaskResourceLockBudget≪OS_Conf083≫，OsTaskResourceLockResourceRef≪OS_Conf084≫によって，タスク毎に，各リソースに対する占有時間バジェットを設定すると規定されている．本仕様では，リソース占有時間バジェットの管理にかかるオーバヘッドを低減するために，タスクがリソースを284

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
獲得する際のリソース占有時間バジェットの設定はリソースオブジェクトで行い，タスクオブジェクト
では獲得するリソースの占有時間の監視を行うかの設定を行うように規定した≪NOS0207≫≪
NOS0208≫．

285

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.8.18 OsCounter
コンテナ名/AUTOSAR/EcucDefs/Os/OsCounter【OS_Conf026】〔COS0927〕

概要

カウンタオブジェクトコンテナ

多重度

0 .. *
OsCounterMaxAllowedValue
OsCounterTicksPerBase
OsCounterMinCycle

パラメータ

OsCounterType
OsSecondsPerTick
OsCounterIsrRef
OsCounterAccessingApplication

サブコンテナOsDriver
OsTimeConstant

OsCounterMaxAllowedValue
パラメータ名/AUTOSAR/EcucDefs/Os/OsCounter/
OsCounterMaxAllowedValue【OS_Conf027】

概要

カウンタのティックの最大値

型

整数型

値の範囲

1 .. 0x7fffffff【NOS1315】

多重度

1

制限事項

－

OsCounterTicksPerBase
パラメータ名/AUTOSAR/EcucDefs/Os/OsCounter/
OsCounterTicksPerBase【OS_Conf029】

概要

カウンタ固有の値(OS は不使用)

型

整数型

値の範囲

1 .. 0x7fffffff【NOS1316】

多重度

1

制限事項

－

286

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsCounterMinCycle
パラメータ名/AUTOSAR/EcucDefs/Os/OsCounter/
OsCounterMinCycle【OS_Conf028】

概要

接続されたアラームがカウンタに指定できる最小周期値

型

整数型

値の範囲

1 .. 0x7fffffff【NOS1317】

多重度

1

制限事項

本パラメータに，OsCounterMaxAllowedValue より大きい値を設定すると，ジェネレータはエラーを検出する【NOS0786】．

OsCounterType
パラメータ名/AUTOSAR/EcucDefs/Os/OsCounter/
OsCounterType【OS_Conf255】

概要

カウンタのタイプ

型

列挙型

値の範囲

HARDWARE：ハードウェアカウンタ
SOFTWARE：ソフトウェアカウンタ

多重度

1

制限事項

－

287

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsSecondsPerTick
パラメータ名/AUTOSAR/EcucDefs/Os/OsCounter/
OsSecondsPerTick【OS_Conf030】
ハードウェアカウンタにおける 1 ティック当たりの実時間(単位：秒)

概要

ジェネレータは，ユーザが実時間を計算するために，変換マクロを生成する【OS393】．
変換マクロにより得られる値は，OS により丸められた値となる≪OSa010≫．
生成されるマクロの形式は，
OS_TICKS2<Unit>_<Counter>(ticks)
である．
<Unit>には NS，US，MS，SEC が入り，4 種類のマクロを出力する．<Counter>は本コンテナを含むカウンタの名称である．
型

浮動小数点型値の範囲

0 .. 無限大

多重度

0 .. 1

制限事項－

OsCounterIsrRef
パラメータ名/AUTOSAR/EcucDefs/Os/OsCounter/
OsCounterIsrRef【NOS0688】〔NOS0673〕

概要

ハードウェアカウンタの満了処理を行う C2ISR

型/AUTOSAR/EcucDefs/Os/OsIsr への参照

値の範囲

－

多重度

0 .. 1

制限事項

参照する ISR が，C1ISR であった場合，ジェネレータはエラーを検出する【NOS0689】．
OsCounterType が HARDWARE の場合は，本パラメータを省略す
ると，ジェネレータはエラーを検出する【NOS0785】〔NOS0672〕．
SC3，SC4 で，参照する C2ISR が，ハードウェアカウンタと異なる OSAP に所属している場合，ジェネレータはエラーを検出する【NOS0722】．

288

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsCounterAccessingApplication
パラメータ名/AUTOSAR/EcucDefs/Os/OsCounter/
OsCounterAccessingApplication【OS_Conf031】

概要

カウンタにアクセス可能な OSAP

型

/AUTOSAR/EcucDefs/Os/OsApplication への参照

値の範囲

－

多重度

0 .. *

制限事項

SC3，SC4 のみで使用可能．
本パラメータでアクセス可能とした場合でも，非信頼 OSAP に属するタスク，アラームから他 OSAP に属するカウンタをインクリメン
トすることは出来ない≪NOS1567≫≪NOS1568≫≪NOS1569≫．

3.8.19 OsDriver
AUTOSAR 仕様に記載がないため，本仕様においても記載しない．
3.8.20 OsTimeConstant
AUTOSAR 仕様では，OsTimeConstant コンテナが規定されている【OS_Conf386】．本コンテナのOsTimeValue パラメータで，1 ティック当たりの時間を秒単位の定数で定義するように規定している【OS_Conf002】．しかし，OsSecondsPerTick で同様の値を定義するため，本仕様では，本コンテナを規定しない．
3.8.21 OsAlarm
コンテナ名/AUTOSAR/EcucDefs/Os/OsAlarm【OS_Conf003】

概要

アラームオブジェクトコンテナ

多重度

0 .. *

パラメータ
サブコンテナOsAlarmAccessingApplication
OsAlarmCounterRef
OsAlarmAction
OsAlarmAutostart289

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsAlarmAccessingApplication
パラメータ名/AUTOSAR/EcucDefs/Os/OsAlarm/
OsAlarmAccessingApplication【OS_Conf004】

概要

アラームにアクセス可能な OSAP

型

/AUTOSAR/EcucDefs/Os/OsApplication への参照

値の範囲

－

多重度

0 .. *

制限事項

SC3，SC4 のみで使用可能

OsAlarmCounterRef
パラメータ名/AUTOSAR/EcucDefs/Os/OsAlarm/
OsAlarmCounterRef【OS_Conf005】〔COS0903〕〔COS0914〕〔COS0915〕〔COS0927〕

概要

アラームに接続するカウンタ

型/AUTOSAR/EcucDefs/Os/OsCounter への参照

値の範囲

－

多重度

1

制限事項

マルチコア対応 OS において，アラームと異なるコアに割付くカウ
ンタを本パラメータに指定した場合，ジェネレータはエラーを検出する【OS663】．
本パラメータに他の非信頼 OSAP に所属するカウンタを指定した
場合，ジェネレータはエラーを検出する≪NOS1129≫．

290

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.8.22 OsAlarmAction
コンテナ名/AUTOSAR/EcucDefs/Os/OsAlarm/OsAlarmAction【OS_Conf006】〔COS0908〕

概要

アラームアクション指定

多重度

1

パラメータ

－
OsAlarmActivateTask

サブコンテナOsAlarmCallback
OsAlarmIncrementCounter
OsAlarmSetEvent
SC1 以外で OsAlarmCallback がサブコンテナに含まれる場合，ジェネ

制限事項

レータはエラーを検出する【OS461】．
サブコンテナが 1 つでない場合，ジェネレータはエラーを検出する【NOS0789】．

291

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.8.23 OsAlarmActivateTask/AUTOSAR/EcucDefs/Os/OsAlarm/

コンテナ名

OsAlarmAction/OsAlarmActivateTask【OS_Conf007】〔COS0916〕
概要

アラームアクションのタスク起動指定

多重度

0 .. 1

パラメータ

OsAlarmActivateTaskRef

サブコンテナ－OsAlarmActivateTaskRef
パラメータ名/AUTOSAR/EcucDefs/Os/OsAlarm/OsAlarmAction/OsAlarmActivateTask/OsAlarmActivateTaskRef【OS_Conf008】〔OS402〕

概要

アラームのアクションで起動するタスク

型/AUTOSAR/EcucDefs/Os/OsTask への参照

値の範囲

－

多重度

1

制限事項

SC3，SC4 で，アラームが所属する OSAP が参照先タスクのアクセス権を持たない場合，ジェネレータはエラーを検出する【OS344】．

3.8.24 OsAlarmCallback
コンテナ名/AUTOSAR/EcucDefs/Os/OsAlarm/
OsAlarmAction/OsAlarmCallback【OS_Conf014】〔COS0916〕

概要

アラームアクションのアラームコールバック指定

多重度

0 .. 1

パラメータ

OsAlarmCallbackName

サブコンテナ－292

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsAlarmCallbackName
パラメータ名/AUTOSAR/EcucDefs/Os/OsAlarm/OsAlarmAction/OsAlarmCallback/OsAlarmCallbackName【OS_Conf087】

概要

アラームのアクションで呼び出すアラームコールバックの名称

型

関数名

値の範囲

－

多重度

1

制限事項

－

3.8.25 OsAlarmIncrementCounter
コンテナ名/AUTOSAR/EcucDefs/Os/OsAlarm/OsAlarmAction/
OsAlarmIncrementCounter【OS_Conf302】〔COS0916〕

概要

アラームアクションのカウンタインクリメント指定

多重度

0 .. 1

パラメータ

OsAlarmIncrementCounterRef

サブコンテナ－OsAlarmIncrementCounterRef
パラメータ/AUTOSAR/EcucDefs/Os/OsAlarm/OsAlarmAction/OsAlarmIncrementCounter/OsAlarmIncrementCounterRef【OS_Conf015】

名
概要

アラームのアクションでインクリメントするカウンタ

型/AUTOSAR/EcucDefs/Os/OsCounter への参照

値の範囲

－

多重度

1
本パラメータが直接もしくは間接的に本アラームの接続されているカウンタを指定した場合，ジェネレータはエラーを検出する【NOS0350】．
本パラメータで指定するカウンタが，ハードウェアカウンタである場合，ジェネ
レータはエラーを検出する【NOS0788】．
SC3，SC4 で，アラームが所属する OSAP が参照先カウンタのアクセス権を持た

制限事項ない場合，ジェネレータはエラーを検出する【NOS0659】．
SC3，SC4 で，アラームが所属する OSAP が非信頼 OSAP であるかつ，参照先カ
ウンタが属する OSAP がその OSAP と異なる場合，ジェネレータはエラーを検出する【NOS1570】〔NOS1569〕．
マルチコア対応 OS において，アラームと異なるコアに割付くカウンタを本パラ
メータに指定した場合，ジェネレータはエラーを検出する【OS664】．

293

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
AUTOSAR 仕様との違い
AUTOSAR 仕様では，本アラームのアクションでインクリメントするカウンタが，直接もしくは間接的に本アラームの接続されているカウンタを指定した場合，ジェネレータは警告を出力すると記述されている【OS303】．本仕様では，アラームのアクションで直接もしくは間接的に，アラームの接続されているカウンタにインクリメント処理を行うと，エラーとなる≪NOS0058≫．したがって，ジェネレ
ータは，警告ではなく，エラーを検出することにした．
3.8.26 OsAlarmSetEvent
コンテナ名/AUTOSAR/EcucDefs/Os/OsAlarm/OsAlarmAction/
OsAlarmSetEvent【OS_Conf016】〔COS0916〕

概要

アラームアクションのイベントセット指定

多重度

0 .. 1

パラメータ
サブコンテナOsAlarmSetEventRef
OsAlarmSetEventTaskRef－

OsAlarmSetEventRef
パラメータ名/AUTOSAR/EcucDefs/Os/OsAlarm/OsAlarmAction/
OsAlarmSetEvent/OsAlarmSetEventRef【OS_Conf017】

概要

アラームのアクションでセットするイベント

型/AUTOSAR/EcucDefs/Os/OsEvent への参照

値の範囲

－

多重度

1

制限事項

－

294

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsAlarmSetEventTaskRef
パラメータ名/AUTOSAR/EcucDefs/Os/OsAlarm/OsAlarmAction/
OsAlarmSetEvent/OsAlarmSetEventTaskRef【OS_Conf018】

概要

アラームのアクションでイベントをセットするタスク

型/AUTOSAR/EcucDefs/Os/OsTask への参照

値の範囲

－

多重度

1
本パラメータで指定するタスクが，基本タスクである場合，ジェネレータ

制限事項

はエラーを検出する【NOS0787】．
SC3，SC4 で，アラームが所属する OSAP が参照先タスクのアクセス権を持たない場合，ジェネレータはエラーを検出する≪OS344≫．

295

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.8.27 OsAlarmAutostart
コンテナ名/AUTOSAR/EcucDefs/Os/OsAlarm/OsAlarmAutostart【OS_Conf009】〔COS1135〕

概要

アラーム自動起動設定

多重度

0 .. 1OsAlarmAlarmTime

パラメータ

OsAlarmAppModeRef
OsAlarmCycleTime
OsAlarmAutostartType

サブコンテナ－OsAlarmAlarmTime
パラメータ名/AUTOSAR/EcucDefs/Os/OsAlarm/OsAlarmAutostart/
OsAlarmAlarmTime【OS_Conf010】

概要

アラーム自動起動時の初回満了時刻

型

整数型

値の範囲

0 .. 0x7fffffff【NOS1318】

多重度

1
OsAlarmAutostartType が RELATIVE の場合，値が 0 であってはな
らない．

制限事項

本パラメータに，アラームが接続されたカウンタの最大値(OsCounterMaxAllowedValue)より大きい値を指定すると，ジェネレ
ータはエラーを検出する【NOS0790】．

OsAlarmAppModeRef
パラメータ名/AUTOSAR/EcucDefs/Os/OsAlarm/OsAlarmAutostart/
OsAlarmAppModeRef【OS_Conf013】

概要

自動起動するアプリケーションモード

型/AUTOSAR/EcucDefs/Os/OsAppMode への参照

値の範囲

－

多重度

1 .. *

制限事項

－

296

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsAlarmCycleTime
パラメータ名/AUTOSAR/EcucDefs/Os/OsAlarm/OsAlarmAutostart/
OsAlarmCycleTime【OS_Conf012】〔COS0912〕

概要

アラーム自動起動時の周期時間，0 の場合は単発アラームとなる

型

整数型

値の範囲

0 .. 0x7fffffff【NOS1319】

多重度

1

制限事項

本パラメータに，アラームが接続されたカウンタの最大値(OsCounterMaxAllowedValue)より大きい値を指定すると，ジェネレ
ータはエラーを検出する【NOS0845】．
本パラメータに，アラームが接続されたカウンタの最小周期(OsCounterMinCycle)より小さい値を指定すると，ジェネレータはエラーを検出する【NOS0846】．

OsAlarmAutostartType
パラメータ名/AUTOSAR/EcucDefs/Os/OsAlarm/OsAlarmAutostart/
OsAlarmAutostartType【OS_Conf011】

概要

アラームの動作種別

型

列挙型

値の範囲

ABSOLUTE：絶対アラームとして自動起動する
RELATIVE：相対アラームとして自動起動する

多重度

1

制限事項

－

297

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.8.28 OsScheduleTable
コンテナ名/AUTOSAR/EcucDefs/Os/OsScheduleTable【OS_Conf141】

概要

スケジュールテーブルオブジェクトコンテナ

多重度

0 .. *OsScheduleTableDuration

パラメータ

OsScheduleTableRepeating
OsSchTblAccessingApplication
OsScheduleTableCounterRef
OsScheduleTableAutostart

サブコンテナOsScheduleTableExpiryPoint
OsScheduleTableSync

OsScheduleTableDuration
パラメータ名/AUTOSAR/EcucDefs/Os/OsScheduleTable/
OsScheduleTableDuration【OS_Conf053】

概要

スケジュールテーブル周期(ティック数)

型

整数型

値の範囲

0 .. 0xffffffff【NOS1320】

多重度

1
OsScheduleTblSyncStrategy に IMPLICIT を指定し，本パラメー

制限事項

タに，駆動カウンタのカウンタ最大値(OsCounterMaxAllowedValue)+1 以外を指定した場合，ジェネレ
ータはエラーを出力する【OS440】〔OS429〕．

OsScheduleTableRepeating
パラメータ名/AUTOSAR/EcucDefs/Os/OsScheduleTable/
OsScheduleTableRepeating【OS_Conf144】〔OS413〕

概要

スケジュールテーブルの繰り返し指定

型

ブール型

値の範囲

true：周期動作
false：単発動作

多重度

1

制限事項

－

298

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsSchTblAccessingApplication/AUTOSAR/EcucDefs/Os/OsScheduleTable/

パラメータ名OsSchTblAccessingApplication【OS_Conf054】
概要

スケジュールテーブルにアクセス可能な OSAP

型

/AUTOSAR/EcucDefs/Os/OsApplication への参照

値の範囲

－

多重度

0 .. *

制限事項

SC3，SC4 のみで使用可能

OsScheduleTableCounterRef/AUTOSAR/EcucDefs/Os/OsScheduleTable/
OsScheduleTableCounterRef【OS_Conf145】〔COS0914〕

パラメータ名〔COS0927〕〔OS409〕
概要

スケジュールテーブルに接続するカウンタ

型/AUTOSAR/EcucDefs/Os/OsCounter への参照

値の範囲

－

多重度

1
マルチコア対応 OS において，スケジュールテーブルと異なるコアに割付くカウンタを本パラメータに指定した場合，ジェネレータはエラーを検出する【OS665】．

制限事項

本パラメータに他の非信頼 OSAP に所属するカウンタを指定した
場合，ジェネレータはエラーを検出する≪NOS1131≫．
3.8.29 OsScheduleTableAutostart
コンテナ名/AUTOSAR/EcucDefs/Os/OsScheduleTable/
OsScheduleTableAutostart【OS_Conf335】〔COS1135〕

概要

スケジュールテーブル自動起動設定コンテナ

多重度

0 .. 1OsScheduleTableStartValue

パラメータ

OsScheduleTableAutostartType
OsScheduleTableAppModeRef

サブコンテナ－299

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsScheduleTableStartValue/AUTOSAR/EcucDefs/Os/OsScheduleTable/
OsScheduleTableAutostart/

パラメータ名OsScheduleTableStartValue【OS_Conf057】
OsScheduleTableAutostartType が ABSOLUTE の場合，自動起動するスケジュールテーブルに対して設定するティックの絶対値と概要して使用される．
OsScheduleTableAutostartType が RELATIVE の場合，自動起動するスケジュールテーブルに対して設定するティックの相対値として使用される．

型

整数型

値の範囲

0 .. 0x7fffffff【NOS1321】

多重度

0 .. 1

制限事項

OsScheduleTableAutostartType が ABSOLUTE か RELATIVE の場合に，本パラメータを省略すると，ジェネレータはエラーを検出する【NOS0782】．
OsScheduleTableAutostartType が RELATIVE の場合に，本パラメータに 0 を設定すると，ジェネレータはエラーを検出する【NOS0783】．
本パラメータに，スケジュールテーブルが接続されたカウンタの最大値(OsCounterMaxAllowedValue)より大きい値を指定すると，ジェネレータはエラーを検出する【NOS0849】．

300

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsScheduleTableAutostartType
パラメータ名/AUTOSAR/EcucDefs/Os/OsScheduleTable/OsScheduleTableAutostart/
OsScheduleTableAutostartType【OS_Conf056】

概要

自動起動種別の指定型

列挙型
ABSOLUTE：ティックの絶対値で自動起動する

値の範囲

RELATIVE：ティックの相対値で自動起動する
SYNCHRON：同期待ち状態で自動起動する

多重度

1

制限事項

対象のスケジュールテーブルが，明示同期スケジュールテーブルでない場
合に，本パラメータに SYNCHRON を指定すると，ジェネレータはエラーを検出する【NOS0741】．
対象のスケジュールテーブルが，暗黙同期スケジュールテーブルである場
合に，本パラメータに RELATIVE を指定すると，ジェネレータはエラーを検出する【NOS0742】〔OS430〕．

OsScheduleTableAppModeRef
パラメータ名/AUTOSAR/EcucDefs/Os/OsScheduleTable/
OsScheduleTableAppModeRef【OS_Conf058】

概要

自動起動するアプリケーションモード

型/AUTOSAR/EcucDefs/Os/OsAppMode への参照

値の範囲

－

多重度

1 .. *

制限事項

－

301

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.8.30 OsScheduleTableExpiryPoint
コンテナ名/AUTOSAR/EcucDefs/Os/OsScheduleTable/
OsScheduleTableExpiryPoint【OS_Conf143】〔OS401〕

概要

スケジュールテーブル満了点設定コンテナ

多重度

1 .. *

パラメータ

OsScheduleTblExpPointOffset
OsScheduleTableEventSetting

サブコンテナOsScheduleTableTaskActivation
OsScheduleTableAdjustableExpPoint
サブコンテナに OsScheduleTableEventSetting もしくはOsScheduleTableTaskActivation が 1 つも指定されていない場合，ジェネ

制限事項

レータはエラーを検出する【NOS0852】〔OS407〕．
ATK2 では，1 つのスケジュールテーブルに対する満了点の上限数は，254である≪NOS1188≫．

302

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsScheduleTblExpPointOffset
パラメータ名概要
型/AUTOSAR/EcucDefs/Os/OsScheduleTable/OsScheduleTableExpiryPoint/
OsScheduleTblExpPointOffset【OS_Conf062】〔OS404〕
スケジュールテーブル満了点オフセット(スケジュールテーブル先頭からのティック数)
整数型

値の範囲

－

多重度

1
初期オフセットを設定する場合，本パラメータに，0，もしくはスケジュー
ルテーブルが接続されたカウンタの最小周期(OsCounterMinCycle)以上，カウンタの最大値(OsCounterMaxAllowedValue)以下ではない値を指定すると，ジェネレータはエラーを検出する≪OS443≫．
本パラメータによって，遅延が設定される場合，遅延が，スケジュールテー
ブルが接続されたカウンタの最小周期(OsCounterMinCycle)以上，カウンタの最大値(OsCounterMaxAllowedValue)以下ではなくなる値を指定すると，

制限事項

ジェネレータはエラーを検出する≪OS408≫．
同様に，最終遅延で不正な値が設定された場合も，ジェネレータはエラーを検出する≪OS444≫．
ただし，単発動作指定時は最終遅延が 0 以上，カウンタの最大値(OsCounterMaxAllowedValue)以下でも設定可能である≪OS427≫．
本パラメータに，スケジュールテーブル周期(OsScheduleTableDuration)より大きい値を指定すると，ジェネレータはエラーを検出する【NOS0847】．
同一スケジュールテーブルの他の満了点で設定した値を，本パラメータに指定した場合，ジェネレータはエラーを検出する【NOS0851】〔OS442〕．

3.8.31 OsScheduleTableEventSetting
コンテナ名/AUTOSAR/EcucDefs/Os/OsScheduleTable/OsScheduleTableExpiryPoint/
OsScheduleTableEventSetting【OS_Conf059】

概要

スケジュールテーブル満了点セットするイベントの設定コンテナ

多重度

0 .. *

パラメータ
サブコンテナOsScheduleTableSetEventRef
OsScheduleTableSetEventTaskRef－

303

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsScheduleTableSetEventRef/AUTOSAR/EcucDefs/Os/OsScheduleTable/OsScheduleTableExpiryPoint/
OsScheduleTableEventSetting/

パラメータ名OsScheduleTableSetEventRef【OS_Conf060】
概要

満了点アクションでセットするイベント

型/AUTOSAR/EcucDefs/Os/OsEvent への参照

値の範囲

－

多重度

1

制限事項

－

OsScheduleTableSetEventTaskRef/AUTOSAR/EcucDefs/Os/OsScheduleTable/OsScheduleTableExpiryPoint/
OsScheduleTableEventSetting/

パラメータ名OsScheduleTableSetEventTaskRef【OS_Conf061】
概要

満了点アクションでイベントをセットするタスク

型/AUTOSAR/EcucDefs/Os/OsTask への参照

値の範囲

－

多重度

1
本パラメータで指定するタスクが，基本タスクである場合，ジェネレータは制限事項

エラーを検出する【NOS0781】．
SC3，SC4 で，スケジュールテーブルが所属する OSAP が参照先タスクのアクセス権を持たない場合，ジェネレータはエラーを検出する≪OS343≫．

3.8.32 OsScheduleTableTaskActivation
コンテナ名/AUTOSAR/EcucDefs/Os/OsScheduleTable/OsScheduleTableExpiryPoint/
OsScheduleTableTaskActivation【OS_Conf066】

概要

スケジュールテーブル満了点で起動するタスクの設定コンテナ

多重度

0 .. *

パラメータ

OsScheduleTableActivateTaskRef

サブコンテナ－304

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsScheduleTableActivateTaskRef/AUTOSAR/EcucDefs/Os/OsScheduleTable/OsScheduleTableExpiryPoint/
OsScheduleTableTaskActivation/

パラメータ名OsScheduleTableActivateTaskRef【OS_Conf067】〔OS402〕
概要

満了点アクションで起動するタスク

型/AUTOSAR/EcucDefs/Os/OsTask への参照

値の範囲

－

多重度

1

制限事項

SC3，SC4 でスケジュールテーブルが所属する OSAP が参照先タスクのア
クセス権を持たない場合，ジェネレータはエラーを検出する【OS343】．

3.8.33 OsScheduleTblAdjustableExpPoint
コンテナ名/AUTOSAR/EcucDefs/Os/OsScheduleTable/OsScheduleTableExpiryPoint/
OsScheduleTblAdjustableExpPoint【OS_Conf068】

概要

スケジュールテーブル満了点同期設定コンテナ

多重度

0 .. 1

パラメータ
サブコンテナ
制限事項

OsScheduleTableMaxLengthen
OsScheduleTableMaxShorten－
SC2，SC4 のみで使用可能

OsScheduleTableMaxLengthen/AUTOSAR/EcucDefs/Os/OsScheduleTable/OsScheduleTableExpiryPoint/
OsScheduleTblAdjustableExpPoint/

パラメータ名OsScheduleTableMaxLengthen【OS_Conf069】
概要

同期補正で満了点の遅延を伸ばしてもよい最大値(ティック数)

型

整数型

値の範囲

－

多重度

1

制限事項

－

305

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsScheduleTableMaxShorten/AUTOSAR/EcucDefs/Os/OsScheduleTable/OsScheduleTableExpiryPoint/
OsScheduleTblAdjustableExpPoint/

パラメータ名OsScheduleTableMaxShorten【OS_Conf070】
概要

同期補正で満了点の遅延を縮めてもよい最大値(ティック数)

型

整数型

値の範囲

－

多重度

1

制限事項

－

3.8.34 OsScheduleTableSync
コンテナ名/AUTOSAR/EcucDefs/Os/OsScheduleTable/
OsScheduleTableSync【OS_Conf063】

概要

スケジュールテーブル同期設定コンテナ．
本コンテナを省略した場合，同期なしスケジュールテーブルとなる．

多重度
パラメータ
サブコンテナ

0 .. 1OsScheduleTblExplicitPrecision
OsScheduleTblSyncStrategy－

OsScheduleTblExplicitPrecision
パラメータ名/AUTOSAR/EcucDefs/Os/OsScheduleTable/OsScheduleTableSync/
OsScheduleTblExplicitPrecision【OS_Conf064】

概要

スケジュールテーブルを同期状態とみなす最大差分(ティック数)

型

整数型

値の範囲

－

多重度

0 .. 1

制限事項

－

306

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsScheduleTblSyncStrategy
パラメータ名/AUTOSAR/EcucDefs/Os/OsScheduleTable/OsScheduleTableSync/
OsScheduleTblSyncStrategy【OS_Conf065】

概要

スケジュールテーブルの同期方式

型

列挙型
EXPLICIT：明示同期

値の範囲

IMPLICIT：暗黙同期
NONE：同期なし(デフォルト)

多重度

1

制限事項

－

307

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.8.35 OsApplication
コンテナ名/AUTOSAR/EcucDefs/Os/OsApplication【OS_Conf114】

概要

OSAP オブジェクトコンテナ

多重度

0 .. *
OsTrusted
OsAppAlarmRef
OsAppCounterRef
OsAppEcucPartitionRef
OsAppIsrRef
OsAppScheduleTableRef
OsAppTaskRef

パラメータ

OsRestartTask
OsAppMemorySectionRef
OsAppMemoryModuleRef
OsAppMemoryAreaRef
OsApplicationCoreAssignment
OsAppInterCoreInterruptRef
OsAppStandardMemoryRomRegionRef
OsAppStandardMemoryRamRegionRef
OsSystemCycleTimeWindowRef

サブコンテナ
制限事項

OsApplicationTrustedFunction
SC3，SC4，マルチコア対応 OS，もしくは，TP 機能に対応した
OS のみで使用可能

308

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsTrusted
パラメータ名/AUTOSAR/EcucDefs/Os/OsApplication/
OsTrusted【OS_Conf115】

概要

信頼 OSAP か非信頼 OSAP かを表す

型

ブール型

値の範囲

true：信頼 OSAP
false：非信頼 OSAP

多重度

0 .. 1

制限事項

SC3，SC4，もしくは，TP 機能に対応した OS のみで使用可能．本パラメータを省略した場合，ジェネレータはエラーを検出する【NOS1545】．

OsAppAlarmRef
パラメータ名/AUTOSAR/EcucDefs/Os/OsApplication/
OsAppAlarmRef【OS_Conf231】

概要

OSAP に所属するアラーム型/AUTOSAR/EcucDefs/Os/OsAlarm への参照

値の範囲

－

多重度

0 .. *

制限事項

SC3，SC4 もしくはマルチコア対応 OS のみで使用可能．
他の OSAP に所属するアラームを，本パラメータに指定した場合，ジェネレータはエラーを検出する【NOS0792】．
いずれの OSAP にも所属しないアラームが存在する場合，ジェネレ
ータはエラーを検出する≪OS311≫．

309

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsAppCounterRef
パラメータ名/AUTOSAR/EcucDefs/Os/OsApplication/
OsAppCounterRef【OS_Conf234】

概要

OSAP に所属するカウンタ

型/AUTOSAR/EcucDefs/Os/OsCounter への参照

値の範囲

－

多重度

0 .. *

制限事項

SC3，SC4 もしくはマルチコア対応 OS のみで使用可能．
他の OSAP に所属するカウンタを，本パラメータに指定した場合，ジェネレータはエラーを検出する【NOS0793】．
いずれの OSAP にも所属しないカウンタが存在する場合，ジェネレ
ータはエラーを検出する≪OS311≫．
本パラメータで指定するカウンタにアラームが接続されている場
合で，そのアラームが所属する OSAP が割付くコアと，
OsApplicationCoreAssignment で指定するコアが異なる場合，ジェネレータはエラーを検出する≪OS631≫．
本パラメータで指定するカウンタにスケジュールテーブルが接続されている場合で，そのスケジュールテーブルが所属する OSAPが割付くコアと，OsApplicationCoreAssignment で指定するコアが異なる場合，ジェネレータはエラーを検出する≪OS630≫．

OsAppEcucPartitionRef
パラメータ名/AUTOSAR/EcucDefs/Os/OsApplication/
OsAppEcucPartitionRef【OS_Conf392】

概要

OSAP に対応する EcucPartition

型/AUTOSAR/EcucDefs/EcuC/EcucPartitionCollection/EcucPartition
への参照

値の範囲

－

多重度

0 .. 1

制限事項

OS では，本パラメータを使用しない．

310

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsAppIsrRef
パラメータ名/AUTOSAR/EcucDefs/Os/OsApplication/
OsAppIsrRef【OS_Conf221】

概要

OSAP に所属する ISR

型/AUTOSAR/EcucDefs/Os/OsIsr への参照

値の範囲

－

多重度

0 .. *

制限事項

SC3，SC4 もしくはマルチコア対応 OS のみで使用可能．
他の OSAP に所属する ISR を，本パラメータに指定した場合，ジェネレータはエラーを検出する【NOS0794】．
OsTrusted に false が指定されている場合に，本パラメータにC1ISR を指定すると，ジェネレータはエラーを検出する≪OS361≫．
いずれの OSAP にも所属しない ISR が存在する場合，ジェネレー
タはエラーを検出する≪OS311≫．
SC3，SC4 で，OsTrusted に false が指定されている場合に，本パラメータに C2ISR を指定すると，ジェネレータはエラーを検出する【NOS0855】．

OsAppScheduleTableRef
パラメータ名/AUTOSAR/EcucDefs/Os/OsApplication/
OsAppScheduleTableRef【OS_Conf230】

概要

OSAP に所属するスケジュールテーブル

型/AUTOSAR/EcucDefs/Os/OsScheduleTable への参照

値の範囲

－

多重度

0 .. *

制限事項

SC3，SC4 もしくはマルチコア対応 OS のみで使用可能．
他の OSAP に所属するスケジュールテーブルを，本パラメータに指定した場合，ジェネレータはエラーを検出する【NOS0796】．
いずれの OSAP にも所属しないスケジュールテーブルが存在する
場合，ジェネレータはエラーを検出する≪OS311≫．

311

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsAppTaskRef/AUTOSAR/EcucDefs/Os/OsApplication/

パラメータ名OsAppTaskRef【OS_Conf116】
概要

OSAP に所属するタスク

型/AUTOSAR/EcucDefs/Os/OsTask への参照

値の範囲

－

多重度

0 .. *

制限事項

SC3，SC4，マルチコア対応 OS，もしくは，TP 機能に対応した
OS のみで使用可能．
他の OSAP に所属するタスクを，本パラメータに指定した場合，ジェネレータはエラーを検出する【NOS0797】．
いずれの OSAP にも所属しないタスクが存在する場合，ジェネレー
タはエラーを検出する≪OS311≫．

OsRestartTask
パラメータ名概要
型/AUTOSAR/EcucDefs/Os/OsApplication/OsRestartTask【OS_Conf120】
OSAP 再起動時に起動するタスク(本パラメータを指定しない場合，リスタートタスクの起動は行われない)/AUTOSAR/EcucDefs/Os/OsTask への参照

値の範囲

－

多重度

0 .. 1
SC3，SC4 のみで使用可能．
本パラメータに，異なる OSAP に所属するタスクを指定した場合，ジェ制限事項

ネレータはエラーを検出する【NOS1135】．
ATK2 では，本パラメータに指定したタスクが，OsAppTaskRef に指定されていなくても，該当 OSAP に所属されるものとして扱う【NOS1322】．

312

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsAppMemorySectionRef
パラメータ名/AUTOSAR/EcucDefs/Os/OsApplication/
OsAppMemorySectionRef【NOS0176】

概要

メモリセクション(OsMemorySection)の ID

型/AUTOSAR/EcucDefs/Os/OsMemorySection への参照

値の範囲

－

多重度

0 .. *

制限事項

SC3，SC4 のみで使用可能．
他の OSAP に所属するメモリセクション(OsMemorySection)の IDを，本パラメータに指定した場合，ジェネレータはエラーを検出する【NOS0899】．

OsAppMemoryModuleRef
パラメータ名/AUTOSAR/EcucDefs/Os/OsApplication/
OsAppMemoryModuleRef【NOS0177】

概要

メモリセクション情報(オブジェクトファイル単位指定)(OsMemoryModule)の ID

型/AUTOSAR/EcucDefs/Os/OsMemoryModule への参照

値の範囲

－

多重度

0 .. *

制限事項

SC3，SC4 のみで使用可能．
他の OSAP に所属するメモリセクション情報(オブジェクトファイ
ル単位指定)(OsMemoryModule)の ID を，本パラメータに指定した
場合，ジェネレータはエラーを検出する【NOS0900】．

313

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OSAppMemoryAreaRef
パラメータ名/AUTOSAR/EcucDefs/Os/OsApplication/
OsAppMemoryAreaRef【NOS0178】

概要

メモリ領域(OsMemoryArea)の ID

型/AUTOSAR/EcucDefs/Os/OsMemoryArea への参照

値の範囲

－

多重度

0 .. *

制限事項

SC3，SC4 のみで使用可能．
他の OSAP に所属するメモリ領域(OsMemoryArea)の ID を，本パラメータに指定した場合，ジェネレータはエラーを検出する【NOS0901】．

OsApplicationCoreAssignment
パラメータ名/AUTOSAR/EcucDefs/Os/OsApplication/
OsApplicationCoreAssignment【MCOS_Conf1020】

概要

OSAP を割付けるコア ID

型

整数型

値の範囲

0 .. 65534

多重度

0 .. 1

制限事項

マルチコア対応 OS のみで使用可能．
マルチコアシステム上で識別できない不正なコア ID を本パラメータに指定した場合，ジェネレータはエラーを検出する【OS667】．

314

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsAppInterCoreInterruptRef
パラメータ名/AUTOSAR/EcucDefs/Os/OsApplication/
OsAppInterCoreInterruptRef【NOS1111】

概要

OSAP に所属する ICISR型/AUTOSAR/EcucDefs/Os/OsInterCoreInterrupt への参照

値の範囲

－

多重度

0 .. *

制限事項

マルチコア対応 OS のみで使用可能．
他の OSAP に所属する ICISR を，本パラメータに指定した場合，ジェネレータはエラーを検出する【NOS1112】．
いずれの OSAP にも所属しない ICISR が存在する場合，ジェネレ
ータはエラーを検出する【NOS1113】．
SC3，SC4 で，OsTrusted に false が指定されている場合に，本パラメータを指定すると，ジェネレータはエラーを検出する【NOS1114】．

OsAppStandardMemoryRomRegionRef
パラメータ名概要/AUTOSAR/EcucDefs/Os/OsApplication /OsAppStandardMemoryRomRegionRef【NOS1057】
OSAP の標準 ROM リージョンの指定．
本パラメータを省略した場合，OsStandardMemoryRegion で指定した標準 ROM リージョンが使用される．

型/AUTOSAR/EcucDefs/Os/OsMemoryRegion への参照

値の範囲

－

多重度

0 .. 1

制限事項

SC3，SC4 のみで使用可能．
本パラメータで指定したメモリリージョンのOsMemoryRegionWriteable が true である場合，ジェネレータはエラーを検出する【NOS1058】．

315

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsAppStandardMemoryRamRegionRef
パラメータ名概要/AUTOSAR/EcucDefs/Os/OsApplication /OsAppStandardMemoryRamRegionRef【NOS1059】
OSAP の標準 RAM リージョンの指定．
本パラメータを省略した場合，OsStandardMemoryRegion で指定した標準 RAM リージョンが使用される．

型/AUTOSAR/EcucDefs/Os/OsMemoryRegion への参照

値の範囲

－

多重度

0 .. 1

制限事項

SC3，SC4 のみで使用可能．
本パラメータで指定したメモリリージョンのOsMemoryRegionWriteable が false である場合，ジェネレータはエラーを検出する【NOS1060】．

OsSystemCycleTimeWindowRef
パラメータ名概要/AUTOSAR/EcucDefs/Os/OsApplication/
OsSystemCycleTimeWindowRef【NOS1511】
OSAP に割り当てるタイムウィンドウの指定．
本パラメータを省略した場合，対応する OSAP に所属するタスク
は，アイドルウィンドウの期間，もしくは，各タイムウィンドウにおいて，タイムウィンドウを割り当てられた OSAP に所属するタス
クがすべて実行可能状態でない期間に実行状態となる．

型/AUTOSAR/EcucDefs/Os/OsOS/OsSystemCycle/
OsSystemCycleTimeWindow への参照

値の範囲

－

多重度

0 .. *

制限事項

TP 機能に対応した OS のみで使用可能．
他の OSAP に割り当てたタイムウィンドウを，本パラメータに指定した場合，ジェネレータはエラーを検出する【NOS1512】〔NOS1429〕．
いずれの OSAP にも割り当てられていないタイムウィンドウが存在する場合，ジェネレータはエラーを検出する【NOS1513】．
連続するタイムウィンドウが同じ OSAP に割り当てられている場
合，警告を表示する≪NOS1432≫．

316

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
AUTOSAR 仕様との違い
OSAP にタイムウィンドウを割り当てるためのパラメータを追加した≪NOS1511≫．
3.8.36 OsApplicationHooks
AUTOSAR 仕様との違い
AUTOSAR 仕様では，OSAP 固有のフックルーチンが有効か無効かどうかを設定するために，以下のコンテナとパラメータを規定している．
・/AUTOSAR/EcucDefs/Os/OsApplication/OsApplicationHooks【OS_Conf020】

・/AUTOSAR/EcucDefs/Os/OsApplication/OsApplicationHooks/OsAppErrorHook【OS_Conf213】

・/AUTOSAR/EcucDefs/Os/OsApplication/OsApplicationHooks/OsAppShutdownHook【OS_Conf125】

・/AUTOSAR/EcucDefs/Os/OsApplication/OsApplicationHooks/OsAppStartupHook【OS_Conf124】
本仕様において，ATK2 では OSAP 固有のフックルーチンを提供しないこととしたため，上記仕様を削除した．
3.8.37 OsApplicationTrustedFunction
コンテナ名/AUTOSAR/EcucDefs/Os/OsApplication/
OsApplicationTrustedFunction【OS_Conf021】

概要

OSAP 信頼関数定義

多重度

0 .. *
OsTrustedFunctionName

パラメータ

OsTrustedFunctionStackSize
OsTrustedFunctionExecutionBudget

サブコンテナ
制限事項－
SC3，SC4 のみで使用可能．
非信頼 OSAP に対して，本コンテナを指定した場合，ジェネレータはエラーを検出する【NOS0791】．

317

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsTrustedFunctionName
パラメータ名/AUTOSAR/EcucDefs/Os/OsApplication/OsApplicationTrustedFunction/
OsTrustedFunctionName【OS_Conf254】

概要

OSAP 信頼関数名

型

関数名型

値の範囲

－

多重度

1

制限事項

SC3，SC4 のみで使用可能．
本パラメータに"TRUSTED_"から始まらない関数名を指定した場合，ジェネレータはエラーを検出する【NOS0823】．

OsTrustedFunctionStackSize
パラメータ名/AUTOSAR/EcucDefs/Os/OsApplication/OsApplicationTrustedFunction/
OsTrustedFunctionStackSize【NOS0721】

概要

信頼関数が使用するスタックサイズ（単位：byte）

型

整数型

値の範囲

－

多重度

1

制限事項

SC3，SC4 のみで使用可能

318

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsTrustedFunctionExecutionBudget
パラメータ名/AUTOSAR/EcucDefs/Os/OsApplication/OsApplicationTrustedFunction/
OsTrustedFunctionExecutionBudget【NOS1514】

概要

信頼関数実行時間バジェット(単位：秒)型

浮動小数点型値の範囲

0 .. 無限大

多重度

0 .. 1

制限事項

SC4 のみで使用可能
SC4 において本パラメータを省略した場合，CallTrustedFunction 呼出し
時に実行時間をチェックしない【NOS1515】．
本パラメータを省略した場合，ジェネレータは警告を出力する【NOS1566】．
本パラメータに設定可能な最小値，最大値はターゲット定義とする≪
NOS1416≫．本パラメータに設定可能な最小値未満，もしくは，最大値を超える値を設定した場合，ジェネレータはエラーを検出する≪NOS1415≫．

3.8.38 OsMemoryRegion
コンテナ名/AUTOSAR/EcucDefs/Os/OsMemoryRegion【NOS0693】

概要

メモリリージョン情報コンテナ

多重度

0 .. *OsMemoryRegionName

パラメータ

OsMemoryRegionWriteable
OsMemoryRegionSize
OsMemoryRegionStartAddress

制限事項

SC3，SC4 のみで使用可能．
標準 ROM リージョンと標準 RAM リージョンが，1 つずつ定義されていない場合，ジェネレータはエラーを検出する【NOS0747】．

319

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsMemoryRegionName
パラメータ名/AUTOSAR/EcucDefs/Os/OsMemoryRegion/
OsMemoryRegionName【NOS0746】

概要

メモリリージョン名称

型

文字列型

値の範囲

－

多重度

1

制限事項

SC3，SC4 のみで使用可能．
他のメモリリージョンで指定されたメモリリージョン名称を，本パラメータに指定した場合，ジェネレータはエラーを検出する【NOS0803】．

OsMemoryRegionWriteable
パラメータ名/AUTOSAR/EcucDefs/Os/OsMemoryRegion/
OsMemoryRegionWriteable【NOS0749】

概要

メモリリージョンに対する書込みアクセス設定

型

ブール型

値の範囲

true：書込み可能
false：書込み不可

多重度

1

制限事項

SC3，SC4 のみで使用可能

320文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsMemoryRegionSize
パラメータ名/AUTOSAR/EcucDefs/Os/OsMemoryRegion/
OsMemoryRegionSize【NOS0751】

概要

メモリリージョンサイズ

型

整数型

値の範囲

－

多重度

1

制限事項

SC3，SC4 のみで使用可能．
本パラメータに 0 を指定すると，ジェネレータはエラーを検出する【NOS0814】．
本パラメータで指定された値が，ターゲット定義のアライメント制
約を満たしていない場合，ジェネレータはエラーを検出する【NOS1160】．
本パラメータで指定された領域が，他のメモリ領域と重なる場合，ジェネレータはエラーを検出する【NOS1161】．

OsMemoryRegionStartAddress
パラメータ名/AUTOSAR/EcucDefs/Os/OsMemoryRegion/
OsMemoryRegionStartAddress【NOS0750】

概要

メモリリージョン開始アドレス

型

整数型

値の範囲

－

多重度

1

制限事項

SC3，SC4 のみで使用可能．
ATK2 では，アライメント制約はターゲット定義とする【NOS1323】．
本パラメータで指定された値が，ターゲット定義のアライメント制
約を満たしていない場合，ジェネレータはエラーを検出する【NOS0804】．
本パラメータと OsMemoryRegionSize とで定義されるメモリリー
ジョンが，他のメモリリージョンと重なる場合，ジェネレータはエラーを検出する【NOS0805】．

321文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.8.39 OsMemorySection
コンテナ名
概要

/AUTOSAR/EcucDefs/Os/OsMemorySection【NOS0301】
メモリセクション情報コンテナ．
OsAppMemorySectionRef に指定された場合は，OSAP の専有領域，指定されなかった場合は共有領域となる．

多重度

0 .. *OsMemorySectionName
OsMemorySectionMemoryRegionRef
OsMemorySectionWriteable
OsMemorySectionReadable

パラメータ

OsMemorySectionExecutable
OsMemorySectionShort
OsMemorySectionInitialize
OsMemorySectionCacheable
OsMemorySectionDevice
OsMemorySectionExport

制限事項

SC3，SC4 のみで使用可能

OsMemorySectionName
パラメータ名/AUTOSAR/EcucDefs/Os/OsMemorySection/
OsMemorySectionName【NOS0760】

概要セクション名称

型

文字列型

値の範囲

－

多重度

1

制限事項

SC3，SC4 のみで使用可能．
他のメモリセクション情報で指定されたセクション名称を，本パラ
メータに指定した場合，ジェネレータはエラーを検出する【NOS0809】．
本パラメータに，標準のセクションの名称を指定した場合，ジェネ
レータはエラーを検出する【NOS0810】．

322

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsMemorySectionMemoryRegionRef
パラメータ名/AUTOSAR/EcucDefs/Os/OsMemorySection/
OsMemorySectionMemoryRegionRef【NOS0761】

概要セクションを配置するメモリリージョン

型/AUTOSAR/EcucDefs/Os/OsMemoryRegion への参照

値の範囲

－

多重度

1

制限事項

SC3，SC4 のみで使用可能

OsMemorySectionWriteable
パラメータ名/AUTOSAR/EcucDefs/Os/OsMemorySection/
OsMemorySectionWriteable【NOS0762】

概要

メモリセクションに対する書込みアクセス設定

型

ブール型

値の範囲

true：書込み可能
false：書込み不可

多重度

1

制限事項

SC3，SC4 のみで使用可能

OsMemorySectionReadable
パラメータ名/AUTOSAR/EcucDefs/Os/OsMemorySection/
OsMemorySectionReadable【NOS0763】

概要

メモリセクションに対する読込みアクセス設定

型

ブール型

値の範囲

true：読込み可能
false：読込み不可

多重度

1

制限事項

SC3，SC4 のみで使用可能

323

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsMemorySectionExecutable
パラメータ名/AUTOSAR/EcucDefs/Os/OsMemorySection/
OsMemorySectionExecutable【NOS0764】

概要

メモリセクションに対する実行アクセス設定

型

ブール型

値の範囲

true：実行可能
false：実行不可

多重度

1

制限事項

SC3，SC4 のみで使用可能

OsMemorySectionShort
パラメータ名/AUTOSAR/EcucDefs/Os/OsMemorySection/
OsMemorySectionShort【NOS0765】

概要

メモリセクションに対するショートデータ領域設定

型

ブール型

値の範囲

true：ショートデータ領域に配置する
false：ショートデータ領域に配置しない

多重度

1

制限事項

SC3，SC4 のみで使用可能

OsMemorySectionInitialize
パラメータ名/AUTOSAR/EcucDefs/Os/OsMemorySection/
OsMemorySectionInitialize【NOS0766】

概要

メモリセクションに対するメモリ初期化設定型

列挙型
DATA：初期化する

値の範囲

BSS：ゼロクリアする
NO_INITIALIZE：初期化しない

多重度

0 .. 1

制限事項

SC3，SC4 のみで使用可能．
書込み不可のメモリリージョンに対して，本パラメータを指定した
場合，ジェネレータはエラーを検出する【NOS0858】．
書込み可能なメモリリージョンに対して，本パラメータを指定していない場合，ジェネレータはエラーを検出るする【NOS1593】．

324

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsMemorySectionCacheable/AUTOSAR/EcucDefs/Os/OsMemorySection/

パラメータ名OsMemorySectionCacheable【NOS0767】

概要

メモリセクションに対するキャッシュ設定型

ブール型
true：キャッシュ可能

値の範囲

false：キャッシュ不可

多重度

1

制限事項

SC3，SC4 のみで使用可能

OsMemorySectionDevice/AUTOSAR/EcucDefs/Os/OsMemorySection/

パラメータ名OsMemorySectionDevice【NOS0768】

概要

メモリセクションに対するデバイス領域設定型

ブール型
true：デバイス領域である

値の範囲

false：デバイス領域でない

多重度

1

制限事項

SC3，SC4 のみで使用可能

OsMemorySectionExport
パラメータ名/AUTOSAR/EcucDefs/Os/OsMemorySection/
OsMemorySectionExport【NOS0769】

概要

メモリセクションに対する専有ライト共有リード領域の設定

型

ブール型

値の範囲

true：専有ライト共有リード
false：専有リードライト

多重度

1

制限事項

SC3，SC4 のみで使用可能．
OsMemorySectionWriteable が true，
かつ OsMemorySectionReadable
が true, かつ OsMemorySectionExecutable が false の場合以外に，本パラメータに true を指定すると，ジェネレータはエラーを検出する【NOS0770】．

325

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.8.40 OsMemoryModule
コンテナ名
概要

/AUTOSAR/EcucDefs/Os/OsMemoryModule【NOS0302】
メモリセクション情報(オブジェクトファイル単位指定)コンテナ．
OsAppMemoryModuleRef に指定された場合は，OSAP の専有領域となり，指定されなかった場合は共有領域となる．更に，OsMemoryModuleExport に true を指定した場合は，共有リード領域となる．

多重度
パラメータ
制限事項

0 .. *OsMemoryModuleName
OsMemoryModuleExport
SC3，SC4 のみで使用可能．
本コンテナの使用可否はターゲット定義である【NOS1324】．

OsMemoryModuleName
パラメータ名/AUTOSAR/EcucDefs/Os/OsMemoryModule/
OsMemoryModuleName【NOS0772】

概要

オブジェクトファイル名称

型

文字列型

値の範囲

－

多重度

1 .. *

制限事項

SC3，SC4 のみで使用可能．
他のメモリセクション情報(オブジェクトファイル単位指定)で指定されたオブジェクトファイル名称を，本パラメータに指定した場
合，ジェネレータはエラーを検出する【NOS0808】．

326

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsMemoryModuleExport
パラメータ名概要/AUTOSAR/EcucDefs/Os/OsMemoryModule/
OsMemoryModuleExport【NOS0773】
オブジェクトファイルに対する専有ライト共有リード領域の設定．
本パラメータに true を指定した場合，リードオンリーセクションは共有リードオンリーになり，実行セクションは共有実行になる．

型
値の範囲

ブール型
true：専有ライト共有リード
false：専有リードライト

多重度

1

制限事項

SC3，SC4 のみで使用可能

3.8.41 OsMemoryArea
コンテナ名
概要

/AUTOSAR/EcucDefs/Os/OsMemoryArea【NOS0303】
アクセスを許可するメモリ領域の設定コンテナ．
OsAppMemoryAreaRef に指定された場合は，OSAP の専有領域，
指定されなかった場合は共有領域となる．

多重度

0 .. *OsMemoryAreaWriteable
OsMemoryAreaReadable
OsMemoryAreaExecutable

パラメータ

OsMemoryAreaCacheable
OsMemoryAreaDevice
OsMemoryAreaSize
OsMemoryAreaStartAddress

制限事項

SC3，SC4 のみで使用可能

327

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsMemoryAreaWriteable
パラメータ名/AUTOSAR/EcucDefs/Os/OsMemoryArea/
OsMemoryAreaWriteable【NOS0752】

概要

アクセスを許可するメモリ領域に対する書込みアクセス設定

型

ブール型

値の範囲

true：書込み可能
false：書込み不可

多重度

1

制限事項

SC3，SC4 のみで使用可能

OsMemoryAreaReadable
パラメータ名/AUTOSAR/EcucDefs/Os/OsMemoryArea/
OsMemoryAreaReadable【NOS0753】

概要

アクセスを許可するメモリ領域に対する読込みアクセス設定

型

ブール型

値の範囲

true：読込み可能
false：読込み不可

多重度

1

制限事項

SC3，SC4 のみで使用可能

OsMemoryAreaExecutable
パラメータ名/AUTOSAR/EcucDefs/Os/OsMemoryArea/
OsMemoryAreaExecutable【NOS0754】

概要

アクセスを許可するメモリ領域に対する実行アクセス設定

型

ブール型

値の範囲

true：実行可能
false：実行不可

多重度

1

制限事項

SC3，SC4 のみで使用可能

328

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsMemoryAreaCacheable
パラメータ名/AUTOSAR/EcucDefs/Os/OsMemoryArea/
OsMemoryAreaCacheable【NOS0755】

概要

アクセスを許可するメモリ領域に対するキャッシュ設定

型

ブール型

値の範囲

true：キャッシュ可能
false：キャッシュ不可

多重度

1

制限事項

SC3，SC4 のみで使用可能

OsMemoryAreaDevice
パラメータ名/AUTOSAR/EcucDefs/Os/OsMemoryArea/
OsMemoryAreaDevice【NOS0756】

概要

アクセスを許可するメモリ領域に対するデバイス領域設定

型

ブール型

値の範囲

true：デバイス領域である
false：デバイス領域でない

多重度

1

制限事項

SC3，SC4 のみで使用可能

329

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsMemoryAreaSize
パラメータ名/AUTOSAR/EcucDefs/Os/OsMemoryArea/
OsMemoryAreaSize【NOS0758】

概要

アクセスを許可するメモリ領域のサイズ

型

整数型

値の範囲

－

多重度

1

制限事項

SC3，SC4 のみで使用可能．
本パラメータに 0 を指定すると，ジェネレータはエラーを検出する【NOS0815】．
ATK2 では，
アライメント制約はターゲット定義とする≪NOS1323≫．
本パラメータで指定された値が，ターゲット定義のアライメント制
約を満たしていない場合，ジェネレータはエラーを検出する【NOS0853】．
本パラメータで指定された領域が，他のメモリ領域と重なる場合，ジェネレータはエラーを検出する【NOS0854】．

OsMemoryAreaStartAddress
パラメータ名/AUTOSAR/EcucDefs/Os/OsMemoryArea/
OsMemoryAreaStartAddress【NOS0757】

概要

アクセスを許可するメモリ領域の先頭アドレス

型

文字列型

値の範囲

－

多重度

1

制限事項

SC3，SC4 のみで使用可能．
ATK2 では，
アライメント制約はターゲット定義とする≪NOS1323≫．
本パラメータで指定された値が，ターゲット定義のアライメント制
約を満たしていない場合，ジェネレータはエラーを検出する【NOS0813】．

330

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.8.42 OsLinkSection
コンテナ名/AUTOSAR/EcucDefs/Os/OsLinkSection【NOS0774】

概要

非信頼タスクのスタックを配置するメモリセクション情報コンテナ

多重度

0 .. *

パラメータ
制限事項

OsLinkSectionName
OsLinkSectionMemoryRegionRef
SC3，SC4 のみで使用可能

OsLinkSectionName
パラメータ名/AUTOSAR/EcucDefs/Os/OsLinkSection/
OsLinkSectionName【NOS0775】

概要セクション名称

型

文字列型

値の範囲

－

多重度

1

制限事項

SC3，SC4 のみで使用可能．
他のメモリセクション情報で指定されたセクション名称を，本パラ
メータに指定した場合，ジェネレータはエラーを検出する【NOS0811】．
本パラメータに，標準のセクションの名称を指定した場合，ジェネ
レータはエラーを検出する【NOS0812】．

OsLinkSectionMemoryRegionRef
パラメータ名/AUTOSAR/EcucDefs/Os/OsLinkSection/
OsLinkSectionMemoryRegionRef【NOS0776】

概要セクションを配置するメモリリージョン

型/AUTOSAR/EcucDefs/Os/OsMemoryRegion への参照

値の範囲

－

多重度

1

制限事項

SC3，SC4 のみで使用可能

331

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.8.43 OsStandardMemoryRegion
コンテナ名/AUTOSAR/EcucDefs/Os/
OsStandardMemoryRegion【NOS1061】

概要

OsStandardMemoryCoreAssignment を省略した場合，システムの標準メモリリージョン情報コンテナ．
OsStandardMemoryCoreAssignment を指定した場合，コアの標準
メモリリージョン情報コンテナ．

多重度

0 .. *
OsStandardMemoryRomRegionRef

パラメータ

OsStandardMemoryRamRegionRef
OsStandardMemoryCoreAssignment

制限事項

SC3，SC4 のみで使用可能．
OsStandardMemoryCoreAssignment が同じ値の本コンテナを複数指定した場合，ジェネレータはエラーを検出する【NOS1062】．

OsStandardMemoryRomRegionRef
パラメータ名/AUTOSAR/EcucDefs/Os/OsStandardMemoryRegion/
OsStandardMemoryRomRegionRef【NOS1063】

概要

標準 ROM リージョンの指定型/AUTOSAR/EcucDefs/Os/OsMemoryRegion への参照

値の範囲

－

多重度

1

制限事項

SC3，SC4 のみで使用可能．
本パラメータで指定したメモリリージョンのOsMemoryRegionWriteable が true である場合，ジェネレータはエラーを検出する【NOS1064】．

332

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsStandardMemoryRamRegionRef
パラメータ名/AUTOSAR/EcucDefs/Os/OsStandardMemoryRegion/
OsStandardMemoryRamRegionRef【NOS1065】

概要

標準 RAM リージョンの指定型/AUTOSAR/EcucDefs/Os/OsMemoryRegion への参照

値の範囲

－

多重度

1

制限事項

SC3，SC4 のみで使用可能．
本パラメータで指定したメモリリージョンのOsMemoryRegionWriteable が false である場合，ジェネレータはエラーを検出する【NOS1066】．

OsStandardMemoryCoreAssignment
パラメータ名概要/AUTOSAR/EcucDefs/Os/OsStandardMemoryRegion/
OsStandardMemoryCoreAssignment【NOS1067】
標準メモリリージョンを使用するコアの指定．
本パラメータで指定したコアで，OsStandardMemoryRomRegionRef およびOsStandardMemoryRamRegionRef で指定した標準 ROM，RAM
リージョンが使用される．

型

整数型

値の範囲

0 .. 65534

多重度

0 .. 1

制限事項

SC3，SC4 のマルチコア対応 OS のみで使用可能

3.8.44 OsIoc
コンテナ名/AUTOSAR/EcucDefs/Os/OsIoc【MCOS_Conf1000】

概要

IOC 情報コンテナ

多重度

0 .. 1

パラメータ－

サブコンテナOsIocCommunication

制限事項

SC3，SC4 もしくはマルチコア対応 OS のみで使用可能

333

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.8.45 OsIocCommunication
コンテナ名/AUTOSAR/EcucDefs/Os/OsIoc/
OsIocCommunication【MCOS_Conf1003】

概要

IOC オブジェクトコンテナ

多重度

0 .. *

パラメータ

OsIocBufferLength
OsIocSenderProperties

サブコンテナOsIocReceiverProperties
OsIocDataProperties

制限事項

SC3，SC4 もしくはマルチコア対応 OS のみで使用可能

OsIocBufferLength
パラメータ名/AUTOSAR/EcucDefs/Os/OsIoc/OsIocCommunication/
OsIocBufferLength【MCOS_Conf1001】

概要

IOC のキューサイズ．
本パラメータを指定した場合，IOC はキューありとなり，本パラメ
ータを省略した場合，IOC はキューなしとなる．

型

整数型

値の範囲

0 .. 0xffffffff

多重度

0 .. 1

制限事項

SC3，SC4 もしくはマルチコア対応 OS のみで使用可能．
本パラメータに 0 を指定した場合，ジェネレータはエラーを検出する【NOS1092】

334

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.8.46 OsIocSenderProperties
コンテナ名/AUTOSAR/EcucDefs/Os/OsIoc/OsIocCommunication/
OsIocSenderProperties【MCOS_Conf1015】

概要

センダ情報コンテナ．
本コンテナが 1 つ定義された場合，1:1 通信となり，2 つ以上定義された場合，
N:1 通信となる．

多重度

1 .. *
OsIocFunctionImplementationKind

パラメータ

OsIocSenderId
OsIocSendingOsApplicationRef

サブコンテナ－SC3，SC4 もしくはマルチコア対応 OS のみで使用可能．

制限事項

グループ通信の IOC に対して，本コンテナを 2 つ以上定義した場合，ジェネレ
ータはエラーを検出する≪MCOS_Conf1015≫．

OsIocFunctionImplementationKind
パラメータ名/AUTOSAR/EcucDefs/Os/OsIoc/OsIocCommunication/OsIocSenderProperties/
OsIocFunctionImplementationKind【MCOS_Conf1036】

概要

IOC 用システムサービスの実装方法の選択

型

列挙型
FUNCTION：関数

値の範囲

MACRO：マクロDO_NOT_CARE：指定しない(デフォルト)

多重度

0 .. 1
SC3，SC4 もしくはマルチコア対応 OS のみで使用可能．

制限事項

ATK2 では，本パラメータが省略された場合と，DO_NOT_CARE が指定された
場合は，FUNCTION として扱う【NOS1325】

335

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsIocSenderId
パラメータ名/AUTOSAR/EcucDefs/Os/OsIoc/OsIocCommunication/OsIocSenderProperties/
OsIocSenderId【MCOS_Conf1016】

概要

N:1 通信時におけるセンダ ID

型

整数型

値の範囲

0 .. 255

多重度

0 .. 1

制限事項

SC3，SC4 もしくはマルチコア対応 OS のみで使用可能．
1:1 通信の IOC に対して，本パラメータを指定した場合，ジェネレータはエラーを検出する≪MCOS_Conf1016≫．

OsIocSendingOsApplicationRef
パラメータ名/AUTOSAR/EcucDefs/Os/OsIoc/OsIocCommunication/OsIocSenderProperties/
OsIocSendingOsApplicationRef【MCOS_Conf1014】

概要

センダ OSAP

型/AUTOSAR/EcucDefs/Os/OsApplication への参照

値の範囲

－

多重度

1

制限事項

SC3，SC4 もしくはマルチコア対応 OS のみで使用可能

3.8.47 OsIocReceiverProperties
コンテナ名/AUTOSAR/EcucDefs/Os/OsIoc/OsIocCommunication/
OsIocReceiverProperties【MCOS_Conf1017】

概要

レシーバ情報コンテナ

多重度

1

パラメータ
サブコンテナ
制限事項

OsIocFunctionImplementationKind
OsIocReceivingOsApplicationRef－
SC3，SC4 もしくはマルチコア対応 OS のみで使用可能

336

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsIocFunctionImplementationKind
パラメータ名/AUTOSAR/EcucDefs/Os/OsIoc/OsIocCommunication/OsIocReceiverProperties/
OsIocFunctionImplementationKind≪MCOS_Conf1036≫

概要

IOC 用システムサービスの実装方法の選択

型

列挙型
FUNCTION：関数

値の範囲

MACRO：マクロDO_NOT_CARE：指定しない(デフォルト)

多重度

0 .. 1
SC3，SC4 もしくはマルチコア対応 OS のみで使用可能．

制限事項

ATK2 では，本パラメータが省略された場合と，DO_NOT_CARE が指定された
場合は，FUNCTION として扱う【NOS1326】

OsIocReceivingOsApplicationRef
パラメータ名/AUTOSAR/EcucDefs/Os/OsIoc/OsIocCommunication/ OsIocReceiverProperties/
OsIocReceivingOsApplicationRef【MCOS_Conf1012】

概要

レシーバ OSAP

型/AUTOSAR/EcucDefs/Os/OsApplication への参照

値の範囲

－

多重度

1

制限事項

SC3，SC4 もしくはマルチコア対応 OS のみで使用可能

AUTOSAR 仕様との違い
AUTOSAR 仕様では，受信通知機能を使用する場合のコールバック関数の指定パラメータとして，
OsIocReceiverPullCB が規定されている【MCOS_Conf1010】．しかし，本仕様では，受信通知機能をサポートしないため，削除した．

337

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.8.48 OsIocDataProperties
コンテナ名/AUTOSAR/EcucDefs/Os/OsIoc/OsIocCommunication/
OsIocDataProperties【MCOS_Conf1023】

概要

通信データ情報コンテナ．
本コンテナが 1 つ定義された場合，単一通信となり，2 つ以上定義された場合，グループ通信となる．

多重度

1 .. *
OsIocDataPropertyIndex

パラメータ

OsIocDataTypeRef
OsIocInitValue

サブコンテナ－SC3，SC4 もしくはマルチコア対応 OS のみで使用可能．

制限事項

N:1 通信の IOC に対して，本コンテナを 2 つ以上定義した場合，ジェネレー
タはエラーを検出する≪MCOS_Conf1015≫．

OsIocDataPropertyIndex
パラメータ名概要/AUTOSAR/EcucDefs/Os/OsIoc/OsIocCommunication/OsIocDataProperties
OsIocDataPropertyIndex【MCOS_Conf1035】生成される IOC 用システムサービスの引数の順序．
小さい値のデータから順に，引数に与えられる．

型

整数型

値の範囲

0 .. 255

多重度

0 .. 1

制限事項

SC3，SC4 もしくはマルチコア対応 OS のみで使用可能．
グループ通信の IOC に対して，本パラメータを省略した場合，ジェネレータ
はエラーを検出する【NOS1093】．
単一通信の IOC に対して，本パラメータを指定した場合，ジェネレータはエラーを検出する【NOS1094】．
他の通信データに指定した値を，本パラメータに指定した場合，ジェネレー
タはエラーを検出する【NOS1095】．
1 つの IOC に対する本パラメータの値が，0 からの連番となっていない場合，
ジェネレータはエラーを検出する【NOS1096】．

338

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsIocDataTypeRef
パラメータ名/AUTOSAR/EcucDefs/Os/OsIoc/OsIocCommunication/OsIocDataProperties
OsIocDataTypeRef【MCOS_Conf1005】

概要

通信データのデータ型として使用する IMPLEMENTATION-DATA-TYPE

型

IMPLEMENTATION-DATA-TYPE への参照

値の範囲

－

多重度

1

制限事項

SC3，SC4 もしくはマルチコア対応 OS のみで使用可能．
本パラメータで指定したデータ型は，Rte_Type.h に定義されるものであり，
Rte_Type.h は RTE ジェネレータが生成するものである．本 OS を単体で使用する場合は，Rte_Type.h をユーザが用意する必要がある≪OS765≫．

OsIocInitValue
パラメータ名/AUTOSAR/EcucDefs/Os/OsIoc/OsIocCommunication/OsIocDataProperties
OsIocInitValue【MCOS_Conf1024】

概要

通信データの初期値

型

文字列型

値の範囲

－

多重度

0 .. 1

制限事項

SC3，SC4 もしくはマルチコア対応 OS のみで使用可能．
OsIocDataTypeRef で指定したデータ型に格納可能な初期値であるかどうか
は，ユーザ責任とする【NOS1097】．
キューなし通信の IOC に対して，本パラメータを省略した場合，ジェネレー
タはエラーを検出する【NOS1098】．

3.8.49 OsSpinlock
コンテナ名/AUTOSAR/EcucDefs/Os/OsSpinlock【MCOS_Conf0258】

概要

スピンロックオブジェクトコンテナ

多重度

0 .. *
OsSpinlockAccessingApplication

パラメータ

OsSpinlockSuccessor
OsSpinlockLockMethod

サブコンテナ
制限事項－
マルチコア対応 OS のみで使用可能

339

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsSpinlockAccessingApplication
パラメータ名/AUTOSAR/EcucDefs/Os/OsSpinlock/
OsSpinlockAccessingApplication【MCOS_Conf1021】

概要

スピンロックにアクセス可能な OSAP

型

/AUTOSAR/EcucDefs/Os/OsApplication への参照

値の範囲

－

多重度

1 .. *

制限事項

マルチコア対応 OS のみで使用可能．
本パラメータで指定した OSAP が，すべて同じコアに割付けられている場合，コンフィギュレーションはエラーを検出する【OSa137】．
SC1，SC2 においては，本パラメータをエラーチェックのみに使用
し，本パラメータに指定されていない OSAP からでもアクセス可能とする【NOS0955】．

OsSpinlockSuccessor
パラメータ名/AUTOSAR/EcucDefs/Os/OsSpinlock/
OsSpinlockSuccessor【MCOS_Conf1022】

概要

ネストして獲得可能なスピンロック指定．
獲得するスピンロックの順に本パラメータを記述することで，スピンロック獲得順序を示すリストを管理し，チェックすることができる．

型/AUTOSAR/EcucDefs/Os/OsSpinlock への参照

値の範囲

－

多重度

0 .. 1

制限事項

マルチコア対応 OS のみで使用可能．
本パラメータで作成されるスピンロック獲得順序のリストが循環している場合，ジェネレータはエラーを検出する【OS666】．

340

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsSpinlockLockMethod
パラメータ名/AUTOSAR/EcucDefs/Os/OsSpinlock/
OsSpinlockLockMethod【NOS0956】

概要

スピンロック種別型

列挙型
LOCK_NOTHING：標準スピンロック

値の範囲

LOCK_CAT2_INTERRUPTS：OS 割込み禁止スピンロック
LOCK_ALL_INTERRUPTS：全割込み禁止スピンロック

多重度

1

制限事項

マルチコア対応 OS のみで使用可能

AUTOSAR 仕様との違い
本仕様では，AUTOSAR 仕様 V5.0.0 (R4.0 Rev 3)では規定されていない，割込み禁止を行うスピン
ロックを規定した≪NOS0934≫≪NOS0935≫．しかし，AUTOSAR 仕様 V5.1.0 (R4.1 Rev 1)では，本仕様と同等の仕様が追加されたため，独自に追加したパラメータ名を AUTOSAR 仕様 V5.1.0 (R4.1 Rev
1)に合わせた≪NOS0956≫．ただし，タスクとの排他のみを行う LOCK_WITH_RES_SCHEDULERには未対応である．
3.8.50 OsInterCoreInterrupt
コンテナ名/AUTOSAR/EcucDefs/Os/OsInterCoreInterrupt【NOS0071】

概要

ICISR オブジェクトコンテナ

多重度

0 .. *
OsInterCoreInterruptInterruptSource

パラメータ

OsInterCoreInterruptAccessingApplication
OsInterCoreInterruptResourceRef
OsInterCoreInterruptStackSize

サブコンテナ
制限事項

OsInterCoreInterruptTimingProtection
マルチコア対応 OS のみで使用可能

341

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsInterCoreInterruptInterruptSource
パラメータ名/AUTOSAR/EcucDefs/Os/OsInterCoreInterrupt/
OsInterCoreInterruptInterruptSource【NOS1047】

概要

ICISR の初期状態

型

列挙型

値の範囲
多重度

ENABLE：有効
DISABLE：無効
0 .. 1
マルチコア対応 OS のみで使用可能．

制限事項

マルチコア対応 OS で本パラメータを省略した場合，ジェネレータ
はエラーを検出する【NOS1048】．

OsInterCoreInterruptAccessingApplication
パラメータ名/AUTOSAR/EcucDefs/Os/OsInterCoreInterrupt/
OsInterCoreInterruptAccessingApplication【NOS0957】

概要

ICISR にアクセス可能な OSAP

型

/AUTOSAR/EcucDefs/Os/OsApplication への参照

値の範囲

－

多重度

0 .. *

制限事項

SC3，SC4 のマルチコア対応 OS のみで使用可能

OsInterCoreInterruptResourceRef
パラメータ名/AUTOSAR/EcucDefs/Os/OsInterCoreInterrupt/
OsInterCoreInterruptResourceRef【NOS0958】

概要

ICISR が獲得するリソース

型/AUTOSAR/EcucDefs/Os/OsResource への参照

値の範囲

－

多重度

0 .. *

制限事項

マルチコア対応 OS のみで使用可能．
同じリソースに，異なるコアに割付くタスク，C2ISR，ICISR を関連付けした場合，ジェネレータはエラーを検出する【NOS0959】．

342

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsInterCoreInterruptStackSize/AUTOSAR/EcucDefs/Os/OsInterCoreInterrupt/

パラメータ名OsInterCoreInterruptStackSize【NOS0960】
SC1，SC2 の場合は，ICISR 用スタックのサイズ（単位：byte）．

概要

SC3，SC4 の場合は以下となる．
信頼 ICISR の場合，本パラメータで指定したサイズ（単位：byte）と，OsInterCoreInterruptSystemStackSize に指定されたサイズとの合計値を，信頼 ICISR スタックのサイズとして確保する．非信頼 ICISR の場合，非信頼 ICISR 用スタックのサイズ（単位：byte）
となる．
型

整数型

値の範囲

－

多重度

1

制限事項

マルチコア対応 OS のみで使用可能．
本パラメータに 0 を指定した場合，ジェネレータはエラーを検出する【NOS0961】．

3.8.51 OsInterCoreInterruptTimingProtection
コンテナ名/AUTOSAR/EcucDefs/Os/OsInterCoreInterrupt/
OsInterCoreInterruptTimingProtection【NOS0072】

概要

ICISR オブジェクトタイミング保護設定コンテナ

多重度

0 .. 1

パラメータ

OsInterCoreInterruptTimeFrame

サブコンテナ－

制限事項

SC2，SC4 のマルチコア対応 OS のみで使用可能

343

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OsInterCoreInterruptTimeFrame/AUTOSAR/EcucDefs/Os/OsInterCoreInterrupt/
OsInterCoreInterruptTimingProtection/

パラメータ名OsInterCoreInterruptTimeFrame【NOS1107】

概要

ISR タイムフレーム(単位：秒)型

浮動小数点型値の範囲

0 .. 無限大

多重度

0 .. 1

制限事項

SC2，SC4 のマルチコア対応 OS のみで使用可能
SC2，SC4 において本パラメータを省略した場合，対象 ISR の到着間隔を監視しない【NOS1516】．
本パラメータに設定可能な最小値，最大値はターゲット定義とする≪NOS1416≫．本パラメータに設定可能な最小値未満，もしくは，最大値を超える値を設定した場合，ジェネレータはエラーを検出する≪NOS1415≫．

3.8.52 OsInclude/AUTOSAR/EcucDefs/Os/OsInclude【NOS1331】

コンテナ名
概要

インクルードファイルコンテナ

多重度

0 .. *

パラメータ

OsIncludeFileName

サブコンテナ－

制限事項－

OsIncludeFileName
パラメータ名/AUTOSAR/EcucDefs/Os/ OsInclude/OsIncludeFileName【NOS1332】

概要

Os_Lcfg.h からインクルードするヘッダファイル名

型

文字列型

値の範囲

－

多重度

1 .. *

制限事項

－

344

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.8.53 OsMutex
コンテナ名/AUTOSAR/EcucDefs/Os/OsMutex【NOS0100】

概要

ミューテックスオブジェクトコンテナ

多重度

0 .. *

パラメータ
サブコンテナ

OsMutexAccessingApplication
OsMutexCoreAssignment－

OsMutexAccessingApplication
パラメータ名/AUTOSAR/EcucDefs/Os/OsMutex/
OsMutexAccessingApplication【NOS0962】

概要

ミューテックスにアクセス可能な OSAP

型

/AUTOSAR/EcucDefs/Os/OsApplication への参照

値の範囲

－

多重度

0 .. *

制限事項

SC3，SC4 のマルチコア対応 OS のみで使用可能

OsMutexCoreAssignment
パラメータ名/AUTOSAR/EcucDefs/Os/OsMutex/
OsMutexCoreAssignment【NOS0963】

概要

ミューテックスの割付けコア

型

整数型

値の範囲

－

多重度

1

制限事項

マルチコア対応 OS のみで使用可能

345

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9

システムサービス

3.9.1

GetActiveApplicationMode
C 言語 I/F

AppModeType GetActiveApplicationMode(void)【COS3702】

パラメータ[in]－パラメータ[in/out]－

パラメータ[out]－返り値StartOS で指定されたアプリ

アプリケーションモード取得成功

ケーションモード≪COS3703≫

INVALID_APPMODETYPE

不正な処理単位からの呼出し≪
NOS0413≫
割込み禁止状態からの呼出し≪
NOS0414≫

標準エラー

E_OS_CALLEVEL

エラーフックに渡される
エラーコード－

拡張エラー

不正な処理単位からの呼出し≪NOS0411≫

E_OS_DISABLEDINT

割込み禁止状態からの呼出し≪NOS0412≫

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC1，SC2，SC3，SC4≪NOS0319≫
機能

本システムサービスは，OS 起動時に指定されたアプリケーションモードを取得する．
機能仕様
GetActiveApplicationMode は，現在のアプリケーションモードを返す【COS3703】．
不正な処理単位から GetActiveApplicationMode を呼び出した場合，INVALID_APPMODETYPE を返す【NOS0413】．また，割込み禁止状態で呼び出された場合も，INVALID_APPMODETYPE を返す【NOS0414】〔NOS0383〕〔NOS0384〕〔NOS0385〕〔COS3354〕．
StartOS 呼出し時に Mode が不正であった場合，StartOS 呼出し時に指定された Mode の値を返す【NOS0390】．

346

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.2

StartOSC 言語 I/F
パラメータ[in]void StartOS(AppModeType Mode)【COS3706】
Mode

パラメータ[in/out]－

パラメータ[out]

－

返り値

－

エラーフックに

標準エラー

渡される
エラーコード拡張エラー

アプリケーションモード

－E_OS_ACCESSOS が起動しているコアでの呼出し≪NOS0170≫≪NOS1051≫

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC1，SC2，SC3，SC4≪NOS0319≫
機能

本システムサービスは，指定されたアプリケーションモードで OS を起動する．
機能仕様
StartOS は，Mode で指定されたアプリケーションモードで OS を起動する【COS3709】〔COS0504〕．
なお，OS 起動前に呼び出した StartOS からはリターンしない【OS424】．
StartOS 呼出し時に指定された Mode が不正であった場合，E_OS_MODE を終了要因のエラーコー
ドとして，OS シャットダウンを行う【NOS0371】．このとき，システム定義のスタートアップフック
は呼び出されずに，システム定義のシャットダウンフックが呼び出される【NOS0394】．
DisableAllInterrupts または SuspendAllInterrupts による割込み禁止状態で，StartOS を呼び出した場合，EnableAllInterrupts または ResumeAllInterrupts の発行と同等の処理を行なって，割込み許可状態へ遷移した上で，OS を起動する【NOS0372】．
既に OS が起動している状態で，StartOS が呼び出された場合は，エラーコードを E_OS_ACCESS
として，エラーフックを呼び出す【NOS0170】〔NOS0409〕．
StartOS は，ユーザが OS 外から呼び出す必要がある≪OSa085≫．
マルチコア対応 OS 仕様
既に OS が起動している状態のコアにおいて，StartOS が呼び出された場合は，エラーコードを
E_OS_ACCESS として，エラーフックを呼び出す【NOS1051】〔NOS0409〕．

347

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.3

ShutdownOS
C 言語 I/F
パラメータ[in]void ShutdownOS(StatusType Error)【COS3712】
Error(OS 定義のものであること)パラメータ[in/out]－

パラメータ[out]

－

返り値

－
E_OS_ACCESS

エラーフックに渡される
エラーコード終了要因のエラーコード

標準エラー
拡張エラー

非信頼 OSAP からの呼出し≪
NOS0709≫－

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC1，SC2，SC3，SC4≪NOS0319≫
機能

本システムサービスは，すべての OS サービスを終了する．
機能仕様
ShutdownOS は，すべての OS サービスを終了しシステム全体を停止する【COS3721】．ShutdownOS
で OS サービスを終了するために行う処理はターゲット定義である【NOS1333】．Error に設定される
エラーコードは OS で定義されたものでなければならない【COS3719】．OS で定義されていないエラーコードが指定された場合，Error を E_OS_SHUTDOWN_FATAL として ShutdownOS を呼び出したものとして，シャットダウン処理を行う【NOS0382】．また，不正な処理単位から呼び出した場合も，
Error を E_OS_SHUTDOWN_FATAL として ShutdownOS を呼び出したものとして，シャットダウン
処理を行う【NOS0362】．
コンフィギュレーション時にシャットダウンフックを有効と設定した場合，シャットダウンを行う前にシャットダウンフックを呼び出す【COS3716】．シャットダウンフックから制御が返ってきた場合，すべての割込みを禁止し無限ループを行う≪OS425≫．割込み禁止状態で，ShutdownOS が呼ばれた
場合は，割込み禁止状態のまま OS サービスの終了処理を行い，無限ループを行う【NOS0710】．
OS の内部状態が不定となり，処理を続行することが不可能となった場合には，OS 内部から
ShutdownOS を呼び出すこともある【COS3715】．なお，ShutdownOS がアプリケーションから呼ばれたか OS 内部から呼ばれたかは，シャットダウンフックに渡されるエラーコードによって識別することができる．
OS は，非信頼 OSAP に所属する処理単位からの OS シャットダウン要求を無視する≪OS054≫．ただし，エラーコードを E_OS_ACCESS として，エラーフックを呼び出す【NOS0709】〔NOS0409〕．

348

文書番号：ATK2-0010
文書名：ATK2 外部仕様書

マルチコア対応 OS 仕様
ATK2 では，マルチコア対応 OS におけるシステムの終了は，同期 OS シャットダウンのみ対応する
ため，ShutdownOS はサポートしない【NOS1334】．
OSEK 仕様との関連
OSEK 仕様では，ShutdownOS で OS サービスを終了するために行う処理は実装定義であると規定している【COS1222】．本仕様において，ShutdownOS で OS サービスを終了するために行う処理を，ターゲット定義とした≪NOS1333≫．

349

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.4

ActivateTask
C 言語 I/F
パラメータ[in]StatusType ActivateTask(TaskType TaskID)【COS3210】
タスク ID

TaskID

パラメータ[in/out]－

パラメータ[out]－E_OK

タスク起動成功≪COS3104≫
タスクの起動要求数が最大起動要求回数

E_OS_LIMIT
標準エラー

返り値

より多い(W)≪COS3220≫
タスクが所属する OSAP が利用可能でな

E_OS_ACCESSい(SC3，SC4 のみ)≪OS509≫

E_OS_PROTECTION_

タスクの到着間隔がタイムフレーム未満

ARRIVAL_TASK(SC2，SC4 のみ)≪NOS0194≫

E_OS_ID

TaskID が不正≪COS3221≫

E_OS_CALLEVEL
拡張エラー

不正な処理単位からの呼出し≪OS088≫
C1ISR からの呼出し≪NOS1200≫
アクセスが許可されていないタスクが指E_OS_ACCESS定された(SC3，SC4 のみ)≪OS056≫

E_OS_DISABLEDINT

割込み禁止状態からの呼出し≪OS093≫
起動していないコアへの呼出し≪OSa120

E_OS_CORE≫

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC1，SC2，SC3，SC4≪NOS0319≫
機能

本システムサービスは，TaskID で指定されたタスクを起動する．起動されたタスクはタスクの最初の命令から実行される．
機能仕様
ActivateTask は，TaskID で指定されたタスクの状態を，休止状態から実行可能状態へ遷移させる【COS3213】．起動されたタスクは OS によってタスクの最初の命令から実行される【COS3214】．
再スケジューリングのタイミングは呼出し元の処理単位やスケジューリングポリシによって異なる【COS3216】．起動されたタスクが拡張タスクの場合，保持していたイベントはタスク起動時にクリアされる【COS3218】〔COS0709〕．休止状態でない基本タスクに対して発行した場合，ActivateTask では，タスクの状態を変化させず，起動要求回数をインクリメントするのみである【COS3296】．
ActivateTask 呼出し時に指定された TaskID が不正であった場合，E_OS_ID を返す【COS3221】．
TaskID で指定されたタスクの起動要求数が最大起動要求回数より多い場合，E_OS_LIMIT を返す

350

文書番号：ATK2-0010
文書名：ATK2 外部仕様書【COS3220】．E_OS_LIMIT を返す場合，タスク起動要求は無視される【COS3217】．
TaskID で指定されたタスクの到着間隔がタイムフレーム未満であった場合，
E_OS_PROTECTION_ARRIVAL_TASK を返す【NOS0194】．E_OS_PROTECTION_ARRIVAL_TASKを返す場合，タスクの起動要求は無視される(SC2，SC4 のみ)【NOS0195】．
マルチコア対応 OS 仕様
ActivateTask は，TaskID で指定されたタスクに対してアクセス権があれば，異なるコアに割付いている OSAP に所属するタスクを起動することができる【OS596】．コアを跨いで呼び出す場合，
ActivateTask によって対象のタスクが起動した，あるいはエラーが発生して起動しなかったかの結果が確定した上で，呼び出し元の処理単位へリターンする【OS598】．ActivateTask をコアを跨いで呼び出
し，エラーが発生した場合は，呼び出し元のコアでエラーフックが呼び出される【OS599】．

351

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.5

TerminateTask
C 言語 I/F

StatusType TerminateTask(void)【COS3223】〔COS1427〕

パラメータ[in]－パラメータ[in/out]－

パラメータ[out]

－

なし

－

タスク正常終了≪COS3230≫

E_OS_RESOURCE
返り値

拡張エラー

E_OS_CALLEVEL
E_OS_DISABLEDINT
E_OS_SPINLOCK

リソースを占有した状態での呼出し≪
COS3235≫
不正な処理単位からの呼出し≪OS088≫
C1ISR からの呼出し≪NOS1200≫
割込み禁止状態からの呼出し≪OS093≫
スピンロックを占有した状態での呼出し≪
OS612≫

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC1，SC2，SC3，SC4≪NOS0319≫
機能

本システムサービスは，本システムサービスを呼び出したタスクを終了する．
機能仕様
TerminateTask は，TerminateTask を呼び出したタスクの状態を，実行状態から休止状態へ遷移させる【COS3226】．タスクが正常に終了した場合，呼出し元に制御は返らない【COS3230】．また，タスクが正常に終了した場合は再スケジューリングが行われる【COS3232】〔COS0462〕．
呼出し元タスクが内部リソースを占有していた場合は内部リソースを解放する【COS3227】．タスク
が，標準リソースを占有したまま TerminateTask を呼び出した場合，E_OS_RESOURCE を返す【COS3235】〔COS0835〕〔COS0811〕．拡張エラー無効時に標準リソースを占有したままタスクを終了した場合の動作は保証されない【COS3229】．
マルチコア対応 OS 仕様
タスクが，スピンロックを占有したまま TerminateTask を呼び出した場合，E_OS_SPINLOCK を返す【OS612】．OS 割込み禁止スピンロック，全割込み禁止スピンロックの獲得により，コアが割込み禁止状態となっていても，E_OS_SPINLOCK を返す【NOS0964】．

352

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.6

ChainTask
C 言語 I/F
パラメータ[in]StatusType ChainTask(TaskType TaskID)【COS3238】〔COS1427〕
タスク ID

TaskID

パラメータ[in/out]－

パラメータ[out]

－

なし

－

タスク起動と呼び出したタスク正常終了≪
COS3246≫
タスクの起動要求数が最大起動要求回数よE_OS_LIMIT
標準エラー

り多い(W)≪COS3253≫
タスクが所属する OSAP が利用可能でない

E_OS_ACCESS(SC3，SC4 のみ)≪OS509≫

E_OS_PROTECTION_

タスクの到着間隔がタイムフレーム未満

ARRIVAL_TASK(SC2，SC4 のみ)≪NOS0196≫

E_OS_ID

TaskID が不正≪COS3254≫

E_OS_RESOURCE

返り値

E_OS_CALLEVEL
拡張エラー

リソースを占有した状態での呼出し≪
COS3255≫
不正な処理単位からの呼出し≪OS088≫
C1ISR からの呼出し≪NOS1200≫
アクセスが許可されていないタスクが指定

E_OS_ACCESSされた(SC3，SC4 のみ)≪OS056≫

E_OS_DISABLEDINT
E_OS_SPINLOCK

割込み禁止状態からの呼出し≪OS093≫
スピンロックを占有した状態での呼出し≪
OS612≫
起動していないコアへの呼出し≪OSa120

E_OS_CORE≫

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC1，SC2，SC3，SC4≪NOS0319≫
機能

本システムサービスは，本システムサービスを呼び出したタスクを終了した後，TaskID で指定されたタスクを起動する．
機能仕様
ChainTask は，ChainTask を呼び出したタスクの状態を実行状態から休止状態へ遷移させた後，
TaskID で指定されたタスクの状態を休止状態から実行可能状態へ遷移させる【COS3241】．ChainTask
によって起動されたタスクはそのタスクの初期優先度で最後に起動要求をされたものとして扱う【COS0484】．起動されたタスクが拡張タスクの場合，保持していたイベントはタスク起動時にクリア

353

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
される【COS3251】〔COS0709〕．ChainTask を使用することにより，呼出元と対象タスクが両方とも休止状態にならないことを保証する．【COS3839】．
タスクが正常に終了した場合，呼出し元に制御は返らない【COS3246】．また，タスクが正常に終了した場合は再スケジューリングが行われる【COS3248】〔COS0463〕．呼出し元のタスクに対してChainTask を呼び出した場合，多重要求にはならず，すぐに実行可能状態へ遷移させる【COS3242】．
呼出し元のタスクと休止状態の基本タスク以外のタスクに対して発行した場合，ChainTask では，タスクの状態を変化させず，起動要求回数をインクリメントするのみである≪COS3296≫．
呼出し元タスクが内部リソースを占有していた場合は内部リソースを解放する【COS3243】．
タスクが，標準リソースを占有したまま ChainTask を呼び出した場合，E_OS_RESOURCE を返す【COS3255】〔COS0835〕〔COS0811〕．拡張エラー無効時に標準リソースを占有したままタスクを終了した場合の動作は保証されない【COS3245】．
ChainTask 呼出し時に指定された TaskID が不正であった場合，E_OS_ID を返す【COS3254】．
TaskID で指定されたタスクの起動要求数が最大起動要求回数より多い場合，E_OS_LIMIT を返す【COS3253】．E_OS_LIMIT を返す場合，タスク起動要求は無視される【COS3250】．
TaskID で指定されたタスクの到着間隔がタイムフレーム未満であった場合，
E_OS_PROTECTION_ARRIVAL_TASK を返す【NOS0196】．E_OS_PROTECTION_ARRIVAL_TASKを返す場合，タスク起動要求は無視される【NOS0197】．
マルチコア対応 OS 仕様
ChainTask は，TaskID で指定されたタスクに対してアクセス権があれば，異なるコアに割付いている OSAP に所属するタスクを起動することができる【OS600】．
ChainTask をコアを跨いで呼び出す場合，OS は以下の手順で処理を行う必要がある【NOS0046】．
・ エラーチェックの後，始めに後続タスクの起動処理を行う．
・ 後続タスクが起動した後に ChainTask を呼び出したタスクの終了処理を行う．
この振る舞いは，ChainTask を呼び出したタスクと後続タスクが一時的に同時に実行されるという過渡的な状態が生ずるという点でシングルコアと異なる．
タスクが，スピンロックを占有したまま ChainTask を呼び出した場合，E_OS_SPINLOCK を返す≪
OS612≫．OS 割込み禁止スピンロック，全割込み禁止スピンロックの獲得により，コアが割込み禁止状態となっていても，E_OS_SPINLOCK を返す【NOS0965】．

354

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.7

Schedule
C 言語 I/F

StatusType Schedule(void)【COS3258】

パラメータ[in]－パラメータ[in/out]－

パラメータ[out]

－

標準エラー

E_OK

再スケジューリング成功≪COS3104≫

E_OS_RESOURCE
返り値

拡張エラー

E_OS_CALLEVEL
E_OS_DISABLEDINT
E_OS_SPINLOCK

リソースを占有した状態での呼出し≪
COS3266≫
不正な処理単位からの呼出し≪OS088≫
C1ISR からの呼出し≪NOS1200≫
割込み禁止状態からの呼出し≪OS093≫
呼出し元タスクがスピンロックを占有している≪OS624≫

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC1，SC2，SC3，SC4≪NOS0319≫
機能

本システムサービスは，明示的な再スケジューリングを行う．
機能仕様
Schedule は，Schedule を呼び出したタスクより優先度の高いタスクがある場合に再スケジューリン
グを行い，それ以外の場合はそのまま呼び出したタスクの処理を継続する【COS3261】．
Schedule による再スケジューリングは，呼出し元タスクが内部リソースを占有しているか，ノンプ
リエンプティブタスクの場合にのみ行う【COS3263】．Schedule は，内部リソースを占有しているタス
クが，より優先度の低いタスクをコアに割付ける際に使用する．
Schedule でプリエンプトが発生した際には内部リソースを解放し，その後，呼出し元タスクが再び実行状態となった場合は自動的に内部リソースを獲得する【COS3262】．タスクが標準リソースを占有したまま Schedule を呼び出した場合，
E_OS_RESOURCE を返す【COS3266】〔COS0835〕〔COS0811〕．
マルチコア対応 OS 仕様
タスクがスピンロックを占有したまま Schedule を呼び出した場合，E_OS_SPINLOCK を返す【OS624】．OS 割込み禁止スピンロック，全割込み禁止スピンロックの獲得により，コアが割込み禁止状態となっていても，E_OS_SPINLOCK を返す【NOS0966】．

355

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.8

GetTaskID
C 言語 I/F

StatusType GetTaskID(TaskRefType TaskID)【COS3268】

パラメータ[in]－パラメータ[in/out]－

パラメータ[out]TaskID

タスク ID を格納する領域へのポインタ

E_OK

タスク ID 取得成功≪COS3104≫

標準エラー

不正な処理単位からの呼出し≪OS088
E_OS_CALLEVEL
返り値

拡張エラー

≫
C1ISR からの呼出し≪NOS1200≫

E_OS_PARAM_POINTER
E_OS_ILLEGAL_ADDRESS

ポインタ引数が NULL≪OS566≫
TaskID に不正なアドレスが指定された(SC3，SC4 のみ)≪OS051≫

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC1，SC2，SC3，SC4≪NOS0319≫
機能

本システムサービスは，現在実行中のタスクの ID 情報を取得する．
機能仕様
現在，実行状態となっているタスクの ID を TaskID に格納する【COS3271】．実行しているタスクが存在しない場合，TaskID に INVALID_TASK を格納する【COS3274】．GetTaskID は，割込み禁止状態であっても，呼び出すことができる【NOS1146】．
使用上の注意実行状態のタスクが強制終了された場合，次にスケジューラが起動するまでは TaskID にそのタスクの ID 情報が格納される≪NOS0653≫．
OSAP 強制終了時に呼び出されるプレタスクフック，ポストタスクフックから GetTaskID を呼び出した場合，TaskID には強制終了対象 OSAP のリスタートタスクのタスク ID が格納される≪NOS1583≫≪NOS1584≫≪NOS1585≫．もし，コンフィギュレーション時に対象 OSAP のリスタートタスクを指定していない場合は，TaskID に NULL が格納される≪NOS1586≫．
マルチコア対応 OS 仕様
GetTaskID を呼び出した処理単位が割付いているコアにおける，現在実行中のタスクの ID 情報を取得する【OSa138】．GetTaskID を呼び出した処理単位が割付いているコアに，現在しているタスクが存在しない場合，TaskID に INVALID_TASK を格納する【NOS0967】．

356

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
AUTOSAR 仕様との違い
AUTOSAR 仕様では，割込み禁止の状態で，返り値の型が StatusType のシステムサービスを呼び出した場合，OS はシステムサービスの処理を行わず，E_OS_DISABLEDINT を返すと規定されている≪
OS093≫．しかし，割込み禁止の状態で呼び出されたエラーフックやプロテクションフックから，
GetTaskID を使用することが想定されるため，本仕様では，割込み禁止状態でも呼び出すことができると規定した≪NOS1146≫．

357

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.9

GetTaskState
C 言語 I/F

StatusType GetTaskState(TaskType TaskID, TaskStateRefType State)【COS3278】

パラメータ[in]タスク ID

TaskID

パラメータ[in/out]－

パラメータ[out]State

タスク状態を格納する領域へのポイン
タ

E_OK
標準エラー

タスク状態取得成功≪COS3104≫
タスクが所属する OSAP が利用可能で

E_OS_ACCESSない(SC3，SC4 のみ)≪OS509≫
TaskID が不正≪COS3286≫

E_OS_ID

不正な処理単位からの呼出し≪OS088
E_OS_CALLEVEL≫C1ISR からの呼出し≪NOS1200≫

返り値
拡張エラー

アクセスが許可されていないタスクがE_OS_ACCESS

指定された(SC3，SC4 のみ)≪OS056≫

E_OS_PARAM_POINTER
E_OS_ILLEGAL_ADDRESS

ポインタ引数が NULL≪OS566≫
State に不正なアドレスが指定された(SC3，SC4 のみ)≪OS051≫
起動していないコアへの呼出し≪

E_OS_CORE

OSa120≫コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC1，SC2，SC3，SC4≪NOS0319≫
機能

本システムサービスは，TaskID で指定されたタスクの状態を取得する．
機能仕様
GetTaskState は，TaskID で指定されたタスクの状態を取得し，State に格納する【COS3281】．プ
リエンプティブタスクの場合，取得結果を評価するときには既に別のタスク状態へ遷移している可能性がある【COS3283】．TaskID で指定されたタスクが，多重に起動要求されていても，取得結果に影響はない【COS3284】．GetTaskState は，割込み禁止状態であっても，呼び出すことができる【NOS1147】．
GetTaskState 呼出し時に指定された TaskID が不正であった場合，E_OS_ID を返す【COS3286】．
使用上の注意実行状態のタスクが強制終了された場合，次にスケジューラが起動するまでは，そのタスクの状態は実行状態となる．≪NOS0653≫

358

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OSAP 強制終了時に呼び出されるプレタスクフックから GetTaskState を呼び出し，TaskID で強制終了対象 OSAP に属するタスクを指定した場合は，State に強制終了処理実施前の状態が格納される≪
NOS1583≫≪NOS1584≫≪NOS1585≫．
マルチコア対応 OS における仕様
GetTaskState は，コアを跨いで呼び出すことができる【OSa139】．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，割込み禁止の状態で，返り値の型が StatusType のシステムサービスを呼び出した場合，OS はシステムサービスの処理を行わず，E_OS_DISABLEDINT を返すと規定されている≪
OS093≫．しかし，割込み禁止の状態で呼び出されたエラーフックやプロテクションフックから，
GetTaskState を使用することが想定されるため，本仕様では，割込み禁止状態でも呼び出すことができると規定した≪NOS1147≫．

359

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.10 EnableAllInterrupts
C 言語 I/F

void EnableAllInterrupts(void)【COS3301】〔COS0612〕

パラメータ[in]－パラメータ[in/out]－

パラメータ[out]

－

返り値

標準エラー

－

拡張エラー

－

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC1，SC2，SC3，SC4≪NOS0319≫
機能

本システムサービスは，DisableAllInterrupts によって設定された割込み禁止状態を，割込み許可状態に戻す．
機能仕様
EnableAllInterrupts は，DisableAllInterrupts によって設定された割込み禁止状態を割込み許可状
態に戻す【COS3304】．EnableAllInterrupts は DisableAllInterrupts と対に呼び出さなければならな
い．
EnableAllInterrupts はハードウェアの特性に合わせて最小限のオーバヘッドで実装すべきである【COS3838】．
DisableAllInterrupts と EnableAllInterrupts によるクリティカルセクション中は他のシステムサー
ビスを呼出してはならない【COS3306】．他のシステムサービスを呼び出した場合，返り値の型がStatusType のシステムサービスは E_OS_DISABLEDINT を返す≪OS093≫．返り値の型がStatusType でないシステムサービスは無効値を返す【NOS0383】〔COS3306〕．返り値がないシステム
サービスを呼び出した場合は，システムサービス毎に規定する．ただし，DisableAllInterrupts とEnableAllInterrupts によるクリティカルセクション中であっても，DisableInterruptSource，EnableInterruptSource は呼び出すことが可能である【NOS0347】．
DisableAllInterrupts と EnableAllInterrupts によるクリティカルセクション中に呼び出された処理単位から，EnableAllInterrupts を呼び出した場合，元の処理単位が呼び出した DisableAllInterrupts
による割込み禁止状態が解除される【NOS0636】．
SuspendAllInterrupts と ResumeAllInterrupts，SuspendOSInterrupts と ResumeOSInterrupts
によるクリティカルセクション中に EnableAllInterrupts を呼び出した場合，OS は何もしない【NOS0711】．また，DisableAllInterrupts を呼び出していない状態で，EnableAllInterrupts を呼び出した場合，OS は何もしない【NOS0866】．

360

文書番号：ATK2-0010
文書名：ATK2 外部仕様書

ATK2 では，オーバヘッド削減のために，DisableAllInterrupts と EnableAllInterrupts の実装をユーザが再定義することができる【NOS1335】．
マルチコア対応 OS 仕様
対象となる割込み要因は，EnableAllInterrupts を呼び出した処理単位が割付いているコアに接続されている割込み要因のみとする【OS591】．
メモリ保護機能有効時の注意事項
EnableAllInterrupts は，常に関数呼出しで呼び出される≪NOS1523≫．そのため，非信頼 OSAP
からは EnableAllInterrupts を呼び出すことができず，呼び出した場合の動作は，ターゲット依存となる≪NOS1524≫．

361

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.11 DisableAllInterrupts
C 言語 I/F

void DisableAllInterrupts(void)【COS3310】〔COS0612〕

パラメータ[in]－パラメータ[in/out]－

パラメータ[out]－返り値
エラーフックに渡される
エラーコード

標準エラー

－

拡張エラー

－

標準エラー
拡張エラー

E_OS_ACCESS

非信頼 OSAP からの呼出し≪
NOS1517≫－

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC1，SC2，SC3，SC4≪NOS0319≫
機能

本システムサービスは，ターゲットの割込みをすべて禁止し，クリティカルセクションに入る．
機能仕様
DisableAllInterrupts は，ターゲットの割込みをすべて禁止しクリティカルセクションに入る【COS3313】．DisableAllInterrupts は EnableAllInterrupts と対に呼び出さなければならない．
DisableAllInterrupts はハードウェアの特性に合わせて最小限のオーバヘッドで実装すべきである【COS3318】．
TP 機能に対応した SC1 の OS では，DisableAllInterrupts を非信頼 OSAP の処理単位から呼び出した場合，エラーコードを E_OS_ACCESS として，エラーフックを呼び出す【NOS1517】〔NOS1458〕〔NOS0409〕．
DisableAllInterrupts と EnableAllInterrupts によるクリティカルセクション中は他のシステムサー
ビスを呼出してはならない【COS3317】．他のシステムサービスを呼び出した場合，返り値の型がStatusType のシステムサービスは E_OS_DISABLEDINT を返す≪OS093≫．返り値の型がStatusType でないシステムサービスは無効値を返す≪NOS0383≫．返り値がないシステムサービスを呼び出した場合は，システムサービス毎に規定する．ただし，DisableAllInterrupts とEnableAllInterrupts によるクリティカルセクション中であっても，DisableInterruptSource，EnableInterruptSource は呼び出すことが可能である≪NOS0347≫．
DisableAllInterrupts はネストして呼出してはならない【COS3320】．ネストして呼び出した場合，
OS は何もしない【NOS0353】〔COS3320〕．ネストが必要な場合はSuspendAllInterupts/ResumeAllInterrupts または SuspendOSInterrupts/ResumeOSInterrupts を使用すること．

362

文書番号：ATK2-0010
文書名：ATK2 外部仕様書

DisableAllInterrupts と EnableAllInterrupts によるクリティカルセクション中に呼び出された処理単位から，EnableAllInterrupts を呼び出した場合，元の処理単位が呼び出した DisableAllInterrupts
による割込み禁止状態が解除される≪NOS0636≫．
SuspendAllInterrupts と ResumeAllInterrupts，SuspendOSInterrupts と ResumeOSInterrupts
によるクリティカルセクション中に DisableAllInterrupts を呼び出した場合，OS は何もしない【NOS0837】．
ATK2 では，オーバヘッド削減のために，DisableAllInterrupts と EnableAllInterrupts の実装をユーザが再定義することができる≪NOS1335≫．
タイミング保護，TP 機能有効時の注意事項
信頼 OSAP が全割込み禁止状態を維持し続けた場合，実行時間，リソース占有時間，OS 割込み禁止
時間，また，タイムウィンドウの保護違反時処理が遅延する可能性がある．この事象を検出するために，
WatchdogManager のアライブ監視などを併用することを推奨する．
マルチコア対応 OS 仕様
対象となる割込み要因は，DisableAllInterrupts を呼び出した処理単位が割付いているコアに接続されている割込み要因のみとする【OS590】．
メモリ保護機能有効時の注意事項
DisableAllInterrupts は，常に関数呼出しで呼び出される≪NOS1523≫．そのため，非信頼 OSAP
からは DisableAllInterrupts を呼び出すことができず，呼び出した場合の動作は，ターゲット依存となる≪NOS1524≫．

363

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.12 ResumeAllInterrupts
C 言語 I/F

void ResumeAllInterrupts(void)【COS3324】〔COS0612〕

パラメータ[in]－パラメータ[in/out]－

パラメータ[out]

－

返り値

標準エラー

－

拡張エラー

－
E_OS_STATE

SuspendAllInterrupts を呼び出していない≪

エラーフックに
渡される

標準エラー

NOS0821≫
E_OS_DISABLEDINT

エラーコードDisableAllInterrupts 割込
み禁止状態からの呼出し≪
NOS0712≫

拡張エラー－

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC1，SC2，SC3，SC4≪NOS0319≫
機能

本システムサービスは，SuspendAllInterrupts によって設定された割込み禁止状態を，割込み許可状態に戻す．
機能仕様
ResumeAllInterrupts は，SuspendAllInterrupts によって設定された割込み禁止状態を割込み許可
状態に戻す【COS3327】．SuspendAllInterrupts がネストして呼び出されている場合，
ResumeAllInterrupts は割込み状態を SuspendAllInterrupts が最後に呼び出された時の状態へ戻す【COS3332】．ResumeAllInterrupts は SuspendAllInterrupts と対に呼び出さなければならない．
SuspendAllInterrupts を呼び出していない状態で，ResumeAllInterrupts を呼び出した場合，エラー
コードを E_OS_STATE として，エラーフックを呼び出す【NOS0821】〔NOS0409〕．
ResumeAllInterrupts はハードウェアの特性に合わせて最小限のオーバヘッドで実装すべきである【COS3331】．
SuspendAllInterrupts と ResumeAllInterrupts によるクリティカルセクション中は，
SuspendAllInterrupts，ResumeAllInterrupts，SuspendOSInterrupts，ResumeOSInterrupts 以外のシステムサービスを呼出してはならない【COS3330】．他のシステムサービスを呼び出した場合，返り値の型が StatusType のシステムサービスは E_OS_DISABLEDINT を返す≪OS093≫．返り値の型がStatusType でないシステムサービスは無効値を返す【NOS0384】〔COS3343〕〔COS3330〕．返り値がないシステムサービスを呼び出した場合は，システムサービス毎に規定する．ただし，

364

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
SuspendAllInterrupts と ResumeAllInterrupts によるクリティカルセクション中であっても，
DisableInterruptSource，EnableInterruptSource は呼び出すことが可能である≪NOS0347≫．
マルチコア対応 OS 仕様
対象となる割込み要因は，ResumeAllInterrupts を呼び出した処理単位が割付いているコアに接続されている割込み要因のみとする【OS593】．

365

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.13 SuspendAllInterrupts
C 言語 I/F

void SuspendAllInterrupts(void)【COS3336】〔COS0612〕

パラメータ[in]－パラメータ[in/out]－

パラメータ[out]

－

返り値

標準エラー

－

拡張エラー

－

エラーフックに

E_OS_LIMIT

ネスト回数の上限値超過≪NOS0714≫

E_OS_DISABLEDINT

DisableAllInterrupts 割込み禁止状態

標準エラー

からの呼出し≪NOS0712≫
E_OS_ACCESS

渡される
エラーコード

非信頼 OSAP からの呼出し≪NOS1518
≫

拡張エラー

－

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC1，SC2，SC3，SC4≪NOS0319≫
機能

本システムサービスは，ターゲットの割込み状態を保存した後，ターゲットの割込みをすべて禁止し，クリティカルセクションに入る．
機能仕様
ターゲットの割込み状態を保存した後，ターゲットの割込みをすべて禁止しクリティカルセクションに入る【COS3339】．SuspendAllInterrupts は ResumeAllInterrupts と対に呼び出さなければならな
い．
SuspendAllInterrupts はハードウェアの特性に合わせて最小限のオーバヘッドで実装すべきである【COS3344】．
SuspendAllInterrupts を，そのネスト回数の上限値を超えて呼び出した場合，エラーコードを
E_OS_LIMIT として，エラーフックを呼び出す【NOS0714】〔NOS0409〕．
SC3，SC4，および，TP 機能に対応した OS では，SuspendAllInterrupts を非信頼 OSAP の処理単位から呼び出した場合，エラーコードを E_OS_ACCESS として，エラーフックを呼び出す【NOS1518】〔NOS1458〕〔NOS0409〕．
SuspendAllInterrupts と ResumeAllInterrupts によるクリティカルセクション中は，
SuspendAllInterrupts，ResumeAllInterrupts，SuspendOSInterrupts，ResumeOSInterrupts 以外のシステムサービスを呼出してはならない【COS3343】．他のシステムサービスを呼び出した場合，返り366

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
値の型が StatusType のシステムサービスは E_OS_DISABLEDINT を返す≪OS093≫．返り値の型がStatusType でないシステムサービスは無効値を返す≪NOS0384≫．返り値がないシステムサービスを呼び出した場合は，システムサービス毎に規定する．ただし，SuspendAllInterrupts とResumeAllInterrupts によるクリティカルセクション中であっても，DisableInterruptSource，EnableInterruptSource は呼び出すことが可能である≪NOS0347≫．
SuspendAllInterrupts と ResumeAllInterrupts によるクリティカルセクション中に呼び出された処
理 単 位 か ら ， ResumeAllInterrupts を 呼 び 出 し た 場 合 ， 元 の 処 理 単 位 が 呼 び 出 し た
SuspendAllInterrupts による割込み禁止状態は解除されない≪NOS0657≫．
ATK2 では，SuspendAllInterrupts のネスト回数の上限値を 255 と規定した≪NOS1184≫．
タイミング保護，TP 機能有効時の注意事項
信頼 OSAP が全割込み禁止状態を維持し続けた場合，実行時間，リソース占有時間，OS 割込み禁止
時間，また，タイムウィンドウの保護違反時処理が遅延する可能性がある．この事象を検出するために，
WatchdogManager のアライブ監視などを併用することを推奨する．
マルチコア対応 OS 仕様
対象となる割込み要因は，SuspendAllInterrupts を呼び出した処理単位が割付いているコアに接続されている割込み要因のみとする【OS592】．

367

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.14 ResumeOSInterrupts
C 言語 I/F

void ResumeOSInterrupts(void)【COS3348】〔COS0612〕

パラメータ[in]－パラメータ[in/out]－

パラメータ[out]

－

返り値

標準エラー

－

拡張エラー

－
E_OS_STATE

エラーフックに
渡される

標準エラー

SuspendOSInterrupts を呼び出していない≪NOS0822≫

E_OS_DISABLEDINT

エラーコードDisableAllInterrupts 割込み禁止状
態からの呼出し≪NOS0712≫

拡張エラー

－

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC1，SC2，SC3，SC4≪NOS0319≫
機能

本システムサービスは，SuspendOSInterrupts によって設定された割込み禁止状態を，割込み許可状態に戻す．
機能仕様
SuspendOSInterrupts によって設定された割込み禁止状態を割込み許可状態に戻す【COS3351】．
SuspendOSInterrupts がネストして呼び出されている場合，ResumeOSInterrupts は割込み状態をSuspendOSInterrupts が最後に呼び出された時の状態へ戻す【COS3357】．ResumeOSInterrupts はSuspendOSInterrupts と対に呼び出さなければならない．SuspendOSInterrupts を呼び出していない状態で，ResumeOSInterrupts を呼び出した場合，エラーコードを E_OS_STATE として，エラーフッ
クを呼び出す【NOS0822】〔NOS0409〕．
ResumeOSInterrupts はハードウェアの特性に合わせて最小限のオーバヘッドで実装すべきである【COS3355】．
SuspendOSInterrupts と ResumeOSInterrupts によるクリティカルセクション中は，
SuspendAllInterrupts，ResumeAllInterrupts，SuspendOSInterrupts，ResumeOSInterrupts 以外のシステムサービスを呼出してはならない【COS3354】．他のシステムサービスを呼び出した場合，返り値の型が StatusType のシステムサービスは E_OS_DISABLEDINT を返す≪OS093≫．返り値の型がStatusType でないシステムサービスは無効値を返す【NOS0385】〔COS3354〕〔COS3368〕．返り値がないシステムサービスを呼び出した場合は，システムサービス毎に規定する．ただし，SuspendOSInterrupts と ResumeOSInterrupts によるクリティカルセクション中であっても，
DisableInterruptSource，EnableInterruptSource は呼び出すことが可能である≪NOS0347≫．

368

文書番号：ATK2-0010
文書名：ATK2 外部仕様書

SuspendOSInterrupts と ResumeOSInterrupts によるクリティカルセクション中に呼び出された処
理 単 位 か ら ， ResumeOSInterrupts を 呼 び 出 し た 場 合 ， 元 の 処 理 単 位 が 呼 び 出 し た
SuspendOSInterrupts による割込み禁止状態は解除されない【NOS0658】．
OS 処理レベル以上で動作する処理単位から ResumeOSInterrupts を呼び出した場合，
エラーチェック，
割込み禁止解除処理，およびネスト回数のデクリメントを行わず，呼び出し元の処理単位へリターンする【NOS1582】．
マルチコア対応 OS 仕様
対象となる割込み要因は，ResumeOSInterrupts を呼び出した処理単位が割付いているコアに接続されている割込み要因のみとする【OS595】．

369

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.15 SuspendOSInterrupts
C 言語 I/F

void SuspendOSInterrupts(void)【COS3361】〔COS0612〕

パラメータ[in]－パラメータ[in/out]－

パラメータ[out]

－

返り値

標準エラー

－

拡張エラー

－
E_OS_LIMIT

ネスト回数の上限値超過≪
NOS0716≫

エラーフックに
渡される

標準エラー

E_OS_DISABLEDINT

態からの呼出し≪NOS0712≫
E_OS_ACCESS

エラーコードDisableAllInterrupts 割込み禁止状
非信頼 OSAP からの呼出し≪
NOS1519≫

拡張エラー－

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC1，SC2，SC3，SC4≪NOS0319≫
機能

本システムサービスは，ターゲットの割込み状態を保存した後，C2ISR をすべて禁止し，クリティカルセクションに入る．
機能仕様
ターゲットの割込み状態を保存した後，C2ISR をすべて禁止しクリティカルセクションに入る【COS3364】．SuspendOSInterrupts は ResumeOSInterrupts と対に呼び出さなければならない．
SuspendOSInterrupts はハードウェアの特性に合わせて最小限のオーバヘッドで実装すべきである【COS3369】．
SuspendOSInterrupts を，そのネスト回数の上限値を超えて呼び出した場合，エラーコードを
E_OS_LIMIT として，エラーフックを呼び出す【NOS0716】〔NOS0409〕．OS 処理レベル以上で動作する処理単位から SuspendOSInterrupts を呼び出した場合，エラーチェック，割込み禁止処理，およびネスト回数のインクリメントを行わず，呼び出し元の処理単位へリターンする【NOS1581】．
TP 機能に対応した OS では，SuspendOSInterrupts を非信頼 OSAP の処理単位から呼び出した場合，エラーコードを E_OS_ACCESS として，
エラーフックを呼び出す【NOS1519】〔NOS1457〕〔NOS0409〕．
SuspendOSInterrupts と ResumeOSInterrupts によるクリティカルセクション中はSuspendAllInterrupts，ResumeAllInterrupts，SuspendOSInterrupts，ResumeOSInterrupts 以外の

370

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
システムサービスを呼出してはならない【COS3368】．他のシステムサービスを呼び出した場合，返り値の型が StatusType のシステムサービスは E_OS_DISABLEDINT を返す≪OS093≫．返り値の型がStatusType でないシステムサービスは無効値を返す≪NOS0385≫．返り値がないシステムサービスを呼び出した場合は，システムサービス毎に規定する．ただし，SuspendOSInterrupts とResumeOSInterrupts によるクリティカルセクション中であっても，DisableInterruptSource，EnableInterruptSource は呼び出すことが可能である≪NOS0347≫．
SuspendOSInterrupts はすべての C2ISR を禁止するが，効率的な実装方法ができない場合はそれ以外の割込みを禁止してもよい【COS3370】．
SuspendOSInterrupts と ResumeOSInterrupts によるクリティカルセクション中に呼び出された処
理 単 位 か ら ， ResumeOSInterrupts を 呼 び 出 し た 場 合 ， 元 の 処 理 単 位 が 呼 び 出 し た
SuspendOSInterrupts による割込み禁止状態は解除されない≪NOS0658≫．
ATK2 では，SuspendOSInterrupts のネスト回数の上限値を 255 と規定した≪NOS1185≫．
マルチコア対応 OS 仕様
対象となる割込み要因は，SuspendOSInterrupts を呼び出した処理単位が割付いているコアに接続されている割込み要因のみとする【OS594】．

371

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.16 GetISRIDC 言語 I/F

ISRType GetISRID(void)【OS511】

パラメータ[in]－パラメータ[in/out]－

パラメータ[out]－返り値

現在実行中の ISR ID

ISR ID 取得成功≪OS263≫

INVALID_ISR

実行中の ISR が存在しない≪OS264≫
不正な処理単位からの呼出し≪NOS0416≫

エラーフックに渡される
エラーコード

標準エラー
拡張エラー

－
E_OS_CALLEVEL

不正な処理単位からの呼出し≪
NOS0411≫

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC1，SC2，SC3，SC4【OS515】
機能

本システムサービスは，現在実行中の C2ISR の ID 情報を取得する．
機能仕様
GetISRID は，C2ISR，および，C2ISR 実行中に呼び出されたフックルーチンから呼び出された場合，実行中の ISR ID を返す【OS263】．それ以外の場合は INVALID_ISR を返す【OS264】．GetISRID は，割込み禁止状態であっても，呼び出すことができる【NOS1148】．
不正な処理単位から GetISRID を呼び出した場合，INVALID_ISR を返す【NOS0416】．
マルチコア対応 OS 仕様
GetISRID を呼び出した処理単位が割付いているコアにおける，現在実行中の C2ISR の ID 情報を取得する【NOS0968】．GetISRID を呼び出した処理単位が割付いているコアに，現在している C2ISR が存在しない場合，INVALID_ISR を返す【NOS0969】．

372

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.17 EnableInterruptSource
C 言語 I/F

StatusType EnableInterruptSource(ISRType EnableISR)【NOS0238】〔COS0612〕

パラメータ[in]パラメータ[in/out]－

パラメータ[out]

－

標準エラー

割込み要因を有効にする C2ISR の ID

EnableISR

E_OK

割込み要因有効成功≪COS3104≫
EnableISR が不正≪NOS0406≫

E_OS_ID

C1ISR の指定≪NOS0695≫

E_OS_CALLEVELC1ISR からの呼出し≪NOS1200≫
アクセスが許可されていない ISR が指定さ

返り値

拡張エラー

れた≪OS056≫

E_OS_ACCESSISR が所属する OSAP が利用可能でない≪
OS509≫

E_OS_CORE

コアを跨いだ呼出し≪NOS0970≫

E_OS_NOFUNC

EnableISR の割込み要因を有効にできない≪NOS1537≫

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC1，SC2，SC3，SC4【NOS0887】
機能

本システムサービスは，EnableISR で指定された C2ISR の割込み要因を有効にする．
機能仕様
EnableInterruptSource は，EnableISR で指定された C2ISR の割込み要因を有効にする．
既に割込み要因が有効の場合，何もせず E_OK を返す【NOS0894】．
EnableInterruptSource 呼出し時に指定された EnableISR が不正であった場合，E_OS_ID を返す【NOS0406】．EnableISR に C1ISR が指定された場合も，E_OS_ID を返す【NOS0695】．
ターゲット定義で，EnableISR で指定された C2ISR の割込み要因を有効にできなかった場合，
E_OS_NOFUNC を返す【NOS1537】．
ターゲット定義で，割込み要因の有効，無効の振舞いが，本仕様の規定と異なる場合がある【NOS1539】．例えば，複数の割込み要求ラインをまとめて割込み禁止/許可するような割込みコント
ローラしかないターゲットの場合，個別の割込み要因のみを有効化，無効化するという要求を満たせな
くなる．
DisableInterruptSource と EnableInterruptSource によるクリティカルセクション中に呼び出され373

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
た 処 理 単 位 か ら ， EnableInterruptSource を 呼 び 出 し た 場 合 ， 元 の 処 理 単 位 が 呼 び 出 し たDisableInterruptSource による割込み禁止状態が解除される【NOS0634】．
マルチコア対応 OS 仕様
EnableInterruptSource を，コアを跨いで呼び出した場合，E_OS_CORE を返す【NOS0970】．
EnableISR に ICISR を指定した際に，割込み要因が無効となっている間に RaiseInterCoreInterrupt
によって対象の ICISR に対する割込み要求を受け付けていた場合，指定した ICISR を実行する【NOS1045】．
AUTOSAR 仕様との違い
本仕様では割込み要因ごとの有効処理を追加した．インターフェースとして AUTOSAR 仕様 V2.0.1
で規定されていた EnableInterruptSource を採用している≪NOS0238≫．C1ISR は OS 管理外である
ため，EnableInterruptSource は使用できないように規定した≪NOS0695≫．

374

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.18 DisableInterruptSource
C 言語 I/F
パラメータ[in]StatusType DisableInterruptSource(ISRType DisableISR)【NOS0239】〔COS0612〕

パラメータ[in/out]－

パラメータ[out]

－

標準エラー

割込み要因を無効にする C2ISR の ID

DisableISR

E_OK

割込み要因無効成功≪COS3104≫
DisableISR が不正≪NOS0407≫

E_OS_ID

C1ISR の指定≪NOS0696≫

E_OS_CALLEVELC1ISR からの呼出し≪NOS1200≫
アクセスが許可されていない ISR が指定さ

返り値

拡張エラー

れた≪OS056≫

E_OS_ACCESSISR が所属する OSAP が利用可能でない≪
OS509≫

E_OS_CORE

コアを跨いだ呼出し≪NOS0971≫

E_OS_NOFUNC

DisableISR の割込み要因を無効にできない≪NOS1538≫

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC1，SC2，SC3，SC4【NOS0888】
機能

本システムサービスは，DisableISR で示される C2ISR の割込み要因を無効にする．
機能仕様
DisableInterruptSource は，DisableISR で示される C2ISR の割込み要因を無効にする．
既に割込み要因が無効の場合，何もせず E_OK を返す【NOS0895】．
DisableInterruptSource 呼出し時に指定された DisableISR が不正であった場合，E_OS_ID を返す【NOS0407】．DisableISR に C1ISR が指定された場合も，E_OS_ID を返す【NOS0696】．
ターゲット定義で，DisableISR で指定された C2ISR の割込み要因を無効にできなかった場合，
E_OS_NOFUNC を返す【NOS1538】．
ターゲット定義で，割込み要因の有効，無効の振舞いが，本仕様の規定と異なる場合がある【NOS1540】．
例えば，複数の割込み要求ラインをまとめて割込み禁止/許可するような割込みコントローラしかないターゲットの場合，個別の割込み要因のみを有効化，無効化するという要求を満たせなくなる．
DisableInterruptSource と EnableInterruptSource によるクリティカルセクション中に呼び出された 処 理 単 位 か ら ， EnableInterruptSource を 呼 び 出 し た 場 合 ， 元 の 処 理 単 位 が 呼 び 出 し た375

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
DisableInterruptSource による割込み禁止状態が解除される≪NOS0634≫．
マルチコア対応 OS 仕様
DisableInterruptSource を，コアを跨いで呼び出した場合，E_OS_CORE を返す【NOS0971】．
DisableISR に ICISR を指定した場合，RaiseInterCoreInterrupt を呼び出されても，指定した ICISRが起動しない状態となる【NOS1046】．したがって，本 OS がディスパッチやシャットダウン要求のために使用するコア間割込み自身は禁止されない．
AUTOSAR 仕様との違い
本仕様では割込み要因ごとの無効処理を追加した．インターフェースとして AUTOSAR 仕様 V2.0.1
で規定されていた DisableInterruptSource を採用している≪NOS0239≫．C1ISR は OS 管理外である
ため，DisableInterruptSource は使用できないように規定した≪NOS0696≫．

376

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.19 SetEvent
C 言語 I/F
パラメータ[in]StatusType SetEvent(TaskType TaskID, EventMaskType Mask)【COS3508】
TaskID

タスク ID

Mask

イベントマスク値

パラメータ[in/out]－

パラメータ[out]－E_OK

イベントセット成功≪COS3104≫
タスクが所属する OSAP が利用可能でない

E_OS_ACCESS(SC3，SC4 のみ)≪OS509≫
イベントセットにより TaskID で指定され標準エラー
E_OS_PROTECTION_

たタスクの待ち解除が，そのタスクのタイム

ARRIVAL_TASK

フレーム未満(SC2，SC4 のみ)≪NOS1520≫
TaskID が不正≪COS3516≫

E_OS_ID

TaskID で指定されたタスクが拡張タスクで
返り値ない≪COS3517≫

E_OS_ACCESS

アクセスが許可されていないタスクが指定された(SC3，SC4 のみ)≪OS056≫

拡張エラー

TaskID で指定されたタスクが休止状態であ

E_OS_STATEる≪COS3518≫

E_OS_CALLEVEL
E_OS_DISABLEDINT

不正な処理単位からの呼出し≪OS088≫
C1ISR からの呼出し≪NOS1200≫
割込み禁止状態からの呼出し≪OS093≫
起動していないコアへの呼出し≪OSa120

E_OS_CORE≫

コンフォーマンスクラス

ECC1，ECC2

スケーラビリティクラス

SC1，SC2，SC3，SC4≪NOS0319≫
機能

本システムサービスは，TaskID で指定されたタスクに Mask で指定されたイベントを設定する．
機能仕様
SetEvent は，TaskID で指定されたタスクのイベントマスク値に，Mask で指定されたイベントを設定する【COS3513】．TaskID で指定されたタスクが，Mask で指定されたイベントのうち，少なくとも
1 つのイベントを待っている場合，
TaskID で指定されたタスクは待ち状態から実行可能状態へ遷移し，再スケジューリングが行われる【COS3553】〔COS0720〕． Mask で指定されていないイベントは変化

377

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
しない【COS3514】．
SetEvent 呼出し時に指定された TaskID が不正であった場合，E_OS_ID を返す【COS3516】．TaskIDで指定されたタスクが拡張タスクでない場合，E_OS_ACCESS を返す【COS3517】〔COS0702〕．TaskIDで指定されたタスクの状態が休止状態であった場合，E_OS_STATE を返す【COS3518】．
TaskID で指定されたタスクが，Mask で指定されたイベントのうち，少なくとも 1 つのイベントを待っている状態で，かつ，そのタスクの到着間隔がタイムフレーム未満であった場合，
E_OS_PROTECTION_ARRIVAL_TASK を返す(SC2，SC4 のみ)【NOS1520】．
E_OS_PROTECTION_ARRIVAL_TASK を返す場合，イベントはセットせず TaskID で指定されたタ
スクを待ち状態から実行可能状態へ遷移させない(SC2，SC4 のみ)【NOS0205】．
なお，SetEvent によって TaskID で指定されたタスクが待ち解除された場合でも，タスクが保持するイベントマスク値のクリアは行わない【NOS0368】．
マルチコア対応 OS 仕様
SetEvent は，TaskID で指定されたタスクに対してアクセス権があれば，異なるコアに割付いている
OSAP に所属するタスクのイベントをセットすることができる【OS602】．コアを跨いで呼び出す場合，
SetEvent によって対象のタスクが起動した，あるいはエラーが発生して起動しなかったかの結果が確定した上で，呼び出し元の処理単位へリターンする【OS604】．SetEvent をコアを跨いで呼び出し，エラーが発生した場合は，呼び出し元のコアでエラーフックが呼び出される【OS605】．

378

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.20 ClearEvent
C 言語 I/F

StatusType ClearEvent(EventMaskType Mask)【COS3520】〔COS0719〕

パラメータ[in]Mask

パラメータ[in/out]－

パラメータ[out]

－

標準エラー

イベントマスク値

E_OK

イベントクリア成功≪COS3104≫
呼出し元タスクが拡張タスクでない≪

E_OS_ACCESS
返り値

拡張エラー

COS3526≫

E_OS_CALLEVEL
E_OS_DISABLEDINT

不正な処理単位からの呼出し≪OS088≫
C1ISR からの呼出し≪NOS1200≫
割込み禁止状態からの呼出し≪OS093≫

コンフォーマンスクラス

ECC1，ECC2

スケーラビリティクラス

SC1，SC2，SC3，SC4≪NOS0319≫
機能

本システムサービスは，Mask で指定されたイベントをクリアする．
機能仕様
ClearEvent は，ClearEvent を呼び出したタスクの現在のイベントマスク値から，Mask で指定されたイベントをクリアする【COS3523】〔COS0719〕．
呼出し元タスクが拡張タスクでない場合，E_OS_ACCESS を返す【COS3526】〔COS0702〕．

379

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.21 GetEvent
C 言語 I/F
パラメータ[in]StatusType GetEvent(TaskType TaskID,
EventMaskRefType Event)【COS3529】
タスク ID

TaskID

パラメータ[in/out]－

パラメータ[out]Event

イベント状態を格納する領域へのポ
インタ

E_OK
標準エラー

イベント状態取得成功≪COS3104≫
タスクが所属する OSAP が利用可能

E_OS_ACCESS

でない(SC3，SC4 のみ) ≪OS509≫
TaskID が不正≪COS3538≫

E_OS_ID

TaskID で指定されたタスクが拡張タ
スクでない≪COS3539≫
E_OS_ACCESS

アクセスが許可されていないタスクが指定された(SC3，SC4 のみ)≪
OS056≫
TaskID で指定されたタスクが休止状

E_OS_STATE

返り値
拡張エラー

態≪COS3540≫
不正な処理単位からの呼出し≪

E_OS_CALLEVEL

OS088≫C1ISR からの呼出し≪NOS1200≫

E_OS_DISABLEDINT
E_OS_PARAM_POINTER
E_OS_ILLEGAL_ADDRESS

割込み禁止状態からの呼出し≪
OS093≫
ポインタ引数が NULL≪OS566≫
Event に不正なアドレスが指定された(SC3，SC4 のみ)≪OS051≫
起動していないコアへの呼出し≪

E_OS_CORE

OSa120≫コンフォーマンスクラス

ECC1，ECC2

スケーラビリティクラス

SC1，SC2，SC3，SC4≪NOS0319≫
機能

本システムサービスは，TaskID で指定されたタスクが保持しているイベントマスク値を取得する．
機能仕様
GetEvent は，GetEvent が呼び出された時点の TaskID で指定されたタスクが保持するイベントマス

380文書番号：ATK2-0010
文書名：ATK2 外部仕様書
ク値を Event で指定された領域にコピーする【COS3535】．
GetEvent 呼出し時に指定された TaskID が不正であった場合，
E_OS_ID を返す【COS3538】．
TaskIDで指定されたタスクが拡張タスクでない場合，E_OS_ACCESS を返す【COS3539】〔COS0702〕．TaskIDで指定されたタスクの状態が休止状態であった場合，E_OS_STATE を返す【COS3540】．
使用上の注意OSAP 強制終了時に呼び出されるプレタスクフックから GetEvent を呼び出し，TaskID で強制終了
対象 OSAP に属するタスクを指定した場合は，Event に強制終了処理実施前の情報が格納される≪
NOS1583≫≪NOS1584≫≪NOS1585≫．

マルチコア対応 OS における仕様
GetEvent は，コアを跨いで呼び出すことができる【NOS0972】．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，GetEvent は，コアを跨いで呼び出すことができないと規定されている【OSa140】．しかし，GetEvent をコアを跨いで呼び出すことによる不都合が想定できないため，本仕様では呼び出すことができると規定した≪NOS0972≫．

381

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.22 WaitEvent
C 言語 I/F
パラメータ[in]StatusType WaitEvent(EventMaskType Mask)【COS3542】
Mask

パラメータ[in/out]－

パラメータ[out]－イベント待ちを行うイベントマスク値

E_OK
標準エラー

イベント待ちが完了≪COS3104≫

E_OS_PROTECTION_ARRIVAL_TASK

呼出し元タスクが拡張タスクでない≪
COS3549≫

E_OS_CALLEVEL
拡張エラー

ムフレーム未満で呼出し(SC2，SC4 のみ)≪NOS0206≫

E_OS_ACCESS
返り値

既にセットされているイベントに対し，タイ

E_OS_RESOURCE
E_OS_DISABLEDINT
E_OS_SPINLOCK

不正な処理単位からの呼出し≪OS088≫
C1ISR からの呼出し≪NOS1200≫
呼出し元タスクがリソースを占有している≪COS3550≫
割込み禁止状態からの呼出し≪OS093≫
呼出し元タスクがスピンロックを占有している≪OS622≫

コンフォーマンスクラス

ECC1，ECC2

スケーラビリティクラス

SC1，SC2，SC3，SC4≪NOS0319≫
機能

本システムサービスは，本システムサービスを呼び出したタスクを待ち状態とする．
機能仕様
WaitEvent は，Mask で指定されたイベントマスク値がセットされるまで，WaitEvent を呼び出したタスクを待ち状態に遷移させる【COS3545】〔COS0722〕．待ち状態に入る際には，内部リソースを解放し再スケジューリングが行われる【COS3546】〔COS0465〕．Mask で指定されたイベントマスク値
が既にセットされた状態であった場合は，タスクは実行状態を継続する【COS0721】．
タスクが標準リソースを占有したまま WaitEvent を呼び出した場合，E_OS_RESOURCE を返す【COS3550】〔COS0835〕〔COS0811〕．呼出し元タスクが拡張タスクでない場合，E_OS_ACCESS を返す【COS3549】〔COS0702〕．
Mask で指定されたイベントマスク値が既にセットされた状態，かつ，呼出し元タスクの到着間隔がタイムフレーム未満であった場合，E_OS_PROTECTION_ARRIVAL_TASK を返す(SC2，SC4 のみ)【NOS0206】．E_OS_PROTECTION_ARRIVAL_TASK を返す場合，呼出し元タスクは待ち状態へ遷

382

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
移せず，実行状態を維持する（SC2，SC4 のみ)【NOS1521】．
タイミング保護有効時の注意事項
E_OS_PROTECTION_ARRIVAL_TASK を返す場合，呼出し元タスクは待ち状態へ遷移せず，実行状態を維持する≪NOS1521≫とあるが，このとき，呼出し元タスクは待ち状態へ遷移しないため，タ
スク実行時間はリセットされない．よって，スケジューリング解析上では，WaitEvent がエラーを返す
場合の実行状態継続は，新たなタスクインスタンスの生成とはみなされず，WaitEvent を呼び出したタスクインスタンスの実行時間監視によってタイミング保護違反は検出されるため，そのタイミング保護
違反時処理で適切な処理をすれば問題はない．

マルチコア対応 OS 仕様
タスクがスピンロックを占有したまま WaitEvent を呼び出した場合，E_OS_SPINLOCK を返す【OS622】．OS 割込み禁止スピンロック，全割込み禁止スピンロックの獲得により，コアが割込み禁止状態となっていても，E_OS_SPINLOCK を返す【NOS0973】．

383

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.23 GetResource
C 言語 I/F
パラメータ[in]StatusType GetResource(ResourceType ResID)【COS3407】

パラメータ[in/out]－

パラメータ[out]

－

標準エラー

リソース ID

ResID

E_OK

リソース獲得成功≪COS3104≫
ResID が不正≪COS3418≫

E_OS_ID

内部リソースの指定≪COS0829≫
ResID で指定されたリソースが既に占有されている≪COS3837≫
ResID の上限優先度が呼出し元の初期優先度
より低い≪COS3419≫

返り値

アクセスが許可されていないリソースが指定

E_OS_ACCESSされた(SC3，SC4 のみ)≪OS056≫

拡張エラー

非信頼 OSAP から OSAP スケジューラレベル以上の上限優先度を持つリソースが指定された(TP 機能に対応した SC1，SC2 の OS のみ)≪NOS1522≫
E_OS_CALLEVEL

不正な処理単位からの呼出し≪OS088≫
C1ISR からの呼出し≪NOS1200≫

E_OS_DISABLEDINT

割込み禁止状態からの呼出し≪OS093≫

E_OS_CORE

コアを跨いだ呼出し≪OS589≫

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC1，SC2，SC3，SC4≪NOS0319≫
機能

本システムサービスは，ResID で指定されたリソースを獲得する．
機能仕様
GetResource は，ResID で指定されたリソースを獲得する．ResID で指定されたリソースの属性が標
準リソースであった場合，リソースを獲得した処理単位は優先度上限プロトコルにより現在優先度が引き上げられ，ReleaseResource を呼び出すまで排他区間となる【COS3410】〔COS0805〕．
GetResource 呼出し時に指定された ResID が不正であった場合，
E_OS_ID を返す【COS3418】．
ResIDで指定されたリソースが，既に占有されている場合，E_OS_ACCESS を返す【COS3837】〔COS0810〕．
ResID で指定されたリソースの上限優先度が呼出し元の初期優先度よりも低い場合，E_OS_ACCESSを返す【COS3419】〔COS0804〕．

384

文書番号：ATK2-0010
文書名：ATK2 外部仕様書

TP 機能に対応した SC1，SC2 の OS において，非信頼 OSAP から OSAP スケジューラレベル以上の上限優先度を持つリソースが指定された場合，E_OS_ACCESS を返す【NOS1522】〔NOS1471〕．
TP 機能に対応した SC3，SC4 の OS において，非信頼 OSAP から OSAP スケジューラレベル以上の上限優先度を持つリソースが指定された場合，アクセスが許可されていないリソースであるため，
E_OS_ACCESS を返す≪OS056≫≪NOS1527≫≪NOS1528≫．
マルチコア対応 OS 仕様
スピンロックを占有している処理単位であっても，リソースを獲得することができる【OSa141】．
GetResource を，コアを跨いで呼び出した場合，E_OS_CORE を返す≪OS589≫．

385

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.24 ReleaseResource
C 言語 I/F
パラメータ[in]StatusType ReleaseResource(ResourceType ResID)【COS3421】

パラメータ[in/out]－

パラメータ[out]

－

標準エラー

リソース ID

ResID

E_OK

リソース解放成功≪COS3104≫
ResID が不正≪COS3428≫

E_OS_ID

内部リソースの指定≪COS0829≫
アクセスが許可されていないリソースが指定

E_OS_ACCESS
返り値

拡張エラー

された(SC3，SC4 のみ)≪OS056≫
ResID が呼出し元で占有されていないか，解E_OS_NOFUNC

放順序が適切でない≪COS3429≫

E_OS_CALLEVEL

不正な処理単位からの呼出し≪OS088≫
C1ISR からの呼出し≪NOS1200≫

E_OS_DISABLEDINT

割込み禁止状態からの呼出し≪OS093≫

E_OS_CORE

コアを跨いだ呼出し≪OS589≫

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC1，SC2，SC3，SC4≪NOS0319≫
機能

本システムサービスは，ResID で指定されたリソースを解放する．
機能仕様
ReleaseResource は，ResID で指定されたリソースを解放し，排他区間を終了し，再スケジューリングが行われる【COS3424】〔COS0821〕．タスクがリソースを解放した時，OS はタスクの現在優先度を，
そのリソースを獲得する前のタスク優先度に戻す【COS0828】．ReleaseResource は GetResource と対に呼び出さなければならない．
ReleaseResource 呼出し時に指定された ResID が不正であった場合，E_OS_ID を返す【COS3428】．
ResID で指定されたリソースが呼出し元の処理単位で占有されていない，またはリソースの解放順序
が LIFO となっていない場合，E_OS_NOFUNC を返す【COS3429】〔COS0813〕．
マルチコア対応 OS 仕様
ReleaseResource を，コアを跨いで呼び出した場合，E_OS_CORE を返す≪OS589≫．
OSEK 仕様との違い
OSEK 仕様では，ResID で指定されたリソースの上限優先度が処理単位の初期優先度よりも低い場合，

386

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
E_OS_ACCESS を返すと規定されている【COS3430】．しかし，リソースの上限優先度が処理単位の初期優先度よりも低い場合，そのリソースを獲得することができないため，本エラーが発生することはあ
りえない．したがって，本仕様では，本規定を削除した．

387

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.25 IncrementCounter
C 言語 I/F
パラメータ[in]StatusType IncrementCounter(CounterType CounterID)【OS399】
カウンタ IDCounterID

パラメータ[in/out]－

パラメータ[out]

－
E_OK

標準エラー

ティックインクリメント成功≪OS286≫
カウンタが所属する OSAP が利用可能でない

E_OS_ACCESS(SC3，SC4 のみ)≪OS509≫
CounterID が不正か，カウンタがハードウェ

E_OS_ID

アカウンタである≪OS285≫

E_OS_CALLEVEL

返り値
拡張エラー

不正な処理単位からの呼出し≪OS088≫
C1ISR からの呼出し≪NOS1200≫
他処理単位によって操作中のカウンタが指定

E_OS_STATE

された≪NOS0058≫
非信頼 OSAP に属するタスクから他 OSAP に

E_OS_ACCESS

属するカウンタへの発行≪NOS1571≫

E_OS_DISABLEDINT

割込み禁止状態からの呼出し≪OS093≫

E_OS_CORE

コアを跨いだ呼出し≪OS629≫≪OS589≫

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC1，SC2，SC3，SC4【OS530】
機能

本システムサービスは，CounterID で指定されたソフトウェアカウンタをインクリメントする．
機能仕様
IncrementCounter は，CounterID で指定されたソフトウェアカウンタをインクリメントし，E_OKを返す【OS286】〔COS3104〕．カウンタをインクリメントした結果，カウンタに接続された OS オブジ
ェクト(アラーム，スケジュールテーブル)が満了した場合，アクションを実行する．アクションの結果，何らかのエラーが発生した場合でも IncrementCounter は E_OK を返す【OS321】．
IncrementCounter 呼出し時に指定された CounterID が不正であった場合，また，CounterID で指定されたカウンタがハードウェアカウンタであった場合，E_OS_ID を返す【OS285】．
複数のアラーム，あるいは複数のスケジュールテーブルが同時に満了する場合，各満了処理が終了するごとに，再スケジューリングを行う【NOS0342】．したがって，IncrementCounter がタスクから呼び出された場合，再スケジューリングを行う可能性がある【OS529】．また，C2ISR から
IncrementCounter を実行している間に，より割込み優先度の高い C2ISR が起動する可能性がある【NOS0351】．これらの場合，CounterID で指定されたカウンタは操作中となり，他の処理単位から操388

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
作中のカウンタに対して IncrementCounter を発行した場合，エラーとして E_OS_STATE を返す【NOS0058】．
非信頼 OSAP に属するタスクから他 OSAP に属するカウンタに対して IncrementCounter を発行した場合，信頼関数を経由したかどうかに関わらず，エラーとして E_OS_ACCESS を返す【NOS1571】〔NOS1567〕〔NOS1568〕．
使用上の注意低優先度のタスクから IncrementCounter を呼び出した際に満了処理が発生し，同じティックで複数のアクションの処理を実行する場合に，それらの処理が不可分に実行されるとは限らない．
例えば，低優先度のタスクで IncrementCounter を呼び出した際に満了処理が発生し，同じティックのアクションとして中優先度タスクと高優先度タスクに対して ActivateTask を行った場合，先に中優
先度のタスクに対して ActivateTask が呼び出され中優先度タスクが起動した後に，高優先度のタスクに対して ActivateTask が呼び出される可能性がある．
上記のような優先度逆転が発生する場合があるため，IncrementCounter は高優先度のタスクから呼び出すことを推奨する．
IncrementCounter 実行中に発生した割込みによって起動した C2ISR から CancelAlarm を発行した
場合，CancelAlarm 後に，1 回満了処理が実行される可能性がある．
IncrementCounter 実行による満了処理によってタスクディスパッチが発生するので，IncrementCounter 実行中にスタックオーバーフローを検知する場合がある．ただし SC3，SC4 では，
信頼タスク，非信頼タスクともに，ターゲット定義の最小値以上のスタックを確保することから，この最小値をすべでのシステムサービスで使用するスタックサイズより大きくすることで，この問題は回避可能である．信頼関数経由で IncrementCounter を呼び出す場合も，信頼関数が使用するスタックサイズを指定するので，見積もりが正しければ，スタックオーバーフローすることはない．
マルチコア対応 OS における仕様
CounterID で指定されたカウンタが，IncrementCounter を呼び出した処理単位と異なるコアに割付けられている場合，E_OS_CORE を返す≪OS629≫≪OS589≫．

389

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.26 GetCounterValue
C 言語 I/F
パラメータ[in]StatusType GetCounterValue(CounterType CounterID, TickRefType Value)【OS383】
カウンタ IDCounterID

パラメータ[in/out]－

パラメータ[out]Value

ティックを格納する領域へのポイン
タ

E_OK
標準エラー

ティック取得成功≪COS3104≫
カウンタが所属する OSAP が利用可

E_OS_ACCESS

能でない(SC3，SC4 のみ)≪OS509≫
CounterID が不正≪OS376≫

E_OS_ID

不正な処理単位からの呼出し≪
E_OS_CALLEVEL

OS088≫C1ISR からの呼出し≪NOS1200≫
アクセスが許可されていないカウン

E_OS_ACCESS

返り値

タが指定された(SC3，SC4 のみ)≪
OS056≫

拡張エラー
E_OS_DISABLEDINT
E_OS_PARAM_POINTER
E_OS_ILLEGAL_ADDRESS

割込み禁止状態からの呼出し≪
OS093≫
ポインタ引数が NULL≪OS566≫
Value に不正なアドレスが指定された(SC3，SC4 のみ)≪OS051≫
起動していないコアへの呼出し≪

E_OS_CORE

OSa120≫コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC1，SC2，SC3，SC4【OS532】
機能

本システムサービスは，カウンタの現在のカウント値を取得する．
機能仕様
GetCounterValue は，CounterID で指定されたカウンタの現在のティックを Value で指定された領域に格納する【OS377】．
GetCounterValue 呼出し時に指定された CounterID が不正であった場合，
E_OS_ID を返す【OS376】．
ATK2 では，操作中のカウンタに対して，GetCounterValue を発行した場合，操作中の要因となった
IncrementCounter によるティックのインクリメントが行われた後の値が Value に格納される

390文書番号：ATK2-0010
文書名：ATK2 外部仕様書【NOS1336】．
使用上の注意CounterID で指定されたカウンタがハードウェアカウンタであった場合，タイマの実時間を返し，カ
ウンタがソフトウェアカウンタであった場合，現在のティックを返す【OS531】．
マルチコア対応 OS における仕様
GetCounterValue は，コアを跨いで呼び出すことができる【OSa142】．

391

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.27 GetElapsedValue
StatusType GetElapsedValue(
C 言語 I/F

CounterType CounterID,
TickRefType Value, TickRefType ElapsedValue)【OS392】

パラメータ[in]カウンタ IDCounterID

前回のティックが格納され，現在のテパラメータ[in/out]

Value

ィックを上書きする領域へのポイン
タパラメータ[out]ElapsedValue

ティックの差分を格納する領域への
ポインタ

E_OK
標準エラー

差分取得成功≪COS3104≫
カウンタが所属する OSAP が利用可

E_OS_ACCESS

能でない(SC3，SC4 のみ)≪OS509≫
CounterID が不正≪OS381≫

E_OS_ID

Value がカウンタのカウンタ最大値を

E_OS_VALUE

超えている≪OS391≫
不正な処理単位からの呼出し≪

E_OS_CALLEVEL

OS088≫C1ISR からの呼出し≪NOS1200≫
アクセスが許可されていないカウン

返り値

E_OS_ACCESS

タが指定された(SC3，SC4 のみ)≪
OS056≫

拡張エラー
E_OS_DISABLEDINT
E_OS_PARAM_POINTER

割込み禁止状態からの呼出し≪
OS093≫
ポインタ引数が NULL≪OS566≫
Value または ElapsedValue に不正

E_OS_ILLEGAL_ADDRESS

なアドレスが指定された(SC3，SC4
のみ)≪OS051≫
起動していないコアへの呼出し≪

E_OS_CORE

OSa120≫コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC1，SC2，SC3，SC4【OS534】
機能

本システムサービスは，指定されたティックと現在のティックの差分を取得する．

392

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
機能仕様
GetElapsedValue は，Value で指定されたティックから現在のティックの差分を ElapsedValue に格納する【OS382】．また，現在のティックを Value に格納する【OS460】．
GetElapsedValue 呼出し時に指定された CounterID が不正であった場合，
E_OS_ID を返す【OS381】．
Value が指定されたカウンタの最大値より大きい場合，E_OS_VALUE を返す【OS391】．
ATK2 では，操作中のカウンタに対して，GetElapsedValue を発行した場合，操作中の要因となった
IncrementCounter によるティックのインクリメントが行われた後のティックが Value に格納され，インクリメントが行われた後におけるティックの差分が ElapsedValue に格納される【NOS1337】．
使用上の注意
GetElapsedValue は，Value に設定する前回のティックを取得した時点から，対象カウンタが，カウンタの最大値(OsCounterMaxAllowedValue)の回数より多くインクリメントされていた場合，
ElapsedValue に格納される値は不正となる【OS533】．
マルチコア対応 OS における仕様
GetElapsedValue は，コアを跨いで呼び出すことができる【OSa143】．

393

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.28 GetAlarmBase
C 言語 I/F
パラメータ[in]StatusType GetAlarmBase(AlarmType AlarmID,
AlarmBaseRefType Info)【COS3614】
アラーム ID

AlarmID

パラメータ[in/out]－

パラメータ[out]Infoアラーム情報を格納する領域へのポ
インタ

E_OK
標準エラー

アラーム情報取得成功≪COS3104≫
アラームが所属する OSAP が利用可

E_OS_ACCESS

能でない(SC3，SC4 のみ)≪OS509≫
AlarmID が不正≪COS3621≫

E_OS_ID

不正な処理単位からの呼出し≪
E_OS_CALLEVEL

OS088≫C1ISR からの呼出し≪NOS1200≫
アクセスが許可されていないアラー

E_OS_ACCESS

返り値

ムが指定された(SC3，SC4 のみ)≪
OS056≫

拡張エラー
E_OS_DISABLEDINT
E_OS_PARAM_POINTER
E_OS_ILLEGAL_ADDRESS

割込み禁止状態からの呼出し≪
OS093≫
ポインタ引数が NULL≪OS566≫
Info に不正なアドレスが指定された(SC3，SC4 のみ)≪OS051≫
起動していないコアへの呼出し≪

E_OS_CORE

OSa120≫コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC1，SC2，SC3，SC4≪NOS0319≫
機能

本システムサービスは，AlarmID で指定されたアラームの情報を取得する．
機能仕様
GetAlarmBase は，AlarmID で指定されたアラーム情報を取得する【COS3617】．アラーム情報は，
Info で示す構造体(AlarmBaseType)に格納される【COS3618】．
GetAlarmBase 呼出し時に指定された AlarmID が不正であった場合，
E_OS_ID を返す【COS3621】．
マルチコア対応 OS における仕様
GetAlarmBase は，コアを跨いで呼び出すことができる【OS639】．

394

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.29 GetAlarm
C 言語 I/F
パラメータ[in]StatusType GetAlarm(AlarmType AlarmID, TickRefType Tick)【COS3623】
アラーム ID

AlarmID

パラメータ[in/out]－

パラメータ[out]Tick

アラーム満了までのティック数を格納する領域へのポインタ
アラーム満了までのティック数取得

E_OK
標準エラー

成功≪COS3104≫
アラームがセットされていない(W)≪

E_OS_NOFUNC

COS3631≫
アラームが所属する OSAP が利用可

E_OS_ACCESS

能でない(SC3，SC4 のみ)≪OS509≫
AlarmID が不正≪COS3632≫

E_OS_ID

不正な処理単位からの呼出し≪
E_OS_CALLEVEL

OS088≫C1ISR からの呼出し≪NOS1200≫

返り値

アクセスが許可されていないアラー
E_OS_ACCESS

ムが指定された(SC3，SC4 のみ)≪
OS056≫

拡張エラー
E_OS_DISABLEDINT
E_OS_PARAM_POINTER
E_OS_ILLEGAL_ADDRESS

割込み禁止状態からの呼出し≪
OS093≫
ポインタ引数が NULL≪OS566≫
Tick に不正なアドレスが指定された(SC3，SC4 のみ)≪OS051≫
起動していないコアへの呼出し≪

E_OS_CORE

OSa120≫コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC1，SC2，SC3，SC4≪NOS0319≫
機能

本システムサービスは，AlarmID で指定されたアラームが満了するまでのティック数を取得する．
機能仕様
GetAlarm は，AlarmID で指定されたアラームが満了するまでのティック数を取得し，Tick の領域に格納する【COS3626】．AlarmID が不正な場合，Tick の領域には何も格納されない【COS3628】．

395

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
GetAlarm 呼出し時に指定された AlarmID が不正であった場合，E_OS_ID を返す【COS3632】．
AlarmID で指定されたアラームの動作がまだセットされていない場合，E_OS_NOFUNC を返す【COS3631】．
ATK2 では，操作中のカウンタに接続されたアラームに対して，GetAlarm を発行した場合，操作中の要因となった IncrementCounter によるティックのインクリメントが行われた後における，アラームが満了するまでのティック数が Tick に格納される【NOS1338】．
マルチコア対応 OS における仕様
GetAlarm は，コアを跨いで呼び出すことができる【OS640】．

396

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.30 SetRelAlarm
C 言語 I/F

パラメータ[in]StatusType SetRelAlarm(AlarmType AlarmID,
TickType increment, TickType cycle)【COS3634】
AlarmID

アラーム ID

increment

アラーム満了までのティックの相対値

cycle

アラーム満了周期(単発アラームの場合は 0 を指定する)パラメータ[in/out]－

パラメータ[out]

－
E_OK

標準エラー

アラームセット成功≪COS3104≫
アラームが既にセットされている(W)≪COS3648

E_OS_STATE≫
アラームが所属する OSAP が利用可能でない

E_OS_ACCESS(SC3，SC4 のみ)≪OS509≫
AlarmID が不正≪COS3649≫

E_OS_ID

increment がアラームに関連付けられたカウンタの最大値より大きいか，0 より小さい≪COS3650≫
increment が 0 である≪NOS0405≫

E_OS_VALUE

返り値

cycle に指定された値が，カウンタの最小周期より小さい(0 を除く)か，アラームに関連付けられたカ
ウンタの最大値より大きい場合≪COS3651≫

拡張エラー
E_OS_CALLEVE

不正な処理単位からの呼出し≪OS088≫

L

C1ISR からの呼出し≪NOS1200≫
アクセスが許可されていないアラームが指定され

E_OS_ACCESSた(SC3，SC4 のみ)≪OS056≫

E_OS_DISABLED

割込み禁止状態からの呼出し≪OS093≫

INT
E_OS_CORE
コンフォーマンスクラス
スケーラビリティクラス

起動していないコアへの呼出し≪OSa120≫

BCC1，BCC2，ECC1，ECC2(アラーム満了時のアクションが SetEventの場合は ECC1，ECC2 のみ)
SC1，SC2，SC3，SC4≪NOS0319≫
機能

本システムサービスは，AlarmID で指定されたアラームを，現在のティックから increment で指定された相対時刻が経過した後に満了するよう設定する．初回の満了後，cycle が 0 でない場合は，cycle の周期でアラームを満了させる．

397

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
機能仕様
SetRelAlarm は，AlarmID で指定されたアラームが現在のティックから increment で指定された相対時刻が経過した後に満了するよう設定する【COS3639】．初回の満了後，cycle が 0 でない場合は，cycleの周期でアラームを満了させる【COS3642】〔COS0922〕．
SetRelAlarm 呼出し時に指定された AlarmID が不正であった場合，E_OS_ID を返す【COS3649】．
increment で指定された値がアラームに関連付けられたカウンタの最大値より大きいか，0 より小さい
場合，E_OS_VALUE を返す【COS3650】．increment で指定された値が 0 であった場合，E_OS_VALUEを返す【NOS0405】．cycle に指定された値が，カウンタの最小周期より小さい(0 を除く)か，アラームに関連付けられたカウンタの最大値より大きい場合，E_OS_VALUE を返す【COS3651】．
AlarmID で指定されたアラームが，既にセットされている場合，E_OS_STATE を返す【COS3648】．
使用上の注意increment が非常に小さい場合，SetRelAlarm の終了前にアラームが満了する可能性がある【COS3641】．アラームの動作パラメータを変更する場合，再設定する前に対象のアラームを停止する必要がある【COS3644】．
マルチコア対応 OS における仕様
SetRelAlarm は，コアを跨いで呼び出すことができる【OS636】．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，increment で指定された値が 0 であった場合に，E_OS_VALUE を返すエラー
を標準エラーと規定している【OS304】．しかし，OSEK 仕様では，E_OS_VALUE を返すエラーは拡張エラーと規定されているため，本仕様では，E_OS_VALUE を返すエラーをすべて拡張エラーと規定
した≪NOS0405≫．
ATK2 では，操作中のカウンタに接続されたアラームに対して，SetRelAlarm を発行した場合，操作中の要因となった IncrementCounter によるティックのインクリメントが行われた後のティックからincrement で指定された相対時刻が経過した後に満了するよう設定する【NOS1339】．

398

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.31 SetAbsAlarm
C 言語 I/F

パラメータ[in]StatusType SetAbsAlarm(AlarmType AlarmID,
TickType start, TickType cycle)【COS3653】
AlarmID

アラーム IDstart

アラーム満了のティックの絶対値

cycle
パラメータ[in/out]－

パラメータ[out]

－

標準エラー

アラーム満了周期(単発アラームの場合は 0 を指定する)

E_OK

アラームセット成功≪COS3104≫

E_OS_STATE

アラームが既にセットされている(W)≪COS3667≫

E_OS_ACCESS
E_OS_ID

アラームが所属する OSAP が利用可能でない(SC3，SC4 のみ)≪OS509≫
AlarmID が不正≪COS3668≫
start がアラームに関連付けられたカウンタの最大値より大きいか，0 より小さい≪COS3669≫

E_OS_VALUE
返り値

cycle に指定された値が，カウンタの最小周期より小さい(0 を除く)か，アラームに関連付けられたカウン
タの最大値より大きい場合≪COS3670≫

拡張エラー

E_OS_

不正な処理単位からの呼出し≪OS088≫

CALLEVELC1ISR からの呼出し≪NOS1200≫

E_OS_ACCESS
E_OS_

アクセスが許可されていないアラームが指定された(SC3，SC4 のみ)≪OS056≫
割込み禁止状態からの呼出し≪OS093≫

DISABLEDINT
E_OS_CORE
コンフォーマンスクラス
スケーラビリティクラス

起動していないコアへの呼出し≪OSa120≫

BCC1，BCC2，ECC1，ECC2(アラーム満了時のアクションが SetEvent の場合は ECC1，ECC2 のみ)
SC1，SC2，SC3，SC4≪NOS0319≫
機能

本システムサービスは，AlarmID で指定されたアラームを，start で指定された絶対時刻に達した際に満了するよう設定する．初回の満了後，cycle が 0 でない場合は，cycle の周期でアラームを満了させる．
機能仕様
SetAbsAlarm は，AlarmID で指定されたアラームが start で指定された絶対時刻に達した際に満了

399

文書番号：ATK2-0010
文書名：ATK2 外部仕様書するよう設定する【COS3658】．初回の満了後，cycle が 0 でない場合は cycle の周期でアラームを満了させる【COS3661】〔COS0922〕．
SetAbsAlarm 呼出し時に指定された AlarmID が不正であった場合，E_OS_ID を返す【COS3668】．
start で指定された値がアラームに関連付けられたカウンタの最大値より大きいか，0 より小さい場合，
E_OS_VALUE を返す【COS3669】．cycle に指定された値が，カウンタの最小周期より小さい(0 を除く)か，アラームに関連付けられたカウンタの最大値より大きい場合，E_OS_VALUE を返す【COS3670】．
AlarmID で指定されたアラームが，既にセットされている場合，E_OS_STATE を返す【COS3667】．
使用上の注意点
start と，接続されているカウンタの現在値の差が非常に小さい場合，SetAbsAlarm の終了前にアラームが満了する可能性がある【COS3659】．また，start が，接続されているカウンタの現在のティックを過ぎていた場合，アラームが満了するのはカウンタがラップアラウンドした後となる【COS3660】．
アラームの動作パラメータを変更する場合，再設定する前に対象のアラームを停止する必要がある【COS3663】．
ATK2 では，start で指定された値と接続されているカウンタの現在値が同じ場合，即座に満了せず，次の周期で start に達した際に満了する【NOS1340】．
マルチコア対応 OS における仕様
SetAbsAlarm は，コアを跨いで呼び出すことができる【OS637】．

400

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.32 CancelAlarm
C 言語 I/F
パラメータ[in]StatusType CancelAlarm(AlarmType AlarmID)【COS3672】
アラーム ID

AlarmID

パラメータ[in/out]－

パラメータ[out]

－
E_OK

標準エラー

アラーム停止成功≪COS3104≫
アラームが既に停止されている(W) ≪E_OS_NOFUNC

COS3678≫
アラームが所属する OSAP が利用可能でない

E_OS_ACCESS(SC3，SC4 のみ)≪OS509≫
AlarmID が不正≪COS3679≫

E_OS_ID

返り値

E_OS_CALLEVEL
拡張エラー

不正な処理単位からの呼出し≪OS088≫
C1ISR からの呼出し≪NOS1200≫
アクセスが許可されていないアラームが指定

E_OS_ACCESSされた(SC3，SC4 のみ)≪OS056≫

E_OS_DISABLEDINT

割込み禁止状態からの呼出し≪OS093≫

E_OS_CORE

起動していないコアへの呼出し≪OSa120≫

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC1，SC2，SC3，SC4≪NOS0319≫
機能

本システムサービスは，AlarmID で指定されたアラームを停止する．
機能仕様
CancelAlarm は，AlarmID で指定されたアラームを停止する【COS3675】．
CancelAlarm 呼出し時に指定された AlarmID が不正であった場合，E_OS_ID を返す【COS3679】．
AlarmID で指定されたアラームが，既に停止されている場合，E_OS_NOFUNC を返す【COS3678】．
マルチコア対応 OS における仕様
CancelAlarm は，コアを跨いで呼び出すことができる【OS638】．

401

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.33 StartScheduleTableRel
C 言語 I/F
パラメータ[in]StatusType StartScheduleTableRel(ScheduleTableType ScheduleTableID, TickType Offset)【OS347】
ScheduleTableID

スケジュールテーブル ID

Offset

起動オフセット

パラメータ[in/out]－

パラメータ[out]

－
E_OK

標準エラー

スケジュールテーブル起動成功≪COS3104≫
スケジュールテーブルが既に開始されている

E_OS_STATE≪OS277≫
スケジュールテーブルが所属する OSAP が利E_OS_ACCESS用可能でない(SC3，SC4 のみ)≪OS509≫
ScheduleTableID が不正≪OS275≫

E_OS_ID

ScheduleTableID が暗黙同期スケジュールテーブルを指定している≪OS452≫
Offset が 0≪OS332≫

返り値

E_OS_VALUEまたは Offset が(OsCounterMaxAllowedValue－初期オフセット)より大きい≪OS276≫

拡張エラー

不正な処理単位からの呼出し≪OS088≫

E_OS_CALLEVELC1ISR からの呼出し≪NOS1200≫
アクセスが許可されていないスケジュールテ

E_OS_ACCESS

ーブルが指定された(SC3，SC4 のみ)≪OS056≫

E_OS_DISABLEDINT

割込み禁止状態からの呼出し≪OS093≫

E_OS_CORE

起動していないコアへの呼出し≪OSa120≫

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC1，SC2，SC3，SC4【OS521】
機能

本システムサービスは，現在のティックから Offset で指定された相対時刻が経過した後にスケジュールテーブルを開始する．
機能仕様
StartScheduleTableRel は，ScheduleTableID で指定された SCHEDULETABLE_STOPPED 状態のスケジュールテーブルを開始する．先頭満了点はスケジュールテーブルに接続されたカウンタの現在のティック値から(Offset＋スケジュールテーブルの初期オフセット)を経過した時である．システムサー
ビスからリターンする前に，スケジュールテーブル状態を SCHEDULETABLE_RUNNING 状態へ遷

402

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
移させる【OS278】．
StartScheduleTableRel の呼出し時に指定された ScheduleTableID が不正であった場合，E_OS_ID
を返す【OS275】．また，ScheduleTableID で指定されたスケジュールテーブルが暗黙同期スケジュー
ルテーブルであった場合，E_OS_ID を返す【OS452】〔OS430〕．
StartScheduleTableRel の呼出し時に指定された Offset が 0 であった場合，E_OS_VALUE を返す【OS332】．また，StartScheduleTableRel の呼出し時に指定された Offset が，接続されているカウン
タの OsCounterMaxAllowedValue からスケジュールテーブルの初期オフセットを引いたものより大きい場合，E_OS_VALUE を返す【OS276】．
StartScheduleTableRel の呼出し時に，スケジュールテーブル状態が
SCHEDULETABLE_STOPPED 以外の場合，E_OS_STATE を返す【OS277】．
マルチコア対応 OS における仕様
StartScheduleTableRel は，コアを跨いで呼び出すことができる【OS645】．

403

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.34 StartScheduleTableAbs
C 言語 I/F
パラメータ[in]StatusType StartScheduleTableAbs(ScheduleTableType ScheduleTableID, TickType Start)【OS358】
ScheduleTableID

スケジュールテーブル ID

Start

開始時刻

パラメータ[in/out]－

パラメータ[out]－E_OK

スケジュールテーブル起動成功≪COS3104≫
スケジュールテーブル状態が

標準エラー

SCHEDULETABLE_STOPPED 以外≪

E_OS_STATE

OS350≫
スケジュールテーブルが所属する OSAP が利E_OS_ACCESS用可能でない(SC3，SC4 のみ)≪OS509≫
SheduleTableID が不正≪OS348≫

E_OS_ID

Start が接続しているカウンタのカウンタ最大

E_OS_VALUE

返り値

値より大きい≪OS349≫
不正な処理単位からの呼出し≪OS088≫

E_OS_CALLEVELC1ISR からの呼出し≪NOS1200≫

拡張エラー

アクセスが許可されていないスケジュールテ
E_OS_ACCESS

ーブルが指定された(SC3，SC4 のみ)≪OS056≫

E_OS_DISABLEDINT

割込み禁止状態からの呼出し≪OS093≫

E_OS_CORE

起動していないコアへの呼出し≪OSa120≫

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC1，SC2，SC3，SC4【OS522】
機能

本システムサービスは，Start で指定された絶対時刻に達した際にスケジュールテーブルを開始する．
機能仕様
StartScheduleTableAbs は，ScheduleTableID で指定された SCHEDULETABLE_STOPPED 状態のスケジュールテーブルを開始する．開始タイミングは接続されたカウンタが次に Start で指定された時刻と一致した時である．スケジュールテーブルの同期方式が明示同期か同期なしの場合は
SCHEDULETABLE_RUNNING に遷移し，暗黙同期の場合は
SCHEDULETABLE_RUNNING_AND_SYNCHRONOUS へ遷移する．先頭満了点はスケジュールテーブルに接続されたカウンタが(Start＋スケジュールテーブルの初期オフセット)に達した時である

404

文書番号：ATK2-0010
文書名：ATK2 外部仕様書【OS351】．
StartScheduleTableAbs の呼出し時に指定された ScheduleTableID が不正であった場合，E_OS_ID
を返す【OS348】．
StartScheduleTableAbs の呼出し時に指定された Start が，接続されているカウンタの
OsCounterMaxAllowedValue より大きい場合，E_OS_VALUE を返す【OS349】．
StartScheduleTableAbs の呼出し時にスケジュールテーブル状態が SCHEDULETABLE_STOPPED以外の場合，E_OS_STATE を返す【OS350】．
ATK2 では，Start で指定された値と接続されているカウンタの現在値が同じ場合，即座に開始せず，次の周期で Start に達した際に開始する【NOS1341】．
マルチコア対応 OS における仕様
StartScheduleTableAbs は，コアを跨いで呼び出すことができる【OS644】．

405

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.35 StopScheduleTable
C 言語 I/F
パラメータ[in]StatusType StopScheduleTable(ScheduleTableType ScheduleTableID)【OS006】
スケジュールテーブル ID

ScheduleTableID

パラメータ[in/out]－

パラメータ[out]

－
E_OK

標準エラー

スケジュールテーブル停止成功≪COS3104≫
スケジュールテーブル状態がE_OS_NOFUNCSCHEDULETABLE_STOPPED≪OS280≫
スケジュールテーブルが所属する OSAP が利E_OS_ACCESS用可能でない(SC3，SC4 のみ)≪OS509≫
SheduleTableID が不正≪OS279≫

E_OS_ID
返り値

不正な処理単位からの呼出し≪OS088≫

E_OS_CALLEVEL
拡張エラー

C1ISR からの呼出し≪NOS1200≫
アクセスが許可されていないスケジュールテ

E_OS_ACCESS

ーブルが指定された(SC3，SC4 のみ)≪OS056≫

E_OS_DISABLEDINT

割込み禁止状態からの呼出し≪OS093≫

E_OS_CORE

起動していないコアへの呼出し≪OSa120≫

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC1，SC2，SC3，SC4【OS523】
機能

本システムサービスは，ScheduleTableID で指定されたスケジュールテーブルを停止する．
機能仕様
StopScheduleTable は，ScheduleTableID で指定されたスケジュールテーブルを停止し，
SCHEDULETABLE_STOPPED 状態へ遷移させる【OS281】．
StopScheduleTable の呼出し時に指定された ScheduleTableID が不正であった場合，E_OS_ID を返す【OS279】．
StopScheduleTable の呼出し時に，スケジュールテーブル状態が SCHEDULETABLE_STOPPED の場合，E_OS_NOFUNC を返す【OS280】．
マルチコア対応 OS における仕様
StopScheduleTable は，コアを跨いで呼び出すことができる【OS646】．

406

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.36 NextScheduleTable
StatusType NextScheduleTable
C 言語 I/F(ScheduleTableType ScheduleTableID_From,
ScheduleTableType ScheduleTableID_To)【OS191】

パラメータ[in]ScheduleTableID_From

切換え前スケジュールテーブル ID

ScheduleTableID_To

切換え後スケジュールテーブル ID

パラメータ[in/out]－

パラメータ[out]－スケジュールテーブル切換え成功≪COS3104

E_OK≫
ScheduleTableID_From のスケジュールテー
ブル状態が SCHEDULETABLE_STOPPED

E_OS_NOFUNC

か，SCHEDULETABLE_NEXT≪OS283≫

標準エラー

ScheduleTableID_To のスケジュールテーブル
状態が SCHEDULETABLE_STOPPED でな

E_OS_STATEい≪OS309≫
スケジュールテーブルが所属する OSAP が利E_OS_ACCESS用可能でない(SC3，SC4 のみ)≪OS509≫
ScheduleTableID_From またはScheduleTableID_To が不正≪OS282≫

返り値

2 つのスケジュールテーブルが同一のカウン

E_OS_IDタに接続されていない≪OS330≫
2 つのスケジュールテーブルの同期方式が等しくない≪OS484≫

拡張エラー

不正な処理単位からの呼出し≪OS088≫

E_OS_CALLEVELC1ISR からの呼出し≪NOS1200≫
アクセスが許可されていないスケジュールテ

E_OS_ACCESS

ーブルが指定された(SC3，SC4 のみ)≪OS056≫

E_OS_DISABLEDINT

割込み禁止状態からの呼出し≪OS093≫

E_OS_CORE

起動していないコアへの呼出し≪OSa120≫

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC1，SC2，SC3，SC4【OS524】
機能

本システムサービスは，動作中のスケジュールテーブルから，他のスケジュールテーブルへの切換え
を行う．

407

文書番号：ATK2-0010
文書名：ATK2 外部仕様書

機能仕様
NextScheduleTable は，ScheduleTableID_To で指定されたスケジュールテーブルをScheduleTableID_From で指定されたスケジュールテーブルの最終遅延経過後に開始する．
ScheduleTableID_To で指定されたスケジュールテーブルの先頭満了点は，ScheduleTableID_From で指定されたスケジュールテーブルの最終満了点処理後，ScheduleTableID_From の最終遅延＋ScheduleTableID_To の初期オフセット経過後である【OS284】．
NextScheduleTable 呼出し時に ScheduleTableID_From で指定されたスケジュールテーブルが，前の NextScheduleTable によって既に次のスケジュールテーブルを指定されまだスケジュールテーブル
が切り換わっていない場合，前の NextScheduleTable 呼出し時に ScheduleTableID_To で指定されたスケジュールテーブルの状態を SCHEDULETABLE_STOPPED に変更し現在の呼出し時にScheduleTableID_To で指定されたスケジュールテーブルを次に起動するスケジュールテーブルとする【OS324】．
NextScheduleTable の呼出し時に，ScheduleTableID_From と ScheduleTableID_To で指定された同期方式が明示同期であり，かつ，OS モジュールが既に ScheduleTableID_From と同期していた場合，ScheduleTableID_To が開始した後も同期状態を保たなければならない【OS505】．
NextScheduleTable 終了後，スケジュールテーブルが切り換わる前に ScheduleTableID_From で指定されたスケジュールテーブルが停止された場合，ScheduleTableID_To で指定されたスケジュールテーブルは起動せず，SCHEDULETABLE_STOPPED 状態となる【OS453】．
NextScheduleTable の呼出し時に指定された ScheduleTableID_From と ScheduleTableID_To のうち，どちらかが不正であった場合，E_OS_ID を返す【OS282】．NextScheduleTable の呼出し時に指定された 2 つのスケジュールテーブルが異なるカウンタに接続されている場合，
E_OS_ID を返す【OS330】．
NextScheduleTable の呼出し時に ScheduleTableID_To で指定されたスケジュールテーブルの同期方式が ScheduleTableID_From で指定されたスケジュールテーブルの同期方式と等しくない場合，
E_OS_ID を返す【OS484】．
NextScheduleTable の呼出し時に，ScheduleTableID_From で指定されたスケジュールテーブル状態
が SCHEDULETABLE_STOPPED か，SCHEDULETABLE_NEXT の場合，E_OS_NOFUNC を返す【OS283】．NextScheduleTable の呼出し時に ScheduleTableID_To で指定されたスケジュールテーブ
ル状態が SCHEDULETABLE_STOPPED でない場合，E_OS_STATE を返す【OS309】．
ScheduleTableID_From で指定されたスケジュールテーブルは，周期動作，単発動作に関わらず，
ScheduleTableID_To で指定されたスケジュールテーブルへの切換えと同時に停止する【NOS0661】．

408

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
ただし，ScheduleTableID_From で指定されたスケジュールテーブルが周期動作で，スケジュールテー
ブルが切り換わる前に ScheduleTableID_To で指定されたスケジュールテーブルが停止された場合，ScheduleTableID_From で指定されたスケジュールテーブルは繰り返し動作する【NOS0662】．
マルチコア対応 OS における仕様
NextScheduleTable は，コアを跨いで呼び出すことができる【NOS0974】．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，NextScheduleTable は，コアを跨いで呼び出すことができないと規定されている【OSa144】．しかし，NextScheduleTable をコアを跨いで呼び出すことによる不都合が想定できないため，本仕様では呼び出すことができると規定した≪NOS0974≫．

409

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.37 StartScheduleTableSynchron
C 言語 I/F
パラメータ[in]StatusType StartScheduleTableSynchron(ScheduleTableType ScheduleTableID)【OS201】
スケジュールテーブル ID

ScheduleTableID

パラメータ[in/out]－

パラメータ[out]－スケジュールテーブル同期開始成功≪

E_OK

COS3104≫

標準エラー

スケジュールテーブル状態が
SCHEDULETABLE_STOPPED 以外≪

E_OS_STATE

OS388≫
スケジュールテーブル ID が不正，または指定
E_OS_IDされたスケジュールテーブルが明示同期スケ
ジュールテーブルでない≪OS387≫

返り値

不正な処理単位からの呼出し≪OS088≫

E_OS_CALLEVELC1ISR からの呼出し≪NOS1200≫

拡張エラー

アクセスが許可されていないスケジュールテーブルが指定された(SC4 のみ)≪OS056≫

E_OS_ACCESS

スケジュールテーブルが所属する OSAP が利用可能でない(SC4 のみ)≪OS509≫

E_OS_DISABLEDINT

割込み禁止状態からの呼出し≪OS093≫

E_OS_CORE

コアを跨いだ呼出し≪OS589≫

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC2，SC4【OS525】
機能

本システムサービスは，明示同期スケジュールテーブルを開始する．
機能仕様
StartScheduleTableSynchron は，ScheduleTableID で指定されたスケジュールテーブルを
SCHEDULETABLE_WAITING 状態に設定して動作を開始する．先頭満了点はスケジュールテーブルに接続されたカウンタが"(Duration-SyncValue)+InitialOffset ticks"を経過した時である【OS389】．
・ DuratioNOS0ScheduleTableDuration(スケジュールテーブル周期)
・ SyncValue：SyncScheduleTable の Value で渡された現在時刻
・ InitialOffset ：スケジュールテーブルの初期オフセット
StartScheduleTableSynchron の呼出し時に指定された ScheduleTableID が不正であった場合，また410

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
は，ScheduleTableID で指定されたスケジュールテーブルが明示同期でなかった場合，E_OS_ID を返す【OS387】．スケジュールテーブル状態が SCHEDULETABLE_STOPPED 以外の場合，E_OS_STATE
を返す【OS388】．
マルチコア対応 OS における仕様
StartScheduleTableSynchron を，コアを跨いで呼び出した場合，E_OS_CORE を返す≪OS589≫．

411

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.38 SyncScheduleTable
C 言語 I/F
パラメータ[in]StatusType SyncScheduleTable(ScheduleTableType ScheduleTableID, TickType Value)【OS199】
ScheduleTableID

スケジュールテーブル ID

Value

現在の同期カウンタの時刻

パラメータ[in/out]－

パラメータ[out]

－
E_OK

標準エラー

時刻通知成功≪COS3104≫
スケジュールテーブル状態が
SCHEDULETABLE_STOPPED か

E_OS_STATESCHEDULETABLE_NEXT≪OS456≫
スケジュールテーブル ID が不正，または指定
E_OS_IDされたスケジュールテーブルが明示同期スケ
ジュールテーブルでない≪OS454≫
Value がスケジュールテーブル周期より大きい

E_OS_VALUE

返り値
拡張エラー

≪OS455≫
不正な処理単位からの呼出し≪OS088≫

E_OS_CALLEVELC1ISR からの呼出し≪NOS1200≫
アクセスが許可されていないスケジュールテーブルが指定された(SC4 のみ)≪OS056≫

E_OS_ACCESS

スケジュールテーブルが所属する OSAP が利用可能でない(SC4 のみ)≪OS509≫

E_OS_DISABLEDINT

割込み禁止状態からの呼出し≪OS093≫

E_OS_CORE

コアを跨いだ呼出し≪OS589≫

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC2，SC4【OS526】
機能

本システムサービスは，スケジュールテーブルに同期カウンタの値を通知し，同期を開始する．
機能仕様
SyncScheduleTable は，現在の同期カウンタの値をスケジュールテーブルに通知し，スケジュールテーブルは同期カウンタに同期して動作を行う【OS457】．
SyncScheduleTable の呼出し時に指定された ScheduleTableID が不正であった場合，また，
ScheduleTableID で指定されたスケジュールテーブルが明示同期でなかった場合，E_OS_ID を返す【OS454】．SyncScheduleTable の呼出し時に指定された Value が OsScheduleTableDuration より大412

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
きい場合，E_OS_VALUE を返す【OS455】．
スケジュールテーブル状態が SCHEDULETABLE_STOPPED か SCHEDULETABLE_NEXT の場
合，E_OS_STATE を返す【OS456】．
マルチコア対応 OS における仕様
SyncScheduleTable を，コアを跨いで呼び出した場合，E_OS_CORE を返す≪OS589≫．

413

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.39 SetScheduleTableAsync
C 言語 I/F
パラメータ[in]StatusType SetScheduleTableAsync(ScheduleTableType ScheduleTableID)【OS422】

パラメータ[in/out]－

パラメータ[out]

－

標準エラー

スケジュールテーブル ID

ScheduleTableID

E_OK

非同期設定成功≪COS3104≫
スケジュールテーブル ID が不正，または指定

E_OS_IDされたスケジュールテーブルが明示同期スケジュールテーブルでない≪OS458≫
不正な処理単位からの呼出し≪OS088≫

E_OS_CALLEVEL
返り値

C1ISR からの呼出し≪NOS1200≫

拡張エラー

アクセスが許可されていないスケジュールテー
ブルが指定された(SC4 のみ)≪OS056≫

E_OS_ACCESS

スケジュールテーブルが所属する OSAP が利用可能でない(SC4 のみ)≪OS509≫

E_OS_DISABLEDINT

割込み禁止状態からの呼出し≪OS093≫

E_OS_CORE

コアを跨いだ呼出し≪OS589≫

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC2，SC4【OS527】
機能

本システムサービスは，スケジュールテーブルの同期を停止する．
機能仕様
スケジュールテーブルが動作中に SetScheduleTableAsync が呼び出された場合，SyncScheduleTableが呼ばれるまで同期処理を停止する【OS362】．スケジュールテーブルが動作中に
SetScheduleTableAsync が呼び出された場合，OS モジュールは満了点の実行を継続する【OS323】．
ScheduleTableID で指定されたスケジュールテーブルの状態がSCHEDULETABLE_RUNNING_AND_SYNCHRONOUS であれば，状態をSCHEDULTABLE_RUNNING 状態に遷移させる【OS300】．
SetScheduleTableAsync の呼出し時に指定された ScheduleTableID が不正であった場合，また，
ScheduleTableID で指定されたスケジュールテーブルが明示同期でなかった場合，E_OS_ID を返す【OS458】．ScheduleTableID で指定されたスケジュールテーブル状態が
SCHEDULETABLE_STOPPED，SCHEDULETABLE_NEXT，SCHEDULETABLE_WAITING であった場合，E_OS_STATE を返す【OS483】．

414

文書番号：ATK2-0010
文書名：ATK2 外部仕様書

マルチコア対応 OS における仕様
SetScheduleTableAsync を，コアを跨いで呼び出した場合，E_OS_CORE を返す≪OS589≫．

415

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.40 GetScheduleTableStatus
StatusType GetScheduleTableStatus
C 言語 I/F(ScheduleTableType ScheduleTableID,
ScheduleTableStatusRefType ScheduleStatus)【OS227】

パラメータ[in]スケジュールテーブル ID

ScheduleTableID

パラメータ[in/out]－

パラメータ[out]ScheduleStatus

スケジュールテーブル状態を格納する領域
へのポインタスケジュールテーブル状態取得成功≪

E_OK

COS3104≫

標準エラー

スケジュールテーブルが所属する OSAP が

E_OS_ACCESS

利用可能でない(SC3，SC4 のみ)≪OS509≫
ScheduleTableID が不正≪OS293≫

E_OS_ID

不正な処理単位からの呼出し≪OS088≫

E_OS_CALLEVELC1ISR からの呼出し≪NOS1200≫

返り値

アクセスが許可されていないスケジュール
E_OS_ACCESS

テーブルが指定された(SC3，SC4 のみ)≪
OS056≫

拡張エラー
E_OS_DISABLEDINT

割込み禁止状態からの呼出し≪OS093≫

E_OS_PARAM_POINTER

ポインタ引数が NULL≪OS566≫

E_OS_ILLEGAL_ADDRESS
E_OS_CORE

ScheduleStatus に不正なアドレスが指定された(SC3，SC4 のみ)≪OS051≫
起動していないコアへの呼出し≪OSa120≫

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC1，SC2，SC3，SC4【OS528】
機能

本システムサービスは，スケジュールテーブルの状態を取得する．
機能仕様
GetScheduleTableStatus は，ScheduleTableID で指定されたスケジュールテーブルの状態をScheduleStatus に格納する．格納される状態を以下に示す．
・ スケジュールテーブルが停止状態の場合：SCHEDULETABLE_STOPPED【OS289】
・ スケジュールテーブルが切換え待ち状態の場合：SCHEDULETABLE_NEXT【OS353】
・ スケジュールテーブルが同期待ち状態の場合：SCHEDULETABLE_WAITING【OS354】
・ スケジュールテーブルが同期動作状態の場合：
SCHEDULETABLE_RUNNING_AND_SYNCHRONOUS【OS290】

416

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
・ スケジュールテーブルが動作状態の場合：SCHEDULETABLE_RUNNING【OS291】
GetScheduleTableStatus の呼出し時に，ScheduleTableID が不正であった場合，E_OS_ID を返す【OS293】．
マルチコア対応 OS における仕様
GetScheduleTableStatus は，コアを跨いで呼び出すことができる【OS647】．

417

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.41 GetApplicationID
C 言語 I/F

ApplicationType GetApplicationID(void)【OS016】

パラメータ[in]－パラメータ[in/out]－

パラメータ[out]－現在実行中のタスク/ISR が所属

OSAPID 取得成功≪

する OSAPIDNOS1546≫≪NOS1547≫≪NOS1548≫

INVALID_OSAPPLICATION

返り値

どの OSAP も実行中でない≪OS262≫
不正な処理単位からの呼出し≪NOS1119≫

エラーフックに渡される
エラーコード

標準エラー
拡張エラー

コンフォーマンスクラス
スケーラビリティクラス－
E_OS_CALLEVEL

不正な処理単位からの呼出し≪
NOS0411≫

BCC1，BCC2，ECC1，ECC2
SC3，SC4【OS514】
マルチコア：SC1，SC2【NOS0975】
機能

本システムサービスは，現在実行中のタスク/ISR が所属する OSAPID を取得する．
機能仕様
GetApplicationID は，現在実行中のタスク，C2ISR が所属する OSAPID を返す【NOS1546】．フックルーチン実行中の場合，GetApplicationID は，そのフックルーチンが呼び出される前に実行中であったタスク，ISR が所属する OSAPID を返す【NOS1548】．どの OSAP も実行中でない場合，
INVALID_OSAPPLICATION を返す【OS262】．GetApplicationID は，割込み禁止状態であっても，呼び出すことができる【NOS1149】．
不正な処理単位から GetApplicationID を呼び出した場合，INVALID_OSAPPLICATION を返す【NOS1119】．
使用上の注意OSAP 強制終了時に呼び出されるプレタスクフック，ポストタスクフックから GetApplicationID を呼び出した場合，強制終了対象 OSAP の ID が返される≪NOS1583≫≪NOS1584≫≪NOS1585≫．

418

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
マルチコア対応 OS における仕様
GetApplicationID を呼び出した処理単位が割付いているコアにおける，現在現在実行中のタスク，
ISR の所属する OSAPID を取得する【NOS0976】．GetApplicationID を呼び出した処理単位が割付いているコアに，どの OSAP も実行中でない場合，INVALID_OSAPPLICATION を返す【NOS0977】．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，GetApplicationID は，現在実行中のタスク，C2ISR，フックルーチンが所属する OSAPID を返すと規定されている【OS261】．本仕様では， OSAP 固有のフックルーチンを提供しないこととしたため，フックルーチンが所属する OSAPID を返す旨を削除した≪NOS1546≫．

419

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.42 CallTrustedFunction
StatusType CallTrustedFunction(
TrustedFunctionIndexType FunctionIndex,

C 言語 I/F

TrustedFunctionParameterRefType FunctionParams)【OS097】信頼関数 ID

FunctionIndex
パラメータ[in]信頼関数のパラメータへのポイン
FunctionParams

タ，パラメータをとらない場合は
NULL を渡す

パラメータ[in/out]－

パラメータ[out]－E_OK

信頼関数呼出し成功≪COS3104≫
スタックの残り量が，信頼関数が使

E_OS_STACKINSUFFICIENT

用するスタック量より少ない≪
NOS0400≫

標準エラー

E_OS_SERVICEID

FunctionIndex が不正≪OS292≫≪
OS100≫
ユーザ定義信頼関数のエラーコード

ユーザ定義エラー≪NOS0179≫
実行時間バジェットの残り時間が，E_OS_TIMEINSUFFICIENT

信頼関数の実行時間より少ない≪
NOS1409≫

返り値

不正な処理単位からの呼出し≪
E_OS_CALLEVEL

OS088≫C1ISR からの呼出し≪NOS1200≫
信頼関数が所属する OSAP が利用可

拡張エラー

能でない≪OS509≫
E_OS_ACCESS

異なるコアに割付いている OSAP に所属する信頼関数の呼び出し≪OS623≫

E_OS_DISABLEDINT
コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC3，SC4【OS516】

割込み禁止状態からの呼出し≪
OS093≫

機能
本システムサービスは，FunctionIndex で指定された信頼関数を，プロセッサコアを特権モード

420

文書番号：ATK2-0010
文書名：ATK2 外部仕様書に変更して呼び出す≪OS265≫．
機能仕様
CallTrustedFunction はプロセッサコアを特権モードに変更し，コンフィギュレーション時に定義した信頼関数のリストから FunctionIndex で指定された信頼関数を呼び出す．信頼関数実行中はメモリ保護を無効とする【OS265】．ターゲットのハードウェアが特権モードでもメモリ保護を実現できる場合
はモード変更を行う必要はないが，MPU の設定を変更する必要がある【NOS0280】．
CallTrustedFunction で呼び出した信頼関数は，信頼関数が所属する信頼 OSAP と同じアクセス権で実行する．しかし，信頼関数に対しては，CallTrustedFunction を呼び出したタスク，ISR が所属する
OSAP のタイミング保護が適用される【NOS0325】．また，信頼関数に対しては，所属している信頼
OSAP のサービス保護が適用される【NOS0326】．ただし，信頼関数を実行している状態において，実行中とする OSAP は，信頼関数を呼び出した処理単位が所属する OSAP となる【NOS0395】．
信頼関数が C2ISR から呼ばれた場合，信頼関数は呼び出された C2ISR と同じ割込み優先度で動作し，
C2ISR で許可されたシステムサービスを使用することができる≪OS364≫．
信頼関数がタスクから呼ばれた場合，信頼関数は呼び出されたタスクと同じタスク優先度で動作し，タスクで許可されたシステムサービスを使用することができる≪OS365≫．
CallTrustedFunction 呼出し時に指定された FunctionIndex が不正な場合，E_OS_SERVICEID を返す【OS292】．FunctionIndex で指定された信頼関数が，信頼関数のリストに正しくコンフィギュレー
トされていない場合，OS は E_OS_SERVICEID を返す【OS100】．
CallTrustedFunction 呼出し時に，呼び出し元の処理単位が使用可能なスタックの残り量が，信頼関数が使用するスタック量より少ない場合， CallTrustedFunction は，信頼関数を呼び出さずに，
E_OS_STACKINSUFFICIENT を返す≪NOS0400≫．
CallTrustedFunction 呼出し時に，呼出し元の処理単位の実行時間バジェットの残り時間が，信頼関数の実行にかかる実行時間(OsTrustedFunctionExecutionBudget)より少ない場合，
CallTrustedFunction は，信頼関数を呼び出さずに，E_OS_TIMEINSUFFICIENT を返す≪NOS1409≫．
使用上の注意CallTrustedFunction は StandardI/O などの標準インターフェースの呼び出しを行う際に呼び出されることを想定している．呼び出された信頼関数は渡されたパラメータのチェックを行わなければならな
い．
CallTrustedFunction の呼び出しにより，タイミング保護が無効とならないように注意する．信頼421

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
OSAP でも，タイミング保護による保護違反時処理を実行される可能性がある．したがって，内部状態を持たない関数のみ CallTrustedFunction を呼び出すことを推奨する【OS312】．
信頼関数の実行にかかる時間(OsTrustedFunctionExecutionBudget)の見積もりを誤った場合，シス
テムが正しく動作しない可能性がある．信頼関数の実行にかかる時間を小さく見積もった場合，信頼関数の実行中にタイミング保護違反が発生し，OS がシャットダウンする可能性がある．信頼関数の実行にかかる時間を大きく見積もった場合，
CallTrustedFunction が E_OS_TIMEINSUFFICIENT を返し，信頼関数が呼び出されない可能性がある．
マルチコア対応 OS における仕様
CallTrustedFunction を，コアを跨いで呼び出した場合，E_OS_ACCESS を返す【OS623】．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，信頼関数の返り値は void 型と定義されていた≪OS312≫．本仕様では，信頼関数を StatusType 型とし，ユーザが定義した信頼関数の返り値を CallTrustedFunction の返り値とするよう規定した≪NOS0179≫．
AUTOSAR 仕様では，
信頼関数には CallTrustedFunction を呼び出したタスク，ISR が所属する OSAPのサービス保護が適用されると定義されていた【OS266】．本仕様では，信頼関数には，信頼関数が所属している信頼 OSAP のサービス保護を適用するよう規定した≪NOS0325≫≪NOS0326≫．ただし，信頼関数を実行している状態において，実行中とする OSAP は，信頼関数を呼び出した処理単位が所属する OSAP となるよう規定した≪NOS0395≫．
AUTOSAR 仕様では，信頼関数実行中は，同じ OSAP に所属する処理単位への切り替えを行わないと規定されている【OS563】．しかし，同じ OSAP の処理単位への切り替えだけを禁止しても，他のOSAP の処理単位から OSAP を終了される可能性があり，優先度逆転が発生する可能性もあるので，本仕様では規定しない．この問題への対応策は，2.18.8.8 節を参照．
AUTOSAR 仕様では，タイミング保護に対する信頼関数の仕様が規定されている．
・ 信頼関数実行中のタイミング保護違反処理【OS565】
・ ネストして実行された信頼関数におけるタイミング保護違反処理【OS564】
本仕様では，信頼関数の実行を開始する前に，実行時間をチェックするようにしたため，上記の仕様を削除した．

422

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.43 CheckISRMemoryAccess
AccessType CheckISRMemoryAccess(C 言語 I/F

ISRType ISRID, MemoryStartAddressType Address,
MemorySizeType Size)【OS512】

パラメータ[in]ISRID

ISR ID

Address

チェックするメモリ領域の先頭アドレス

Size

チェックするメモリ領域のサイズ

パラメータ[in/out]－

パラメータ[out]－アクセス可能かメモリアクセス情報取得成功≪OS267≫

不可能か

ISRID が不正≪OS268≫
C1ISR の指定≪NOS0408≫
Size が 0 である≪NOS0862≫
不正な処理単位からの呼出し≪NOS0417≫

返り値

割込み禁止状態からの呼出し≪NOS0426≫
Address と Size で指定されたメモリ領域が，メ
モリ保護属性が異なる領域を含む場合≪
NOS0418≫
起動していないコアへの呼出し≪NOS0979≫
標準エラー－
ISRID が不正≪NOS0440≫

E_OS_ID

C1ISR の指定≪NOS0699≫
E_OS_VALUE

Size が 0 である≪NOS0863≫

E_OS_CALLEVEL

不正な処理単位からの呼出し≪NOS0411

エラーフックに渡される
エラーコード

≫
拡張エラー

E_OS_

割込み禁止状態からの呼出し≪NOS0412

DISABLEDINT≫

E_OS_ILLEGAL_
ADDRESS

Address と Size で指定されたメモリ領域
が，メモリ保護属性が異なる領域を含む場
合≪NOS0419≫
起動していないコアへの呼出し≪

E_OS_CORE

NOS0926≫

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC3，SC4【OS517】
機能

本システムサービスは，ISRID で指定された ISR が，Address と Size で指定されたメモリ領域に対

423

文書番号：ATK2-0010
文書名：ATK2 外部仕様書

して，書込み，読出し，実行が可能か，またスタックの一部であるかを示す情報を返す≪OS267≫．
機能仕様
CheckISRMemoryAccess は，ISRID で指定された ISR が，Address と Size で指定されたメモリ領域に対して，書込み，読出し，実行が可能か，またスタックの一部であるかを示す情報を返す【OS267】．
CheckISRMemoryAccess の返り値と，OS マクロの OSMEMORY_IS_READABLE，
OSMEMORY_IS_WRITEABLE，OSMEMORY_IS_EXECUTABLE，
OSMEMORY_IS_STACKSPACE を使用して，アクセス可能かを確認することができる【OSa002】
CheckISRMemoryAccess 呼出し時に指定された ISRID が不正な場合はアクセス不可能を返す【OS268】．ISRID で指定された ISR が，C1ISR の場合も，アクセス不可能を返す【NOS0408】．これらの ISRID が不正な場合，エラーコードを E_OS_ID として，エラーフックを呼び出す【NOS0440】〔NOS0409〕．
Size に 0 を指定された場合，アクセス不可能を返す【NOS0862】．この場合，エラーコードを
E_OS_VALUE として，エラーフックを呼び出す【NOS0863】〔NOS0409〕．
不正な処理単位から CheckISRMemoryAccess を呼び出した場合，
アクセス不可能を返す【NOS0417】．
また，割込み禁止状態で呼び出された場合も，アクセス不可能を返す【NOS0426】〔NOS0383〕〔NOS0384〕〔NOS0385〕〔NOS0520〕．
Address と Size で指定されたメモリ領域が，メモリ保護属性が異なる領域を含む場合，アクセス不可能を返す【NOS0418】．この場合，エラーコードを E_OS_ILLEGAL_ADDRESS として，エラーフ
ックを呼び出す【NOS0419】〔NOS0409〕．なお，ISRID で指定された C2ISR のスタック領域は，他のメモリ領域とメモリ保護属性が異なるものとして扱う【NOS0860】．
ISRID で指定された ISR が，信頼 OSAP に所属している場合は，一律書込み，読出し，実行可能とし，OsIsrSystemStackSize でサイズを定義したスタックの一部であるかを示す情報を返す【NOS0401】．
ISRID で指定された ISR が，非信頼 OSAP に所属している場合，OsIsrStackSize でサイズを指定したスタックの一部であるかを示す情報を返す【NOS0402】．
マルチコア対応 OS における仕様
CheckISRMemoryAccess は，コアを跨いで呼び出すことができる【NOS0978】．
本 OS が起動していないコアに対して CheckISRMemoryAccess を呼び出した場合，アクセス不可能を返す【NOS0979】．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，CheckISRMemoryAccess は，コアを跨いで呼び出すことができないと規定されている【OSa145】．しかし，CheckISRMemoryAccess をコアを跨いで呼び出すことによる不都合が想定できないため，本仕様では呼び出すことができると規定した≪NOS0978≫．
AUTOSAR 仕様では，指定されたメモリ領域全体に対してアクセスできない場合，アクセス不可能とみなすと規定されている【OS313】．しかし，本仕様では指定されたメモリ領域が，メモリ保護属性が424

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
異なる領域を含む場合，アクセス不可能を返すと規定したため削除した≪NOS0418≫．

425

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.44 CheckTaskMemoryAccess
AccessType CheckTaskMemoryAccess(C 言語 I/F

TaskType TaskID, MemoryStartAddressType Address,
MemorySizeType Size)【OS513】

パラメータ[in]TaskID

タスク ID

Address

チェックするメモリ領域の先頭アドレス

Size

チェックするメモリ領域のサイズ

パラメータ[in/out]－

パラメータ[out]－アクセス可能かメモリアクセス情報取得成功≪OS269≫

不可能か

TaskID が不正≪OS270≫
Size が 0 である≪NOS0864≫
不正な処理単位からの呼出し≪NOS0420≫

返り値

割込み禁止状態からの呼出し≪NOS0427≫
Address と Size で指定されたメモリ領域が，メモリ保護属性が異なる領域を含む場合≪NOS0421≫
起動していないコアへの呼出し≪NOS0981≫
標準エラー

エラーコードE_OS_ID

TaskID が不正≪NOS0441≫

E_OS_VALUE

Size が 0 である≪NOS0865≫

E_OS_CALLEVEL

不正な処理単位からの呼出し≪NOS0411≫

エラーフックに渡される－

E_OS_DISABLEDINT
拡張エラー

割込み禁止状態からの呼出し≪NOS0412≫

E_OS_ILLEGAL_ADD
RESS

Address と Size で指定されたメモリ領域
が，メモリ保護属性が異なる領域を含む場
合≪NOS0422≫
起動していないコアへの呼出し≪

E_OS_CORE

NOS0926≫

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC3，SC4【OS518】
機能

本システムサービスは，TaskID で指定されたタスクが，Address と Size で指定されたメモリ領域に対して，書込み，読出し，実行が可能か，またスタックの一部であるかを示す情報を返す．

426

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
機能仕様
CheckTaskMemoryAccess は，TaskID で指定されたタスクが，Address と Size で指定されたメモリ領域に対して，書込み，読出し，実行が可能か，またスタックの一部であるかを示す情報を返す【OS269】．
CheckTaskMemoryAccess の返り値と，OS マクロの OSMEMORY_IS_READABLE，
OSMEMORY_IS_WRITEABLE，OSMEMORY_IS_EXECUTABLE，
OSMEMORY_IS_STACKSPACE を使用して，アクセス可能かを確認することができる【OSa003】．
CheckTaskMemoryAccess 呼出し時に指定された TaskID が不正な場合はアクセス不可能を返す【OS270】．この場合，エラーコードを E_OS_ID として，エラーフックを呼び出す【NOS0441】．
Size に 0 を指定された場合，アクセス不可能を返す【NOS0864】．この場合，エラーコードを
E_OS_VALUE として，エラーフックを呼び出す【NOS0865】〔NOS0409〕．
不正な処理単位から CheckTaskMemoryAccess を呼び出した場合，アクセス不可能を返す【NOS0420】．また，割込み禁止状態で呼び出された場合も，アクセス不可能を返す【NOS0427】〔NOS0383〕〔NOS0384〕〔NOS0385〕〔NOS0520〕．
Address と Size で指定されたメモリ領域が，メモリ保護属性が異なる領域を含む場合も，アクセス不可能を返す【NOS0421】．この場合，エラーコードを E_OS_ILLEGAL_ADDRESS として，エラー
フックを呼び出す【NOS0422】〔NOS0409〕．なお，TaskID で指定されたタスクのスタック領域は，他のメモリ領域とメモリ保護属性が異なるものとして扱う【NOS0861】．ATK2 では，タスクのスタッ
ク領域を共有した場合に，TaskID で指定したタスクのスタック領域の境界をまたぐメモリ領域に対して CheckTaskMemoryAccess を呼び出しても，エラーフックが呼び出されず，アクセス不可能を返す
ことがある【NOS1342】．
TaskID で指定されたタスクが，信頼 OSAP に所属している場合は，一律書込み，読出し，実行可能とし，OsTaskSystemStackSize でサイズを定義したスタックの一部であるかを示す情報を返す【NOS0403】．TaskID で指定されたタスクが，非信頼 OSAP に所属している場合，OsTaskStackSize
でサイズを指定したスタックの一部であるかを示す情報を返す【NOS0404】．
マルチコア対応 OS における仕様
CheckTaskMemoryAccess は，コアを跨いで呼び出すことができる【NOS0980】．
本 OS が起動していないコアに対して CheckTaskMemoryAccess を呼び出した場合，アクセス不可能を返す【NOS0981】．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，CheckTaskMemoryAccess は，コアを跨いで呼び出すことができないと規定されている【OSa146】．しかし，CheckTaskMemoryAccess をコアを跨いで呼び出すことによる不都合が想定できないため，本仕様では呼び出すことができると規定した≪NOS0980≫．
AUTOSAR 仕様では，指定されたメモリ領域全体に対してアクセスできない場合，アクセス不可能とみなすと規定されている【OS314】．しかし，本仕様では指定されたメモリ領域が，メモリ保護属性が異なる領域を含む場合，アクセス不可能を返すと規定したため削除した≪NOS0421≫．

427

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.45 CheckTaskAccess
ObjectAccessType CheckTaskAccess(C 言語 I/F

ApplicationType ApplID,
TaskType TaskID)【NOS0522】

パラメータ[in]ApplID

OSAPID

TaskID

タスク ID

パラメータ[in/out]－

パラメータ[out]－ApplID が示す OSAP が，TaskID が示すタスク

ACCESSにアクセス可能≪NOS0524≫
ApplID が示す OSAP が，TaskID が示すタスクにアクセス不可能≪NOS0525≫

返り値

ApplID，TaskID が不正≪NOS0526≫

NO_ACCESS

不正な処理単位からの呼出し≪NOS0527≫
割込み禁止状態からの呼出し≪NOS0528≫
起動していないコアへの呼出し≪NOS0983≫

標準エラー

エラーフックに渡される
エラーコード－E_OS_ID

ApplID，TaskID が不正≪NOS0519≫

E_OS_CALLEVEL

不正な処理単位からの呼出し≪NOS0411
≫

拡張エラー

E_OS_DISABLEDINT

割込み禁止状態からの呼出し≪NOS0412≫
起動していないコアへの呼出し≪

E_OS_CORE

NOS0926≫

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC3，SC4【NOS0523】
機能

本システムサービスは，ApplID で指定された OSAP が，TaskID で指定されたタスクに対してアクセス可能かを返す．
機能仕様
CheckTaskAccess は，ApplID が示す OSAP が，
TaskID で指定されたタスクにアクセス可能な場合，
ACCESS を返す【NOS0524】．ApplID が示す OSAP が，TaskID で指定されたタスクにアクセス不可能な場合，NO_ACCESS を返す【NOS0525】．
CheckTaskAccess 呼出し時に指定された ApplID や TaskID が不正な場合，NO_ACCESS を返す【NOS0526】．

428

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
不正な処理単位から CheckTaskAccess を呼び出した場合，NO_ACCESS を返す【NOS0527】．また，
割込み禁止状態で呼び出された場合も，NO_ACCESS を返す【NOS0528】〔NOS0383〕〔NOS0384〕〔NOS0385〕〔NOS0521〕．
CheckTaskAccess は，ApplID で指定された OSAP の状態に関わらず，指定されたタスクに対してア
クセス可能かを返す【NOS0529】．
マルチコア対応 OS における仕様
CheckTaskAccess は，コアを跨いで呼び出すことができる【NOS0982】．
本 OS が起動していないコアに対して CheckTaskAccess を呼び出した場合，NO_ACCESS を返す【NOS0983】．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，CheckObjectAccess は，コアを跨いで呼び出すことができないと規定されている【OSa147】．しかし，CheckObjectAccess (CheckTaskAccess)をコアを跨いで呼び出すことによる不都合が想定できないため，本仕様では呼び出すことができると規定した≪NOS0982≫．

429

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.46 CheckISRAccess
ObjectAccessType CheckISRAccess(C 言語 I/F

ApplicationType ApplID,
ISRType ISRID)【NOS0530】

パラメータ[in]ApplID

OSAPID

ISRID

ISRID

パラメータ[in/out]－

パラメータ[out]－ApplID が示す OSAP が，ISRID が示す ISR にACCESS

アクセス可能≪NOS0532≫
ApplID が示す OSAP が，ISRID が示す ISR に
アクセス不可能≪NOS0533≫
ApplID，ISRID が不正≪NOS0534≫

返り値

C1ISR の指定≪NOS0697≫

NO_ACCESS

不正な処理単位からの呼出し≪NOS0535≫
割込み禁止状態からの呼出し≪NOS0536≫
起動していないコアへの呼出し≪NOS0985≫
標準エラー－
ApplID，ISRID が不正≪NOS0519≫

E_OS_ID
E_OS_CALLEVEL

エラーフックに渡される
エラーコードC1ISR の指定≪NOS0699≫

拡張エラー

不正な処理単位からの呼出し≪NOS0411≫

E_OS_DISABLEDINT

割込み禁止状態からの呼出し≪NOS0412≫
起動していないコアへの呼出し≪

E_OS_CORE

NOS0926≫

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC3，SC4【NOS0531】
機能

本システムサービスは，ApplID で指定された OSAP が，ISRID で指定された ISR に対してアクセス可能かを返す．
機能仕様
CheckISRAccess は，ApplID が示す OSAP が，ISRID で指定された ISR にアクセス可能な場合，
ACCESS を返す【NOS0532】．ApplID が示す OSAP が，ISRID で指定された ISR にアクセス不可能
な場合，NO_ACCESS を返す【NOS0533】．

430

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
CheckISRAccess 呼出し時に指定された ApplID や ISRID が不正な場合，NO_ACCESS を返す【NOS0534】．ISRID で指定された ISR が，C1ISR の場合も，アクセス不可能を返す【NOS0697】．
不正な処理単位から CheckISRAccess を呼び出した場合，NO_ACCESS を返す【NOS0535】．また，割込み禁止状態で呼び出された場合も，NO_ACCESS を返す【NOS0536】〔NOS0383〕〔NOS0384〕〔NOS0385〕〔NOS0521〕．
CheckISRAccess は，ApplID で指定された OSAP の状態に関わらず，指定された ISR に対してアクセス可能かを返す【NOS0537】．
マルチコア対応 OS における仕様
CheckISRAccess は，コアを跨いで呼び出すことができる【NOS0984】．
本 OS が起動していないコアに対して CheckISRAccess を呼び出した場合，NO_ACCESS を返す【NOS0985】．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，CheckObjectAccess は，コアを跨いで呼び出すことができないと規定されている≪OSa147≫．しかし，CheckObjectAccess (CheckISRAccess)をコアを跨いで呼び出すことによる不都合が想定できないため，本仕様では呼び出すことができると規定した≪NOS0984≫．

431

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.47 CheckAlarmAccess
ObjectAccessType CheckAlarmAccess(C 言語 I/F

ApplicationType ApplID,
AlarmType AlarmID)【NOS0538】

パラメータ[in]ApplID

OSAPID

AlarmID

アラーム ID

パラメータ[in/out]－

パラメータ[out]－ApplID が示す OSAP が，AlarmID が示すアラ

ACCESSームにアクセス可能≪NOS0540≫
ApplID が示す OSAP が，AlarmID が示すアラームにアクセス不可能≪NOS0541≫

返り値

ApplID，AlarmID が不正≪NOS0542≫

NO_ACCESS

不正な処理単位からの呼出し≪NOS0543≫
割込み禁止状態からの呼出し≪NOS0544≫
起動していないコアへの呼出し≪NOS0987≫

標準エラー

エラーフックに渡される
エラーコード－E_OS_ID

ApplID，AlarmID が不正≪NOS0519≫

E_OS_CALLEVEL

不正な処理単位からの呼出し≪NOS0411
≫

拡張エラー

E_OS_DISABLEDINT

割込み禁止状態からの呼出し≪NOS0412≫
起動していないコアへの呼出し≪

E_OS_CORE

NOS0926≫

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC3，SC4【NOS0539】
機能

本システムサービスは，ApplID で指定された OSAP が，AlarmID で指定されたアラームに対してア
クセス可能かを返す．
機能仕様
CheckAlarmAccess は，ApplID が示す OSAP が，AlarmID で指定されたアラームにアクセス可能な
場合，ACCESS を返す【NOS0540】．ApplID が示す OSAP が，AlarmID で指定されたアラームにアクセス不可能な場合，NO_ACCESS を返す【NOS0541】．
CheckAlarmAccess 呼出し時に指定された ApplID や AlarmID が不正な場合，NO_ACCESS を返す【NOS0542】．

432

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
不正な処理単位から CheckAlarmAccess を呼び出した場合，NO_ACCESS を返す【NOS0543】．また，割込み禁止状態で呼び出された場合も，NO_ACCESS を返す【NOS0544】〔NOS0383〕〔NOS0384〕〔NOS0385〕〔NOS0521〕．
CheckAlarmAccess は，ApplID で指定された OSAP の状態に関わらず，指定されたアラームに対してアクセス可能かを返す【NOS0545】．
マルチコア対応 OS における仕様
CheckAlarmAccess は，コアを跨いで呼び出すことができる【NOS0986】．
本 OS が起動していないコアに対して CheckAlarmAccess を呼び出した場合，NO_ACCESS を返す【NOS0987】．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，CheckObjectAccess は，コアを跨いで呼び出すことができないと規定されている≪OSa147≫．しかし，CheckObjectAccess (CheckAlarmAccess)をコアを跨いで呼び出すことによる不都合が想定できないため，本仕様では呼び出すことができると規定した≪NOS0986≫．

433

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.48 CheckResourceAccess
ObjectAccessType CheckResourceAccess(C 言語 I/F

ApplicationType ApplID,
ResourceType ResID)【NOS0546】

パラメータ[in]ApplID

OSAPID

ResID

リソース ID

パラメータ[in/out]－

パラメータ[out]－ApplID が示す OSAP が，ResID が示すリソー

ACCESSスにアクセス可能≪NOS0548≫
ApplID が示す OSAP が，ResID が示すリソー
スにアクセス不可能≪NOS0549≫
ApplID，ResID が不正≪NOS0550≫

返り値
NO_ACCESS

内部リソースの指定≪NOS0701≫
不正な処理単位からの呼出し≪NOS0551≫
割込み禁止状態からの呼出し≪NOS0552≫
起動していないコアへの呼出し≪NOS0989≫

標準エラー

－
ApplID，ResID が不正≪NOS0519≫

E_OS_ID
E_OS_CALLEVEL

エラーフックに渡される
エラーコード内部リソースの指定≪NOS0700≫

拡張エラー

不正な処理単位からの呼出し≪NOS0411≫

E_OS_DISABLEDINT

割込み禁止状態からの呼出し≪NOS0412≫
起動していないコアへの呼出し≪

E_OS_CORE

NOS0926≫

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC3，SC4【NOS0547】
機能

本システムサービスは，ApplID で指定された OSAP が，ResID で指定されたリソースに対してアクセス可能かを返す．
機能仕様
CheckResourceAccess は，ApplID が示す OSAP が，ResID で指定されたリソースにアクセス可能な
場合，ACCESS を返す【NOS0548】．ApplID が示す OSAP が，ResID で指定されたリソースにアクセ
ス不可能な場合，NO_ACCESS を返す【NOS0549】．

434

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
CheckResourceAccess 呼出し時に指定された ApplID や ResID が不正な場合，NO_ACCESS を返す【NOS0550】．また，ResID に内部リソースが指定された場合も，NO_ACCESS を返す【NOS0701】．
不正な処理単位から CheckResourceAccess を呼び出した場合，NO_ACCESS を返す【NOS0551】．
また，割込み禁止状態で呼び出された場合も，NO_ACCESS を返す【NOS0552】〔NOS0383〕〔NOS0384〕〔NOS0385〕〔NOS0521〕．
CheckResourceAccess は，ApplID で指定された OSAP の状態に関わらず，指定されたリソースに対してアクセス可能かを返す【NOS0553】．
マルチコア対応 OS における仕様
CheckResourceAccess は，コアを跨いで呼び出すことができる【NOS0988】．
本 OS が起動していないコアに対して CheckResourceAccess を呼び出した場合，NO_ACCESS を返す【NOS0989】．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，CheckObjectAccess は，コアを跨いで呼び出すことができないと規定されている≪OSa147≫．しかし，CheckObjectAccess (CheckResourceAccess)をコアを跨いで呼び出すことによる不都合が想定できないため，本仕様では呼び出すことができると規定した≪NOS0988≫．

435

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.49 CheckCounterAccess
ObjectAccessType CheckCounterAccess(C 言語 I/F

ApplicationType ApplID,
CounterType CounterID)【NOS0554】

パラメータ[in]ApplID

OSAPIDCounterID

カウンタ ID

パラメータ[in/out]－

パラメータ[out]－ApplID が示す OSAP が，CounterID が示すカ

ACCESS

ウンタにアクセス可能≪NOS0556≫
ApplID が示す OSAP が，CounterID が示すカ
ウンタにアクセス不可能≪NOS0557≫

返り値

ApplID，CounterID が不正≪NOS0558≫

NO_ACCESS

不正な処理単位からの呼出し≪NOS0559≫
割込み禁止状態からの呼出し≪NOS0560≫
起動していないコアへの呼出し≪NOS0991≫

標準エラー

エラーフックに渡される
エラーコード－E_OS_ID

ApplID，CounterID が不正≪NOS0519≫

E_OS_CALLEVEL

不正な処理単位からの呼出し≪NOS0411
≫

拡張エラー

E_OS_DISABLEDINT

割込み禁止状態からの呼出し≪NOS0412≫
起動していないコアへの呼出し≪

E_OS_CORE

NOS0926≫

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC3，SC4【NOS0555】
機能

本システムサービスは，ApplID で指定された OSAP が，CounterID で指定されたカウンタに対してアクセス可能かを返す．
機能仕様
CheckCounterAccess は，ApplID が示す OSAP が，CounterID で指定されたカウンタにアクセス可能な場合，ACCESS を返す【NOS0556】．ApplID が示す OSAP が，CounterID で指定されたカウン
タにアクセス不可能な場合，NO_ACCESS を返す【NOS0557】．
CheckCounterAccess 呼出し時に指定された ApplID や CounterID が不正な場合，NO_ACCESS を返す【NOS0558】．

436

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
不正な処理単位から CheckCounterAccess を呼び出した場合，NO_ACCESS を返す【NOS0559】．
また，割込み禁止状態で呼び出された場合も，NO_ACCESS を返す【NOS0560】〔NOS0383〕〔NOS0384〕〔NOS0385〕〔NOS0521〕．
CheckCounterAccess は，ApplID で指定された OSAP の状態に関わらず，指定されたカウンタに対してアクセス可能かを返す【NOS0561】．
マルチコア対応 OS における仕様
CheckCounterAccess は，コアを跨いで呼び出すことができる【NOS0990】．
本 OS が起動していないコアに対して CheckCounterAccess を呼び出した場合，NO_ACCESS を返す【NOS0991】．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，CheckObjectAccess は，コアを跨いで呼び出すことができないと規定されている≪OSa147≫．しかし，CheckObjectAccess (CheckCounterAccess)をコアを跨いで呼び出すことによる不都合が想定できないため，本仕様では呼び出すことができると規定した≪NOS0990≫．

437

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.50 CheckScheduleTableAccess
ObjectAccessType CheckScheduleTableAccess(C 言語 I/F

ApplicationType ApplID,
ScheduleTableType ScheduleTableID)【NOS0562】

パラメータ[in]ApplID

OSAPID

ScheduleTableID

スケジュールテーブル ID

パラメータ[in/out]－

パラメータ[out]－ApplID が示す OSAP が，ScheduleTableID が
ACCESS

示すスケジュールテーブルにアクセス可能≪
NOS0564≫
ApplID が示す OSAP が，ScheduleTableID が示すスケジュールテーブルにアクセス不可能≪NOS0565≫

返り値

ApplID，ScheduleTableID が不正≪NOS0566

NO_ACCESS≫
不正な処理単位からの呼出し≪NOS0567≫
割込み禁止状態からの呼出し≪NOS0568≫
起動していないコアへの呼出し≪NOS0993≫

標準エラー

－
ApplID，ScheduleTableID が不正≪

E_OS_ID
E_OS_CALLEVEL

エラーフックに渡される
エラーコードNOS0519≫

拡張エラー

不正な処理単位からの呼出し≪NOS0411≫

E_OS_DISABLEDINT

割込み禁止状態からの呼出し≪NOS0412≫
起動していないコアへの呼出し≪

E_OS_CORE

NOS0926≫

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC3，SC4【NOS0563】
機能

本システムサービスは，ApplID で指定された OSAP が，ScheduleTableID で指定されたスケジュール
テーブルに対してアクセス可能かを返す．
機能仕様
CheckScheduleTableAccess は，ApplID が示す OSAP が，ScheduleTableID で指定されたスケジュ

438

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
ールテーブルにアクセス可能な場合，ACCESS を返す【NOS0564】．ApplID が示す OSAP が，ScheduleTableID で指定されたスケジュールテーブルにアクセス不可能な場合，NO_ACCESS を返す【NOS0565】．
CheckScheduleTableAccess 呼出し時に指定された ApplID や ScheduleTableID が不正な場合，
NO_ACCESS を返す【NOS0566】．
不正な処理単位から CheckScheduleTableAccess を呼び出した場合，NO_ACCESS を返す【NOS0567】．また，割込み禁止状態で呼び出された場合も，NO_ACCESS を返す【NOS0568】〔NOS0383〕〔NOS0384〕〔NOS0385〕〔NOS0521〕．
CheckScheduleTableAccess は，ApplID で指定された OSAP の状態に関わらず，指定されたスケジュールテーブルに対してアクセス可能かを返す【NOS0569】．
マルチコア対応 OS における仕様
CheckScheduleTableAccess は，コアを跨いで呼び出すことができる【NOS0992】．
本 OS が起動していないコアに対して CheckScheduleTableAccess を呼び出した場合，NO_ACCESSを返す【NOS0993】．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，CheckObjectAccess は，コアを跨いで呼び出すことができないと規定されている≪OSa147≫．しかし，CheckObjectAccess (CheckScheduleTableAccess)をコアを跨いで呼び出すことによる不都合が想定できないため，本仕様では呼び出すことができると規定した≪NOS0992≫．

439

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.51 CheckSpinlockAccess
ObjectAccessType CheckSpinlockAccess(C 言語 I/F

ApplicationType ApplID,
SpinlockIdType SpinlockId)【NOS1004】

パラメータ[in]ApplID

OSAPID

SpinlockId

スピンロック ID

パラメータ[in/out]－

パラメータ[out]－ApplID が示す OSAP が，SpinlockId が示すス

ACCESS

ピンロックにアクセス可能≪NOS1005≫
ApplID が示す OSAP が，SpinlockId が示すス
ピンロックにアクセス不可能≪NOS1006≫

返り値

ApplID，SpinlockId が不正≪NOS1007≫

NO_ACCESS

不正な処理単位からの呼出し≪NOS1008≫
割込み禁止状態からの呼出し≪NOS1009≫
標準エラー
エラーフックに渡される
エラーコード－E_OS_ID

ApplID，SpinlockId が不正≪NOS0519≫

E_OS_CALLEVEL

不正な処理単位からの呼出し≪NOS0411

拡張エラー

≫
E_OS_DISABLEDINT

割込み禁止状態からの呼出し≪NOS0412≫

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

マルチコア：SC1，SC2，SC3，SC4≪NOS0339≫
機能

本システムサービスは，ApplID で指定された OSAP が，SpinlockId で指定されたスピンロックに対してアクセス可能かを返す．
機能仕様
CheckSpinlockAccess は，ApplID が示す OSAP が，SpinlockId で指定されたスピンロックにアクセス可能な場合，ACCESS を返す【NOS1005】．ApplID が示す OSAP が，SpinlockId で指定されたス
ピンロックにアクセス不可能な場合，NO_ACCESS を返す【NOS1006】．
CheckSpinlockAccess 呼出し時に指定された ApplID や SpinlockId が不正な場合，NO_ACCESS を返す【NOS1007】．
不正な処理単位から CheckSpinlockAccess を呼び出した場合，NO_ACCESS を返す【NOS1008】．
また，割込み禁止状態で呼び出された場合も，NO_ACCESS を返す【NOS1009】〔NOS0383〕〔NOS0384〕〔NOS0385〕〔NOS0521〕．

440

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
CheckSpinlockAccess は，ApplID で指定された OSAP の状態に関わらず，指定された OS オブジェ
クトに対してアクセス可能かを返す【NOS1010】．

441

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.52 CheckObjectAccess
AUTOSAR 仕様では，OS オブジェクトに対する OSAP のアクセス権の有無を，取得するシステムサービスとして，CheckObjectAccess を規定している．
・ CheckObjectAccess を使用可能なスケーラビリティクラス【OS519】
・ CheckObjectAccess の使用条件【OS450】
・ CheckObjectAccess の概要【OS256】
・ CheckObjectAccess のアクセス権有りの場合の処理【OS271】
・ CheckObjectAccess のアクセス権無しの場合の処理【OS272】
・ CheckObjectAccess におけるエラー発生時の処理【OS423】
しかし，CheckObjectAccess は，すべての OS オブジェクトに対応するため，可変長引数を使用している．可変長引数を使用すると，処理速度が遅くなり，引数の型チェックもできないため，本仕様では，
OS オブジェクト毎に，OSAP のアクセス権の有無を取得するシステムサービスを規定した≪NOS0522≫≪NOS0530≫≪NOS0538≫≪NOS0546≫≪NOS0554≫≪NOS0562≫．
ATK2 では，AUTOSAR 仕様との互換性のために，CheckObjectAccess をライブラリとして提供する．

442

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
ObjectAccessType CheckObjectAccess(ApplicationType ApplID,

C 言語 I/F

ObjectTypeType ObjectType,
void …) 【NOS1343】

パラメータ[in]ApplID

OSAPID

ObjectType…の OS オブジェクト型…

OS オブジェクトの ID

パラメータ[in/out]－

パラメータ[out]－ApplID が示す OSAP が…で示す OS オ
ACCESS

ブジェクトにアクセス可能≪NOS1345≫
ApplID が示す OSAP が…で示す OS オ

返り値

ブジェクトにアクセス不可能≪
NO_ACCESSNOS1345≫
または ObjectType が不正≪NOS1347≫

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC3，SC4【NOS1344】
機能

本ライブラリは，ApplID で指定された OSAP が指定された OS オブジェクトに対してアクセス可能かを返す．
機能仕様
CheckObjectAccess は，与えられた引数から OS オブジェクト毎に規定したシステムサービス，
CheckTaskAccess，

CheckISRAccess，

CheckAlarmAccess，

CheckResourceAccess，

CheckCounterAccess，CheckScheduleTableAccess，CheckSpinlockAccess を呼ぶ実装とし，返り値はこれらのシステムサービスからの返り値をそのまま使用する【NOS1345】．そのため，エラーチェッ
クおよびエラー検出時のエラーフックは，ライブラリから呼び出した各システムサービスによるエラー
フックが呼び出されるものとする【NOS1346】．
ObjectType で指定した OS オブジェクトが不正で呼び出すシステムサービスを特定できない場合，本ライブラリは NO_ACCESS を返す【NOS1347】．
この場合，エラーフックは呼び出されない【NOS1348】．

443

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.53 CheckTaskOwnership
C 言語 I/F
パラメータ[in]ApplicationType CheckTaskOwnership(TaskType TaskID)【NOS0570】
TaskID

パラメータ[in/out]－

パラメータ[out]－タスク ID

所属する OSAP の OSAPID

OSAPID 取得成功≪NOS0572≫
TaskID が不正≪NOS0573≫
不正な処理単位からの呼出し≪
NOS0574≫

返り値
INVALID_OSAPPLICATION

割込み禁止状態からの呼出し≪
NOS0575≫
起動していないコアへの呼出し≪NOS0995≫

標準エラー

エラーフックに渡される
エラーコード－E_OS_ID

TaskID が不正≪NOS0519≫

E_OS_CALLEVEL

不正な処理単位からの呼出し≪
NOS0411≫

拡張エラー

E_OS_DISABLEDINT

NOS0412≫
起動していないコアへの呼出し≪

E_OS_CORE
コンフォーマンスクラス
スケーラビリティクラス

割込み禁止状態からの呼出し≪

NOS0926≫

BCC1，BCC2，ECC1，ECC2
SC3，SC4【NOS0571】
マルチコア：SC1，SC2【NOS1011】
機能

本システムサービスは，TaskID で指定されたタスクが所属する OSAPID を返す．
機能仕様
CheckTaskOwnership は，TaskID で指定されたタスクが所属する OSAPID を返す【NOS0572】．
CheckTaskOwnership 呼出し時に，引数で指定された TaskID が不正な場合，INVALID_OSAPPLICATION を返す【NOS0573】．
不正な処理単位から CheckTaskOwnership を呼び出した場合，INVALID_OSAPPLICATION を返す【NOS0574】．また，割込み禁止状態で呼び出された場合も，INVALID_OSAPPLICATION を返す【NOS0575】〔NOS0383〕〔NOS0384〕〔NOS0385〕．

444

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
CheckTaskOwnership は，引数で指定されたタスクが所属する OSAP の状態に関わらず，タスクが所属する OSAPID を返す【NOS0576】．
マルチコア対応 OS における仕様
CheckTaskOwnership は，コアを跨いで呼び出すことができる【NOS0994】．
本 OS が起動していないコアに対して CheckTaskOwnership を呼び出した場合，
INVALID_OSAPPLICATION を返す【NOS0995】．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，CheckObjectOwnership は，コアを跨いで呼び出すことができないと規定されている【OSa148】．しかし，CheckObjectAccess (CheckTaskOwnership)をコアを跨いで呼び出すことによる不都合が想定できないため，本仕様では呼び出すことができると規定した≪NOS0994≫．

445

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.54 CheckISROwnership
C 言語 I/F
パラメータ[in]ApplicationType CheckISROwnership(ISRType ISRID)【NOS0577】
ISRID

パラメータ[in/out]－

パラメータ[out]－ISR ID

所属する OSAP の OSAPID

OSAPID 取得成功≪NOS0579≫
ISRID が不正≪NOS0580≫
C1ISR の指定≪NOS0698≫
不正な処理単位からの呼出し≪

返り値
INVALID_OSAPPLICATIONNOS0581≫
割込み禁止状態からの呼出し≪
NOS0582≫
起動していないコアへの呼出し≪NOS0997≫

標準エラー－
ISRID が不正≪NOS0519≫

E_OS_ID
E_OS_CALLEVEL

エラーフックに渡される
エラーコードC1ISR の指定≪NOS0699≫

拡張エラー

不正な処理単位からの呼出し≪
NOS0411≫

E_OS_DISABLEDINT

割込み禁止状態からの呼出し≪
NOS0412≫
起動していないコアへの呼出し≪

E_OS_CORE
コンフォーマンスクラス
スケーラビリティクラス

NOS0926≫

BCC1，BCC2，ECC1，ECC2
SC3，SC4【NOS0578】
マルチコア：SC1，SC2【NOS1012】
機能

本システムサービスは，ISRID で指定された ISR が所属する OSAPID を返す．
機能仕様
CheckISROwnership は，ISRID で指定された ISR が所属する OSAPID を返す【NOS0579】．
CheckISROwnership 呼出し時に，引数で指定された ISRID が不正な場合，INVALID_OSAPPLICATION を返す【NOS0580】．ISRID で指定された ISR が，C1ISR の場合も，
INVALID_OSAPPLICATION を返す【NOS0698】．

446

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
不正な処理単位から CheckISROwnership を呼び出した場合，INVALID_OSAPPLICATION を返す【NOS0581】．また，割込み禁止状態で呼び出された場合も，INVALID_OSAPPLICATION を返す【NOS0582】〔NOS0383〕〔NOS0384〕〔NOS0385〕．
CheckISROwnership は，引数で指定された ISR が所属する OSAP の状態に関わらず，ISR が所属する OSAPID を返す【NOS0583】．
マルチコア対応 OS における仕様
CheckISROwnership は，コアを跨いで呼び出すことができる【NOS0996】．
本 OS が起動していないコアに対して CheckISROwnership を呼び出した場合，
INVALID_OSAPPLICATION を返す【NOS0997】．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，CheckObjectOwnership は，コアを跨いで呼び出すことができないと規定されている≪OSa148≫．しかし，CheckObjectAccess (CheckISROwnership)をコアを跨いで呼び出すことによる不都合が想定できないため，本仕様では呼び出すことができると規定した≪NOS0996≫．

447

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.55 CheckAlarmOwnership
C 言語 I/F
パラメータ[in]ApplicationType CheckAlarmOwnership(AlarmType AlarmID)【NOS0584】
AlarmID

パラメータ[in/out]－

パラメータ[out]－アラーム ID

所属する OSAP の OSAPID

OSAPID 取得成功≪NOS0586≫
AlarmID が不正≪NOS0587≫
不正な処理単位からの呼出し≪
NOS0588≫

返り値
INVALID_OSAPPLICATION

割込み禁止状態からの呼出し≪
NOS0589≫
起動していないコアへの呼出し≪NOS0999≫

標準エラー

エラーフックに渡される
エラーコード－E_OS_ID

AlarmID が不正≪NOS0519≫

E_OS_CALLEVEL

不正な処理単位からの呼出し≪
NOS0411≫

拡張エラー

E_OS_DISABLEDINT

NOS0412≫
起動していないコアへの呼出し≪

E_OS_CORE
コンフォーマンスクラス
スケーラビリティクラス

割込み禁止状態からの呼出し≪

NOS0926≫

BCC1，BCC2，ECC1，ECC2
SC3，SC4【NOS0585】
マルチコア：SC1，SC2【NOS1013】
機能

本システムサービスは，AlarmID で指定されたアラームが所属する OSAPID を返す．
機能仕様
CheckAlarmOwnership は，AlarmID で指定されたアラームが所属する OSAPID を返す【NOS0586】．
CheckAlarmOwnership 呼出し時に，引数で指定された AlarmID が不正な場合，INVALID_OSAPPLICATION を返す【NOS0587】．
不正な処理単位から CheckAlarmOwnership を呼び出した場合，INVALID_OSAPPLICATION を返す【NOS0588】．また，割込み禁止状態で呼び出された場合も，INVALID_OSAPPLICATION を返す【NOS0589】〔NOS0383〕〔NOS0384〕〔NOS0385〕．

448

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
CheckAlarmOwnership は，引数で指定されたアラームが所属する OSAP の状態に関わらず，アラームが所属する OSAPID を返す【NOS0590】．
マルチコア対応 OS における仕様
CheckAlarmOwnership は，コアを跨いで呼び出すことができる【NOS0998】．
本 OS が起動していないコアに対して CheckAlarmOwnership を呼び出した場合，
INVALID_OSAPPLICATION を返す【NOS0999】．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，CheckObjectOwnership は，コアを跨いで呼び出すことができないと規定されている≪OSa148≫．しかし，CheckObjectAccess (CheckAlarmOwnership)をコアを跨いで呼び出すことによる不都合が想定できないため，本仕様では呼び出すことができると規定した≪NOS0998≫．

449

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.56 CheckCounterOwnership
C 言語 I/F
パラメータ[in]ApplicationType CheckCounterOwnership(CounterType CounterID)【NOS0598】
CounterID

パラメータ[in/out]－

パラメータ[out]－カウンタ ID

所属する OSAP の OSAPID

OSAPID 取得成功≪NOS0600≫
CounterID が不正≪NOS0601≫
不正な処理単位からの呼出し≪

返り値
INVALID_OSAPPLICATIONNOS0602≫
割込み禁止状態からの呼出し≪
NOS0603≫
起動していないコアへの呼出し≪NOS1001≫

標準エラー

エラーフックに渡される
エラーコード－E_OS_IDCounterID が不正≪NOS0519≫

E_OS_CALLEVEL

不正な処理単位からの呼出し≪
NOS0411≫

拡張エラー

E_OS_DISABLEDINT

NOS0412≫
起動していないコアへの呼出し≪

E_OS_CORE
コンフォーマンスクラス
スケーラビリティクラス

割込み禁止状態からの呼出し≪

NOS0926≫

BCC1，BCC2，ECC1，ECC2
SC3，SC4【NOS0599】
マルチコア：SC1，SC2【NOS1014】
機能

本システムサービスは，CounterID で指定されたカウンタが所属する OSAPID を返す．
機能仕様
CheckCounterOwnership は，CounterID で指定されたカウンタが所属する OSAPID を返す【NOS0600】．
CheckCounterOwnership 呼出し時に，引数で指定された CounterID が不正な場合，INVALID_OSAPPLICATION を返す【NOS0601】．
不正な処理単位から CheckCounterOwnership を呼び出した場合，INVALID_OSAPPLICATION を450

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
返す【NOS0602】．また，割込み禁止状態で呼び出された場合も，INVALID_OSAPPLICATION を返す【NOS0603】〔NOS0383〕〔NOS0384〕〔NOS0385〕．
CheckCounterOwnership は，引数で指定されたカウンタが所属する OSAP の状態に関わらず，カウンタが所属する OSAPID を返す【NOS0604】．
マルチコア対応 OS における仕様
CheckCounterOwnership は，コアを跨いで呼び出すことができる【NOS1000】．
本 OS が起動していないコアに対して CheckCounterOwnership を呼び出した場合，
INVALID_OSAPPLICATION を返す【NOS1001】．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，CheckObjectOwnership は，コアを跨いで呼び出すことができないと規定されている≪OSa148≫．しかし，CheckObjectAccess (CheckCounterOwnership)をコアを跨いで呼び出すことによる不都合が想定できないため，本仕様では呼び出すことができると規定した≪NOS1000≫．

451

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.57 CheckScheduleTableOwnership
C 言語 I/F
パラメータ[in]ApplicationType CheckScheduleTableOwnership(ScheduleTableType ScheduleTableID)【NOS0605】
ScheduleTa

スケジュールテーブル ID

bleID

パラメータ[in/out]－

パラメータ[out]－所属する OSAP の OSAPID

OSAPID 取得成功≪NOS0607≫
ScheduleTableID が不正≪
NOS0608≫
不正な処理単位からの呼出し≪

返り値
INVALID_OSAPPLICATIONNOS0609≫
割込み禁止状態からの呼出し≪
NOS0610≫
起動していないコアへの呼出し≪NOS1003≫

標準エラー

エラーフックに渡される
エラーコード－E_OS_ID

ScheduleTableID が不正≪NOS0519≫

E_OS_CALLEVEL

不正な処理単位からの呼出し≪
NOS0411≫

拡張エラー

E_OS_DISABLEDINT

NOS0412≫
起動していないコアへの呼出し≪

E_OS_CORE
コンフォーマンスクラス
スケーラビリティクラス

割込み禁止状態からの呼出し≪

NOS0926≫

BCC1，BCC2，ECC1，ECC2
SC3，SC4【NOS0606】
マルチコア：SC1，SC2【NOS1015】
機能

本システムサービスは，ScheduleTableID で指定されたスケジュールテーブルが所属する OSAPID
を返す．
機能仕様
CheckScheduleTableOwnership は，ScheduleTableID で指定されたスケジュールテーブルが所属する OSAPID を返す【NOS0607】．
CheckScheduleTableOwnership 呼出し時に，引数で指定された ScheduleTableID が不正な場合，

452

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
INVALID_OSAPPLICATION を返す【NOS0608】．
不正な処理単位から CheckScheduleTableOwnership を呼び出した場合，
INVALID_OSAPPLICATION を返す【NOS0609】．また，割込み禁止状態で呼び出された場合も，
INVALID_OSAPPLICATION を返す【NOS0610】〔NOS0383〕〔NOS0384〕〔NOS0385〕．
CheckScheduleTableOwnership は，引数で指定されたスケジュールテーブルが所属する OSAP の状
態に関わらず，スケジュールテーブルが所属する OSAPID を返す【NOS0611】．
マルチコア対応 OS における仕様
CheckScheduleTableOwnership は，コアを跨いで呼び出すことができる【NOS1002】．
本 OS が起動していないコアに対して CheckScheduleTableOwnership を呼び出した場合，
INVALID_OSAPPLICATION を返す【NOS1003】．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，CheckObjectOwnership は，コアを跨いで呼び出すことができないと規定されている≪OSa148≫．しかし，CheckObjectAccess (CheckScheduleTableOwnership)をコアを跨いで呼び出すことによる不都合が想定できないため，本仕様では呼び出すことができると規定した≪
NOS1002≫．

453

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.58 CheckObjectOwnership
AUTOSAR 仕様では，OS オブジェクトが所属する OSAPID を取得するシステムサービスとして，CheckObjectOwnership を規定している．
・ CheckObjectOwnership を使用可能なスケーラビリティクラス【OS520】
・ CheckObjectOwnership の概要【OS017】
・ CheckObjectOwnership の処理【OS273】
・ CheckObjectOwnership におけるエラー発生時の処理【OS274】
しかし，CheckObjectOwnership は，すべての OS オブジェクトに対応するため，可変長引数を使用している．可変長引数を使用すると，処理速度が遅くなり，引数の型チェックもできないため，本仕様
では，OS オブジェクト毎に，所属する OSAPID を取得するシステムサービスを規定した≪NOS0570≫≪NOS0577≫≪NOS0584≫≪NOS0598≫≪NOS0605≫．
ATK2 では，AUTOSAR 仕様との互換性のために，CheckObjectOwnership をライブラリとして提供する．
ApplicationType CheckObjectOwnership(
C 言語 I/F

ObjectTypeType ObjectType,
void …) 【NOS1349】

パラメータ[in]ObjectType…の OS オブジェクト型…

OS オブジェクトの ID

パラメータ[in/out]－

パラメータ[out]－所属する OSAP の OSAPID≫

返り値
INVALID_OSAPPLICATION
コンフォーマンスクラス
スケーラビリティクラス

OSAPID 取得成功≪NOS1351
ObjectType が不正≪NOS1353≫

BCC1，BCC2，ECC1，ECC2
SC3，SC4【NOS1350】
マルチコア：SC1，SC2【NOS1355】
機能

本ライブラリは，ObjectType で指定された OS オブジェクトが所属する
OSAPID を返す．
機能仕様
CheckObjectOwnership は，与えられた引数から OS オブジェクト毎に規定したシステムサービス，
CheckTaskOwnership，CheckISROwnership，CheckAlarmOwnership，CheckCounterOwnership，
CheckScheduleTableOwnership を呼ぶ実装とし，返り値はこれらのシステムサービスからの返り値を454

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
そのまま使用する【NOS1351】．そのため，エラーチェックおよびエラー検出時のエラーフックは，ライブラリから呼び出した各システムサービスによるエラーフックが呼び出されるものとする【NOS1352】．
ObjectType で指定した OS オブジェクトが不正で呼び出すシステムサービスを特定できない場合，本ライブラリは INVALID_OSAPPLICATION を返す【NOS1353】．この場合，エラーフックは呼び出されない【NOS1354】．

455

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.59 TerminateApplication
C 言語 I/F

StatusType TerminateApplication(
ApplicationType Application,
RestartType RestartOption)【OS258】
終了を行う OSAP の ID．

Application

OSAP のリスタートタスクを起動するかパラメータ[in]RESTART：リスタートタスクを起動する

RestartOption

NO_RESTART：リスタートタスクを起動しない

パラメータ[in/out]－

パラメータ[out]

－

標準エラー

E_OK

OSAP 終了成功≪COS3104≫

E_OS_STATE

Application で指定された OSAP が既に利用可能な状態でない≪OS507≫≪OS508≫≪
OS548≫
Application が不正≪OS493≫

E_OS_ID

信頼 OSAP の指定≪NOS1133≫
RestartOption が不正≪OS459≫≪

E_OS_VALUENOS0886≫

返り値

他の非信頼 OSAP からの呼出し≪OS494≫

E_OS_ACCESS

システム定義のエラーフックからの呼出し

拡張エラー

で，Application で指定された OSAPID が現在実行中の OSAPID でない≪NOS1559≫
E_OS_CALLEVEL

不正な処理単位からの呼出し≪OS088≫
C1ISR からの呼出し≪NOS1200≫

E_OS_DISABLEDINT

割込み禁止状態からの呼出し≪OS093≫

E_OS_CORE

起動していないコアへの呼出し≪OSa120≫

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC3，SC4【OS536】
機能Application で指定された OSAP を終了する．
機能仕様
TerminateApplication は，Application で指定された OSAP を停止(OSAP に所属するすべてのタス
ク，C2ISR を強制終了し，OSAP に所属するすべての C1ISR，C2ISR の割込み要因を禁止)する．
RestartOption が RESTART の場合は，コンフィギュレーション時に指定されたリスタートタスクを起456

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
動する．OSAP が再起動される場合は状態を APPLICATION_RESTARTING に，再起動されない場合
は状態を APPLICATION_TERMINATED に設定する．呼出し元の処理単位が Application で指定された OSAP に所属している場合は，TerminateApplication からリターンしない【OS287】．
TerminateApplication の呼出し時に指定された Application が不正であった場合，E_OS_ID を返す【OS493】．
RestartOption が不正であった場合，
E_OS_VALUE を返す【OS459】．TerminateApplicationの呼出し元が非信頼 OSAP であり，Application で指定された OSAP に所属しない場合，
E_OS_ACCESSを返す【OS494】．
TerminateApplication 呼出し時に，Application で指定された OSAP の状態が
APPLICATION_TERMINATED であった場合，E_OS_STATE を返す【OS507】．Application で指定された OSAP の状態が APPLICATION_RESTARTING であり，呼出し元の処理単位が Application で指定された OSAP に所属しない場合，E_OS_STATE を返す【OS508】．Application で指定された OSAPの状態が APPLICATION_RESTARTING であり，呼び出し元の処理単位が Application に属しており，
かつ，RestartOption が RESTART の場合，E_OS_STATE を返す【OS548】．
コンフィギュレーション時に，Application で指定された OSAP に対して，リスタートタスクを設定していないにも関わらず，RestartOption に RESTART を指定した場合，E_OS_VALUE を返す【NOS0886】．
システム定義のエラーフックから本システムサービスを呼び出した場合，現在実行中の OSAP のみ終了可能である【NOS1558】．システム定義のエラーフックから現在実行中の OSAP を終了する場合に限り，本システムサービスは SuspendOSInterrupts による割込み禁止状態での呼出しが可能である【NOS1594】．
システム定義のエラーフックから本システムサービス呼出し時に指定された Application が，現在実行中の OSAPID でなかった場合，本システムサービスは E_OS_ACCESS を返す【NOS1559】〔NOS1558〕．ここで，現在実行中の OSAPID とは，GetCurrentApplicationID が返す OSAPID である．
Application に信頼 OSAP を指定して呼び出した場合，E_OS_ID を返す【NOS1133】．
使用上の注意OSAP が１つも生成されていない場合，このサービスは利用できない．信頼 OSAP に所属する処理単位は任意の OSAP を停止することができる．非信頼 OSAP に属する処理単位は自身が所属する OSAPのみを停止できる【OS535】．
マルチコア対応 OS における仕様
TerminateApplication は，コアを跨いで呼び出すことができる【OSa149】．Application で指定したOSAP に所属する処理単位が，スピンロックを占有していた場合，OS は，占有されているスピンロッ

457文書番号：ATK2-0010
文書名：ATK2 外部仕様書
クを解放する【OS614】．
TerminateApplication をコアを跨いで呼び出した場合，OSAP の状態変更と，OSAP 終了処理を開始するのみとし，OSAP 終了処理の完了を待たずに，呼び出し元にリターンする【NOS1050】．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，TerminateApplication が複数のコアから同時に呼び出された場合，最初に受理した終了要求によって，OSAP 終了処理を実行し，終了処理が完了するまでは，その他の終了要求に対しては，一律 E_OK を返すと規定されている【OS615】．しかし，最初の TerminateApplication によって，排他的に OSAP の状態を，
APPLICATION_TERMINATED か APPLICATION_RESTARTINGへと遷移し，以後の TerminateApplication 呼出し時は，既に利用可能な状態ではなくなっている実装
しか想定されないことから，本仕様では削除した．つまり，本規定の状況では，2 回目以降のTerminateApplication に対しては，E_OS_STATE が返る≪OS507≫≪OS508≫．
AUTOSAR 仕様では，TerminateApplication を呼出し可能なコンテキストとしてエラーフックが規定されているが，注釈として”self termination の場合のみ”という制限が記載されている．本仕様では，
self termination が指す OSAP は，現在実行中の OSAP であると明記した≪NOS1558≫
AUTOSAR 仕様では，システム定義のエラーフックから現在実行中の OSAP を強制終了する場合に限り，SuspendOSInterrupts による割込み禁止状態でも強制終了可能であるという規定はない．しかし，非信頼 OSAP が SuspendOSInterrupts を発行し，割込み禁止状態で誤って他システムサービスを発行した場合に，エラーフックから当該 OSAP を強制終了したいというケースが考えられるため，このような規定を設けた≪NOS1594≫

458

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.60 AllowAccess
C 言語 I/F

StatusType AllowAccess(void)【OS501】

パラメータ[in]－パラメータ[in/out]－

パラメータ[out]

－

標準エラー

E_OK

OSAP の再起動成功≪COS3104≫

E_OS_STATE

呼出し元の OSAP の状態が
APPLICATION_RESTARTING でない≪
OS497≫

返り値
E_OS_CALLEVEL

不正な処理単位からの呼出し≪OS088≫
C1ISR からの呼出し≪NOS1200≫

拡張エラー
E_OS_DISABLEDINT

割込み禁止状態からの呼出し≪OS093≫

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC3，SC4【OS547】
機能

本システムサービスは，OSAP を利用可能な状態とする．
機能仕様
AllowAccess は，呼出し元の処理単位が所属する OSAP の状態が APPLICATION_RESTARTING の場合，その OSAP の状態を APPLICATION_ACCESSIBLE に設定し他の OSAP から利用可能な状態とする【OS498】．
呼び出し元の OSAP の状態が，APPLICATION_RESTARTING 以外の場合は，E_OS_STATE を返す【OS497】．

459

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.61 GetApplicationState
C 言語 I/F

StatusType GetApplicationState(
ApplicationType Application,
ApplicationStateRefType Value)【OS499】

パラメータ[in]Application

OSAPID

パラメータ[in/out]－

パラメータ[out]Value

OSAP 状態を格納するポインタ

E_OK

OSAP 状態の取得成功≪COS3104≫

E_OS_ID

Application が不正≪OS495≫

E_OS_CALLEVELC1ISR からの呼出し≪NOS1200≫

E_OS_PARAM_POINTER

ポインタ引数が NULL≪OS566≫

標準エラー

返り値

拡張エラー

E_OS_ILLEGAL_ADDRESS

Value に不正なアドレスが指定された≪OS051≫
起動していないコアへの呼出し≪

E_OS_CORE

OSa120≫コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC3，SC4【OS537】
機能

本システムサービスは，Application で指定された OSAP の現在の状態を取得する．
機能仕様
GetApplicationState は，Application で指定された OSAP 状態を Value に格納する【OS496】．
GetApplicationState は，割込み禁止状態であっても，呼び出すことができる【NOS1150】．
GetApplicationState の呼出し時に指定された Application が不正であった場合，E_OS_ID を返す【OS495】．
マルチコア対応 OS における仕様
GetApplicationState は，コアを跨いで呼び出すことができる【NOS1016】．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，割込み禁止の状態で，返り値の型が StatusType のシステムサービスを呼び出した場合，OS はシステムサービスの処理を行わず，E_OS_DISABLEDINT を返すと規定されている≪
OS093≫．しかし，割込み禁止の状態で呼び出されたエラーフックやプロテクションフックから，
GetApplicationState を使用することが想定されるため，本仕様では，割込み禁止状態でも呼び出すことができると規定した≪NOS1150≫．

460

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.62 GetNumberOfActivatedCores
C 言語 I/F

uint32 GetNumberOfActivatedCores(void)【OS672】

パラメータ[in]－パラメータ[in/out]－

パラメータ[out]－返り値

OS が起動中のコア数

コア数取得成功≪OS626≫

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

マルチコア：SC1，SC2，SC3，SC4≪NOS0339≫
機能

本システムサービスは，現在の本 OS が起動中のコアの数を取得する．
機能仕様
GetNumberOfActivatedCores は，本 OS が起動しているコアの数を返す【OS626】．
GetNumberOfActivatedCores の返り値は，コンフィギュレーション時に OsNumberOfCores で指定したコア数以下の値となる【OS673】．GetNumberOfActivatedCores は，割込み禁止状態でも呼び出すことができる【NOS1017】．

461

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.63 GetCoreID
C 言語 I/F

CoreIdType GetCoreID(void)【OS674】

パラメータ[in]－パラメータ[in/out]－

パラメータ[out]－返り値

実行中のコア ID

コア ID 取得成功≪OS675≫

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

マルチコア：SC1，SC2，SC3，SC4≪NOS0339≫
機能

本システムサービスは，現在の処理単位を実行中のコアの ID 情報を取得する．
機能仕様
GetCoreID は，GetCoreID を呼び出した処理単位が割付いているコア ID を返す【OS675】．
GetCoreID は，本 OS が起動する前でも呼び出すことができる【OS625】．GetCoreID は，割込み禁止状態でも呼び出すことができる【NOS1018】．

462

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.64 StartCore
C 言語 I/F
パラメータ[in]パラメータ[in/out]

void StartCore(CoreIdType CoreID, StatusType* Status)【OS676】
CoreID
－

標準エラー
パラメータ
[out]

拡張エラー

起動するコア ID

StatusE_OK

OS 管理のコアの起動成功≪OS677≫

E_OS_ID

コア ID が不正≪OSa150≫

E_OS_ACCESS
E_OS_STATE

返り値
標準エラー

エラーフック
エラーコード拡張エラー≫
起動済みのコア ID の指定≪OS679≫≪
OS680≫－－
E_OS_ID

コア ID が不正≪NOS1022≫

E_OS_ACCESSOS 起動後のコアからの呼出し≪NOS1019≫
起動済みのコア ID の指定≪NOS1020≫≪

E_OS_STATEに渡される

OS 起動後のコアからの呼出し≪OS678

NOS1021≫

E_OS_PARAM_

ポインタ引数が NULL≪NOS1023≫

POINTER
E_OS_ILLEGAL

Status に不正なアドレスが指定された(SC3，SC4_ADDRESS

のみ)≪NOS1024≫

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

マルチコア：SC1，SC2，SC3，SC4≪NOS0339≫
機能

本システムサービスは，CoreID で指定したコアを OS 管理のコアとして起動する．
機能仕様
StartCore によって起動されたコアは，本 OS で管理するコアとなる【OS677】．
本 OS は，OS 起動後のコアの起動はサポートしない【OS606】．OS 起動後のコアから，StartCore
を呼び出した場合，Status に E_OS_ACCESS を格納する【OS678】．この場合，エラーコードを
E_OS_ACCESS として，エラーフックを呼び出す【NOS1019】〔NOS0409〕．
CoreID に，既に StartCore によって起動されたコア ID を指定して呼び出した場合，Status に
E_OS_STATE を格納する【OS679】．この場合，エラーコードを E_OS_STATE として，エラーフックを呼び出す【NOS1020】〔NOS0409〕．
CoreID に，既に StartNonAutosarCore によって起動されたコア ID を指定して呼び出した場合も，
Status に E_OS_STATE を格納する【OS680】．この場合，エラーコードを E_OS_STATE として，エラーフックを呼び出す【NOS1021】〔NOS0409〕．

463

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
コンフィギュレーション時に OsNumberOfCores で指定した値以上の数値か，マルチコアシステム上で識別できない不正なコア ID を CoreID に指定した場合，Status に E_OS_ID を格納する【OSa150】．
この場合，エラーコードを E_OS_ID として，エラーフックを呼び出す【NOS1022】〔NOS0409〕．
Status で与えたアドレスが，NULL であるポインタを指定した場合，エラーコードを
E_OS_PARAM_POINTER として，エラーフックを呼び出す【NOS1023】〔NOS0409〕．
SC3，SC4 において，OS 起動後に StartCore を呼び出した際，Status で与えたアドレスが，呼出し元の OSAP から書込みできないメモリ領域を指している場合，エラーコードを
E_OS_ILLEGAL_ADDRESS として，エラーフックを呼び出す【NOS1024】〔NOS0409〕．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，StartCore でエラーが発生しても，エラーフックは呼び出されないと規定されている【OS681】．しかし，本仕様では，返り値のデータ型が StatusType でないシステムサービスであっても，状況によってエラーフックが呼び出される場合があると規定したため，StartCore でエラーが発生した場合は，エラーフックが呼び出されると規定した≪NOS1019≫≪NOS1020≫≪NOS1021≫≪
NOS1022≫≪NOS1023≫≪NOS1024≫．

464

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.65 StartNonAutosarCore
C 言語 I/F

void StartNonAutosarCore(CoreIdType CoreID, StatusType* Status)【OS682】

パラメータ[in]パラメータ[in/out]

CoreID
－

標準エラー
パラメータ
[out]

拡張エラー

起動するコア ID

StatusE_OK

OS 管理外のコアの起動成功≪OS683≫

E_OS_ID

コア ID が不正≪OS685≫

E_OS_ACCESS
E_OS_STATE

返り値
標準エラー

エラーフック
エラーコード

拡張エラー

NOS1128≫
起動済みのコア ID の指定≪OS684≫≪
NOS1025≫－－
E_OS_ID

コア ID が不正≪NOS1030≫

E_OS_ACCESSOS 起動後のコアからの呼出し≪NOS1029≫
起動済みのコア ID の指定≪NOS1027≫≪

E_OS_STATEに渡される

OS 起動後のコアに対する呼出し≪

NOS1028≫

E_OS_PARAM_

ポインタ引数が NULL≪NOS1031≫

POINTER
E_OS_ILLEGAL

Status に不正なアドレスが指定された_ADDRESS(SC3，SC4 のみ)≪NOS1032≫

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

マルチコア：SC1，SC2，SC3，SC4≪NOS0339≫
機能

本システムサービスは，CoreID で指定したコアを OS 管理外のコアとして起動する．
機能仕様
StartNonAutosarCore によって起動されたコアは，本 OS の管理外のコアとなる【OS683】．
CoreID に，既に StartNonAutosarCore によって起動されたコア ID を指定して呼び出した場合，
Status に E_OS_STATE を格納する【OS684】．この場合，エラーコードを E_OS_STATE として，エラーフックを呼び出す【NOS1027】〔NOS0409〕．
CoreID に，既に StartCore によって起動されたコア ID を指定して呼び出した場合も，Status に
E_OS_STATE を格納する【NOS1025】．この場合，エラーコードを E_OS_STATE として，エラーフ
ックを呼び出す【NOS1028】〔NOS0409〕．
OS 起動後のコアを指定して，StartNonAutosarCore を呼び出した場合，Status に E_OS_ACCESSを格納する【NOS1128】．この場合，エラーコードを E_OS_ACCESS として，エラーフックを呼び出465

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
す【NOS1029】〔NOS0409〕．
マルチコアシステム上で識別できない不正なコア ID を CoreID に指定した場合，Status に E_OS_ID
を格納する【OS685】．
この場合，エラーコードを E_OS_ID として，エラーフックを呼び出す【NOS1030】〔NOS0409〕．
Status で与えたアドレスが，NULL であるポインタを指定した場合，エラーコードを
E_OS_PARAM_POINTER として，エラーフックを呼び出す【NOS1031】〔NOS0409〕．
SC3，SC4 において，OS 起動後に StartNonAutosarCore を呼び出した際，Status で与えたアドレ
スが，呼出し元の OSAP から書込みできないメモリ領域を指している場合，エラーコードを
E_OS_ILLEGAL_ADDRESS として，エラーフックを呼び出す【NOS1032】〔NOS0409〕．
AUTOSAR 仕様との違い
本仕様では，返り値のデータ型が StatusType でないシステムサービスであっても，状況によってエラーフックが呼び出される場合があると規定したため，OS 起動後に StartNonAutosarCore を呼び出した場合は，エラーフックが呼び出されると規定した≪NOS1027≫≪NOS1028≫≪NOS1029≫≪
NOS1030≫≪NOS1031≫≪NOS1032≫．
AUTOSAR 仕様では，StartNonAutosarCore における E_OS_ID，E_OS_STATE は標準エラーであると規定されているが，StartCore は拡張エラーとなっている．StartNonAutosarCore の誤記と思われるため，本仕様では，拡張エラーとして規定した．

466

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.66 GetSpinlock
C 言語 I/F
パラメータ[in]StatusType GetSpinlock(SpinlockIdType SpinlockId)【OS686】

パラメータ[in/out]－

パラメータ[out]

－

標準エラー

スピンロック ID

SpinlockId

E_OK

スピンロック獲得成功≪OS688≫

E_OS_LIMIT

ネスト回数の上限値超過≪NOS1035≫

E_OS_ID

SpinlockId が不正≪OS689≫
不正な処理単位からの呼出し≪OS088≫

E_OS_CALLEVELC1ISR からの呼出し≪NOS1200≫
アクセスが許可されていないスピンロック

E_OS_ACCESS

返り値
拡張エラー

が指定された(SC3，SC4 のみ)≪OS692≫

E_OS_DISABLEDINT

DisableAllInterrupts による割込み禁止状
態からの呼出し≪NOS1072≫

E_OS_INTERFERENCE_

呼び出し元のコアの処理単位によって既に

DEADLOCK

獲得済み≪OS690≫

E_OS_NESTING_

指定した順序に反する順序での獲得≪

DEADLOCK

OS691≫

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

マルチコア：SC1，SC2，SC3，SC4≪NOS0339≫
機能

本システムサービスは，SpinlockId で指定されたスピンロックを獲得する．
機能仕様
GetSpinlock は，SpinlockId で指定されたスピンロックを獲得する．SpinlockId で指定されたスピン
ロックが他のコアの処理単位によって既に占有されている場合，獲得できるまでスピンする【OS687】．
スピンロックを正常に獲得できた場合，E_OK を返す【OS688】〔COS3104〕．GetSpinlock は，SuspendAllInterrupts，SuspendOSInterrupts による割込み禁止状態でも呼び出すことができる【OS693】．リソースを占有している処理単位であっても，GetSpinlock によってスピンロックを獲得することができる【OS694】．
GetSpinlock 呼出し時，割込み禁止状態でなければ，スピン中に割込みが発生した場合，割込みを受け付ける【NOS0338】．
GetSpinlock 呼出し時に指定された SpinlockId が不正であった場合，E_OS_ID を返す【OS689】．
アクセスが許可されていないスピンロックが指定された場合，E_OS_ACCESS を返す【OS692】．

467

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
SpinlockId で指定されたスピンロックが，呼び出し元の処理単位と同じコアの処理単位によって既に占有されている場合，E_OS_INTERFERENCE_DEADLOCK を返す【OS690】．コンフィギュレーショ
ン時に指定した獲得順序に反する順序でスピンロックを獲得しようとした場合，
E_OS_NESTING_DEADLOCK を返す【OS691】． また，獲得順序が指定されていないスピンロックを獲得している場合に，他のスピンロックを獲得しようとした場合も，E_OS_NESTING_DEADLOCK
を 返 す ≪ OS661 ≫ ． DisableAllInterrupts に よ る 割 込 み 禁 止 状 態 で 呼 び 出 し た 場 合 ，
E_OS_DISABLEDINT を返す【NOS1072】．
OS 割込み禁止スピンロック，もしくは，全割込み禁止スピンロックを獲得する際に，GetSpinlockをそれぞれのネスト回数の上限値を超えて呼び出した場合，E_OS_LIMIT を返す【NOS1035】．
ATK2 では，OS 割込み禁止スピンロック獲得のネスト回数の上限値を，SuspendOSInterrupts のネ
スト回数との合計値で，255 と規定した≪NOS1187≫．また，全割込み禁止スピンロック獲得のネスト
回数の上限値を，SuspendAllInterrupts のネスト回数との合計値で，255 と規定した≪NOS1186≫．

468

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.67 ReleaseSpinlock
C 言語 I/F
パラメータ[in]StatusType ReleaseSpinlock(SpinlockIdType SpinlockId)【OS695】

パラメータ[in/out]－

パラメータ[out]

－

標準エラー

スピンロック ID

SpinlockId

E_OK

スピンロック獲得成功≪OS697≫

E_OS_ID

SpinlockId が不正≪OS698≫
アクセスが許可されていないスピンロック

E_OS_ACCESSが指定された(SC3，SC4 のみ)≪OS700≫
SpinlockId が呼出し元で占有されていない

E_OS_STATE
返り値

拡張エラー

≪OS699≫E_OS_DISABLEDINT

DisableAllInterrupts による割込み禁止状
態からの呼出し≪NOS1073≫
先に解放するべき別のスピンロックを占有

E_OS_NOFUNCしている≪OS701≫
不正な処理単位からの呼出し≪OS088≫

E_OS_CALLEVELC1ISR からの呼出し≪NOS1200≫

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

マルチコア：SC1，SC2，SC3，SC4≪NOS0339≫
機能

本システムサービスは，SpinlockId で指定されたスピンロックを解放する．解放されたスピンロ
ックは他の処理単位から獲得できるようになる．
機能仕様
ReleaseSpinlock は，呼び出し元の処理単位が占有しているスピンロックを解放する【OS696】．スピンロックを正常に解放できた場合，E_OK を返す【OS697】〔COS3104〕．ReleaseSpinlock は，SuspendAllInterrupts，SuspendOSInterrupts による割込み禁止状態でも呼び出すことができる≪
OS693≫≪OS711≫．
ReleaseSpinlock 呼出し時に指定された SpinlockId が不正であった場合，
E_OS_ID を返す【OS698】．
呼び出し元の処理単位が占有していないスピンロックを指定した場合，E_OS_STATE を返す【OS699】．
アクセスが許可されていないスピンロックが指定された場合，E_OS_ACCESS を返す【OS700】．呼び
出し元の処理単位が，SpinlockId で指定したスピンロックを獲得した後に，別のスピンロックを獲得し，解放していない場合，E_OS_NOFUNC を返す【OS701】．DisableAllInterrupts による割込み禁止状
態で呼び出した場合，E_OS_DISABLEDINT を返す【NOS1073】．

469

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
AUTOSAR 仕様との違い
AUTOSAR 仕様では，スピンロックとリソースの獲得，解放は LIFO で実行しなければならないと規定されている【OS702】．しかし，本要求の必要性が不明であることから，本仕様では削除した．

470

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.68 TryToGetSpinlock
C 言語 I/F

StatusType TryToGetSpinlock(SpinlockIdType SpinlockId,
TryToGetSpinlockType* Success)【OS703】

パラメータ[in]SpinlockId

パラメータ[in/out]－

パラメータ[out]Success

標準エラー

スピンロック ID
スピンロック獲得結果を格納する領域へのポインタ
スピンロック獲得成功もしくは失敗≪OS705

E_OK

≫

E_OS_LIMIT

ネスト回数の上限値超過≪NOS1036≫

E_OS_ID

SpinlockId が不正≪OS707≫
不正な処理単位からの呼出し≪OS088≫

E_OS_CALLEVELC1ISR からの呼出し≪NOS1200≫
アクセスが許可されていないスピンロックがE_OS_ACCESS

返り値
拡張エラー

コンフォーマンスクラ

指定された(SC3，SC4 のみ)≪OS710≫

E_OS_DISABLEDINT

DisableAllInterrupts による割込み禁止状態
からの呼出し≪NOS1074≫

E_OS_INTERFERENCE_

呼び出し元のコアの処理単位によって既に獲DEADLOCK

得済み≪OS708≫

E_OS_NESTING_

指定した順序に反する順序での獲得≪OS709

DEADLOCK≫

BCC1，BCC2，ECC1，ECC2ス
スケーラビリティクラ

マルチコア：SC1，SC2，SC3，SC4≪NOS0339≫

ス
機能
本システムサービスは，SpinlockId で指定されたスピンロックを獲得する．
機能仕様
TryToGetSpinlock は，SpinlockId で指定されたスピンロックを獲得する．SpinlockId で指定された
スピンロックを獲得できれば獲得し，他の処理単位が占有していることにより，獲得できなければすぐにリターンする【OS704】．スピンロックを正常に獲得できた場合，Success に
TRYTOGETSPINLOCK_SUCCESS を格納し，他の処理単位が占有していることにより，獲得できな
かった場合，Success に TRYTOGETSPINLOCK_NOSUCCESS を格納し，E_OK を返す【OS705】〔COS3104〕．返り値が E_OK でない場合に，Success に何を格納するかは規定しない【OS706】．
TryToGetSpinlock は，SuspendAllInterrupts，SuspendOSInterrupts による割込み禁止状態でも呼び471

文書番号：ATK2-0010
文書名：ATK2 外部仕様書出すことができる【OS711】．リソースを占有している処理単位であっても，TryToGetSpinlock によってスピンロックを獲得することができる【OS712】．
TryToGetSpinlock 呼出し時に指定された SpinlockId が不正であった場合，
E_OS_ID を返す【OS707】．
アクセスが許可されていないスピンロックが指定された場合，E_OS_ACCESS を返す【OS710】．
SpinlockId で指定されたスピンロックが，呼び出し元の処理単位と同じコアの処理単位によって既に占有されている場合，E_OS_INTERFERENCE_DEADLOCK を返す【OS708】．コンフィギュレーショ
ン時に指定した獲得順序に反する順序でスピンロックを獲得しようとした場合，
E_OS_NESTING_DEADLOCK を返す【OS709】．また，獲得順序が指定されていないスピンロックを獲得している場合に，他のスピンロックを獲得しようとした場合も，E_OS_NESTING_DEADLOCK
を返す≪OS661≫．DisableAllInterrupts による割込み禁止状態で呼び出した場合，
E_OS_DISABLEDINT を返す【NOS1074】．
OS 割込み禁止スピンロック，もしくは，全割込み禁止スピンロックをネストして獲得する際に，TryToGetSpinlock を，それぞれのネスト回数の上限値を超えて呼び出した場合，E_OS_LIMIT を返す【NOS1036】．
ATK2 では，OS 割込み禁止スピンロック獲得のネスト回数の上限値を，SuspendOSInterrupts のネ
スト回数との合計値で，255 と規定した≪NOS1187≫．また，全割込み禁止スピンロック獲得のネスト
回数の上限値を，SuspendAllInterrupts のネスト回数との合計値で，255 と規定した≪NOS1186≫．

472

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.69 ShutdownAllCores
C 言語 I/F
パラメータ[in]void ShutdownAllCores(StatusType Error)【OS713】
Error(OS 定義のものであること)パラメータ[in/out]－

パラメータ[out]

－

返り値

－

エラーフックに渡される
エラーコード

標準エラー
拡張エラー

終了要因のエラーコード

E_OS_ACCESS

非信頼 OSAP からの呼出し≪NOS1037≫－

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

マルチコア：SC1，SC2，SC3，SC4≪NOS0339≫
機能

本システムサービスは，すべてのコアにおけるすべての OS サービスを終了する．
機能仕様
ShutdownAllCores は同期 OS シャットダウンにより，すべてのコアにおけるすべての OS サービスを終了しシステム全体を停止する【OS714】．ShutdownAllCores からはリターンしない【OS715】．
OS で定義されていないエラーコードが指定された場合，Error を E_OS_SHUTDOWN_FATAL として ShutdownAllCores を呼び出したものとして，シャットダウン処理を行う【NOS1038】．また，不正な処理単位から呼び出した場合も，Error を E_OS_SHUTDOWN_FATAL として ShutdownAllCoresを呼び出したものとして，シャットダウン処理を行う【NOS1039】．
ShutdownAllCores を呼び出していないコアでは，シャットダウンフックに
E_OS_SHUTDOWN_OTHER_CORE が渡される【NOS1040】．
OS は，非信頼 OSAP に所属する処理単位からの OS シャットダウン要求を無視する【OS716】．ただし，エラーコードを E_OS_ACCESS として，エラーフックを呼び出す【NOS1037】．
ATK2 では，ShutdownAllCores で OS サービスを終了するために行う処理を，ターゲット定義とす
る【NOS1356】．

473

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.70 RaiseInterCoreInterrupt
C 言語 I/F
パラメータ[in]StatusType RaiseInterCoreInterrupt(ISRType ISRID)【NOS0316】

パラメータ[in/out]－

パラメータ[out]

－

標準エラー

ICISR の ID

ISRID

E_OK

正常終了≪COS3104≫
ISRID が不正≪NOS0074≫

E_OS_ID

C1ISR，C2ISR の指定≪NOS1120≫

E_OS_CALLEVEL
返り値

不正な処理単位からの呼出し≪OS088≫
C1ISR からの呼出し≪NOS1200≫
アクセスが許可されていない ISR が指定された≪

拡張エラー

OS056≫

E_OS_ACCESSICISR が所属する OSAP が利用可能でない(SC3，SC4 のみ)≪OS509≫

E_OS_CORE

起動していないコアへの呼出し≪OSa120≫

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

マルチコア：SC1，SC2，SC3，SC4≪NOS0339≫
機能

本システムサービスは，ISRID で指定された ICISR を起動させる．
機能仕様
RaiseInterCoreInterrupt は，ISRID で指定された ICISR が所属する OSAP が割り付けられたコア
で，ISRID で指定された ICISR を起動させる【NOS0066】．RaiseInterCoreInterrupt は，割込み禁止
状態でも，呼び出すことができる【NOS1110】．
RaiseInterCoreInterrupt 呼出し時に指定された ISRID が不正であった場合，E_OS_ID を返す【NOS0074】．ISRID に，C1ISR，C2ISR が指定された場合も，E_OS_ID を返す【NOS1120】．
ISRID で指定された ICISR が所属する OSAP が割付いているコアが，RaiseInterCoreInterrupt を呼び出した処理単位が所属する OSAP が割付いているコアと同一であっても，自身のコアに対してコア
間割込みを発生させることができる【NOS1118】．

474

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.71 GetMutex
C 言語 I/F
パラメータ[in]StatusType GetMutex(MutexType MtxID) 【NOS0317】

パラメータ[in/out]－

パラメータ[out]

－

標準エラー

ミューテックス ID

MtxID

E_OK

ミューテックス獲得成功≪COS3104≫

E_OS_ID

MtxID が不正≪NOS0101≫
MtxID で指定されたミューテックスが呼出し
元タスクによって既に獲得済み≪NOS0094≫
タスクがリソースを獲得した状態での呼出し≪NOS0097≫

返り値

MtxID の上限優先度が呼出し元タスクの初期

E_OS_ACCESS

優先度より低い≪NOS0088≫

拡張エラー

アクセスが許可されていないミューテックス
が指定された(SC3，SC4 のみ)≪OS056≫
ミューテックスが所属する OSAP が利用可能でない(SC3，SC4 のみ)≪OS509≫
E_OS_CALLEVEL
E_OS_DISABLEDINT

不正な処理単位からの呼出し≪OS088≫
C1ISR からの呼出し≪NOS1200≫
割込み禁止状態からの呼出し≪OS093≫

コンフォーマンスクラス

ECC1，ECC2(拡張タスクのみ)

スケーラビリティクラス

マルチコア：SC1，SC2，SC3，SC4≪NOS0339≫
機能

本システムサービスは，MtxID で指定されたミューテックスを獲得する．
機能仕様
GetMutex は，MtxID で指定されたミューテックスを獲得する【NOS0102】．ミューテックスを獲得
した処理単位は優先度プロトコル上限により現在優先度が引き上げられ，ReleaseMutex を呼び出すまでクリティカルセクションとなる【NOS0103】．
GetMutex 呼出し時に指定された MtxID が不正であった場合，E_OS_ID を返す【NOS0101】．MtxIDで指定されたミューテックスが呼出し元の処理単位で既に獲得済みである場合，E_OS_ACCESS を返す【NOS0094】．また，呼出し元の処理単位がリソースを獲得した状態で呼び出した場合，
E_OS_ACCESS を返す【NOS0097】．MtxID で指定されたミューテックスの上限優先度が，呼出し元の初期優先度よりも低い場合，E_OS_ACCESS を返す≪NOS0088≫．

475

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.72 ReleaseMutex
C 言語 I/F
パラメータ[in]StatusType ReleaseMutex(MtxType MtxID) 【NOS0318】

パラメータ[in/out]－

パラメータ[out]

－

標準エラー

ミューテックス ID

MtxID

E_OK

ミューテックス解放成功≪COS3104≫

E_OS_ID

MtxID が不正≪NOS0105≫
MtxID が呼出し元で獲得されていない≪
NOS0106≫

E_OS_NOFUNC

解放順序が獲得した LIFO 順でない≪
NOS0093≫

返り値

アクセスが許可されていないミューテックス

拡張エラーが指定された(SC3，SC4 のみ)≪OS056≫

E_OS_ACCESS

ミューテックスが所属する OSAP が利用可能でない(SC3，SC4 のみ)≪OS509≫

E_OS_CALLEVEL
E_OS_DISABLEDINT

不正な処理単位からの呼出し≪OS088≫
C1ISR からの呼出し≪NOS1200≫
割込み禁止状態からの呼出し≪OS093≫

コンフォーマンスクラス

ECC1，ECC2(拡張タスクのみ)

スケーラビリティクラス

マルチコア：SC1，SC2，SC3，SC4≪NOS0339≫
機能

本システムサービスは，MtxID で指定されたミューテックスを解放する．
機能仕様
ReleaseMutex は，MtxID で指定されたミューテックスを解放する【NOS0104】．ミューテックスを解放した時，OS はタスクの現在優先度をそのミューテックスを獲得した際の優先度に戻し，クリティ
カルセクションを終了する≪NOS0089≫．
ReleaseMutex 呼出し時に指定された MtxID が不正であった場合，E_OS_ID を返す【NOS0105】．
MtxID で指定されたミューテックスが呼出し元の処理単位で獲得されていない場合，E_OS_NOFUNCを返す【NOS0106】．また，ミューテックスの解放順序が LIFO となっていない場合，E_OS_NOFUNC
を返す≪NOS0093≫．

476

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.73 GetFaultyContext
C 言語 I/F

FaultyContextType GetFaultyContext(void)≪NOS1250≫

パラメータ[in]－パラメータ[in/out]－

パラメータ[out]－
保護違反を起こした処

取得成功≪NOS1358≫

理単位情報
返り値

FC_INVALID

処理単位を特定できない≪NOS1366≫
プロテクションフック以外の処理単位からの呼出し≪NOS1365≫

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC1，SC2，SC3，SC4【NOS1357】機能

本システムサービスは，保護違反を起こした処理単位情報を取得する．
機能仕様
GetFaultyContext は，保護違反発生時に，プロテクションフックから呼び出すことで，保護違反を起こした処理単位情報を返す【NOS1358】．
保護違反を起こした処理単位がタスクの場合，FC_TASK を返す【NOS1359】．保護違反を起こした
処理単位が C2ISR の場合，FC_C2ISR を返す【NOS1360】．保護違反を起こした処理単位が ICISR の場合も，FC_C2ISR を返す【NOS1361】．保護違反を起こした処理単位がシステム定義のフックルーチ
ンの場合，FC_SYSTEM_HOOK を返す【NOS1362】．保護違反を起こした処理単位が信頼関数の場合，
FC_TRUSTED_FUNC を返す【NOS1364】．
プロテクションフック以外の処理単位から呼び出した場合，FC_INVALID を返す【NOS1365】．
C1ISR が保護違反を起こした場合など，何らかの理由で保護違反を起こした処理単位を特定できない場
合も，FC_INVALID を返す【NOS1366】．
マルチコア対応 OS における仕様
GetFaultyContext を呼び出した処理単位が割付いているコアにおける，保護違反を起こした処理単
位情報を返す【NOS1368】．

477

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.9.74 GetCurrentApplicationID
C 言語 I/F

ApplicationType GetCurrentApplicationID(void)【NOS1550】

パラメータ[in]－パラメータ[in/out]－

パラメータ[out]－現在実行中の OSAPID

OSAPID 取得成功≪
NOS1551≫

INVALID_OSAPPLICATION

返り値

どの OSAP も実行中でない≪NOS1552≫
不正な処理単位からの呼出し≪NOS1553≫

エラーフックに渡される
エラーコード

標準エラー
拡張エラー

－
E_OS_CALLEVEL

不正な処理単位からの呼出し≪
NOS0411≫

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC3，SC4【NOS1554】機能

本システムサービスは，現在実行中の OSAPID を取得する．
機能仕様
GetCurrentApplicationID は，現在実行中の OSAPID を返す【NOS1551】．すなわち，本システム
サービスは，信頼関数実行中のコンテキストでは，その信頼関数が所属する OSAPID を返す．また，カウンタ満了処理実行中のコンテキストでは，それに対応したアラーム，スケジュールテーブルが所属する OSAPID を返す．それ以外の場合には，GetApplicationID を呼び出したときと同じ OSAPID（3.9.41 節を参照）を返す．GetCurrentApplicationID は，どの OSAP も実行中でない場合，
INVALID_OSAPPLICATION を返す【NOS1552】．GetCurrentApplicationID は，割込み禁止状態であっても，呼び出すことができる【NOS1555】．
不正な処理単位から GetCurrentApplicationID を呼び出した場合，INVALID_OSAPPLICATION を返す【NOS1553】．
使用上の注意OSAP 強制終了時に呼び出されるプレタスクフック，ポストタスクフックから
GetCurrentApplicationID を呼び出した場合は，強制終了対象 OSAP の ID が返される≪NOS1583≫≪NOS1584≫≪NOS1585≫．

478

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
マルチコア対応 OS における仕様
GetApplicationID を呼び出した処理単位が割付いているコアにおける，現在実行中の OSAPID を取得する【NOS1556】．GetApplicationID を呼び出した処理単位が割付いているコアに，どの OSAP も実行中でない場合，INVALID_OSAPPLICATION を返す【NOS1557】．
AUTOSAR 仕様との違い
AUTOSAR 仕様 R4.0 Rev 3 では，本システムサービスの規定は存在せず，R4.2 Rev.1 にて新規追加されたシステムサービスである【SWS_Os_00797】．ATK2 では，エラーフックから
TerminateApplication により現在実行中の OSAP のみ強制終了できると規定したため，現在実行中の
OSAPID を取得する API として，本システムサービスを追加した≪NOS1550≫．AUTOSAR 仕様 R4.2
では，
「GetCurrentApplicationID() shall return the application identifier in which the current
Task/ISR/hook is executed.」【SWS_Os_00798】，かつ，「If no OS-Application is running,
GetCurrentApplicationID() shall return INVALID_OSAPPLICATION.」【SWS_Os_00799】と規定されている．本仕様では，「the application identifier in which the current Task/ISR/hook is executed.」という記述が曖昧であったことから，「Note that if the caller is not within a CallTrustedFunction()call the value is equal to the result of GetApplicationID().」という，≪SWS_Os_00797≫内での記述を採用し，本システムサービスの返り値（現在実行中の OSAPID）を定義した≪NOS1551≫．ただし，カウンタ満了処理中のコンテキストにおいても GetApplicationID と本システムサービスの返り値は異なる（2.18.6.1 参照）．また，本システムサービスをサポートするスケーラビリティクラスは，AUTOSAR
仕様と，ATK2 で同様に，SC3，SC4 である【SWS_Os_00800】≪NOS1554≫．

479

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.10 IOC 用システムサービス
3.10.1 IocSend_<IocId>[_<SenderId>]
C 言語 I/F

Std_ReturnType IocSend_<IocId>[_<SenderId>](<Data> IN)【OS718】

パラメータ[in]IN

パラメータ[in/out]－

パラメータ[out]

－

標準エラー

送信データ

IOC_E_OK

送信成功≪OS725≫

IOC_E_LIMIT

キューフル≪OS726≫
不正な処理単位からの呼出し≪NOS1078≫
割込み禁止状態からの呼出し≪NOS1081≫

IOC_E_NOK

返り値<IocId>で指定された IOC のセンダが所属する OSAPからの呼び出しでない≪NOS1085≫<SenderId>で指定されたセンダが所属する OSAP か

拡張エラー

らの呼び出しでない≪NOS1085≫
E_OS_SYS_ILL
EGAL_ADDRE
SS
コンフォーマンスクラス
スケーラビリティクラス

本システムサービス内で生成された変数が不正なアドレスに配置されている≪NOS1560≫

BCC1，BCC2，ECC1，ECC2
SC3，SC4≪OSa151≫
マルチコア：SC1，SC2≪OSa151≫
機能

本システムサービスは，IOC(キューあり通信，単一通信)の送信処理を行う．1:1 通信の場合，<IocId>
を IOC ID とし，_<SenderId>を省略したシステムサービスが，IOC 毎に生成される．N:1 通信の場合，<IocId>を IOC ID ，<SenderId>をセンダ ID としたシステムサービスが，IOC とセンダの組み合わ
せ毎に生成される．<Data>は送信するデータのデータ型である．
機能仕様
IocSend は，データが正常に送信された場合，IOC_E_OK を返す【OS725】．IocSend は，キューにデータを格納するスペースがなく，データを送信出来ない場合，IOC_E_LIMIT を返す【OS726】．
IocSend は，送信したデータが受信されるのを待たずに，呼出し元にリターンする【OS719】．IocSend
は，送信データの IOC バッファへの書込みを完了した後で，呼出し元にリターンする【OS720】．IocSend
によるデータ送信では，同一コア内であればデータの送信順序を保証する【OS721】．
IocSend によるデータ送信では，データ完全性を保証する【OS722】．
IN は，<Data>が汎整数型の場合は値渡しとし，汎整数型以外のデータ型は参照渡しとする【OS723】．
IN が参照渡しである IocSend によりデータを送信した場合に，IN が示すデータに変更がないことを保480

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
証する【OS724】．
キューのサイズは，コンフィギュレーション時に静的に指定する【OS727】〔MCOS_Conf1001〕．
使用上の注意異なるコアに割り当てられた複数のセンダが存在する場合，データを受信する順序は実装依存である．

481

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.10.2 IocWrite_<IocId>[_<SenderId>]
C 言語 I/F

Std_ReturnType IocWrite_<IocId>[_<SenderId>](<Data> IN)≪OS718≫

パラメータ[in]IN

パラメータ[in/out]－

パラメータ[out]

－

標準エラー

IOC_E_OK

送信データ

送信成功≪OS725≫
不正な処理単位からの呼出し≪NOS1078≫
割込み禁止状態からの呼出し≪NOS1081≫

IOC_E_NOK
返り値<IocId>で指定された IOC のセンダ OSAP からの呼び出しでない≪NOS1085≫<SenderId>で指定されたセンダ OSAP からの呼び出

拡張エラー

しでない≪NOS1085≫
E_OS_SYS_ILL
EGAL_ADDRE
SS
コンフォーマンスクラス
スケーラビリティクラス

本システムサービス内で生成された変数が不正なアドレスに配置されている≪NOS1560≫

BCC1，BCC2，ECC1，ECC2
SC3，SC4≪OSa151≫
マルチコア：SC1，SC2≪OSa151≫
機能

本システムサービスは，IOC(キューなし通信，単一通信)の送信処理を行う．1:1 通信の場合，<IocId>
を IOC ID とし，_<SenderId>を省略したシステムサービスが，IOC 毎に生成される．N:1 通信の場合，<IocId>を IOC ID ，<SenderId>をセンダ ID としたシステムサービスが，IOC とセンダの組み合わ
せ毎に生成される．<Data>は送信するデータのデータ型である．
機能仕様
IocWrite は，データが正常に送信された場合，IOC_E_OK を返す≪OS725≫．
IocWrite は，送信したデータが受信されるのを待たずに，呼出し元にリターンする≪OS719≫．
IocWrite は，送信データの IOC バッファへの書込みを完了した後で，呼出し元にリターンする≪OS720≫． IocWrite によるデータ送信では，データ完全性を保証する≪OS722≫．
IN は，<Data>が汎整数型の場合は値渡しとし，汎整数型以外のデータ型は参照渡しとする≪OS723≫．IN が参照渡しである IocSend によりデータを送信した場合に，IN が示すデータに変更がないことを保証する≪OS724≫．

482

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.10.3 IocSendGroup_<IocId>
C 言語 I/F

Std_ReturnType IocSendGroup_<IocId>(<Data1> IN1, <Data1> IN2, ...)【OS728】

パラメータ[in]INx

パラメータ[in/out]－

パラメータ[out]

－

標準エラー

送信データ

IOC_E_OK

送信成功≪OS735≫

IOC_E_LIMIT

キューフル≪OS736≫
不正な処理単位からの呼出し≪NOS1078≫

IOC_E_NOK

返り値
拡張エラー

EGAL_ADDRE
SS

スケーラビリティクラス<IocId>で指定された IOC のセンダ OSAP からの呼び出しでない≪NOS1085≫

E_OS_SYS_ILL

コンフォーマンスクラス

割込み禁止状態からの呼出し≪NOS1081≫

本システムサービス内で生成された変数が不正なアドレスに配置されている≪NOS1560≫

BCC1，BCC2，ECC1，ECC2
SC3，SC4≪OSa151≫
マルチコア：SC1，SC2≪OSa151≫
機能

本システムサービスは，IOC(キューあり通信，グループ通信)の送信処理を行う．<IocId>を IOC IDとしたシステムサービスが，IOC 毎に生成される． <Datax>は送信するデータのデータ型である．
機能仕様
IocSendGroup は，データが正常に送信された場合，IOC_E_OK を返す【OS735】．IocSendGroupは，キューにデータを格納するスペースがなく，データを送信出来ない場合，IOC_E_LIMIT を返す【OS736】．
IocSendGroup は，送信したデータが受信されるのを待たずに，呼出し元にリターンする【OS729】．
IocSendGroup は，送信データの IOC バッファへの書込みを完了した後で，呼出し元にリターンする【OS730】．IocSendGroup によるデータ送信では，データの送信順序を保証する【OS731】．
IocSendGroup によるデータ送信では，データ完全性を保証する【OS732】．
INx は，<Datax>が汎整数型の場合は値渡しとし，汎整数型以外のデータ型は参照渡しとする【OS733】．INx が参照渡しである IocSendGroup によりデータを送信した場合に，INx が示すデータに変更がないことを保証する【OS734】．
キューのサイズは，コンフィギュレーション時に静的に指定する【OS737】〔MCOS_Conf1001〕．

483

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.10.4 IocWriteGroup_<IocId>
C 言語 I/F

Std_ReturnType IocWriteGroup_<IocId>(<Data1> IN1, <Data1> IN2, ...)≪OS728≫

パラメータ[in]INx

パラメータ[in/out]－

パラメータ[out]

－

標準エラー

IOC_E_OK

送信データ

送信成功≪OS735≫
不正な処理単位からの呼出し≪NOS1078≫

IOC_E_NOK
返り値

拡張エラー
EGAL_ADDRE
SS

スケーラビリティクラス<IocId>で指定された IOC のセンダ OSAP からの呼び出しでない≪NOS1085≫

E_OS_SYS_ILL

コンフォーマンスクラス

割込み禁止状態からの呼出し≪NOS1081≫

本システムサービス内で生成された変数が不正なアドレスに配置されている≪NOS1560≫

BCC1，BCC2，ECC1，ECC2
SC3，SC4≪OSa151≫
マルチコア：SC1，SC2≪OSa151≫
機能

本システムサービスは，IOC(キューなし通信，グループ通信)の送信処理を行う．<IocId>を IOC IDとしたシステムサービスが，IOC 毎に生成される． <Datax>は送信するデータのデータ型である．
機能仕様
IocWriteGroup は，データが正常に送信された場合，IOC_E_OK を返す≪OS735≫．
IocWriteGroup は，送信したデータが受信されるのを待たずに，呼出し元にリターンする≪OS729≫．
IocWriteGroup は，送信データの IOC バッファへの書込みを完了した後で，呼出し元にリターンする≪OS730≫．IocWriteGroup によるデータ送信では，データ完全性を保証する≪OS732≫．
INx は，<Datax>が汎整数型の場合は値渡しとし，汎整数型以外のデータ型は参照渡しとする≪
OS733≫．INx が参照渡しである IocWriteGroup によりデータを送信した場合に，INx が示すデータに変更がないことを保証する≪OS734≫．

484

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.10.5 IocReceive_<IocId>
C 言語 I/F

Std_ReturnType IocReceive_<IocId>(<Data> OUT)【OS738】

パラメータ[in]－パラメータ[in/out]－

パラメータ[out]

OUT

受信データ

IOC_E_OK

受信成功≪OS743≫

IOC_E_NO_DATA

キューに受信データがない≪OS744≫

IOC_E_LOST_DATA

キューフルが発生した≪OS745≫

標準エラー

不正な処理単位からの呼出し≪NOS1078≫
返り値

割込み禁止状態からの呼出し≪NOS1081≫

IOC_E_NOK<IocId>で指定された IOC のレシーバ OSAP から

拡張エラー

コンフォーマンスクラス
スケーラビリティクラスの呼び出しでない≪NOS1564≫
E_OS_SYS_ILLEGA

本システムサービス内で生成された変数が不正な

L_ADDRESS

アドレスに配置されている≪NOS1560≫

BCC1，BCC2，ECC1，ECC2
SC3，SC4≪OSa151≫
マルチコア：SC1，SC2≪OSa151≫
機能

本システムサービスは，IOC(キューあり通信，単一通信)の受信処理を行う．<IocId>を IOC ID としたシステムサービスが，IOC 毎に生成される．<Data>は受信するデータのデータ型である．
機能仕様
IocReceive は，データを正常に受信した場合，IOC_E_OK を返す【OS743】．IocReceive は，キューにデータが存在しない場合，IOC_E_NO_DATA を返す【OS744】．IocReceive に対応する IocSend 呼出し時に，キューにデータを格納するスペースがなく，IOC_E_LIMIT が返った後で，IocReceive を呼び出した場合，データ受信を行った上で，IOC_E_LOST_DATA を返す【OS745】．
IocReceive は，正常に受信した場合，受信したデータを OUT に格納する【OS739】．IocReceive は，参照渡しした OUT へのデータ書込みを完了した上でリターンすることを保証する【OS742】．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，受信通知機能を使用する場合，データを受信するコアでコールバック関数から
IocReceive，および IocRead を呼び出すと規定されている【OS740】．しかし，本仕様では，受信通知
機能をサポートしないため，削除した．

485

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.10.6 IocRead_<IocId>
C 言語 I/F

Std_ReturnType IocRead_<IocId>(<Data> OUT)≪OS738≫

パラメータ[in]－パラメータ[in/out]－

パラメータ[out]

OUT

受信データ

IOC_E_OK

受信成功≪OS743≫

標準エラー

不正な処理単位からの呼出し≪NOS1078≫
返り値

割込み禁止状態からの呼出し≪NOS1081≫

IOC_E_NOK<IocId>で指定された IOC のレシーバ OSAP から

拡張エラー

コンフォーマンスクラス
スケーラビリティクラスの呼び出しでない≪NOS1564≫
E_OS_SYS_ILLEGA

本システムサービス内で生成された変数が不正な

L_ADDRESS

アドレスに配置されている≪NOS1560≫

BCC1，BCC2，ECC1，ECC2
SC3，SC4≪OSa151≫
マルチコア：SC1，SC2≪OSa151≫
機能

本システムサービスは，IOC(キューなし通信，単一通信)の受信処理を行う．<IocId>を IOC ID としたシステムサービスが，IOC 毎に生成される．<Data>は受信するデータのデータ型である．
機能仕様
IocRead は，データを正常に受信した場合，IOC_E_OK を返す≪OS743≫．
IocRead は，正常に受信した場合，受信したデータを OUT に格納する≪OS739≫．IocRead は，参照渡しした OUT へのデータ書込みを完了した上でリターンすることを保証する≪OS742≫．IocRead
は，常に最後に送信されたデータを受信する【OS741】．

486

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.10.7 IocReceiveGroup_<IocId>
C 言語 I/F

Std_ReturnType IocReceiveGroup_<IocId>(<Data1> OUT1, <Data1> OUT2, ...)【OS746】

パラメータ[in]－パラメータ[in/out]－

パラメータ[out]

OUTx

受信データ

IOC_E_OK

受信成功≪OS751≫

IOC_E_NO_DATA

キューに受信データがない≪OS752≫

IOC_E_LOST_DATA

キューフルが発生した≪OS753≫

標準エラー

不正な処理単位からの呼出し≪NOS1078≫
返り値

割込み禁止状態からの呼出し≪NOS1081≫

IOC_E_NOK<IocId>で指定された IOC のレシーバ OSAP から

拡張エラー

コンフォーマンスクラス
スケーラビリティクラスの呼び出しでない≪NOS1564≫
E_OS_SYS_ILLEGA

本システムサービス内で生成された変数が不正な

L_ADDRESS

アドレスに配置されている≪NOS1560≫

BCC1，BCC2，ECC1，ECC2
SC3，SC4≪OSa151≫
マルチコア：SC1，SC2≪OSa151≫
機能

本システムサービスは，IOC(キューあり通信，グループ通信)の受信処理を行う．<IocId>を IOC IDとしたシステムサービスが，IOC 毎に生成される．<Datax>は受信するデータのデータ型である．
機能仕様
IocReceiveGroup は，データを正常に受信した場合，IOC_E_OK を返す【OS751】．IocReceiveGroupは，キューにデータが存在しない場合，IOC_E_NO_DATA を返す【OS752】．IocReceiveGroup に対応
する IocSendGroup 呼出し時に，キューにデータを格納するスペースがなく，IOC_E_LIMIT が返った
後で，IocReceiveGroup を呼び出した場合，データ受信を行った上で，IOC_E_LOST_DATA を返す【OS753】．
IocReceiveGroup は，正常に受信した場合，受信したデータを OUTx に格納する【OS747】．
IocReceiveGroup は，参照渡しした OUTx へのデータ書込みを完了した上でリターンすることを保証する【OS750】．
AUTOSAR 仕様との違い
AUTOSAR 仕様では，受信通知機能を使用する場合，データを受信するコアでコールバック関数から
IocReceiveGroup，および IocReadGroup を呼び出すと規定されている【OS748】．しかし，本仕様では，受信通知機能をサポートしないため，削除した．

487

文書番号：ATK2-0010
文書名：ATK2 外部仕様書

488

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.10.8 IocReadGroup_<IocId>
C 言語 I/F

Std_ReturnType IocReadGroup_<IocId>(<Data1> OUT1, <Data1> OUT2, ...)≪OS746≫

パラメータ[in]－パラメータ[in/out]－

パラメータ[out]

OUTx

受信データ

IOC_E_OK

受信成功≪OS751≫

標準エラー

不正な処理単位からの呼出し≪NOS1078≫
返り値

割込み禁止状態からの呼出し≪NOS1081≫

IOC_E_NOK<IocId>で指定された IOC のレシーバ OSAP から

拡張エラー

コンフォーマンスクラス
スケーラビリティクラスの呼び出しでない≪NOS1564≫
E_OS_SYS_ILLEGA

本システムサービス内で生成された変数が不正な

L_ADDRESS

アドレスに配置されている≪NOS1560≫

BCC1，BCC2，ECC1，ECC2
SC3，SC4≪OSa151≫
マルチコア：SC1，SC2≪OSa151≫
機能

本システムサービスは，IOC(キューなし通信，グループ通信)の受信処理を行う．<IocId>を IOC IDとしたシステムサービスが，IOC 毎に生成される．<Datax>は受信するデータのデータ型である．
機能仕様
IocReadGroup は，データを正常に受信した場合，IOC_E_OK を返す≪OS751≫．
IocReadGroup は，正常に受信した場合，受信したデータを OUTx に格納する≪OS747≫．
IocReadGroup は，参照渡しした OUTx へのデータ書込みを完了した上でリターンすることを保証する≪OS750≫．IocReadGroup は，常に最後に送信されたデータを受信する【OS749】．

489

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.10.9 IocEmptyQueue_<IocId>
C 言語 I/F

Std_ReturnType IocEmptyQueue_<IocId>(void)【OS754】

パラメータ[in]－パラメータ[in/out]－

パラメータ[out]

－

標準エラー

IOC_E_OK

キュー初期化成功≪OS755≫
不正な処理単位からの呼出し≪NOS1078≫

返り値

拡張エラー

割込み禁止状態からの呼出し≪NOS1081≫

IOC_E_NOK<IocId>で指定された IOC のレシーバ OSAP からの呼び出しでない≪NOS1564≫

コンフォーマンスクラス
スケーラビリティクラス

BCC1，BCC2，ECC1，ECC2
SC3，SC4≪OSa151≫
マルチコア：SC1，SC2≪OSa151≫
機能

本システムサービスは，IOC のキューの初期化を行う．<IocId>を IOC ID としたシステムサービス
が，IOC 毎に生成される．
機能仕様
IocEmptyQueue は，IOC のキューの初期化を行う【OS756】．キューに格納されたデータをすべて受信して初期化するよりも，IocEmptyQueue を使用するほうが効率的である．IocEmptyQueue は，レシーバのみが実行することができる≪NOS1075≫．
本 OS は，すべてのキューありの IOC に対して，IocEmptyQueue を提供する【OS755】．

490

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.11 フックルーチン
3.11.1 ErrorHook
C 言語 I/F
パラメータ[in]void ErrorHook(StatusType Error)【COS3802】
Error

パラメータ[in/out]－

パラメータ[out]

－

返り値

なし

発生したエラーのエラーコード

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC1，SC2，SC3，SC4
機能本フックルーチンは，エラーが発生した際に呼び出される．
機能仕様
ErrorHook は，以下の時に呼び出される．
・ システムサービスの返り値が E_OK 以外で，システムサービスが終了する時 【COS3805】〔COS1214〕．
・ StatusType 以外の返り値を返すシステムサービスで，エラーが発生してシステムサービスが終了する時≪NOS0409≫
・ アラーム満了時のアクションにて，タスク起動またはイベントのセットでエラーが発生した時【COS3806】．
・ アラーム満了時のアクションにて，操作中のカウンタに対して，カウンタのティックをインクリメントする時【NOS0867】．
・ スケジュールテーブル満了時のアクションにて，タスク起動またはイベントのセットでエラーが発生した時 【NOS0656】〔NOS0655〕．
例外として，本フックルーチン内で呼び出したシステムサービスが E_OK 以外の値を返す場合，本フックルーチンは呼び出されず，返り値によってしかエラー検出できない【COS3807】．

491

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.11.2 PreTaskHook
C 言語 I/F

void PreTaskHook(void)【COS3810】

パラメータ[in]－パラメータ[in/out]－

パラメータ[out]

－

返り値

なし

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC1，SC2，SC3，SC4
機能本フックルーチンは，新しいタスクを実行状態に切換えた後 OS から呼び出される．
機能仕様
PreTaskHook は，新しいタスクを実行状態に切換えた後 OS から呼び出される【COS3813】．

492

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.11.3 PostTaskHook
C 言語 I/F

void PostTaskHook(void)【COS3816】

パラメータ[in]－パラメータ[in/out]－

パラメータ[out]

－

返り値

なし

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC1，SC2，SC3，SC4
機能本フックルーチンは，実行されていたタスクが実行状態から他の状態に切り換わる前に OS から呼び出される．
機能仕様
PostTaskHook は，実行されていたタスクが実行状態から他の状態に切り換わる前に OS から呼び出される【COS3819】．

493

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.11.4 StartupHook
C 言語 I/F

void StartupHook(void)【COS3822】

パラメータ[in]－パラメータ[in/out]－

パラメータ[out]

－

返り値

なし

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC1，SC2，SC3，SC4
機能本フックルーチンは，OS の初期化完了後，スケジューラが動作する前に呼び出される．
機能仕様
StartupHook は，OS の初期化完了後，スケジューラが動作する前に呼び出される【COS3825】．
本フックルーチンではデバイスドライバの初期化などの処理を行うことができる．

494

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.11.5 ShutdownHook
C 言語 I/F
パラメータ[in]void ShutdownHook(StatusType Error)【COS3828】
Error

パラメータ[in/out]－

パラメータ[out]

－

返り値

なし

発生したエラーのエラーコード

コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC1，SC2，SC3，SC4
機能本フックルーチンは OS 処理終了中に呼び出される．
機能仕様
ShutdownHook は，OS 処理終了中に呼び出される【COS3831】．

495

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.11.6 ProtectionHook
C 言語 I/F

ProtectionReturnType ProtectionHook(StatusType FatalError)【OS538】

パラメータ[in]FatalError

パラメータ[in/out]－

パラメータ[out]－

発生した保護違反要因のエラーコード

プロテクションフック実行後の OS に対する処理要求．以下の 5 つのいずれかを返す必要がある．
・ PRO_IGNORE
・ PRO_TERMINATETASKISR

返り値・ PRO_TERMINATEAPPL・ PRO_TERMINATEAPPL_RESTART・ PRO_SHUTDOWN
コンフォーマンスクラス

BCC1，BCC2，ECC1，ECC2

スケーラビリティクラス

SC1【NOS0341】

SC2，SC3，SC4【OS542】

機能本フックルーチンは，メモリ保護違反などの深刻なエラーが発生した際に呼び出される．
機能仕様
ProtectionHook は，メモリ保護違反などの深刻なエラーが発生した際に呼び出される．
本フックルーチンの返り値によって OS は以下の処理を行う．
・ PRO_IGNORE：処理を行わない
・ PRO_TERMINATETASKISR：エラーを起こしたタスクまたは C2ISR の強制終了
・ PRO_TERMINATEAPPL：エラーを起こしたタスクまたは C2ISR が所属する OSAP の強制終了
・ PRO_TERMINATEAPPL_RESTART：エラーを起こしたタスクまたは C2ISR が所属する OSAPの強制終了と OSAP の再起動
・ PRO_SHUTDOWN：OS シャットダウン
ProtectionHook からの返り値が未定義であった場合，OS は E_OS_PROTECTION_FATAL を終了
要因のエラーコードとして OS シャットダウンを行う≪NOS0164≫．

496

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.11.7 StartupHook_<App>（参考仕様）
C 言語 I/F

void StartupHook_<App>(void)【OS539】

パラメータ[in]－パラメータ[in/out]－

パラメータ[out]

－

返り値

なし

コンフォーマンスクラス
スケーラビリティクラス

BCC1，BCC2，ECC1，ECC2
SC3，SC4【OS543】
マルチコア：SC1，SC2【NOS1041】
機能

本フックルーチンは OS の初期化中，システムのスタートアップフック実行後に呼び出される．
機能仕様
本仕様において，ATK2 では，OSAP 固有のフックルーチンを提供しない．
OSAP 固有の StartupHook は，OS の初期化中，システムのスタートアップフック実行後に呼び出される．OSAP が複数定義されている場合，OSAP 固有のスタートアップフックの呼出し順は，コンフィ
ギュレーションファイルの記載順とする≪NOS1213≫．

497

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.11.8 ErrorHook_<App>（参考仕様）
C 言語 I/F
パラメータ[in]void ErrorHook_<App>(StatusType Error)【OS540】
Error

パラメータ[in/out]－

パラメータ[out]

－

返り値

なし

コンフォーマンスクラス
スケーラビリティクラス発生したエラーのエラーコード

BCC1，BCC2，ECC1，ECC2
SC3，SC4【OS544】
マルチコア：SC1，SC2【NOS1042】
機能

本フックルーチンは本フックルーチンが所属する OSAP のタスクまたは C2ISR がエラーを起こした際に呼び出される．
システムのエラーフックが有効な場合は，システムのエラーフック実行後に呼び出される．
機能仕様
本仕様において，ATK2 では，OSAP 固有のフックルーチンを提供しない．
OSAP 固有の ErrorHook は，本フックルーチンが所属する OSAP のタスク，C2ISR が，エラーを起こした際に呼び出される．システムのエラーフックが有効な場合は，システムのエラーフック実行後に呼び出される．

498

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
3.11.9 ShutdownHook_<App>（参考仕様）
C 言語 I/F
パラメータ[in]void ShutdownHook_<App>(StatusType Error)【OS541】
Error

パラメータ[in/out]－

パラメータ[out]

－

返り値

なし

コンフォーマンスクラス
スケーラビリティクラス発生したエラーのエラーコード

BCC1，BCC2，ECC1，ECC2
SC3，SC4【OS545】
マルチコア：SC1，SC2【NOS1043】
機能

本フックルーチンは，OS の終了時に呼び出される．システム定義のシャットダウンフックが有効な場合，システム定義のシャットダウンフックより前に呼び出される．
機能仕様
本仕様において，ATK2 では，OSAP 固有のフックルーチンを提供しない．
OSAP 固有の ShutdownHook は，OS の終了時に呼び出される．システム定義のシャットダウンフックが有効な場合，システム定義のシャットダウンフックより前に呼び出される．OSAP が複数定義されている場合，OSAP 固有のシャットダウンフックの呼出し順は，コンフィギュレーションファイルの記載順とする≪NOS1369≫．

499

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
4. リファレンス
4.1

システムサービス一覧

OS 管理
AppModeType GetActiveApplicationMode(void)
void StartOS(AppModeType Mode)void ShutdownOS(StatusType Error)
void StartCore(CoreIdType CoreID, StatusType* Status)
void StartNonAutosarCore(CoreIdType CoreID, StatusType* Status)
void ShutdownAllCores(StatusType Error)
CoreIdType GetCoreID(void)
uint32 GetNumberOfActivatedCores(void)
タスク管理
StatusType ActivateTask(TaskType TaskID)
StatusType TerminateTask(void)
StatusType ChainTask(TaskType TaskID)
StatusType Schedule(void)
StatusType GetTaskID(TaskRefType TaskID)
StatusType GetTaskState(TaskType TaskID, TaskStateRefType State)
割込み管理
void EnableAllInterrupts(void)
void DisableAllInterrupts(void)
void ResumeAllInterrupts(void)
void SuspendAllInterrupts(void)
void ResumeOSInterrupts(void)
void SuspendOSInterrupts(void)
ISRType GetISRID(void)
StatusType EnableInterruptSource(ISRType EnableISR)
StatusType DisableInterruptSource(ISRType DisableISR)
イベント管理StatusType SetEvent(TaskType TaskID, EventMaskType Mask)
StatusType ClearEvent(EventMaskType Mask)
StatusType GetEvent(TaskType TaskID, EventMaskRefType Event)StatusType WaitEvent(EventMaskType Mask)

500

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
リソース管理StatusType GetResource(ResourceType ResID)
StatusType ReleaseResource(ResourceType ResID)
カウンタ制御StatusType IncrementCounter(CounterType CounterID)
ソフトウェアフリーランタイマ制御
StatusType GetCounterValue(CounterType CounterID, TickRefType Value)
StatusType GetElapsedValue(CounterType CounterID,
TickRefType Value, TickRefType ElapsedValue)
アラーム制御StatusType GetAlarmBase(AlarmType AlarmID, AlarmBaseRefType Info)
StatusType GetAlarm(AlarmType AlarmID, TickRefType Tick)
StatusType SetRelAlarm(AlarmType AlarmID, TickType increment, TickType cycle)
StatusType SetAbsAlarm(AlarmType AlarmID, TickType start, TickType cycle)
StatusType CancelAlarm(AlarmType AlarmID)
スケジュールテーブル制御
StatusType StartScheduleTableRel(ScheduleTableType ScheduleTableID, TickType Offset)
StatusType StartScheduleTableAbs(ScheduleTableType ScheduleTableID, TickType Start)
StatusType StopScheduleTable(ScheduleTableType ScheduleTableID)
StatusType NextScheduleTable(ScheduleTableType ScheduleTableID_From,
ScheduleTableType ScheduleTableID_To)
StatusType StartScheduleTableSynchron(ScheduleTableType ScheduleTableID)
StatusType SyncScheduleTable(ScheduleTableType ScheduleTableID, TickType Value)
StatusType SetScheduleTableAsync(ScheduleTableType ScheduleTableID)
StatusType GetScheduleTableStatus(ScheduleTableType ScheduleTableID,
ScheduleTableStatusRefType ScheduleStatus)
OSAP 制御
ApplicationType GetApplicationID(void)
StatusType CallTrustedFunction(TrustedFunctionIndexType FunctionIndex,
TrustedFunctionParameterRefType FunctionParams)
AccessType CheckISRMemoryAccess(ISRType ISRID,
MemoryStartAddressType Address, MemorySizeType Size)501

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
AccessType CheckTaskMemoryAccess(TaskType TaskID,
MemoryStartAddressType Address, MemorySizeType Size)
ObjectAccessType CheckTaskAccess(ApplicationType ApplID, TaskType TaskID)
ObjectAccessType CheckISRAccess(ApplicationType ApplID, ISRType ISRID)
ObjectAccessType CheckAlarmAccess(ApplicationType ApplID, AlarmType AlarmID)
ObjectAccessType CheckResourceAccess(ApplicationType ApplID, ResourceType ResID)
ObjectAccessType CheckCounterAccess(ApplicationType ApplID, CounterType CounterID)
ObjectAccessType CheckScheduleTableAccess(ApplicationType ApplID, ScheduleTableType ScheduleTableID)
ApplicationType CheckTaskOwnership(TaskType TaskID)
ApplicationType CheckISROwnership(ISRType ISRID)
ApplicationType CheckAlarmOwnership(AlarmType AlarmID)
ApplicationType CheckCounterOwnership(CounterType CounterID)
ApplicationType CheckScheduleTableOwnership(ScheduleTableType ScheduleTableID)
StatusType TerminateApplication(ApplicationType Application, RestartType RestartOption)
StatusType AllowAccess(void)
StatusType GetApplicationState(ApplicationType Application, ApplicationStateRefType Value)
FaultyContextType GetFaultyContext(void)
ApplicationType GetCurrentApplicationID(void)IOC
Std_ReturnType IocSend_<IocId>[_<SenderId>](<Data> IN)
Std_ReturnType IocWrite_<IocId>[_<SenderId>](<Data> IN)
Std_ReturnType IocSendGroup_<IocId> (<Data1> IN1, <Data2> IN2, …)
Std_ReturnType IocWriteGroup_<IocId> (<Data1> IN1, <Data2> IN2, …)
Std_ReturnType IocReceive_<IocId> (<Data> OUT)
Std_ReturnType IocRead_<IocId> (<Data> OUT)
Std_ReturnType IocReceiveGroup_<IocId> (<Data1> OUT1, <Data2> OUT2, …)
Std_ReturnType IocReadGroup_<IocId> (<Data1> OUT1, <Data2> OUT2, …)
Std_ReturnType IocEmptyQueue_<IocId> (void)
スピンロック管理
StatusType GetSpinlock(SpinlockIdType SpinlockId)
StatusType ReleaseSpinlock(SpinlockIdType SpinlockId)
StatusType TryToGetSpinlock(SpinlockIdType SpinlockId, TryToGetSpinlockType* Success)502

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
コア間割込み管理
StatusType RaiseInterCoreInterrupt(ISRType ISRID)
ミューテックス管理
StatusType GetMutex(MutexType MtxID)
StatusType ReleaseMutex(MtxType MtxID)
4.2

フックルーチン

void ErrorHook(StatusType Error)
void PreTaskHook(void)
void PostTaskHook(void)
void StartupHook(void)
void ShutdownHook(StatusType Error)
ProtectionReturnType ProtectionHook(StatusType FatalError)
void StartupHook_<App>(void)
void ErrorHook_<App>(StatusType Error)
void ShutdownHook_<App>(StatusType Error)503

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
4.3

データ型一覧
表 4-1 データ型一覧
データ型名

概要

StatusType

システムサービス要求に対する結果

AppModeType

アプリケーションモード型

OSServiceIdType

システムサービス ID 型

TaskType

タスク ID

TaskRefType

タスク ID へのポインタ型

TaskStateType

タスク状態

TaskStateRefType

タスク状態へのポインタ型

ISRType

ISRID

EventMaskType

イベントマスク型

EventMaskRefType

イベントマスクへのポインタ型

ResourceType

リソース IDCounterType

カウンタ ID

TickType

ティック

TickRefType

ティックへのポインタ型

AlarmTypeアラーム ID

AlarmBaseType

アラーム情報AlarmBaseRefType

アラーム情報へのポインタ型

ScheduleTableType

スケジュールテーブル ID

ScheduleTableStatusType

スケジュールテーブル状態型

ScheduleTableStatusRefType

スケジュールテーブル状態へのポインタ型

PhysicalTimeType

ティックから時間に換算するマクロで使用される型

ApplicationType

OSAPID

ApplicationStateType

OSAP の状態を示すデータ型

ApplicationStateRefType

OSAP の状態を示すデータへのポインタ型

TrustedFunctionIndexType

信頼関数 ID

TrustedFunctionParameterRefType

信頼関数パラメータへのポインタ型

AccessType

メモリ領域アクセス権

ObjectAccessType

OS オブジェクトアクセス権

ObjectTypeType

OS オブジェクト種別

MemoryStartAddressType

メモリ領域先頭へのポインタ型

MemorySizeType

メモリ領域サイズ

RestartType

OSAP 強制終了時のリスタートタスク起動有無

504

文書番号：ATK2-0010
文書名：ATK2 外部仕様書

データ型名

概要

ProtectionReturnType

保護違反に対する OS の処理種別

Std_ReturnType

IOC 用システムサービス要求に対する結果

IocType

IOC ID

SenderIdType

センダ IDCoreIdType

コア ID

SpinlockIdType

スピンロック ID

TryToGetSpinlockType

TryToGetSpinlock 実行結果情報

MutexTypeミューテックス ID

StackType

スタック領域を用意するためのデータ型

TimeType

ハードウェアカウンタにおける 1 ティック当たりの実時間をナノ秒単位で管理するためのデータ型

FaultyContextType

保護違反を起こした処理単位情報を管理するためのデータ
型505

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
4.4定数とマクロ一覧

4.4.1

OS 定数一覧
表 4-2 OS 定数一覧
定数名

概要

RUNNING

タスクが実行状態

WAITING

タスクが待ち状態である

READY

タスクが実行可能状態である

SUSPENDED

タスクが休止状態である

INVALID_TASK

いずれのタスクの ID でもないタスク ID

INVALID_ISR

いずれの ISR の ID でもない ISR ID

INVALID_OSAPPLICATION

いずれの OSAP でもない OSAPID

OS_CORE_ID_MASTER

マスタコアのコア ID を示す定数

OS_CORE_ID_<No>

各コアのコア ID を示す定数

OSMAXALLOWEDVALUE_<Cnt>
OSTICKSPERBASE_<Cnt>
OSMINCYCLE_<Cnt>
SCHEDULETABLE_STOPPEDSCHEDULETABLE_NEXT
SCHEDULETABLE_WAITINGSCHEDULETABLE_RUNNING

カウンタオブジェクト<Cnt>に対してシステムサービ
スで指定できるティックの最大値
カウンタオブジェクト<Cnt>のカウンタ固有の値(OSは不使用)．
カウンタオブジェクト<Cnt>のアラームのセットに指定できるサイクルの最小値
ScheduleTableStatusType 型のスケジュールテーブル
が停止状態であることを示す定数
ScheduleTableStatusType 型のスケジュールテーブル
が切換え待ち状態であることを示す定数
ScheduleTableStatusType 型のスケジュールテーブル
が同期待ち状態であることを示す定数
ScheduleTableStatusType 型のスケジュールテーブル
が動作状態であることを示す定数

SCHEDULETABLE_

ScheduleTableStatusType 型のスケジュールテーブル

RUNNING_AND_SYNCHRONOUS

が同期動作状態であることを示す定数

APPLICATION_ACCESSIBLE
APPLICATION_RESTARTINGAPPLICATION_TERMINATED

ApplicationStateType 型の OSAP が利用可能状態であることを示す定数
ApplicationStateType 型の OSAP が再起動状態である
ことを示す定数
ApplicationStateType 型の OSAP が終了状態であることを示す定数506

文書番号：ATK2-0010
文書名：ATK2 外部仕様書

定数名
ACCESS
NO_ACCESSOBJECT_TASKOBJECT_ISR
OBJECT_ALARMOBJECT_RESOURCEOBJECT_COUNTEROBJECT_SCHEDULETABLERESTART
NO_RESTART
PRO_IGNORE
PRO_TERMINATETASKISR
PRO_TERMINATEAPPL

概要
ObjectAccessType 型の OS オブジェクトにアクセスできることを示す定数
ObjectAccessType 型の OS オブジェクトにアクセスできないことを示す定数
ObjectTypeType 型の OS オブジェクトがタスクである
ことを示す定数
ObjectTypeType 型の OS オブジェクトが ISR であることを示す定数
ObjectTypeType 型の OS オブジェクトがアラームであることを示す定数
ObjectTypeType 型の OS オブジェクトがリソースであることを示す定数
ObjectTypeType 型の OS オブジェクトがカウンタであることを示す定数
ObjectTypeType 型の OS オブジェクトがスケジュール
テーブルであることを示す定数
RestartType 型のリスタートタスクを起動することを示す定数
RestartType 型のリスタートタスクを起動しないことを示す定数
ProtectionReturnType 型の保護違反時処理を行わない
ことを示す定数
ProtectionReturnType 型の保護違反時処理としてタス
ク，C2ISR を強制終了することを示す定数
ProtectionReturnType 型の保護違反時処理として
OSAP を強制終了することを示す定数
ProtectionReturnType 型の保護違反時処理として

PRO_TERMINATEAPPL_RESTART

OSAP を強制終了し，リスタートタスクを起動することを示す定数

PRO_SHUTDOWN

ProtectionReturnType 型の保護違反時処理として OSをシャットダウンすることを示す定数

FC_TASK

タスクが保護違反を起こしたことを示す定数

FC_C2ISRC2ISR が保護違反を起こしたことを示す定数

FC_SYSTEM_HOOK

システム定義のフックルーチンが保護違反を起こしたことを示す定数507

文書番号：ATK2-0010
文書名：ATK2 外部仕様書

定数名
FC_TRUSTED_FUNC
FC_INVALIDINVALID_APPMODETYPE

概要
信頼関数が保護違反を起こしたことを示す定数
保護違反を起こした処理単位を特定できないことを示
す定数
GetActiveApplicationMode がエラーを検出したときに
返る定数

508

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
4.4.2

システムサービス ID 一覧
表 4-3 システムサービス ID 一覧
システムサービス ID 名

対応するシステムサービス名

OSServiceId_GetActiveApplicationMode

GetActiveApplicationMode

OSServiceId_StartOS

StartOS

OSServiceId_ShutdownOS

ShutdownOS

OSServiceId_ActivateTask

ActivateTask

OSServiceId_TerminateTask

TerminateTask

OSServiceId_ChainTask

ChainTask

OSServiceId_Schedule

Schedule

OSServiceId_GetTaskID

GetTaskID

OSServiceId_GetTaskState

GetTaskState

OSServiceId_EnableAllInterrupts

EnableAllInterrupts

OSServiceId_DisableAllInterrupts

DisableAllInterrupts

OSServiceId_ResumeAllInterrupts

ResumeAllInterrupts

OSServiceId_SuspendAllInterrupts

SuspendAllInterrupts

OSServiceId_ResumeOSInterrupts

ResumeOSInterrupts

OSServiceId_SuspendOSInterrupts

SuspendOSInterrupts

OSServiceId_GetISRID

GetISRID

OsServiceId_EnableInterruptSource

EnableInterruptSource

OsServiceId_DisableInterruptSource

DisableInterruptSource

OSServiceId_SetEvent

SetEvent

OSServiceId_ClearEvent

ClearEvent

OSServiceId_GetEvent

GetEvent

OSServiceId_WaitEvent

WaitEvent

OSServiceId_GetResource

GetResource

OSServiceId_ReleaseResource

ReleaseResource

OSServiceId_IncrementCounter

IncrementCounter

OSServiceId_GetCounterValue

GetCounterValueOSServiceId_GetElapsedValue

GetElapsedValueOSServiceId_GetAlarmBase

GetAlarmBase

OSServiceId_GetAlarm

GetAlarm

OSServiceId_SetRelAlarm

SetRelAlarm

OSServiceId_SetAbsAlarm

SetAbsAlarm

OSServiceId_CancelAlarm

CancelAlarm509

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
システムサービス ID 名

対応するシステムサービス名

OSServiceId_StartScheduleTableRel

StartScheduleTableRel

OSServiceId_StartScheduleTableAbs

StartScheduleTableAbs

OSServiceId_StopScheduleTable

StopScheduleTable

OSServiceId_NextScheduleTable

NextScheduleTable

OSServiceId_StartScheduleTableSynchron

StartScheduleTableSynchron

OSServiceId_SyncScheduleTable

SyncScheduleTable

OSServiceId_SetScheduleTableAsync

SetScheduleTableAsync

OSServiceId_GetScheduleTableStatus

GetScheduleTableStatus

OSServiceId_GetApplicationID

GetApplicationID

OSServiceId_CallTrustedFunction

CallTrustedFunction

OSServiceId_CheckISRMemoryAccess

CheckISRMemoryAccess

OSServiceId_CheckTaskMemoryAccess

CheckTaskMemoryAccess

OSServiceId_CheckTaskAccess

CheckTaskAccess

OSServiceId_CheckISRAccess

CheckISRAccess

OSServiceId_CheckAlarmAccess

CheckAlarmAccess

OSServiceId_CheckResourceAccess

CheckResourceAccess

OSServiceId_CheckCounterAccess

CheckCounterAccess

OSServiceId_CheckScheduleTableAccess

CheckScheduleTableAccess

OSServiceId_CheckSpinlockAccess

CheckSpinlockAccess

OSServiceId_CheckTaskOwnership

CheckTaskOwnership

OSServiceId_CheckISROwnership

CheckISROwnership

OSServiceId_CheckAlarmOwnership

CheckAlarmOwnership

OSServiceId_CheckCounterOwnership

CheckCounterOwnership

OSServiceId_CheckScheduleTableOwnership

CheckScheduleTableOwnership

OSServiceId_TerminateApplication

TerminateApplication

OSServiceId_AllowAccess

AllowAccess

OSServiceId_GetApplicationState

GetApplicationStateIOCServiceId_IOC_Send

IocSendIOCServiceId_IOC_Write

IocWrite

IOCServiceId_IOC_SendGroup

IocSendGroup

IOCServiceId_IOC_WriteGroup

IocWriteGroup

IOCServiceId_IOC_Receive

IocReceive

IOCServiceId_IOC_Read

IocReadIOCServiceId_IOC_ReceiveGroup

IocReceiveGroup

510

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
システムサービス ID 名

対応するシステムサービス名

IOCServiceId_IOC_ReadGroup

IocReadGroup

IOCServiceId_IOC_EmptyQueue

IocEmptyQueue

OSServiceId_StartCore

StartCore

OSServiceId_StartNonAutosarCore

StartNonAutosarCore

OSServiceId_GetSpinlock

GetSpinlock

OSServiceId_ReleaseSpinlock

ReleaseSpinlock

OSServiceId_TryToGetSpinlock

TryToGetSpinlock

OSServiceId_ShutdownAllCores

ShutdownAllCores

OSServiceId_GetMutex

GetMutex

OSServiceId_ReleaseMutex

ReleaseMutex

OSServiceId_TaskMissingEnd

タスク不正終了

OSServiceId_ISRMissingEnd

C2ISR 不正終了

OSServiceId_HookMissingEnd

フックルーチン不正終了

OSServiceId_GetCurrentApplicationID

GetCurrentApplicationID

511

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
4.4.3

OS マクロ一覧
表 4-4 OS マクロ一覧
マクロ名

OSMEMORY_IS_READABLE(AccessType)OSMEMORY_IS_WRITEABLE(AccessType)OSMEMORY_IS_EXECUTABLE(AccessType)OSMEMORY_IS_STACKSPACE(AccessType)

概要
指定されたメモリが読出し可能である場合，0 以外の値を返す．
指定されたメモリが書込み可能である場合，0 以外の値を返す．
指定されたメモリが実行可能である場合，0 以外の値を返す．
指定されたメモリがスタック領域である
場合，0 以外の値を返す．
Parameter で指定された引数で，

SVC_CALL(SystemServiceName)(Parameter)

SystemServiceName で指定されたシステ
ムサービスを，明示的に関数呼出しにて発行する．
Parameter で指定された引数で，

SVC_TRAP(SystemServiceName)(Parameter)

SystemServiceName で指定されたシステ
ムサービスを，明示的にソフトウェア割込
みにて発行する．

512

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
4.4.4

システムサービス ID 取得マクロ一覧
表 4-5 システムサービス ID 取得マクロ一覧
マクロ名

概要

OSErrorGetServiceId()

システムサービスエラー発生時のシステムサービス ID の取得

513

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
4.4.5

システムサービスパラメータ取得マクロ一覧
表 4-6 システムサービスパラメータ取得マクロ一覧
マクロ名

システムサービス名

取得引数名

OSError_StartOS_Mode()StartOSMode

OSError_ShutdownOS_Error()

ShutdownOS

Error

OSError_ActivateTask_TaskID()

ActivateTask

TaskID

OSError_ChainTask_TaskID()

ChainTask

TaskID

OSError_GetTaskID_TaskID()

GetTaskID

TaskID

OSError_GetTaskState_TaskID()

GetTaskState

TaskID

OSError_GetTaskState_State()

GetTaskState

State

OSError_EnableInterruptSource_EnableISR()

EnableInterruptSource

EnableISR

OSError_DisableInterruptSource_DisableISR()

DisableInterruptSource

DisableISR

OSError_SetEvent_TaskID()

SetEvent

TaskID

OSError_SetEvent_Mask()

SetEvent

Mask

OSError_ClearEvent_Mask()

ClearEvent

Mask

OSError_GetEvent_TaskID()

GetEvent

TaskID

OSError_GetEvent_Event()

GetEvent

Event

OSError_WaitEvent_Mask()

WaitEvent

Mask

OSError_GetResource_ResID()

GetResource

ResID

OSError_ReleaseResource_ResID()

ReleaseResource

ResID

OSError_IncrementCounter_CounterID()

IncrementCounter

CounterID

OSError_GetCounterValue_CounterID()

GetCounterValue

CounterID

OSError_GetCounterValue_Value()

GetCounterValue

Value

OSError_GetElapsedValue_CounterID()

GetElapsedValue

CounterID

OSError_GetElapsedValue_Value()

GetElapsedValue

Value

OSError_GetElapsedValue_ElapsedValue()

GetElapsedValue

ElapsedValue

OSError_GetAlarmBase_AlarmID()

GetAlarmBase

AlarmID

OSError_GetAlarmBase_Info()

GetAlarmBase

Info

OSError_GetAlarm_AlarmID()

GetAlarm

AlarmID

OSError_GetAlarm_Tick()

GetAlarm

Tick

OSError_SetRelAlarm_AlarmID()

SetRelAlarm

AlarmID

OSError_SetRelAlarm_increment()

SetRelAlarm

increment

OSError_SetRelAlarm_cycle()

SetRelAlarm

cycle

OSError_SetAbsAlarm_AlarmID()

SetAbsAlarm

AlarmID

OSError_SetAbsAlarm_start()

SetAbsAlarm

start

514

文書番号：ATK2-0010
文書名：ATK2 外部仕様書

マクロ名

システムサービス名

取得引数名

OSError_SetAbsAlarm_cycle()

SetAbsAlarm

cycle

OSError_CancelAlarm_AlarmID()

CancelAlarm

AlarmID

OSError_StartScheduleTableRel_ScheduleTableID()

StartScheduleTableRel

ScheduleTableID

OSError_StartScheduleTableRel_Offset()

StartScheduleTableRel

Offset

OSError_StartScheduleTableAbs_ScheduleTableID()

StartScheduleTableAbs

ScheduleTableID

OSError_StartScheduleTableAbs_Start()

StartScheduleTableAbs

Start

OSError_StopScheduleTable_ScheduleTableID()

StopScheduleTable

ScheduleTableID

OSError_NextScheduleTable_ScheduleTableID_From()

NextScheduleTable

ScheduleTableID_From

OSError_NextScheduleTable_ScheduleTableID_To()

NextScheduleTable

ScheduleTableID_To

OSError_StartScheduleTableSynchron_ScheduleTableID()

StartScheduleTableSynchron

ScheduleTableID

OSError_SyncScheduleTable_ScheduleTableID()

SyncScheduleTable

ScheduleTableID

OSError_SyncScheduleTable_Value()

SyncScheduleTable

Value

OSError_SetScheduleTableAsync_ScheduleTableID()

SetScheduleTableAsync

ScheduleTableID

OSError_GetScheduleTableStatus_ScheduleTableID()

GetScheduleTableStatus

ScheduleTableID

OSError_GetScheduleTableStatus_ScheduleStatus()

GetScheduleTableStatus

ScheduleStatus

OSError_CallTrustedFunction_FunctionIndex()

CallTrustedFunction

FunctionIndex

OSError_CallTrustedFunction_FunctonParams()

CallTrustedFunction

FunctonParams

OSError_CheckISRMemoryAccess_ISRID()

CheckISRMemoryAccess

ISRID

OSError_CheckISRMemoryAccess_Address()

CheckISRMemoryAccess

Address

OSError_CheckISRMemoryAccess_Size()

CheckISRMemoryAccess

Size

OSError_CheckTaskMemoryAccess_TaskID()

CheckTaskMemoryAccess

TaskID

OSError_CheckTaskMemoryAccess_Address()

CheckTaskMemoryAccess

Address

OSError_CheckTaskMemoryAccess_Size()

CheckTaskMemoryAccess

Size

OSError_CheckTaskAccess_ApplID()

CheckTaskAccess

ApplID

OSError_CheckTaskAccess_TaskID()

CheckTaskAccess

TaskID

OSError_CheckISRAccess_ApplID()

CheckISRAccess

ApplID

OSError_CheckISRAccess_ISRID()

CheckISRAccess

ISRID

OSError_CheckAlarmAccess_ApplID()

CheckAlarmAccess

ApplID

OSError_CheckAlarmAccess_AlarmID()

CheckAlarmAccess

AlarmID

OSError_CheckResourceAccess_ApplID()

CheckResourceAccess

ApplID

OSError_CheckResourceAccess_ResID()

CheckResourceAccess

ResID

OSError_CheckCounterAccess_ApplID()

CheckCounterAccess

ApplID

OSError_CheckCounterAccess_CounterID()

CheckCounterAccess

CounterID

OSError_CheckScheduleTableAccess_ApplID()

CheckScheduleTableAccess

ApplID

515

文書番号：ATK2-0010
文書名：ATK2 外部仕様書

マクロ名

システムサービス名

取得引数名

OSError_CheckScheduleTableAccess_ScheduleTableID()

CheckScheduleTableAccess

ScheduleTableID

OSError_CheckSpinlockAccess_ApplID()

CheckSpinlockAccess

ApplID

OSError_CheckSpinlockAccess_SpinlockId()

CheckSpinlockAccessSpinlockId

OSError_CheckTaskOwnership_TaskID()

CheckTaskOwnership

TaskID

OSError_CheckISROwnership_ISRID()

CheckISROwnership

ISRID

OSError_CheckAlarmOwnership_AlarmID()

CheckAlarmOwnership

AlarmID

OSError_CheckCounterOwnership_CounterID()

CheckCounterOwnershipCounterID

OSError_CheckScheduleTableOwnership_ScheduleTableID()

CheckScheduleTableOwnership

ScheduleTableID

OSError_TerminateApplication_Application()

TerminateApplication

Application

OSError_TerminateApplication_RestartOption()

TerminateApplication

RestartOption

OSError_GetApplicationState_Application()

GetApplicationState

Application

OSError_GetApplicationState_Value()

GetApplicationState

Value

OSError_IocSend_IocId()

IocSend，IocSendGroup<IocId>OSError_IocSend_SenderId()

IocSend<SenderId>

OSError_IocWrite_IocId()

IocWrite，IocWriteGroup<IocId>OSError_IocWrite_SenderId()

IocWrite<SenderId>

OSError_IocReceive_IocId()

IocReceive，IocReceiveGroup<IocId>OSError_IocRead_IocId()

IocRead，IocReadGroup<IocId>OSError_IocEmptyQueue_IocId()

IocEmptyQueue<IocId>OSError_StartCore_CoreID()

StartCoreCoreID

OSError_StartCore_Status()

StartCore

StatusOSError_StartNonAutosarCore_CoreID()

StartNonAutosarCore

CoreID

OSError_StartNonAutosarCore_Status()

StartNonAutosarCore

StatusOSError_GetSpinlock_SpinlockId()

GetSpinlock

SpinlockId

OSError_ReleaseSpinlock_SpinlockId()

ReleaseSpinlock

SpinlockId

OSError_TryToGetSpinlock_SpinlockId()

TryToGetSpinlock

SpinlockId

OSError_TryToGetSpinlock_Success()

TryToGetSpinlock

Success

OSError_ShutdownAllCores_Error()

ShutdownAllCores

Error

OSError_RaiseInterCoreInterrupt_ISRID()

RaiseInterCoreInterrupt

ISRID

OSError_GetMutex_MtxID()

GetMutex

MtxID

OSError_ReleaseMutex_MtxID()

ReleaseMutex

MtxID

516

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
4.5

エラーコード一覧
表 4-7 エラーコード一覧
エラーコード値

E_OS_ACCESS

1

E_OS_CALLEVEL

2

E_OS_ID3

E_OS_LIMIT

4

E_OS_NOFUNC

5

E_OS_RESOURCE

6

E_OS_STATE7

E_OS_VALUE

8

E_OS_SERVICEID

9

E_OS_ILLEGAL_ADDRESS10

E_OS_MISSINGEND11

E_OS_DISABLEDINT12

E_OS_STACKFAULT13

E_OS_PROTECTION_MEMORY

14

E_OS_PROTECTION_TIME_TASK15

E_OS_PROTECTION_TIME_ISR

16

E_OS_PROTECTION_ARRIVAL_TASK17

E_OS_PROTECTION_ARRIVAL_ISR

18

E_OS_PROTECTION_LOCKED_RESOURCE

19

E_OS_PROTECTION_LOCKED_OSINT20

E_OS_PROTECTION_LOCKED_ALLINT

21

E_OS_PROTECTION_EXCEPTION

22

E_OS_PROTECTION_FATAL

23

E_OS_MODE24

E_OS_SHUTDOWN_FATAL25

E_OS_PARAM_POINTER

26

E_OS_SYS_ASSERT_FATAL27

E_OS_STACKINSUFFICIENT28

E_OS_CORE

29

E_OS_SPINLOCK

30

E_OS_INTERFERENCE_DEADLOCK

31

E_OS_NESTING_DEADLOCK

32

517

文書番号：ATK2-0010
文書名：ATK2 外部仕様書

4.6

E_OS_SHUTDOWN_OTHER_CORE

33

E_OS_TIMEINSUFFICIENT34

E_OS_PROTECTION_TIMEWINDOW35

E_OS_PROTECTION_COUNT_ISR

36

E_OS_SYS_ILLEGAL_ADDRESS

37

IOC 用システムサービスエラーコード一覧
表 4-8 IOC 用システムサービスエラーコード一覧
エラーコード値

IOC_E_OK

0

IOC_E_NOK

1

IOC_E_LIMIT

130

IOC_E_LOST_DATA

64

IOC_E_NO_DATA

131

518

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
4.7

対象外とした AUTOSAR 仕様

OS 以外のモジュールとの関連を示した規定等で，OS に対する要求仕様として取り扱う必要がない仕様に関しては，本仕様では対象外とした．具体的には以下の仕様である．
・ ヘッダファイルによる公開パラメータ(＊)【OS766】
・ 関連仕様情報【OS767】※AUTOSAR 仕様 V5.1.0 (R4.1 Rev 1)では，(＊)の付く仕様は削除されている．

519

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
変更履歴
Version

Date

1.0.0

2015/03/31

Detail・ 「次世代車載システム向け RTOS 外部仕様書

EditorNCES

Ver.3.2.0」からコピー
・ 文書名変更
・ 文書番号変更
・ 誤記修正・ トレーサビリティ付け直し
1.1.0

2015/05/19

・

時間保護機能，時間パーティショニング機能に関する記

NCES

述を追記，修正
・

機能レベルに関する記述を削除

・ IOS タグに関する記述を修正
1.2.0

2015/12/25

・

メモリ保護機能，時間保護機能，時間パーティショニン

NCES

グ機能に関する記述を追記，修正・ 仕様を修正
1.2.1

2016/03/24

・

動作中 OSAP の定義を修正

・

GetCurrentApplication に関する記述を追加

・

エラーフックからの TerminateApplication 呼び出しにNCES関する記述を追加

1.2.2

2017/03/24

・

システムサービスの呼び出し方法の記述を変更

・

一部の E_OS_ACCESS を標準エラーに変更

・

誤記修正

・

非信頼 OSAP からの他 OSAP に属するカウンタに対す

NCESるインクリメントを制限
・

同じ満了点に複数の満了処理が存在する場合の実行順
序に関する仕様を追加

・

タスク強制終了処理時に，次にスケジューラが起動するまでは，実行中のタスクの情報が残るという注意事項を記載

・保護違反に対して OS が提供する機能の記述を整理

・

時間パーティショニング機能のリソース制約に関する
仕様を修正

・

実行中 OSAP と動作中 OSAP の用語整理

・

メモリ保護機能に関する記載を追加

・IOC 用システムサービスの呼出し方法を変更

・

ハードウェアカウンタに関する使用上の注意を追加

520

文書番号：ATK2-0010
文書名：ATK2 外部仕様書
VersionDate

Detail・

Editor

エラーフックから TerminateApplication を発行する場
合，OS 割込み禁止状態での発行を許可する仕様を追加

・

C1ISR が使用するスタックについて記載を修正

・

OSAP 強制終了処理の開始/終了時に，プレ/ポストタス
クフックが呼び出されることを記載

・

SuspendOSInterrupts，ResumeOSInterrupts を OS
処理レベル以上で呼び出した場合，何もしないという仕様を追加

・

その他，誤記修正521