请问这三行怎么理解

2019-08-16 20:44发布

#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))#define MEM_ADDR(addr)  *((volatile unsigned long  *)(addr))#define BIT_ADDR(addr, bitnum)   MEM_ADDR(BITBAND(addr, bitnum))
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
Acuity
1楼-- · 2019-08-16 20:47
1、这句没什么好说,就是单纯的左移、右移、按位与,至于为什么要移这么多位,请看st数据手册;
2、这句是读写内存、Flash、寄存器地址数据,三句话其实最关键的就是这句;例子:读0x1234地址数据->  a=*(volatile unsigned long  *)0x1234;写0x01到0x1234地址-> *(volatile unsigned long  *)0x1234 = 0x01;
3、读、写IO口。
wuwao
2楼-- · 2019-08-16 22:11
 精彩回答 2  元偷偷看……
执迷
3楼-- · 2019-08-16 23:29
看一下define的用法不就知道了、、、单纯的用前面的代替后面一串。。。
yanzhuangsongqi
4楼-- · 2019-08-17 01:22
宏定义,映射寄存器
Acuity
5楼-- · 2019-08-17 05:00
wuwao 发表于 2017-7-24 06:40
#define BIT_ADDR(addr, bitnum)    *((volatile unsigned long  *)((addr & 0xF0000000)+0x2000000+((addr ...

完全可以,可读性问题而已;就像你可以把所有源码写在一个main函数里面,不分模块,也是可以的,只是看着吃力。

一周热门 更多>