В чем разница между обработчиком IRQ и функцией обратного вызова? - PullRequest
0 голосов
/ 05 марта 2020

Мы используем STM32F429I и пытаемся использовать таймеры (TIM2 и TIM5) разными способами. В нашем коде после включения таймеров и вызова;

HAL_TIM_Base_Start_IT(&htim5);

Мы можем обновить наши переменные, вызвав функцию TIM5_IRQHandler . Мы заметили, что тот же процесс был выполнен функцией HAL_TIM_PeriodElapsedCallback .

Итак, наш вопрос: есть ли разница между этими двумя функциями?

Ответы [ 2 ]

3 голосов
/ 05 марта 2020

В структуре STM32Cube TIM5_IRQHandler() вызывает HAL_TIM_IRQHandler(), который вызывает HAL_TIM_PeriodElapsedCallback() (среди ряда других обратных вызовов событий).

HAL_TIM_PeriodElapsedCallback() имеет "слабую связь", что означает отсутствие действий По умолчанию определено, что вы можете переопределить, определив свою собственную реализацию.

Недостаток использования HAL таким образом заключается в том, что он добавляет накладные расходы к обработчику прерываний и потому что один и тот же HAL_TIM_PeriodElapsedCallback() вызывается для всех таймеров, дополнительный код необходим для определения того, какой таймер вызвал обратный вызов, если вам нужно обрабатывать более одного таймера. Когда такие таймеры предназначены для совершенно разных целей, это может привести к плохой конструкции с точки зрения низкой связи / высокой когезии.

Там, где абсолютная детерминированность c поведение и минимальное время прерывания являются критическими, вы Возможно, вы захотите избежать этой «встроенной для комфорта» инфраструктуры и обработать прерывание таймера напрямую. Как правило, это также приведет к лучшему дизайну (более низкая связь / большая когезия).

Если вы широко используете платформы и промежуточное ПО STM32Cube и CMSIS, то обход HAL может вызвать проблемы при использовании этой кодовой базы, однако .

1 голос
/ 05 марта 2020

Да, между ними есть различия. TIM5_IRQHandler() обрабатывает все прерывания, вызванные htim5. Например, есть обратные вызовы, такие как половина завершения, импульс ШИМ завершен, обратные вызовы ошибки таймера и т. Д. c. для этих различных событий таймера.

...