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

来源:互联网 发布:淘宝假冒品牌处罚 编辑:程序博客网 时间:2024/05/24 06:21

问: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型常量
0 0
原创粉丝点击