Возможен ли доступ к регистрам RTC-BACKUP через структуру битовых полей?

В МК STM32L0x1 есть несколько 32-битных backup регистров, доступ к которым возможен через MMIO:

// Доступ к регистру BKP0 через базовый адрес: RTC->BKP0R
uint32_t tmp = (uint32_t)&(RTC->BKP0R) + RTC_BKP_DR0;
// Запись в регистр BKP0 значения 42
*(volatile uint32_t *)tmp = 42;
// Чтение из регистра BKP0
uint32_t value = *(volatile uint32_t *)tmp;

Мне бы хотелось иметь доступ к данным регистрам через битовые поля структуры, которые отображаются непосредственно на область памяти, в которой эти регистры размещены:

    // Объединение, которое будет отображаться в память
    typedef union
    {
       uint32_t value;

       struct
       {
         uint32_t flag_0   : 1;
         uint32_t flag_1   : 1;
         uint32_t err_cnt  : 4;
         uint32_t interval : 7;

       } bits;
    } bkp_data_t;

    // Экземпляр отображения битового поля на регистр BKP0
    bkp_data_t* bkp_data = (bkp_data_t*)((uint32_t)&RTC->BKP0R + RTC_BKP_DR0);

    // Функция установки битового поля
    void set_flag_0(bool value)
    {
       critical_enter();
       bkp_data->bits.flag_0 = value;
       critical_exit();
    }

    // Функция чтения битового поля
    bool get_flag_0(void)
    {
       bool ret = false;

       critical_enter();
       ret =  bkp_data->bits.flag_0;
       critical_exit();
       return ret;
    }

Такой подход является работоспособным при отображении битовых полей на произвольную область памяти в RAM для неатомарного доступа к отдельным битам. Но насколько жизнеспособно такое отображение в случае BACKUP регистров?


Ответы (0 шт):