(*((volatile unsigned long *) 0xE0028000)) 作用小解
来源:互联网 发布:数据库关系表 编辑:程序博客网 时间:2024/06/01 08:28
#define IO0PIN (*((volatile unsigned long *) 0xE0028000)) /* no in lpc210x*/
以此句为例,简述如下:
与51单片机的头文件<reg51.h>类似,在ARM处理器中,也必须有自己的寄存器头文件声明,不同的是,在ARM应用中,需要用户自己来编写.
0xE0028000:在ARM处理器中,只能识别为一个十六进制数值,具体是数据还是地址,它并不能自动区分.
而使用(volatile unsigned int *)0xE0028000,对此数据进行强制转换,表明此数值为一个无符号的长整型地址指针值,关键字volatile 告诉编译器它指向的内容是易变的,可能会被硬件等意外地修改.这一点很关键.
*((volatile unsigned int *) 0xFFE00000),则是获取指针所指向地址处的内容,从而,使用了#define 预处理语句对IO0PIN进行定义后,在用户程序中,对IO0PIN的操作,就等同于在0xE0028000地址上进行读写操作.
具体C语言的知识,请参考相关书籍.如果平时在学习中遇到ARM相关的问题,也可以登陆以下网页:
http://www.zlgmcu.com.cn/index.asp?boardid=29&page=1
volatile 主要用于变量会异步改变的情况下,主要有三个方面:
1.cpu外设寄存器
2.中断和主循环都会用到的全局变量
3.操作系统中的线程间都会用到的公共变量.
- (*((volatile unsigned long *) 0xE0028000)) 作用小解
- #define IOPIN (*((volatile unsigned long *) 0xE0028000))
- #define WTCON (*(volatile unsigned long *)0x53000000)
- (*(volatile unsigned long *)0x0012450的理解
- #define GPBDAT (*(volatile unsigned long *)0x56000014)
- #define XXXX (*(volatile unsigned long *)0xxxxxxx)
- #define rXXX (*(volatile unsigned long *)0xxxxxx)
- (*(volatile unsigned long *)
- ( *(volatile unsigned long * ) )
- (*(volatile unsigned long *)
- (*(volatile unsigned long *)详解
- (*(volatile unsigned long *)详解
- (*(volatile unsigned long *)心得体会
- *(volatile unsigned long *) 语法
- (*(volatile unsigned long *) 地址)
- (*(volatile unsigned long *)
- *(volatile unsigned long *) 语法
- (*(volatile unsigned long *)详解
- Android的Launcher中拖拽图标,停留,显示卸载的分析
- 减少 文件系统用chfs 和smit 的比较 (smit 较好)
- PB数据窗口datawindow的查询条件设置和执行
- PB在数据窗口里实现Enter回车键代替Tab键转到下一行
- VC 常用数据类型使用转换详解
- (*((volatile unsigned long *) 0xE0028000)) 作用小解
- PB中用SetFilter和Filter实现简单的查询功能
- ubuntu手动安装jdk
- PB中游标的使用 DECLARE CURSOR FETCH
- 03-05 创建和编辑AutoCAD实体(五) 使用图层、颜色和线型(1)使用图层(1-3)
- PB 数据窗口datawindow中的数据隔行换颜色
- MeeGo编译步骤参考
- EPL语言通过USB打印条码
- XAML揭秘