保守的な仮定を使用した AUTOSAR コードに対する Polyspace の実行
このトピックでは、Polyspace でのコンポーネント ベースの AUTOSAR コード検証方法について説明します。統合解析方法については、Polyspace で AUTOSAR コードのコンポーネント ベースの解析と統合解析のどちらかを選択するを参照してください。
AUTOSAR 対応の Polyspace® は、AUTOSAR ソフトウェア コンポーネントのコード実装に静的プログラム解析を実行します。解析では、潜在的なランタイム エラーや AUTOSAR XML (ARXML) 仕様との不一致を調査します。
既定の解析では、ランナブルへのポインター引数および Rte_ 関数から返されるポインターは NULL ではないと仮定します。たとえば、以下の例では、解析では aInput、aOutput および aOut2 は NULL ではないと仮定します。これらの引数を NULL_PTR と比較する条件は常に false として評価され、結果ではグレーで表示されます。ここで、NULL_PTR は NULL を表すマクロです。
iOperations_ApplicationError foo(
Rte_Instance const self,
app_Array_2_n320to320ConstRef aInput,
app_Array_2_n320to320Ref aOutput,
app_Enum001Ref aOut2)
{
iOperations_ApplicationError rc = E_NOT_OK;
if (aInput==NULL_PTR) {
rc = RTE_E_iOperations_ERR001;
} else if (aOutput==NULL_PTR) {
rc = 43;
} else {
unsigned int i=0;
for (;i<2U;++i) {
aOutput[1-i] = aInput[i];
}
if (aOut2!=NULL_PTR) {
*aOut2 = 1234;
rc = RTE_E_OK;
}
}
return rc;
}ランナブルへのポインター引数や Rte_ 関数から返されるポインターが NULL 値になる可能性がある、保守的な解析を実行する必要がある場合があります。保守的な解析は、ランナブル内に NULL 値のポインターが存在する可能性を排除したかどうかを判断するのに役立ちます。
外部ソースからの NULL 値のポインターが存在する可能性を容認するには、マクロ RTE_PTR2USERCODE_SAFE の定義を解除します。マクロの定義を解除するには、解析の実行方法に応じて、以下の方法のいずれかを使用します。
Polyspace ユーザー インターフェイスで、マクロはオプション
[プリプロセッサ定義] (-D)によって定義されます。マクロをこのオプションから削除して、オプション[無効なプリプロセッサ定義] (-U)に移動します。コマンド ラインで
polyspace-autosarを実行する場合は、オプション-Uを使用してマクロの定義を解除します。
マクロを無効にすると、ランナブルへのポインターの引数を NULL と比較する際に到達不能コードが表示されなくなります。このマクロの効果を確認するには、 に含まれるデモ ファイルに対して保守的な Polyspace 解析を実行します。polyspaceroot\polyspace\examples\doc_cxx\polyspace_autosar