このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
MISRA C:2012 Dir 4.3
Assembly language shall be encapsulated and isolated
説明
命令の定義
Assembly language shall be encapsulated and isolated 1 .
根拠
アセンブリ言語のカプセル化は以下の理由で利点があります。
C ソース ファイル内でアセンブリ命令をカプセル化すると、C とアセンブリ間の境界が明確に示され、コードの可読性が向上。
カプセル化したマクロや関数の名前とドキュメンテーションによるアセンブリ言語の目的の明確化。
特定の目的に対するアセンブリ言語のすべての使用によりカプセル化の共有を可能にし、保守性が向上。
異なるターゲットや静的解析の目的に対しアセンブリ言語の代用が容易。
Polyspace 実装
アセンブリ言語コードがカプセル化せずに使用されている場合、Polyspace® はこのルールの違反を報告します。次のようにアセンブリ コードがカプセル化されている場合は違反になりません。
アセンブリ言語関数。次のコードについて考えます。
関数asm int h(int tt) //Compliant { % reg val; mtmsr val; return 3; }; void f(void) { int x; x = h(3); }
h()
は、アセンブリ コードをカプセル化する関数asm
として宣言されています。Polyspace は違反を報告しません。#pragma
命令。たとえば、このコードでは次のようになります。#pragma inline_asm(h) int h(int tt) //Compliant { % reg val; mtmsr val; return 3; }; void f(void) { int x; x = h(3); }
#inline_asm
プラグマは、関数h()
をアセンブリ言語関数として指定します。Polyspace は違反を報告しません。マクロ。次に例を示します。
マクロ#define FUNC_H\ asm\ {\ % reg val; \ mtmsr val;\ return 3; \ }; \ void f(void) { int x; x = FUNC_H(3); }
FUNC_H
はアセンブリ コードをカプセル化します。Polyspace は違反を報告しません。Polyspace 解析中にコマンド ラインでオプション[プリプロセッサ定義] (-D)
を使用して、このようなマクロを定義することもできます。
トラブルシューティング
ルール違反を想定していてもその違反が表示されない場合、コーディング規約違反が想定どおりに表示されない理由の診断を参照します。
例
チェック情報
グループ: Code design |
カテゴリ: 必要 |
AGC カテゴリ: 必要 |
バージョン履歴
R2014b で導入
1 All MISRA coding rules and directives are © Copyright The MISRA Consortium Limited 2021.
The MISRA coding standards referenced in the Polyspace Bug Finder™ documentation are from the following MISRA standards:
MISRA C:2004
MISRA C:2012
MISRA C:2023
MISRA C++:2008
MISRA C++:2023
MISRA and MISRA C are registered trademarks of The MISRA Consortium Limited 2021.