(*(volatile unsigned int *))详解
2019-07-13 21:00发布
生成海报
最开始看到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
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮