STM32H723. Использую таймер №1 для генерации прерывания по перезагрузке. В колбеке делаю довольно объёмные вычисления, по результатам которых выводится сигнал. Не могу сообразить как отконтролировать что вычисления укладываются в генерируемый таймером период. Сейчас сделал так. В "void TIM1_UP_IRQHandler(void)" взвожу флаг, а в колбеке перед началом вычислений его сбрасываю и в конце вычисления проверяю не перешёл ли он в состояние 1. Если перешёл, то посылаю в ПК соответствующее сообщение. Реально в "void TIM1_UP_IRQHandler(void)" флаг взводиться, а в колбеке в конце вычислений он всегда в состоянии 0 и соответственно в ПК ничего не вижу, в то время как частота сигнала явно меньше требуемой. Если уменьшать вычислительную нагрузку, то частота приближается к ожидаемой. Повторю вопрос: "Как отконтролировать что вычисления укладываются в генерируемый таймером период?"
Стандартная схема: перед началом вычислений флаг = 0, по окончанию вычислений флаг = 1. Перед тем, как перевести флаг в 0 перед началом вычислений проверять текущее значение флага, если 0 - предыдущие вычисления не завершены.
А вообще, конечно, объемные операции нужно выносить из прерывания.
Ещё немного подёргался в прежнем норотиве, но ничего путного не получил - в основном зависает. Вывел из под прерывания и программа заработала адекватно. Как понимаю, что, если под прерыванием период выполнения программы меняется и может выйти из допустимого, то отконролировать эту ситуацию и предотвратить нежелательные последствия, если и можно, то уже не используя функции Хала.
@yuriy По сути если все это происходит в прерывании, то получаем глобальную проблему, связанную с выполнением прерываний в целом, на тот период, что программа висит с расчетами. Это уже ведет к разнообразным, иногда сложно прогнозируемым, последствиям.
То есть я веду к тому, что сам факт выполнения длительных операций внутри прерывания - это уже проблема сама по себе, даже если расчеты будут успевать выполниться за отведенный им период.
Понятно