Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
https://github.com/kvasir-io/Kvasir/tree/master/Lib/Register вроде бы решает ту же задачу, с прицелом на эффективность (если требуется выставить набор флагов, но не требуется при этом строгий порядок их выставления, то они выставляются "скопом" внутри одного регистра, и в оптимальном порядке в разных регистрах)
Пожалуйста, не нужно рисовать подобные диаграммы. Ничего не понятно. Если хотите показать структуру кода, используйте всем понятный UML.
О, класс, вы переизобрели https://github.com/hackndev/zinc
Он предназначен для открытия доступа к методу, когда экземпляр объекта для которого метод вызывается — константный. Без этого модификатора нельзя вызывать методы на константных объектах.
class C {
public:
void m1() {}
void m2() const {}
};
C c1;
const C c2;
c1.m1(); // можно
c1.m2(); // можно
c2.m1(); // нельзя, потому что c1 объявлен как const, а m1() - нет
c2.m2(); // можно, потому что c1 объявлен как const и m2() объявлена как const/*
* Перечень регистров физического порта ввода-вывода.
*/
struct pll_cfg_struct {
const uint32_t pllcfg_reg_msk; // Маска конфигурации PLL целиком.
const uint32_t dev_bus_msk; // Маска регистра RCCCFG (только части с делителями частоты шин).
const uint32_t flash_acr_msk; // Маска всего регистра flash_acr (предсказатель + задержки обращения к Flash).
const bool src; // true = HSE, false = HSI
};../ayplayer_clock.h:6:161: error: the type 'const pll_cfg<(EC_RCC_PLL_SOURCE)1, 25u, 240u, (EC_RCC_PLL_P)0, 15u, (EC_RCC_AHB_DIV)0, (EC_RCC_APB1_DIV)5, (EC_RCC_APB2_DIV)4, 3300ul>' of constexpr variable 'pll_max' is not literal
const constexpr pll_cfg< EC_RCC_PLL_SOURCE::HSE, 25, 240, EC_RCC_PLL_P::DIV_2, 15, EC_RCC_AHB_DIV::DIV_1, EC_RCC_APB1_DIV::DIV_4, EC_RCC_APB2_DIV::DIV_2, 3300 >pll_max;
Используем template + constexpr для создания масок регистров периферии микроконтроллера на этапе компиляции (C++14)