fk0, легенда (29.12.2013 23:12, просмотров: 624) ответил MBedder на Будто сам не знаешь - например, для того, чтобы инициализировать TRISx/ODCx/ANSELx/CNENx etc, не делая дополнительных дефайнов руками
Да, трэш угар и содомия. Иногда абстракции через край, поэтому я имею такое мнение, что иногда и не грех в исходники прямо вписать чуть ли не адрес регистра, ну и уж номер бита так точно. Только чем поможет собственно битовое поле? Формально порядок битов там -- какой попало. Конечно де-факто это не так и можно сделать такой типа хеадер, чтоб всё битами из полей было. Но я бы не стал на это закладываться. Завтра XC16 будет на новой версии gcc, например, и всё с начала. Или оптимизация какая. В общем я бы вписал биты как есть, цифрами. Ещё один слой абстракции с дефайнами имеет смысл, но не на уровне _CNPUE_blablabla, а когда, например, есть две печатные платы с разным распределением ног контроллера. Так проще, чем вообще отдельный HAL под эту плату делать. Хотя... может проще и отдельный HAL, но тогда потом изменения из HAL первой платы руками переносить в эту (разглядывая логи subversion). А с макросами оно автоматом казалось бы. Впрочем, макросы всех случаев не покрывают. Склоняюсь, делать отдельный HAL и писать биты как есть цифрами. В конце концов где-то эти цифры должны появиться, и чем HAL хуже хидеров от микрочипа...
PS: последних я бы опасался. Коллега натыкался на то, что индусы их пишущие не знают того, что в C с нуля записываются 8-ричные числа (бугага, из той же области, почему open(..., 0666) работает, а open(..., 666) -- нет...)
[ZX]