문제 설명
void Invalid_ISR(void)
{
/* 코드 설계 */
Uart1_Printf("Invalid_Exception: %d!\n", );
Uart1_Printf("Invalid_ISR: %d!\n", );
for(;;);
}
void MemManage_Handler(void)
{
Uart1_Printf("Memory Management Fault\n");
/* 코드 설계 */
for(;;);
}
void BusFault_Handler(void)
{
Uart1_Printf("Bus Fault\n");
/* 코드 설계 */
for(;;);
}
void UsageFault_Handler(void)
{
Uart1_Printf("Usage Fault\n");
/* 코드 설계 */
for(;;);
}
void HardFault_Handler(void)
{
Uart1_Printf("Hard Fault\n");
/* 코드 설계 */
for(;;);
}
정답 코드
void Invalid_ISR(void)
{
Uart1_Printf("Invalid_Exception: %d!\n", Macro_Extract_Area(SCB->ICSR, 0x1ff, 0));
Uart1_Printf("Invalid_ISR: %d!\n", Macro_Extract_Area(SCB->ICSR, 0x1ff, 0) - 16);
for(;;);
}
void MemManage_Handler(void)
{
Uart1_Printf("Memory Management Fault\n");
Uart1_Printf("SHCSR: 0x%.8X\n", SCB->SHCSR);
Uart1_Printf("ICSR: 0x%.8X\n", SCB->ICSR);
Uart1_Printf("CFSR: 0x%.8X\n", SCB->CFSR);
Uart1_Printf("MMFAR: 0x%.8X\n", SCB->MMFAR);
for(;;);
}
void BusFault_Handler(void)
{
Uart1_Printf("Bus Fault\n");
Uart1_Printf("SHCSR: 0x%.8X\n", SCB->SHCSR);
Uart1_Printf("ICSR: 0x%.8X\n", SCB->ICSR);
Uart1_Printf("CFSR: 0x%.8X\n", SCB->CFSR);
Uart1_Printf("BFAR: 0x%.8X\n", SCB->BFAR);
for(;;);
}
void UsageFault_Handler(void)
{
Uart1_Printf("Usage Fault\n");
Uart1_Printf("SHCSR: 0x%.8X\n", SCB->SHCSR);
Uart1_Printf("ICSR: 0x%.8X\n", SCB->ICSR);
Uart1_Printf("CFSR: 0x%.8X\n", SCB->CFSR);
for(;;);
}
void HardFault_Handler(void)
{
Uart1_Printf("Hard Fault\n");
Uart1_Printf("SHCSR: 0x%.8X\n", SCB->SHCSR);
Uart1_Printf("ICSR: 0x%.8X\n", SCB->ICSR);
Uart1_Printf("HFSR: 0x%.8X\n", SCB->HFSR);
Uart1_Printf("CFSR: 0x%.8X\n", SCB->CFSR);
Uart1_Printf("BFAR: 0x%.8X\n", SCB->BFAR);
Uart1_Printf("MMFAR: 0x%.8X\n", SCB->MMFAR);
for(;;);
}
메모
printf 내부의 \n 습관화 필요