Не совсем на то же -- в основной программе можно вычисление этой булевой переменной вынести за секцию с запрещением прерывания. Я приводил пример выше, и по ссылке тоже так рекомендуют... Плюс к тому же не требуется выносить в критические секции все обращения к переменной CWB. Да, это будет всего несколько десятков циклов процессора, но всё же...
Ещё, если вычисление флажка делать в подпрограмме прерывания, то он будет вычисляться каждый полуцикл, а если в основной программе -- то только перед записью в буфер, и в случае "паузы" он вычисляться не будет... А в остальном -- да, различия минимальны и это дело вкуса, но мне почему-то больше нравится второй вариант.
Как? Заменить на millis()/micros() -- в данном случае это неимоверно усложнит программу... Честно -- я не представляю, как это сделать. Можно пример кода, или ссылку на то, как можно замедлить (синхронизировать) поток записи без применения delay() или другого подобного цикла ожидания?
- - - Добавлено - - -
Безусловно да, и в худшем случае импульс будет удлинён на время исполнения кода внутри секции с запретом прерывания, но при частоте процессора в 16Мгц, задержка на десяток циклов будет пренебрежительно мала. Хотя, это не избавляет от необходимости сокращения до минимума кода, исполняемого с запретом прерываний.





Ответить с цитированием
