MISRA C:2021 Dir-4.3 Assembly language shall be encapsulated and isolated
MISRA-C 2021. Dir 4.3 when a static function contains only variable declaration, asm and return statement
This function contains a mix of in-line assembler statements and C statements.
코드 라인에 C 코드와 어셈블리어가 함께 포함되어 있을 때 발생한다.
HELIX-QAC.QAC 3006
In-line assembler code has been encountered in a context where it is interspersed with C statements.
Message 3006 will be generated on any function which is defined with a mixture of assembler code and executable C statements, unless the assembler code is encapsulated in a macro.
예시)
* 정상적인 구문
#define ASM asm { ... }
extern int sia;
extern int sib;
extern void foo1(void)
{
int x;
ASM;
asm ( Some assembler code );
return;
}
* 3006 에러예시들
extern void foo2(void) /* Message 3006 */
{
int x = 100 ;
asm( Some assembler code );
return;
}
extern void foo3(void) /* Message 3006 */
{
char *msg = "hello";
asm { Some assembler code }
return;
}
extern void foo4(void) /* Message 3006 */
{
__asm { Some assembler code }
sia = sib;
return;
}
extern void foo5(void) /* Message 3006 */
{
asm ( Some assembler code );
sia += sib;
return;
}
* 해결방법 : C언어 사이에 에셈블리 코드가 있는 코드들은 별도의 함수 등으로 분리하고, 함수를 호출하는 방식으로 수정해야 한다.