본문 바로가기
개발

MISRA C:2021 Dir-4.3 Assembly language shall be encapsulated and isolated

by I!i어★떤☆날★에Ι!i 2022. 8. 17.
반응형

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언어 사이에 에셈블리 코드가 있는 코드들은 별도의 함수 등으로 분리하고, 함수를 호출하는 방식으로 수정해야 한다.

반응형

댓글