[uquote="a5021",url="/forum/viewtopic.php?p=3386390#p3386390"]Просто, наглядно и без всякой этой вашей чепухи. Два присваивания и все.[/uquote]
Тут выполняется запись в AFR целиком, а моя функция писала только в нужные поля, так что аналог должен еще выполнять очистку по двум маскам. В любом случае если взглянуть на мой код который отправляет и принимает данные через USART при помощи DMA, то размер сопоставим с твоим кодом выполняющим простую установку AF для порта и если код USARTа переписать так просто, наглядно и без всякой чуши, то размера он будет не один экран.
[uquote="VladislavS",url="/forum/viewtopic.php?p=3386485#p3386485"]Это как-то по кубовски. Если в пределе на одном порту 16 разных девайсов по одному пину, то порт будет 16 раз инициализирован.[/uquote]
В целом да, но не обязательно. Допустим есть три светодиода,
PinA<1> led1; и т.д., режим работы у них одинаков, потому вызываем функцию которой передается сразу 3 светодиода, она проверяет находятся ли они на одном порту, если да, то объединяет маски и выполняет одну запись, если нет, то возможно будет 2 записи, а 3 записи получим только если все светодиоды сидят на разных портах.
Стоит отделять мух от котлет. Вы когда нарисовали схему, и тем белее спаяли её, то фактически уже определили в каком режиме будет работать каждая ножка. Чаще всего инициализацию надо сделать один раз и залочить конфигурацию. Я это вот так делаю.
Всё в одном месте, ни одна ножка не забыта, ни одна по ошибке на другую не наехала. И дым не пошёл из-за того что класс для этой ноги ещё не написан и она болтается неинициализированная. Если в процессе работы надо переконфигурировать порт, например для энергосбережения, то опять же лучше со всем портом сразу работать, чтобы сделать это быстро и ни одной ноги не забыть.
Вернемся к USART, там была такая строка инициализации:
Код: Выделить всё
usart::init<PinA<2, 7>, PinA<3, 7>>(115200);
Передается два пина, для F1 нужны одни режимы их работы, для остальных серий - другие. Я даже не должен помнить какие это режимы, это зона ответственности самого класса усарта. Если переданы правильные пины, то гарантированно получим правильную их конфигурацию, а чтобы сменить пины, нужно в одном месте изменить несколько символов. Если нужен lock, то можно добавить еще один параметр и сделать его false по умолчанию или можно лочить порт целиком, как у тебя, но делать это на последнем этапе разработки. Ты же предлагаешь закопать эти два пина, как и множество других, среди 7-ти регистров портов, а самих портов тоже может быть 7 шт., как у меня на F429ZI. Более того, ты почему-то решил, что именно при таком подходе труднее получить дымок, но мне кажется, что все с точностью до наоборот

Я предлагаю простоту, модульность и довольно высокую независимость от разной периферии, понятно, что выполнив всю инициализацию портов в начале программы можно сэкономить на размере прошивки, но мы экономили на PIC/AVR, где флеша могло быть 1-2КБ, теперь экономим на ARM, где флеша минимум 32КБ, а писать простые и переносимые программы когда будем? Подозреваю, что если появятся дешевые мк на ARM64 с минимум 512КБ флеша, все равно многие будут писать как на древних 8-ми битках
