И снова здравствуйте!
Заметил такую вещь - иногда при использовании HAL_Delay() внутри обработчика прерывания программа намертво зависает, то есть не выходит из функции никогда... С чем это может быть связано? Причем повторяется не всегда, систему не смог выявить...
HAL_Delay() проверяет значение uwTick, а это значение инкрементируется в прерывании SysTick.
Поэтому выходит так, что в прерывании программа останавливается на проверке uwTick, а это значение не меняется, так как программа не уходит в прерывание по SysTick. Странно, что иногда это срабатывает 🙄
Срабатывает, если прерывание, из которого вызывается HAL_Delay(), по приоритету ниже прерывания SysTick. А так в целом @Raf все верно объяснил.
Срабатывает, если прерывание, из которого вызывается HAL_Delay(), по приоритету ниже прерывания SysTick. А так в целом @Raf все верно объяснил.
Поигрался с приоритетами прерываний... Да, именно так дело и обстоит. Получается надо у всех прерываний делать приоритет ниже, чем у SysTick?
Поигрался с приоритетами прерываний... Да, именно так дело и обстоит. Получается надо у всех прерываний делать приоритет ниже, чем у SysTick?
С точки зрения HAL_Delay() - да, именно так. Глобально - лучше архитектуру программы выстраивать так, чтобы в прерывании проводить минимум времени, тем более не использовать такие вот задержки.
@aveal да, Вы правы... Буду пересматривать логику работы, спасибо)