我正在按照 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 位始终为 0。标志最初假定为 0。因此,标志中的所有位都将为 0。但是,当我使用 varSetBit(flags,1) 时,第 1 位的答案再次为 0。我不认为我做错了什么。是编译器的问题吗?我错过了一些设置吗?任何帮助将不胜感激。