2. 概念
2.16 RTE/SCHM コード生成方針
3.1.5 API マッピング
RTEは,RTE API名からRTE APIの実体として生成される関数(生成関数)へのマッピング(APIマ ッピング)を提供する. ECUの実行バイナリ内で生成関数名はユニークでなければならないため,
APIマッピングは必要である.RTEGENは,APIマッピングをアプリケーションヘッダに生成する
【rte_sws_1274】.
3.1.5.1 コントラクトフェーズ
コントラクトフェーズでは,APIマッピングはAPI呼出しを,RTEGENが生成したAPI実装に変換 する必要がある.コントラクトフェーズのAPIマッピングは,RTE/SCHM API呼出しの生成関数への マッピングを提供する【rte_sws_3707】.
マッピング先の生成関数の命名則
Rte_<name>_<api_extension>形式のRTE APIに対応する生成関数名は以下の規則に従う
【rte_sws_3837】.
Rte_<name>_<c>_<api_extension>
ここで,
・ <name>はAPIルート名(例えば,Rte_Writeであれば,Write),
・ <c>はSW-C型のショートネーム,
・ <api_extension>は<name>に依存するAPIの拡張子(例えば,Rte_Writeであれば,<p>_<o>)を 表す.
APIマッピングの生成例
SW-C<c1>のクライアントポート<p1>から,引数1つのオペレーション<a>を行うRte_Call の場合,
以下のAPIマッピングが生成される.
#define Rte_Call_p1_a Rte_Call_c1_p1_a
3.1.5.2 ジェネレーションフェーズ
コントラクトフェーズで生成されたAPIマッピングのマッピング先である生成関数は,ジェネレー ションフェーズにおいて生成する.
前述したように,APIマッピングはAPI名と適切な生成関数をマッピングする責任がある.
RTEGENは生成関数を提供する代わりに,より効率的な実装関数を提供してもよい【rte_sws_a_0044】.
この場合,APIマッピングは,RTE/SCHM APIからRTE/SCHM内の最適化された実装関数への中継 関数として動作する.本RTEGENでは,効率的な実装関数の提供による最適化を行わない
【nrte_sws_0041】.
マッピング先の生成関数の引数
生成関数は,APIマッピングと同じ順序で同じ引数を取る【rte_sws_1153】.
3.1.5.3 関数の省略
ジェネレーションフェーズのAPIマッピングを使用すると,関数を使用せず,マクロまたはインラ イン関数でのRTE/SCHM APIを実装することが可能になる.
APIマッピングは関数を使用せず,マクロのみのRTE/SCHM API実装を提供してもよい
【rte_sws_a_0045】.本RTEGENでは,マクロのみのRTE/SCHM API実装を提供しない
ン関数実装を提供する【nrte_sws_0273】.
RTE API 条件1 条件2 インライン化
有無
Rte_Write 実現方式 RTE内部バッファ
の参照/更新のみで 高速化の効果が高い (※)
ポートAPIオプショ ン(PortAPIOption)の アドレス取得有効 (enableTakeAddress)
true ×
Rte_Read false ○
Rte_Invalidate
上記以外 - ×
Rte_Send - - ×
Rte_Receive - - ×
Rte_Call SW-C間の
連携パターン
パーティション内連 携
ポートAPIオプショ ン(PortAPIOption)の アドレス取得有効 (enableTakeAddress)
true ×
パーティション間連 携(コア内),かつ,
クライアント(信頼 パーティション)/
サーバ(信頼パーテ ィション)
false ○
上記以外 - ×
Rte_IrvRead - - ○
Rte_IrvWrite - - ○
Rte_Enter - - ○
Rte_Exit - - ○
(※) 高速化の効果が高い実現方式の具体的な選択条件は実装定義とする【nrte_sws_0274】.
関数を使用しないAPIマッピングの生成例
ポートp1のデータ要素aに対するRte_Sendの場合,ジェネレーションフェーズのAPIマッピング は以下のように記述できる.
#define Rte_Send_p1_a(s, a) (<var> = (a), RTE_E_OK)
ここで,<var>は,送信側-受信側間の連携のために,RTEが生成するバッファのシンボル名であ る.
3.1.5.4 API命名規則
SW-Cはポート経由でその他のSW-C,およびBSWMと連携を行うため,RTE API名は以下を組み 合わせた名前となる【rte_sws_a_0051】.
・ APIのルート名(Rte_Writeであれば,Write).
・ APIが動作する箇所(以下,APIアクセスポイント).
ポート経由で動作するAPIの場合,APIアクセスポイントはポート名を含む.
S/Rインタフェースは複数のデータ要素,C/Sインタフェースは複数のオペレーションをサポートす る.そのためRTE APIは,APIアクセスポイント上のデータ要素名やオペレーション名を含むことに よって,ポート上のどのデータ要素,もしくはオペレーションにアクセスするかを示す.
またRTE APIは,RTEの名前空間内に含まれるため,シンボル名は接頭辞"Rte_"で始まる.
3.1.5.5 API引数
API引数は以下のいずれかに分類される.
API引数の分類 内容
IN引数 APIへの入力引数.API関数により内容が参照される.
OUT引数 APIの処理結果の出力引数.API関数により内容が更新される.
INOUT引数 APIへの入力,および処理結果の出力の両方に使用する引数.API関数
により内容が参照,および更新される.
"In"引数の値の引き渡し方法
IN引数の値の引き渡し方法は以下の通りである.const修飾子のセマンティクスはP2CONSTマク ロの仕様に従う.
実装データ型 値の引き渡し方法 const修飾子付与有無 プリミティブ実装
データ型
値渡し【rte_sws_1017】 ×
構造体実装データ型 参照渡し【rte_sws_1018】 ○【rte_sws_7086】
共用体実装データ型 参照渡し〔rte_sws_1018〕 ○〔rte_sws_7086〕
配列実装データ型 参照渡し(配列表現)【rte_sws_5107】 ○〔rte_sws_7086〕
ポインタ実装 データ型
値渡し【rte_sws_7661】 ×
実装データ型 値の引き渡し方法 プリミティブ実装
データ型
参照渡し【rte_sws_1019】
構造体実装データ型 参照渡し【rte_sws_7082】
共用体実装データ型 参照渡し〔rte_sws_7082〕
配列実装データ型 参照渡し(配列表現)【rte_sws_5108】
ポインタ実装 データ型
参照渡し【rte_sws_7083】
再定義実装データ型 再定義実装データ型が参照する実装データ型の型に従う
〔rte_sws_7084〕
"In/Out"引数への参照先の引き渡し方法
INOUT引数の値の引き渡し方法は以下の通りである.
実装データ型 値の引き渡し方法 プリミティブ実装
データ型
参照渡し【rte_sws_1020】
構造体実装データ型 参照渡し〔rte_sws_1020〕
共用体実装データ型 参照渡し〔rte_sws_1020〕
配列実装データ型 参照渡し(配列表現)【rte_sws_5109】
再定義実装データ型 再定義実装データ型が参照する実装データ型の型に従う
〔rte_sws_7084〕
3.1.5.6 API返り値
APIのシグネチャに返り値(<return>)がある場合,RTEGENはデータプロトタイプ(DataPrototype) の実装データ型(ImplementationDataType)に従って,返り値の型を決めなけれなばならない
【rte_sws_7069】.
返り値の型と返す値は以下の通りである.
実装データ型 返り値の型 返す値
プリミティブ実装 データ型
実装データ型
(ImplementationDataType)のショ ートネーム【rte_sws_7070】
データプロトタイプ (DataPrototype)の値
〔rte_sws_7070〕
再定義実装データ型 再定義実装データ型が参照する実装データ型の型に従う
【rte_sws_7074】
3.1.5.7 エラー処理
RTEは,以下の2つのエラーを扱う.
エラー分類 内容
通信基盤エラー 資源獲得の失敗,もしくは不当な入力パラメータによって発生する エラー.このエラーは通信の失敗時等にBSWM,もしくはハードウ ェアで発生する.
アプリケーションエラー SW-Cによって通知されるエラー.
通信基盤エラーとアプリケーションエラーのどちらであるかは,SW-Cから識別可能である.
RTEは以下の契機で発生したアプリケーションエラーを扱うことができる.
・ C/S連携におけるサーバランナブルの返り値.
・ データセマンティクスのS/R連携におけるデータ無効化.
RTEでは,エラーおよび状態に関する情報はStd_ReturnType型により指定する.
RTE APIの呼び出しにおいて検出したエラーはAPIの返り値で呼び出し側に通知する.RTEは,エ
ラー状態(エラーなし状態を含む)を,RTE APIの返り値としてのみSW-Cに渡す【rte_sws_1034】.
あるRTE APIの呼び出しは通信サービスで非同期に動作する場合がある.その場合,APIからの返
り値はAPI呼出し中に検出したエラーのみを示す.API呼び出し完了後に検出したエラーは別のAPI により通知する.