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

Как понять успевают ли вычисления за таймером

(@yuriy)
Level 3

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

Цитата
Создатель темы Размещено : 23.02.2025 00:20
Aveal
(@aveal)
Top level Admin

Стандартная схема: перед началом вычислений флаг = 0, по окончанию вычислений флаг = 1. Перед тем, как перевести флаг в 0 перед началом вычислений проверять текущее значение флага, если 0 - предыдущие вычисления не завершены.

А вообще, конечно, объемные операции нужно выносить из прерывания.

ОтветитьЦитата
Размещено : 24.02.2025 11:44
(@yuriy)
Level 3

Ещё немного подёргался в прежнем норотиве, но ничего путного не получил - в основном зависает. Вывел из под прерывания и программа заработала адекватно. Как понимаю, что, если под прерыванием период выполнения программы меняется и может выйти из допустимого, то отконролировать эту ситуацию и предотвратить нежелательные последствия, если и можно, то уже не используя функции Хала.

ОтветитьЦитата
Создатель темы Размещено : 24.02.2025 16:19
Aveal
(@aveal)
Top level Admin

@yuriy По сути если все это происходит в прерывании, то получаем глобальную проблему, связанную с выполнением прерываний в целом, на тот период, что программа висит с расчетами. Это уже ведет к разнообразным, иногда сложно прогнозируемым, последствиям.

То есть я веду к тому, что сам факт выполнения длительных операций внутри прерывания - это уже проблема сама по себе, даже если расчеты будут успевать выполниться за отведенный им период.

ОтветитьЦитата
Размещено : 24.02.2025 16:31
(@yuriy)
Level 3

Понятно

ОтветитьЦитата
Создатель темы Размещено : 24.02.2025 23:57
Поделиться: