(*(volatile unsigned int *))详解
2011-02-23 15:41
162 查看
最开始看到volatile的时候相当费解,后来到网上去查看了下,大致明了。
使用一个32位处理器,要对一个32位的内存地址进行访问,可以这样定义
#define RAM_ADDR (*(volatile unsigned long *)0x00000000)
然后就可以用C语言对这个内存地址进行读写操作了
读:tmp = RAM_ADDR;
写:RAM_ADDR = 0x55;
volatile的意思是说明这个变量是可能被别的程序或者本程序的其他线程修改的,这样编译器就不能优化它,每次读取都从地址中获取。如果不这样声明的话编译器可以把它缓冲在寄存器中的,这样别的程序修改了它,而寄存器里面的值却是原先的,会发生你不想要的结果。而上面三种情况都是这种可能在本程序或者本线程外被修改的情况,所以要加它。
注意几点:
1.(volatile unsigned long *)0x00000000 说明是一个指针类型,地址在0x00000000
2.在前面加上个*,表示指向这个地址的内容。
3.养成在整体外面再加个括号的习惯。
转载地址:http://blog.sina.com.cn/s/blog_6d8f724b0100mq3a.html
使用一个32位处理器,要对一个32位的内存地址进行访问,可以这样定义
#define RAM_ADDR (*(volatile unsigned long *)0x00000000)
然后就可以用C语言对这个内存地址进行读写操作了
读:tmp = RAM_ADDR;
写:RAM_ADDR = 0x55;
volatile的意思是说明这个变量是可能被别的程序或者本程序的其他线程修改的,这样编译器就不能优化它,每次读取都从地址中获取。如果不这样声明的话编译器可以把它缓冲在寄存器中的,这样别的程序修改了它,而寄存器里面的值却是原先的,会发生你不想要的结果。而上面三种情况都是这种可能在本程序或者本线程外被修改的情况,所以要加它。
注意几点:
1.(volatile unsigned long *)0x00000000 说明是一个指针类型,地址在0x00000000
2.在前面加上个*,表示指向这个地址的内容。
3.养成在整体外面再加个括号的习惯。
转载地址:http://blog.sina.com.cn/s/blog_6d8f724b0100mq3a.html
相关文章推荐
- (*(volatile unsigned int *))详解
- (*(volatile unsigned int *))详解-数值常量如何转化为内存地址_转阿拉丁神丢新浪博
- (*(volatile unsigned int *))详解
- (*(volatile unsigned int *))详解
- (*(volatile unsigned int *))详解
- (*(volatile unsigned int *))详解-数值常量如何转化为内存地址_转阿拉丁神丢新浪博
- (*(volatile unsigned int *))详解
- (*(volatile unsigned int *))详解
- (*(volatile unsigned int *))详解
- (*(volatile unsigned int *))详解
- (*(volatile unsigned int *))详解
- (*(volatile unsigned int *))详解
- (*(volatile unsigned int *))详解
- (volatile unsigned int *)的理解
- #define A (* (volatile unsigned long *) 详解
- #define A (* (volatile unsigned long *) 详解
- 嵌入式中的 *(volatile unsigned int *)理解
- (*(volatile unsigned long *)详解
- volatile__unsigned__char详解
- 解读 *(volatile unsigned int *)0x30008000 的含义