Теперь накладываем на это дело разные компиляторы (GCC, IAR, ARMClang) и у каждого куча уровней оптимизации.
Надо будет проверить. Хотя у меня сейчас только L151 под рукой. Но это же "младшее семейство"?
И как раз в вашем случае из C++ взята
Как раз в моем случае С++ нет вообще.
То есть, вот я например на память не помню, как в F1 идут биты в CRL(H) регистре - сначала MODE, потом CNF или наоборот, хэзэ. Но зато я помню, что сброс обеих CNF и установка обеих MODE - это пин на выход в ПП-режиме.
А в L1 деление не "вдоль", а "поперек", вместо разбиения по 8 ног на регистр делят на "режим" и "скорость", MODER и OSPEEDR. И лично я не помню какой режим за что отвечает. Лучше уж писать так, чтобы из текста было понятно, чего ты хочешь добиться, а не какие биты выставить.
А на стадии освоения вообще нужно избегать писать какие-либо долгосрочные библиотеки. По мере наработки опыта изменится взгляд на уже написанное. И вот такие "улучшения" будут просто слишком тяжеловесными. По мере освоения программист упрощает все эти тонны портянок и в конечном счете приходит к самой короткой записи, то есть к тому, что уже было предложено в сопроводительных документах. Там же люди тоже не дураки сидят, и если они разработали микроконтроллер, то именно они лучше всего и знают его работу.
Вот та библиотека, которая переживет два - три разных контроллера, уже и может использоваться как основная. Примерно поэтому же у меня до сих пор нет библиотек под АЦП или таймеры: не могу найти общий функционал, который бы стоило абстрагировать.
А библиотеки вроде HAL выбывают из этого списка еще на предварительном этапе: слишком сложные.
Кайф "ничего не знать"?
Вероятнее всего, имелось в виду "не держать в голове подробностей". Знать-то, понятное дело, надо. Но если я хочу нарисовать на дисплее линию, я предпочту оперировать функциями рисования точек или областей, но не командами конкретного дисплея, регистрами SPI или поворотом плоскости поляризации жидкими кристаллами.
Меньше, в разы. Проверено на практике. Не забывай про наследование, которое уменьшает дублирование кода.
Не могу ни подтвердить, ни опровергнуть. Я под контроллеры на С++ не писал.
Во-первых, препроцессор никуда в С++ не делся. А, во-вторых, он там и не нужен особо.
Еще раз: в Си нет достаточно удобного препроцессора чтобы реализовывать компил-тайм алгоритмы по-человечески, поэтому приходится извращаться. В С++ такого тоже нет, зато есть constexpr'ы, которые решают ту же задачу, но другим способом. Насколько я понимаю, это позволяет на С++ при должном умении (которого у меня нет) писать более читаемый код, чем на Си. Быстродействия-то там примерно одинакового можно достичь.