您的位置:首页 > 编程语言 > C语言/C++

很多知识点c语言(单片机)

2016-06-09 12:19 330 查看


问:c语言*(volatile unsigned char xdata *) 0x2f5f,这个表示方法是什么意思?

c语言*(volatile unsigned char xdata *)  0x2f5f,这个表示方法是什么意思?


答1:将一个立即数,强制转换一个指针,再以这个指针取出这个地址开始一个字节的内容。

具体0x2f5f,是什么,那就要看芯片的数据手册了。

比如说,如果A寄存器的地址是0x2f5f,那么,定义了
#define A *(volatile unsigned char xdata *)  0x2f5f

那么就可能对寄存器A赋值,只要  A = 0xff;就可以了。

去看看芯片的数据手册,看下0x2f5f是什么地址空间,才能知道他到底是什么。

答2:这是指一个外部的绝对物理地址,后面的0x2f5f就是它的具体地址,在一些用KEIL编译的程序里面通常这样来指定一个绝对地址。

答3:
#define U0RBR (*((volatile unsigned char *) 0xE000C000))
这个在单片机里很常见,
((volatile unsigned char *) 0xE000C000) 是将0xE000C000强制转换为
保存可能随时更新(volatile的作用)无符号字符型数据的地址
前面又加了*,是表示指向这个地址里面的值,这与其他普通定义的指针一样了,如char x,y,*p;p=&x;*p=y;y=*p
就如同一个变量一样,既可以从这里读出值,也可以给被赋值,这里需要注意的是,这个地址值里的东西是不是既可以读又可以写,这个在datasheet应该有定义,或者看程序中都拿他干什么。
#define U0RBR (*((volatile unsigned char *) 0xE000C000)) 这个是宏定义,即UORBR替换(*((volatile unsigned char *) 0xE000C000)),宏定义是为了程序书写方便,因为在程序中可能有好多地方要使用(*((volatile unsigned char *) 0xE000C000)),在用时,总要写这么多东西麻烦。
问:0x1000L是什么意思?
在常量后加L则认为它是long int型常量
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: