[uquote="ARV",url="/forum/viewtopic.php?p=3686391#p3686391"]как по мне, так это выглядит, как кошмар нерожденного.[/uquote]
Тем не менее, этот код ближе к тому, что обычно пишут люди не обремененные нюансами метапрограммирования

И его можно пошагово отлаживать...
что проще: {разобраться в либе Чисжова или освоить вариативные макросы} или тупо написать руками дрыганье битом? я все понимаю, но не понимаю, зачем простое делать "удобным"? за то время, что я потратил на попытки понять, что наваял Чижов, я бы мог 100500 раз расписать самые хитрые манипуляции группами битов. т.е. все эти шаблоны и лямбды (сцуко, так и не понял, нахрена они нужны и что это вообще за дрянь) не окупаются по мозговым затрам, имхо...
Например, я у себя могу написать такое:
Код: Выделить всё
Lcd<RM68140, LcdOrient::Landscape, PB7, GpioB<0xFF00>, PB2, PB0, PB1, PB6, 0, 2, 0> lcd;
lcd.init();
А можно так:
Код: Выделить всё
using LcdData = PinList<PA12, PA11, PB2, PA9, PB3, PC1, PC2, PC3>;
Lcd<S6D1121, LcdOrient::LandscapeRev, PB7, LcdData, PB2, PB0, PB1, PB6, 1, 2, 1>;
lcd.init();
Другой контролер, другие пины данных, другие тайминги и ошибка компиляции, т.к. я специально продублировал PB2... При инициализации все эти 13 пинов объединяются в общий список, чтобы задать им режим сразу для всех, это может быть эффективнее, допустим, если все пины относятся к одном порту. При записи компилятор обнаружит последовательность пинов PA12/PA11/PA9, они хоть и не идут подряд, но все равно данные для них можно забрать за один заход, а если у нас Cortex-M3 и выше, то дополнительно будет обнаружена последовательность PC1/PC2/PC3, тут порядок обратный, потому будет добавлена одна инструкция реверса бит RBIT. И даже когда на стадии компиляции будет получен список регистров и необходимых констант все равно будут выполнены дополнительные проверки, вдруг вместо RMW можно просто писать целиков в регистр, его половинку или четвертинку... Это эффективно практически насколько возможно и все равно одни будут говорить, что вместе с универсализацией часть ресурсов тратится впустую, а другие, что получается слишком сложно

А потом эти другие идут и пишут скриптовый язык для управления светодиодами и прикручивают к нему пошаговый отладчик, естественно полагая, что их мозговые затраты полностью окупились
