[FreeRTOS] configASSERT (프로그램 오류 감지)

 프로그램이 구동 중에 갑자기 멈추는데 무엇이 문제인지 알려주지 않는 경우엔 답답하다.

이를 조금이나마 해소할 수 있는 방법을 알아보자.


FreeRTOSConfig.h 파일에서 #define configASSERT 부분을 찾아서 매크로를 수정하고,

// FreeRTOSConfig.h

...

/* Normal assert() semantics without relying on the provision of an assert.h
header file. */
/* USER CODE BEGIN 1 */
extern void vAssertCalled( const char *filename, unsigned int line );
#define configASSERT( x ) if ((x) == 0) vAssertCalled( __FILENAME__, __LINE__ )
/* USER CODE END 1 */

...


main.c 에 vAssertCalled 함수를 정의 하자.

// main.c

void vAssertCalled(const char *filename, unsigned int line)
{
	taskDISABLE_INTERRUPTS();
	printf("\n\nAssertion failed in %s:%d\n", filename, line); for(;;);
}


예제 ) Task 종료 전 vTaskDelete(NULL) 을 호출 하지 않을경우, 아래와 같은 에러 메시지를 확인 할 수 있다.

Assertion failed in port.c:202


이 블로그의 인기 게시물

Crusader Kings 3 - Converting DNA code using Portrait Editor