绝对地址的访问方法
来源:互联网 发布:淘宝客服用语大全 编辑:程序博客网 时间:2024/06/10 09:40
1.绝对宏
使用绝对宏时,需要添加投文件“absacc.h”,在该文件中定义的绝对宏有CBYTE、XBYTE、PWORD、DBYTE、CWORD、XWORD、PBYTE、DWORD。
CBYTE:对程序存储区(code)的字节地址进行访问。
例如:i=CBYTE[0X000F];表示i指向程序存储区的地址为0x000F的存储单元,地址范围为0X0000~0XFFFF。
XBYTE:对扩展RAM区的字节地址进行访问。
例如:i=XBYTE[0X000F];表示i指向扩展RAM区的地址为0x000F的存储单元,地址范围为0X0000~0XFFFF。
PBYTE:对扩展RAM区的字节地址进行访问。
例如:i=PBYTE[0X000F];表示i指向扩展RAM区的地址为0x000F的存储单元,地址范围仅为一页(256字节)。
DBYTE:对内部RAM区的字节地址进行访问。
例如:i=PBYTE[0X000F];表示i指向内部RAM区的地址为0x000F的存储单元。
以WORD表示的是为字操做,其余的跟以上相同。
2.关键字“_at_”
使用关键字“_at_”不能对绝对变量进行初始化,位变量及函数不能用该关键字进行指定。使用方法为直接在定义的数据后边加上_at_,在加上要指向的绝对地址即可。
例如:unsigned char data i_at_0x0F;表示i指向内部RAM区域地址为0x0f的单元;
unsigned char xdata i_at_0x0F;表示i指向扩展RAM区域地址为0x0f的单元;
unsigned char xdata i[10] _at_0x0F;表示数组的起始地址为扩展RAM区的0x0f单元。
3.链接定位控制
此法是利用连接控制指令 code xdata pdata \data bdata 对“段”地址进行。如要指定某具体变量地址,则在C模块中声明这些变量,并且使用BL51连接器/定位器的定位指令来指定绝对地址。
例如:要定义一个数组,需要把它定位到xdata区的地址2000h。首先在C模块中声明这个数组:
unsigned char xdata i[100];
Cx51编译器为该C模块生成一个目标文件,并且包含了一放在xdata存储区的变量段。因为它在这个模块中只有一个变量,那么i[100];是这个段中仅有的变量,这个段名字为?XD?模块名“比如该模块名为mokuai.c,则这个段名字为?XD?ALMCTRL。BL51连接器/定位器允许使用定位指令指定任意一个段的基地址。则可以通过以下指令指定变量的位置:BL51 … mokuai.obj XDATA(?XD?mokuai(2000h))。
此方法有一定的局限性,使用相对较少
- 绝对地址的访问方法
- C51提供了三种访问绝对地址的方法:
- C51编程中对单片机绝对地址访问的两种方法
- keil C51绝对地址访问
- keil C51绝对地址访问
- keil C51绝对地址访问
- 在单片机系统上的绝对地址访问问题
- 读图片的绝对地址
- 对绝对地址的操作
- 在用户空间(和内核空间)访问内存的绝对地址
- 在用户空间(和内核空间)访问内存的绝对地址
- 服务器端的相对地址与绝对地址
- 绝对地址与相对地址的区别
- jFinal位置项目绝对位置,访问地址位置,端口
- zynq平台PS端对DDR绝对地址访问
- C#利用System.Uri转URL为绝对地址的方法
- [转]绝对地址和相对地址的区别,为什么要采用绝对地址?
- ARM 如何实现绝对地址的跳转
- Php模拟登录工具类 HttpClient
- Pyintaller打包中文路径无效问题
- Java中文乱码原因及解决方法(转)
- libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)
- 开始写博客啦
- 绝对地址的访问方法
- Php对称加密工具类
- 自定义编译安装软件过程总结
- springMVC两种方式实现多文件上传及效率比较
- 关于我
- android service 后台处理一些数据
- Linux 中搭建Raid
- uvalive2949
- u-boot 的配置与编译