Где ставить расчеты?Внутренний обработчик прерываний или основной петли?(Встроенное приложение в реальном времени)

StackOverflow https://stackoverflow.com//questions/9609882

Вопрос

Я разрабатываю встроенное приложение для управления двигателем, и у меня есть сомнения в том, что, чтобы с некоторыми расчетами, которые будут преобразовывать числовые значения ADC в подписанные физические значения (AMP).

Должен ли я сделать расчеты в обработчике прерывания или я должен просто использовать обработчик для установки глобального флага и сделать расчеты в основной цикл, когда флаг был установлен?

Спасибо заранее.

Это было полезно?

Решение

Нет ни одного размера - все это отвечает на это.Это зависит от требований вашего времени, существующую нагрузку на прерывание и т. Д.

Если это довольно простое размножение или что-то, то я просто сделал это в прерывании и двигаться дальше.

Просто убедитесь, что вы знаете, что вы делаете, и не тратьте больше времени в прерывании, чем вы должны.

Другие советы

Малая работа, которую вы можете сделать в вашем обработчике прерываний, тем лучше.Прямо сейчас это может быть не имеет большого значения для вашего приложения, но придет время, когда ваша система нагрузки выше, и вы не захотите удерживать другие задачи для более высоких приоритетов для обработки прерываний.Возможно, вы захотите посмотреть в семафоры и правильную многопоточье, а не просто устанавливать глобальные флаги.

Это зависит от того, что вы хотите сделать с значениями ADC, и как быстро вам нужно сделать. Если вам нужно принять несколько критически важных действий на основе ценностей АЦП, вы должны иметь дело с этим в прерывании. Однако, если это так, чтобы сэкономить за счет сначала расчета «реального» аналогового значения из отсчетов ADC, вы должны просто выразить критические пороги с точки зрения количества акций ACC.

Например, если ваши выходные данные ADC 8 подсчитывают на вольт, и вам нужно стрелять в аварийную остановку, если отчеты ADC больше, чем 1,5 вольт, вы записываете свой код прерывания, чтобы выстрелить e-Stop на 12 счетчиков. Затем вы сможете по-прежнему пройти ADC отсчитываться в основной цикл для перевода в удобные устройства для целей интерфейса пользователя и т. Д.

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

Один, чтобы подумать о соответствии с данными.Если вы получаете несколько связанных значений из ADC (позиции, напряжения, тока и т. Д.), Тогда вы можете сделать что-то, чтобы убедиться, что вы работаете с последовательным набором.Это может означать, что фоновое обновление лучше, чем обновление в ISR.Даже согласованность одного чтения для данного прохода алгоритма может быть важно.Рассмотрим этот фон код.

  delta = data-lastData;
  //ISR could update data here.
  lastData = data;
  something = K1* data + K2 * delta;  //this may be wrong now
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top