작성
·
330
2
88번 line *p = v; 가 실행된 후 step 하면 UsageFault_Handler가 실행됩니다 ㅠㅠ 무엇이 문제일까요..?
답변 1
2
안녕하세요. 정연우님!
비정렬 액세스를 시도하는 경우 사용자는 HardFault 나 UsageFault 중 하나로 예외처리 함수가 실행되도록 할 수 있습니다.
아래와 같이 코드를 처리하셨다면, 88번 line *p = v; 에서 UsageFault 함수가 실행되는 것이 맞습니다. ㅎㅎ
#define CHECK_UNALIGN
#ifdef CHECK_UNALIGN
SCB->SHCSR = SCB->SHCSR | (7<<16); // 이 코드는 비정렬 액세스시 UsageFault 로 처리되도록 합니다.
SCB->CCR = SCB->CCR | (1<<3); // 이 코드는 비정렬 액세스시 오류(예외)가 발생되도록 처리해줍니다.
#endif
이번 챕터에서는 비정렬액세스라는 것이 어떤 개념인지 정도만 확인하시고, HardFault 나 UsageFault 을 포함한 예외처리에 대해서는 섹션 4. 예외처리와 하드웨어 인터럽트 에서 학습하시면 좋겠습니다.
또 궁금한 점 있으시면 질문남겨주세요 :)
아아 넵 감사합니다 ㅎㅎㅎ!!