ptr128 писал(а):AQ29 писал(а):Следящая схема, в которой МК, например, раз в секунду по прерыванию таймера вырабатывает управляющий сигнал. А в перерывах МК выполняет какую-нибудь программу, где необходима задержка, скажем, на 10 мсек.
Налицо ошибка проектирования. Ведь никто не мешал таймером всегда считать промежутки по 1мс, обеспечивая каждые тысячу отсчетов (раз в секунду) обработку управляющего сигнала. Зато любой процесс в МК имел бы возможность выполнить паузу любой продолжительностью, кратной 1мс.
Не вижу ошибки проектирования. Более того, на мой взгляд, моё решение для такой задачи лучше. У меня во второй задаче элементарно сделать любую задержку независимо от таймера. Это удобно. Ведь может потребоваться задержка, скажем, 131 мксек или 217 мксек, может потребоваться варьировать задержкой по ситуации. В первой задаче таймер может быть задействован под другие задачи, например, ШИМ, и т. д. В моём решении это просто делается.
ptr128 писал(а):AQ29 писал(а):
В большинстве случаев в программе обработки прерывания только устанавливаю программный флаг.
Очень упрощенный подход. Кольцевой буфер сообщений гибче и надежней.
Вообще-то простые решения часто бывают надёжней.
Про кольцевой буфер надо ознакомиться, возможно, включу в свой арсенал.
ptr128 писал(а):
AQ29 писал(а):
Для точной задержки прерывание можно запретить, тогда задержка с циклами будет выполняться с точностью до одного такта.
Вот именно про это я и говорю! Что точную задержку циклом Вы сделаете только ценой монополии на CPU, что ни в какие ворота не лезет.
На мой взгляд, в некоторые «ворота вполне лезет».
Скажем, пример из практики. Периферийный МК для управления силовым ключом вырабатывает пачку импульсов. Длительность импульса жёстко определена. Длительность времени между импульсами пачки варьируется для подстройки частоты на резонанс.
Вот во время пачки и делаю запрет на прерывания.
А в паузах между пачками разрешаются прерывания и производится обмен данными с центральным МК и другие прочие дела.
scorpi_0n писал(а):Соглашусь с АРВ. Если нужны мгновенные реакции на внешние события или задержки с точностью до такта, то АВР действительно не та платформа. Задержки на циклах имеют право на жизнь только в одном случае - начальная инициализация каких-то устройств.
Не замечал, что АВР медленно реагирует на внешние события. И с задержками с точностью до такта не встречал особых проблем.
Как и у ARV, у меня в проектах задержки на циклах - большинство, возможно, даже более 80 %, правда, самопальных, в АБ нет библиотек.
ptr128 писал(а):
Можно сравнивать эффективность нескольких вариантов решения. Делается табличка достоинств и недостатков каждого решения. Варианты решения в заголовках столбцов. Анализируемые характеристики решений - в строках. Проставляем баллы по каждому пункту, во всех колонках, в зависимости от важности этой характеристики в данном случае. По сумме баллов определяем, какое решение эффективней.
А баллы как выбираются, согласно личным впечатлениям или по какой-нибудь методике?