ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
12 июня
1523951 Топик полностью
ecomp42 (10.06.2025 13:00, просмотров: 5) ответил Make_Pic на Про HardFaultHandler можно поподробнее?
Здесь надо уточнить - что понимаете под "зависанием". Чем, по вашему, МК при этом занят? 

В 99% случаев сбой в работе приводит к исключению HardFault - вызывается HardFault_Handler. Любой проект содержит default обработчик, как правило лежит где-нибудь в startup и имеет аттрибут "weak", т.е. может быть переопределен где-то в другом месте проекта без переписывания default обработчика. deafult обработчик содержит глухой цикл - т.е. МК "зависает".

Вот из startup.s:

HardFault_Handler\
                PROC
                EXPORT  HardFault_Handler         [WEAK]
                B       .
                ENDP

В другом месте свой обработчик:

extern "C" void HardFault_Handler(void)
{
	NVIC_SystemReset();
	HAL::pLed0.clear(); 
	HAL::pLed1.clear();
	HAL::pLed2.clear();
	HAL::pLed3.clear();	
	while(1)
	{
		HAL::pLed0.set(); 
		for(int i=0; i < (kLimit_10ms * 5); i++) __NOP();
		HAL::pLed0.clear(); 
		for(int i=0; i < (kLimit_10ms * 100); i++) __NOP();
		HAL::pLed2.set(); 
		for(int i=0; i < (kLimit_10ms * 5); i++) __NOP();
		HAL::pLed2.clear(); 
		for(int i=0; i < (kLimit_10ms * 100); i++) __NOP();
	}
}

Здесь модификатор extern "C" потому что определен в файле *.cpp.