[uquote="КРАМ",url="/forum/viewtopic.php?p=4777973#p4777973"]Это зависит от сложности алгоритма. Помигать LED-ом или прочитать клаву - это суперпримитивные задачи.
Макросы АСМа - это беспонтовый костыль. Чисто листинг сократить.[/uquote]
Вообще-то там не макрос, а Sub с параметрами.
Дело не только в сокращении листинга. Написать и прочитать 6 строк гораздо проще, чем, например, 500 строк у ТС.
[uquote="КРАМ",url="/forum/viewtopic.php?p=4777973#p4777973"]В том и дело, что простые. Текст понятен до уровня его исполнения. Алгоритм в нем вообще не читается.
А под читабельностью понимается не код, а алгоритм.[/uquote]
Скорее всего, у нас разные алгоритмы, точнее, концепция программы.
Пишу просто, МК большей частью последовательно выполняет текущие задачи.
МК работает быстро, тем более на ассемблере, успевает.
В свободном окне - обработка флагов прерываний, опрос кнопок.
В эту концепцию предложенный код хорошо укладывается.
Не нужно никаких операционных систем с их проблемами.
У такого метода есть существенные преимущества.
[uquote="КРАМ",url="/forum/viewtopic.php?p=4777973#p4777973"]

Феерично. Си не знает, но точно знает, что читаемость на ассемблере будет лучше...[/uquote]
Вообще-то у меня было слово «пожалуй», а не «точно».
[uquote="КРАМ",url="/forum/viewtopic.php?p=4777973#p4777973"]Во первых, уже обсуждали как выглядит защита от дребезга. "Читать три раза подряд с заданным интервалом" - совершенно пустое мероприятие. Мало того, оно еще и блокирующее или требует специально выделенного таймера.[/uquote]
Почему пустое мероприятие? Много лет пользуюсь – никаких проблем. Если по условии задачи надо быстро выскочить, есть такая команда с флагом, по которому программа выскочит.
[uquote="КРАМ",url="/forum/viewtopic.php?p=4777973#p4777973"]Во вторых, кнопки могут висеть на разных портах и все "числа соответствующие данной нажатой кнопке" идут
попесдэ лесом и болотами...[/uquote]
Не вижу смысла вешать кнопки на разные порты.
Команда, конечно, не универсальная, но для большинства задач подойдёт.
[uquote="КРАМ",url="/forum/viewtopic.php?p=4777973#p4777973"]В третьих, AVR является RISC машиной, то есть вся математика возможна только с РОНами. А это значит, что регистр Keys - это РОН. Со всеми вытекающими последствиями для остального кода и его читабельности.[/uquote]
Keys может быть РОН, SRAM, РВВ и даже EEPROM. Выбор - на усмотрение разработчика.
[uquote="КРАМ",url="/forum/viewtopic.php?p=4777973#p4777973"]Штобтызнал.
Вот так выглядит функция подсчета CRC16 на Си. Абсолютно для любого контроллера любой разрядности.[/uquote]
Функции подсчета CRC16 у меня нет, сравнить не с чем.
А при передаче пакета контрольная сумма считается. Сделано просто на основе простой суммы байтов. Этот метод вроде как стандартный для hex-файлов программатора.
Вызвать передачу байта контрольной суммы просто. Например, в команде посылки пакета добавляется слово Check_Sum.
Команда работает со всеми МК AVR.
В принципе, одним словом можно вызвать и CRC16, но этого пока нет.
[uquote="Adrift",url="/forum/viewtopic.php?p=4777975#p4777975"]Сколько лет вы уже на свой современный ассемблер потратили? И не потому ли никому его не показываете, что вдруг именно он окажется хуже? )[/uquote]
Всё проще, пока не готово. Не проверены многие функции, не доработан отладчик, симулятор и т.д. Да ещё на форуме подбрасывают идеи. Та же команда чтения кнопок появилась из обсуждений на форуме.