Доброго времени
Есть у меня некий хидер для LPC177x
Там описан volatile регистр, к примеру IOCON, потом регистр пина, к которым доступ примерно такой - LPC_IOCON->P0_0 = xxx;
Я тут устал считать биты, описал в виде полей типы вот так:
Код
typedef struct
{
union
{
__IO uint32_t D_IOCON;
struct
{
__IO uint32_t FUNC : 3;
__IO uint32_t MODE : 2;
__IO uint32_t HYS : 1;
__IO uint32_t INV : 1;
uint32_t RESERVED0 : 2;
__IO uint32_t SLEW : 1;
__IO uint32_t OD : 1;
uint32_t RESERVED1 : 21;
};
};
} LPC_PIN_TypeD_TypeDef;
но, разумеется, из-за vilatile код генерится в два этапа:
Код
;;;75 LPC_IOCON->P2_24.FUNC = 0; // GPIO pin
00000c 4921 LDR r1,|L1.148|
00000e f8d12160 LDR r2,[r1,#0x160]
000012 f0220207 BIC r2,r2,#7
000016 f8c12160 STR r2,[r1,#0x160]
;;;76 LPC_IOCON->P2_24.MODE = 2; // Pullup enabled
00001a f8d12160 LDR r2,[r1,#0x160]
00001e f0220218 BIC r2,r2,#0x18
000022 3210 ADDS r2,r2,#0x10
000024 f8c12160 STR r2,[r1,#0x160]
как можно заставить компилятор генерить код в один этап?