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 です。flags は、最初は 0 であると見なされます。したがって、フラグのすべてのビットは 0 になります。ただし、varSetBit(flags,1) を使用すると、ビット 1 の答えは再び 0 になります。私は何か間違ったことをしているとは思わない。コンパイラの問題ですか?いくつかの設定がありませんか?どんな助けでも大歓迎です。