主要内容
MISRA C:2012 Dir 4.3
Assembly language shall be encapsulated and isolated
描述
指令定义
Assembly language shall be encapsulated and isolated.
理由
封装汇编语言是有益的,因为:
将汇编指令封装在 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
pragma 将函数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)
选项来定义此类宏。
故障排除
如果您预计存在违规,但未看到该违规,请参阅Diagnose Why Coding Standard Violations Do Not Appear as Expected。
示例
检查信息
组:代码设计 |
类别:必需 |
AGC 类别:必需 |
版本历史记录
在 R2014b 中推出