[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4235043#p4235043"]привели кусок кода, который непонятно куда вставлять.[/uquote]Ну извините, продолжайте упражнения с макросами...
[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4235043#p4235043"]Повторяю в пятый раз: меня как программиста не волнует какой режим будет выставлен, меня волнует как светодиод зажечь.[/uquote]Вы смешиваете в одном предложении две разные задачи:
1. Установить режим на ноге, к которой подключен светодиод. Очень странно, что вас не волнует, что это за режим будет.
2. Зажечь светодиод. Тут надо просто сделать
LED::On(); действительно ничего не зная о режиме.
[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4235043#p4235043"]А на счет специального метода - для типичной задачи должно быть типичное решение. А работа с кнопками, светодиодами, реле - типичная задача.[/uquote]Всё верно. Светодиод, кнопка и даже реле типовые объекты наших схем и заслуживают написания для них, пусть и простенького, но отдельного от GPIO кода. Пусть GPIO занимается GPIO, там своих задач хватает.
[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4235043#p4235043"]И у вас регулярно возникает задача перевести в push-pull режим именно эти ноги?[/uquote]Вы не поверите, у меня никогда не возникает задача перевести только входные ноги в режим push-pull. А если я попытаюсь это сделать, то не смогу, так как компилятор посредством моего класса "покрутит у виска" и не даст этого сделать.
[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4235043#p4235043"]А так еще классическая ATmega8 есть, у которой ADC6, ADC7 могут работать только как АЦП, но не как GPIO.[/uquote]Ну значит они не являются объектом управления библиотекой GPIO вовсе. Нет порта - нет проблемы.
[uquote="COKPOWEHEU",url="/forum/viewtopic.php?p=4235043#p4235043"]Пока что преимущество вашего подхода абсолютно неочевидно: читать сложнее, кода больше. Ну можно добавить ненужные проверки, которые ни от чего не спасут.[/uquote]Тут стоило бы поставить
ВАШЕ ЖИРНОЕ IMHO. Ибо существует и совершенно противоположное мнение : читать проще (я вот в голове макросы раскручивать вообще не умею, а классы, шаблоны и функции вижу как работают), исходного кода меньше (шаблоны, да ещё с if constexpr, пишутся один раз для разных данных и инстанцируются по мере необходимости автоматически), результирующий код лучше по быстродействию, дополнительные проверки позволяют избегать многих ошибок. Ну и конечно же, можно сделать много такого, чего макросам даже и не снилось.
Добавлено after 19 minutes 9 seconds:
Вот даже не надо далеко ходить, пару сообщений выше, сравните
Код: Выделить всё
uint8_t *buf = (uint8_t *)&foo;
for(int i=0; i<sizeof(foo); i++)
printf("%.2X ", buf[i]);
for(auto &x : foo.buf)
printf("%.2X ", x);