Top.Mail.Ru
Уведомления
Очистить все

[Решено] HAL_Delay() зависает в прерывании

Warhammer
(@warhammer)
Active Member

И снова здравствуйте!

Заметил такую вещь - иногда при использовании HAL_Delay() внутри обработчика прерывания программа намертво зависает, то есть не выходит из функции никогда... С чем это может быть связано? Причем повторяется не всегда, систему не смог выявить...

Цитата
Topic starter Размещено : 24.07.2021 21:34
Тэги темы
Raf
 Raf
(@raf)
Estimable Member

HAL_Delay() проверяет значение uwTick, а это значение инкрементируется в прерывании SysTick.

Поэтому выходит так, что в прерывании программа останавливается на проверке uwTick, а это значение не меняется, так как программа не уходит в прерывание по SysTick. Странно, что иногда это срабатывает ? 

ОтветитьЦитата
Размещено : 24.07.2021 23:28
Aveal
(@aveal)
Illustrious Member Admin

Срабатывает, если прерывание, из которого вызывается HAL_Delay(), по приоритету ниже прерывания SysTick. А так в целом @Raf все верно объяснил.

ОтветитьЦитата
Размещено : 25.07.2021 12:09
Warhammer
(@warhammer)
Active Member
От: @aveal

Срабатывает, если прерывание, из которого вызывается HAL_Delay(), по приоритету ниже прерывания SysTick. А так в целом @Raf все верно объяснил.

Поигрался с приоритетами прерываний... Да, именно так дело и обстоит. Получается надо у всех прерываний делать приоритет ниже, чем у SysTick?

 

ОтветитьЦитата
Topic starter Размещено : 25.07.2021 19:59
Aveal
(@aveal)
Illustrious Member Admin
От: @warhammer

Поигрался с приоритетами прерываний... Да, именно так дело и обстоит. Получается надо у всех прерываний делать приоритет ниже, чем у SysTick?

С точки зрения HAL_Delay() - да, именно так. Глобально - лучше архитектуру программы выстраивать так, чтобы в прерывании проводить минимум времени, тем более не использовать такие вот задержки.

ОтветитьЦитата
Размещено : 29.07.2021 11:14
Warhammer
(@warhammer)
Active Member

@aveal да, Вы правы... Буду пересматривать логику работы, спасибо)

ОтветитьЦитата
Topic starter Размещено : 29.07.2021 12:03
Поделиться: