Software/C
-
[MISRA C 2012] 정적 분석 팁 ( 계속 업데이트 )Software/C 2024. 8. 29. 14:18
Overrun / Underrun 가능 (CWE)왼쪽 값(변수)에 맞춰 형변환으로 해결 Norereturn (MISRA 2012)함수 마지막에 return; 추가로 해결 반환형이 있는 함수 사용후 대입이나 사용이 안됨 (MISRA)함수를 if문으로 감싸고 bullean 비교 수행 후 ( != 0 : MISRA 룰 if 조건문 내부는 Bollean으로 비교해야함) 빈중괄호 추가로 해결 미사용 변수 (MISRA)if문 넣어서 중괄호 추가로 해결 반환타입이 void가 아닌 함수는 사용해야함. (ex : memset)함수 리턴을 void형변환으로 해결 ex : (void)memset(src , dest); if문의 then 또는 else가 복합문이 아님 (MISRA)if문 내부를 중괄..
-
[Keyword] __interruptSoftware/C 2024. 8. 21. 09:33
InterruptInterrupt 키워드는 함수 앞에 붙여 쓰는 키워드로 해당 함수가 인터럽트 함수로 처리되는 것을 의미한다.Interrupt란 하드웨어 단에서 일어나는 이벤트 콜이라고 볼 수 있다. 폴링(Polling)이 루프를 돌며 상태를 체크해서 이벤트를 발생시키는 루틴이라면, 인터럽트는 외부에서 어떤 상황이 발생했을 때 단발성으로 이벤트를 발생시키기 때문에 정 반대의 개념이라고 볼 수 있다. 폴링의 대표적인 예가 와치독 타이머라면, 인터럽트는 대부분의 예외상황(exceptions)이 모두 인터럽트라고 볼 수 있다. 대부분의 인터럽트가 외부에서 CPU 코어에 전달되지만, CPU 내부에서 발생되는 인터럽트루틴도 존재한다. ISR (Interrupt Service Routine)인터럽트를 수행하는..
-
전처리기 #if , #ifndef , #define, #endifSoftware/C 2024. 8. 20. 16:45
#if , #else , #endif#if 조건 문장#elif 조건 문장#else 문장#endif위와 같은 형태로 사용되며 조건부 컴파일이 된다. #ifdef매크로가 정의 되어 있으면 아래를 컴파일, 안되어 있으면 컴파일하지 않는다. #ifndef , #endif헤더파일의 중복을 방지하기 위해 많이 사용되는 전처리문이다.헤더파일 맨 첫 부분에 특정 매크로를 ifndef하면 처음에는 정의되어 있지 않으니 아래 내용을 컴파일한다.ifndef 바로 아래 해당 매크로를 정의해놓으면 다음 번 이 헤더파일이 불러와 질 때는 매크로가 정의되어 있으므로 헤더파일을 다시 불러오지 않는다. 한 마디로 중복 포함을 방지하는 역할을 하는 셈이다.#ifndef __POHAM__#define __POHAM__#include..