Цитата Сообщение от svofski Посмотреть сообщение
Увеличит на то же количество инструкций, которое эта же операция займет внутри секции с запрещенными прерываниями в основном цикле. И это пренебрежимо малое время в любом случае.
Не совсем на то же -- в основной программе можно вычисление этой булевой переменной вынести за секцию с запрещением прерывания. Я приводил пример выше, и по ссылке тоже так рекомендуют... Плюс к тому же не требуется выносить в критические секции все обращения к переменной CWB. Да, это будет всего несколько десятков циклов процессора, но всё же...

Цитата Сообщение от svofski Посмотреть сообщение
Если вычисление флажка делать в прерывании, то операция записи должна быть в критической секции, чтобы флажок не вычислился с непонятным значением CWB. Если проверка условия c копированием итд в основном цикле, то операция копирования должна быть в критической секции. В принципе это дело вкуса.
Ещё, если вычисление флажка делать в подпрограмме прерывания, то он будет вычисляться каждый полуцикл, а если в основной программе -- то только перед записью в буфер, и в случае "паузы" он вычисляться не будет... А в остальном -- да, различия минимальны и это дело вкуса, но мне почему-то больше нравится второй вариант.

Цитата Сообщение от svofski Посмотреть сообщение
То есть, если есть желание разбираться, то начинать надо с убирания delay().
Как? Заменить на millis()/micros() -- в данном случае это неимоверно усложнит программу... Честно -- я не представляю, как это сделать. Можно пример кода, или ссылку на то, как можно замедлить (синхронизировать) поток записи без применения delay() или другого подобного цикла ожидания?

- - - Добавлено - - -

Цитата Сообщение от KTSerg Посмотреть сообщение
А запрет прерывания не приведёт к потере прерывания и соответственно удлинениям импульсов ?
Безусловно да, и в худшем случае импульс будет удлинён на время исполнения кода внутри секции с запретом прерывания, но при частоте процессора в 16Мгц, задержка на десяток циклов будет пренебрежительно мала. Хотя, это не избавляет от необходимости сокращения до минимума кода, исполняемого с запретом прерываний.