HAL)
void TIM1_TRG_COM_TIM11_IRQHandler() {
__HAL_TIM_CLEAR_IT(htim, TIM_IT_UPDATE);
some_very_long_function();
}
В обработчике сбрасываю флаг и запускаю "длинную функцию"
Что произойдет?
1. Прерывание опять сработает, потом опять сработает и т.д. и у меня вылетит стек?
2. Просто начну пропускать прерывания.
Имеет ли значение, сбрасывать флаг сразу или после some_very_long_function(); ?
ну согласно ARM архитектуре, там у вас длинная функция будет прерываться действительно тем же прерыванием, затем будет вход в эту же длинную функцию, затем снова и снова и у вас упс: stack overflow произойдет по идее, но никто об этом, вероятно не скажет (ааххаха). С этим аккуратнее. исполнение может выскочить за пределы стека и гулять хрен знает где, разрушая твою программу потихоньку и словишь HardFault - кранты
в преванании вложенные вызовы не надо делать
Обсуждают сегодня