- 论坛徽章:
- 0
|
这是一段置位操作的宏,写得有点高深
- #define bwMCDR2_ADDRESS 4
- #define bsMCDR2_ADDRESS 17
- #define bmMCDR2_ADDRESS BIT_MASK(MCDR2_ADDRESS)
- #define BIT_MASK(__bf) (((1U << (bw ## __bf)) - 1) << (bs ## __bf))
- #define SET_BITS(__dst, __bf, __val) \
- ((__dst) = ((__dst) & ~(BIT_MASK(__bf))) | \
- (((__val) << (bs ## __bf)) & (BIT_MASK(__bf))))
- SET_BITS(MCDR2, MCDR2_ADDRESS, RegisterNumber);
复制代码
请问
1. bw, bs ,bm 是不是什么关键字,像0x一样?
2. ##在这里有什么用呢
我用gcc -E 得到的结果
- #define bwMCDR2_ADDRESS 4
- #define bsMCDR2_ADDRESS 17
- #define bmMCDR2_ADDRESS BIT_MASK(MCDR2_ADDRESS)
- #define BIT_MASK(__bf) (((1U << (bw ## __bf)) - 1) << (bs ## __bf))
- #define SET_BITS(__dst, __bf, __val) \
- ((__dst) = ((__dst) & ~(BIT_MASK(__bf))) | \
- (((__val) << (bs ## __bf)) & (BIT_MASK(__bf))))
- int main()
- {
- SET_BITS(MCDR2, MCDR2_ADDRESS, RegisterNumber);
- }
复制代码
- int main()
- {
- ((MCDR2) = ((MCDR2) & ~((((1U << (4)) - 1) << (17)))) | (((RegisterNumber) << (17)) & ((((1U << (4)) - 1) << (17)))));
- }
复制代码 |
|