ARM编程:关于ARM寄存器的宏定义

ARM编程:关于ARM寄存器的宏定义 [gf86530430] [136次] 2008-8-27 请问各位大虾: 在ARM的头文件里,对与寄存器的定义为什么不跟51的一样?代码如下: #define rUTXH0 (*(volatile unsigned char *)0x1d00020) #define rUTXH1 (*(volatile unsigned char *)0x1d04020) #define rURXH0 (*(volatile unsigned char *)0x1d00024) #define rURXH1 (*(volatile unsigned char *)0x1d04024) #define WrUTXH0(ch) (*(volatile unsigned char *)0x1d00020)=(unsigned char)(ch) #define WrUTXH1(ch) (*(volatile unsigned char *)0x1d04020)=(unsigned char)(ch) #define RdURXH0() (*(volatile unsigned char *)0x1d00024) #define RdURXH1() (*(volatile unsigned char *)0x1d04024) #define UTXH0 (0x1d00020) //byte_access address by BDMA #define UTXH1 (0x1d04020) #define URXH0 (0x1d00024) #define URXH1 (0x1d04024) 对于寄存器 知道地址 直接 用#define URXH1 0x1d04024 就好了,干什么还用(*(volatile unsigned char *)0x1d00020)搞个强制类型转化啊? 请知道的大侠,详细的解答一下,小弟在这里不胜感激!!!!! 可以简化后面的程序[qllaoda] [80次] 2008-8-27 10:53:08 用这种方式定义后,你就可以直接用 rUTXH0=xxx或xxx=rUTXH0之类的方式来读写寄存器了 但是为什么不直接用#define add呢?[gf86530430] [65次] 2008-8-28 8:39:54 但是,下面有些用于DMA方式的寄存器就没这么写,为什么要有区别, 还有直接定义他的地址不是也可以么? #define uart 0x00000060 i = uart; 请qllaoda 大侠详细解释一下 ,麻烦! 这样当然不行[qllaoda] [64次] 2008-8-28 9:20:37 #define uart 0x00000060 i = uart; 这样的语句,经过宏替换后,就相当于 i=0x00000060; 这样的语句当然达不到读写寄存器的效果。 哦 那我这样写呢?[gf86530430] [64次] 2008-8-28 13:00:46 51有个Sfr 这个关键字所以可以直接定义寄存器 如 Sfr SBUF 0xc6; ARM不支持 这样的方式, 但是 我这样定义不行么? unsigned int SBUF _at_ 0xc6; 如果不考虑 资源占用情况的化,也是可以实现对寄存器固定地址的访问的? 请qllaoda 解释 麻烦了!! ARM编译器不支持sfr关键字。[qllaoda] [45次] 2008-8-28 16:11:33 但是按照变量的方式定义呢?[gf86530430] [52次] 2008-8-28 16:21:03 假如不考虑资源占用的情况 用变量定义是否可以? unsigned char SBUF _at_ 0xc5; 寄存器不等同于普通变量,那种方法是通用的标准方法,你就别在这个问题上钻牛角尖了[qllaoda] [52次] 2008-8-28 16:48:58 呵呵,谢谢qllaoda及anno![gf86530430] [36次] 2008-8-29 8:40:29 呵呵,谢谢qllaoda及anno的答复
我就是不明白,知识应该是相通的,可能是有点转牛 角尖了。
结贴吧! 是一个地址指针的概念[anno] [62次] 2008-8-28 9:42:30 首先寄存器的话 肯定是定义为指针类型比较好的 51之所以可以那么定义是keil编译器的功能 而标准C的话是不能识别那样的地址定义的 用了volatile是防止编译器优化导致数据读写出错 具体的你可以上网看看volatile的使用规则 你那么定义也行,只不过用时加上[ddllxxrr] [50次] 2008-8-28 15:46:07 #define ddllxxrr 1000 (*(volatile unsigned char *)1000 = 33; 建议看看C语言的书[anno] [48次] 2008-8-28 17:56:06 不要把c51当标准C语言 你如果有机会接触GCC的话(linux) 就会知道标准c是怎么写的 既然是在学ARM 就接受新的知识 别拿51做比较 ARM很多地方跟51是没有可以相比之处的 硬是要分出所以然来 以为能承前启后 其实是没意义的事 结帖成功,感谢[qllaoda]的回答[gf86530430] [27次] 2008-8-29 8:43:35 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/li32768/archive/2009/03/21/4010954.aspx
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值