16+
Воскресенье
8 декабря
Вход |Карта сайта |Upload |codebook | PARTS

 О смысле всего сущего 0xFF

 Средства и методы разработки

 Мобильная и беспроводная связь

 Блошиный рынок Объявления

caxapa

Микроконтроллеры ARM 

AVR PIC MSP PLD,FPGA,DSP 

Кибернетика Технологии 

Схемы, платы, компоненты 

ARM-контроллеры

 
Новая темаПравила РегистрацияСтатистика Архив
Вернуться в конференциюТопик полностью
evgeniy1294  (10.08.2019 12:49 - 10.08.2019 12:55) , в ответ на В качестве обработчика прерывания Hard Fault автор: AlexG
Хотя бы так: 
#ifdef __GNUC__
  #ifdef __clang__
    void isr::HardFault[[clang::optnone]]()
  #else 
    void isr::HardFault[[gnu::optimize("-O0")]]()
  #endif
#endif
{
  volatile uint32_t out = 0;
  volatile core::ArchRegs* archregs;

  // Тут можно добавить что-нибудь типа user_fault_handler()
  // В нем можно сохранить информацию о проблеме и безопасно перезапустить девайс
  // Автоматическая обработка
  //if (user_fault_handler()) return;

  // Ручная обработка
  // Read fault information
  shcsr.all = *(uint32_t*)(0xe000'ed24);
  hfsr.all  = *(uint32_t*)(0xe000'ed2c);
  mfsr.all  = *(uint8_t* )(0xe000'ed28);
  bfsr.all  = *(uint8_t* )(0xe000'ed29);
  ufsr.all  = *(uint16_t*)(0xe000'ed2a);
  mmar      = *(uint32_t*)(0xe000'ed34);
  bfar      = *(uint32_t*)(0xe000'ed38);

  // Halt execution
  // If registers indicate readable memory, change the variable value to != 0 to continue execution.
  while(out == 0)
  {
    asm("nop");
  }
  out = 0;

  // Get context pointer
  archregs  = (core::ArchRegs*)(__get_MSP()+8);  // Можно модифицировать контекст и перейти куда надо
                                                 // Например вернуться за пару команд до вылета
  // Halt execution
  // To step out of the HardFaultHandler, change the variable value to != 0.
  while(out == 0)
  {
    asm("nop");
  }

  return;
}
Главная | Карта сайта | О проекте | Проекты | Файлообменник | Регистрация | Вебмастер | RSS
Лето 7528 от сотворения мира. При использовании материалов сайта ссылка на caxapу обязательна.
MMI © MMXIX