А если так Чуть-чуть изменю названия, но суть та же
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
	
Вот только первые атомарны, а вторые нет.
Или нет? ;)