Обновить
2
Сергей@wasserati

Инженер электронщик

Отправить сообщение
Спасибо за статью.
Сам задумывался над чем-то подобным. Только знаний С++ для реализации не хватило.
Частично решал проблему с помощью макросов вроде:
#define WRITE_BITFIELD(MOD, N,  REG, FIELD, VAL)   { (MOD ## N)->REG = ((MOD ## N)->REG &= ~(MOD ## _ ## REG ## _ ## FIELD)) | \ (uint32_t)(VAL) << (MOD ## _ ## REG ## _ ## FIELD ## _ ## Pos); }

Что выливалось в код:
WRITE_BITFIELD(I2C, 1, TIMINGR, PRESC,  0x0B)

Не оптимальное решение, но от ошибок вроде записи не в тот регистр спасало.
Теперь можно и ряд других ошибок отлавливать.
Можно еще доработать подход и использовать его для работы с регистрами различных ИС подключаемых посредством I2C или SPI, или пр. Писать придется в переменную, а не по адресу. А уже потом эту переменную передавать.

Информация

В рейтинге
Не участвует
Откуда
Сумы, Сумская обл., Украина
Дата рождения
Зарегистрирован
Активность