ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
26 ноября
178334 Топик полностью
Chum_A (14.01.2010 13:25, просмотров: 142) ответил Vladimir Ljaschko на Если про смещение, то так #define OFFSET(type,field) ((char *)&(((type *)0)->field) - (char *)0)
Такая ерня, это без меня сочинили и преумножать не хотелось бы:  typedef struct { vu32 DATA; vu32 OE; vu32 FUNC; vu32 ANALOG; vu32 PULL; vu32 PD; vu32 PWR; vu32 GFEN; } GPIO_TypeDef; #define GPIOA_BASE (PERIPH_BASE + 0xA8000) #define GPIOA ((GPIO_TypeDef *) GPIOA_BASE) Теперь мне надо банально устроить bit-band посредством макроса, подставив вместо Port GPIOA->DATA #define PERIPH_BB_BASE 0x42000000 #define SetBit(Port, BitNumber) \ (*(vu32 *) (PERIPH_BB_BASE | ((Port - PERIPH_BASE) << 5) | ((BitNumber) << 2)) = 1) Если написать SetBit(&GPIOA->DATA, 1) "Кайло" генерит бредятину, пытаясь (безуспешно) почти десятком asm команд подсчитать значение Port