Пусть у нас есть код. Не важно для какого МК. Важно то, что подавлющее большинство МК не позволяют использовать номер бита или номер порта в команде из регистра. Извольте непосредственно указать номер бита 0..7. Или извольте непосредственно указать номер порта 0..1F (для примера).
Иными словами, если на момент написания кода, номер бита или номер порта не известен, то вместо одной машинной команды "установить бит X в порту Y" нам нужно запрещать прерывания, читать весь порт в регистр, устанавливать в нем бит, записывать весь порт обратно и разрешать прерывания. Уродство (
Если речь идет о небольшой программке, которую мы все равно будем компилить со всеми файлами целиком, то вопрос решается средствами препроцессора.
А вот если хочется иметь статическую библиотеку, подключая ее LD, то для того, чтобы поменять в ней потом этот номер бита в команде приходится писать совершенно непотребный скрипт для LD. Настолько непотребный, что понимаешь, что не только чайнику теперь ты эту библиотеку не даш, но даже на гитхаб выложить постесняешься.
Отсюда вопрос:
Как понятно для того, кто будет использовать твою библиотеку, подменять, например, номера битов операнда в конкретных машинных командах, в зависимости от желаний пользователя?
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.


