2015-04-21 4 views
1

Я хочу сделать обработку сигналов с прерываниями на Atmega328, которая может не иметь достаточного количества SRAM (2K) для хранения данных всего прогона. Это означает, что мне придется записывать часть буфера во внешнюю память, все еще собирая данные.Arduino/AVR: безопасно ли прерывать последовательные/I2C-связи

Мой вопрос заключается в том, безопасно ли иметь последовательную запись или связь I2C (например, с SD-картой), все еще вызывая прерывания. Я думаю, что сами последовательные коммуникации прерываются, поэтому это может стать проблемой. Это правда? Как насчет I2C? Если обе проблемы могут вызвать проблемы, каким будет рекомендуемый способ (если таковой имеется) сбросить буфер, все еще собирая данные?

ответ

1

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

Думает следует пересмотреть/рассмотреть следующие вопросы:

  • Вы должны быть в состоянии записывать данные быстрее внешнего ОЗУ, чем оно было приобретено -> Как быстро вы собираете данные?
  • Убедитесь, что вы провели как можно меньше времени в обработчиках прерываний
  • Следите за прерыванием голода. Приоритет может привести к тому, что ISR A не будет выполняться, если ISR B активирует чаще, чем И имеет более высокий приоритет. Отрегулируйте интервал выполнения, если это возможно.
  • Проверьте, какие последовательные данные должны быть отправлены последовательно или в короткой последовательности для соблюдения сроков. Возможно, вам придется приостановить/задержать другую обработку в течение короткого времени.
+0

Большое спасибо :-) Я сделал некоторые вычисления, и я думаю, что 2K памяти может быть достаточно. Поэтому промывка буфера может быть выполнена после записи данных. Тем не менее, эти советы придут очень кстати, если вы захотите реализовать механизм резервного копирования, который я, вероятно, сделаю ... Еще раз спасибо! – JorenHeit