很多知识点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型常量
相关文章推荐
- 2015级C++第16周实践项目 文件
- 2015级C++第16周程序阅读 文件操作
- C 和 C++ 互相调用
- 结构体和类
- 如何加快C++代码的编译速度
- C/C++杂记:深入理解数据成员指针、函数成员指针
- c++计算最大公约数
- 文章标题
- C++Primer 第3章笔记整理
- C实现复制文件
- Thinking in C++ 读书笔记 第三章
- C++ HashMap
- C++ map的基本操作和使用
- C++ map的基本操作和使用
- 【C/C++】const在C和C++下的区别
- 《游戏引擎架构》读书笔记-游戏引擎中的C++
- zephir-开篇介绍
- 第15周项目1--程序填空
- C++之类的析构函数
- c++实践:我的数组类