А если так Чуть-чуть изменю названия, но суть та же
struct defFlags // объявляем битовые переменные в ВВ-регионе
{
uint32_t
b0 : 1,
b1 : 1,
b2 : 1,
b3 : 1,
b4 : 1;
};
struct defBBFlags // объявляем 32-битные слова в алиас-регионе
{
uint32_t
b0,
b1,
b2,
b3,
b4;
};
struct defFlags Flags; // создаем структуру Flags
struct defBBFlags *pBBFlags; // создаем указатель на структуру BBFlags
#define BB_ALIAS(bit_band) ((bit_band&0xF0000000UL)+0x02000000UL+((bit_band&0x000FFFFFUL)*32))
pBBFlags = (struct defBBFlags *)(BB_ALIAS((uint32_t)(&Flags))); // присваиваем значение указателю
После этого операции ниже должны быть эквивалентны
pBBFlags->b0 = 1; // Set bit
Flags.b0 = 1; // Set bit
pBBFlags->b0 = 0; // Clear bit
Flags.b0 = 0; // Clear bit
Вот только первые атомарны, а вторые нет.
Или нет? ;)