ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
25 ноября
421672 Топик полностью
Dir (03.07.2013 15:48 - 16:01, просмотров: 129) ответил Chum_A на Такая ерня, это без меня сочинили и преумножать не хотелось бы:
А если так Чуть-чуть изменю названия, но суть та же
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
Вот только первые атомарны, а вторые нет. Или нет? ;)