Home > Study > C Language > ARM System Programming > [ex36] BASIC_HANDLER

[ex36] BASIC_HANDLER
Study Language

문제 설명


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 습관화 필요