우리가 아주 끔찍하게 싫어하는 Hardfault를 임의로 만들어 보겠습니다.
아래 코드를 넣으면 PC가 수행할 수 없는 주소로 변경되면서 Hardfault로 Jump 하게됩니다.
typedef void (*Function_Pointer)(void);
/* USER CODE END PFP */
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
/* USER CODE END 0 */
/**
* @brief The application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
/* USER CODE BEGIN 2 */
Function_Pointer Wrong_Address_Function;
Wrong_Address_Function = (Function_Pointer)(*(__IO uint32_t *)(0xFF000000));
Wrong_Address_Function();
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
Wrong_Address_Function을 실행하면 아래처럼 Hardfault Handler로 진입하게 됩니다. 물론 Wrong_Address_Function에 실행될 수 없는 Address를 asign 해주어야 합니다.
Hardfault Handler가 제대로 처리되는지 확인 할 때나 혹은 Hardfault 발생시 언스태킹을 추척하는 공부용으로 사용할 수 있을 거 같습니다.
감사합니다.
'▶ STM32 > 개발환경' 카테고리의 다른 글
STM32 와 ST-Link 연결이 안 될 경우 체크 사항 (0) | 2024.02.01 |
---|---|
STM32CubeAI를 이용한 XOR 게이트 모델 (0) | 2024.01.10 |
STM32CubeIDE Terminal Console (0) | 2023.12.16 |
IAR EWARM 사용자 정의 fputc()함수로 프로젝트 마이그레이션 (0) | 2023.12.08 |
STM32CubeIDE, 나의 Code를 일관성 있게 만드는 Formatter (0) | 2023.12.08 |