Kod uzun degilse bakabilir miyiz ? Cok sebebi olabilir ama interruptli bir calisma ise yaris durumuna giriyor olabilir.
Asagida bulunan kod exception i handle etmektedir ve gcc ile yazilmistir. HardFault sizin hata interruptiniz olmalidir.
pc -> sizin hata aldiginiz programin adresini
lr -> sizin hata aldiginiz parcayi cagiran yerin adresini gostermektedir
Bu degerleri disari atabilirseniz. Nerede hata aldiginizi bulabilirsiniz.
struct cm0_frame_s
{
unsigned long int cf_r0,
cf_r1,
cf_r2,
cf_r3,
cf_r12,
cf_lr,
cf_pc;
};
void exception_handler(struct cm0_frame_s *fr_ptr)
{
volatile uint32_t lr __attribute__((unused)), pc __attribute__((unused));
lr = fr_ptr -> cf_lr;
pc = fr_ptr -> cf_pc;
}
void HardFault_Handler(void)
{
asm("MOVS R0, #4");
asm("MOVS R1, LR");
asm("TST R0,R1");
asm("BNE Use_PSP");
asm("Use_MSP:MRS R0, MSP");
asm("Use_PSP:MRS R0, PSP");
asm("B exception_handler");
}