MISRA C:2023 Dir 4.3
説明
命令の定義
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 カテゴリ: 必要 | 
バージョン履歴
R2024a で導入
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.