Я следую руководству, данному на micromouseonline. com/2010/07/14/bit-banding-in-the-stm32 . Я использую IAR EWARM
и Cortex M3
. Все работает нормально, но я не могу установить биты в заданном адресе. Я использую компилятор STM32L151xD
и IAR EWARM
.
Вот как они определяют функции
#define RAM_BASE 0x20000000
#define RAM_BB_BASE 0x22000000
#define Var_ResetBit_BB(VarAddr, BitNumber) (*(vu32 *) (RAM_BB_BASE | ((VarAddr - RAM_BASE) << 5) | ((BitNumber) << 2)) = 0)
#define Var_SetBit_BB(VarAddr, BitNumber) (*(vu32 *) (RAM_BB_BASE | ((VarAddr - RAM_BASE) << 5) | ((BitNumber) << 2)) = 1)
#define Var_GetBit_BB(VarAddr, BitNumber) (*(vu32 *) (RAM_BB_BASE | ((VarAddr - RAM_BASE) << 5) | ((BitNumber) << 2)))
#define varSetBit(var,bit) (Var_SetBit_BB((u32)&var,bit))
#define varGetBit(var,bit) (Var_GetBit_BB((u32)&var,bit))
звонок такой:
uint32_t flags;
varSetBit(flags,1);
однако бит 1 в flags всегда равен 0, если я вижу использование отладчика. Сначала предполагается, что флаги равны 0. Итак, все биты во флагах будут равны 0. Однако, когда я использую varSetBit(flags,1), ответ в бите 1 снова равен 0. Я не думаю, что я делаю что-то неправильно. Это проблема компилятора? я пропустил некоторые настройки? Любая помощь будет оценена.