CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  硬件/嵌入开发 >  单片机/工控

一个宏定义不理解

楼主ytruyutyrruyuryyu()2006-05-04 15:48:37 在 硬件/嵌入开发 / 单片机/工控 提问

在Keil   C51的absacc.h头文件中有CBYTE,DBYTE等宏定义为:  
  #define   CBYTE   ((unsigned   char   volatile   code*)   0)  
  #define   DBYTE   ((unsigned   char   volatile   data*)   0)  
   
  用法:CBYTE[0x0002];  
   
  ---------------------  
   
  这怎么理解啊?  
   
  问题点数:20、回复次数:3Top

1 楼LeeAn(蝎子)回复于 2006-05-04 22:49:48 得分 0

单片机高级语言C51Windows环境编程与应用  
  第284页  
   
  CBYTE---CODE区  
  DBYTE---DATA区  
  PBYTE---XDATA区(MOVX   @Ri)  
  XBYTE---XDATA区(MOVX   @DPTR)  
   
   
  Top

2 楼ytruyutyrruyuryyu()回复于 2006-05-05 00:31:18 得分 0

回楼上:  
        我知道它们的用处,只是看不懂这些宏的定义,比如说:  
              CBYTE[0x0002]  
        展开后应该为:  
              ((unsigned   char   volatile   code*)   0)[0x0002]  
   
  这替换后的表达是什么意思啊?  
  Top

3 楼icesnows(逝去日子)回复于 2006-05-07 19:22:22 得分 20

我的观点是这样的,首先  
  ((unsigned   char   volatile   code*)   0)定义了一个指针,指向了code区的0地址,至于unsigned   char表示是无符号字符类型,volatile表示数据易变,就是语法上的事咯  
  而我们知道C里面数组跟指针实际上是一样的,也就是说指针应该也可以当做数组来用,那么CBYTE[0x0002]就应该访问到CODE区0x0002地址,你可以看一下反汇编后的结果应该就知道了Top

相关问题

关键词

得分解答快速导航

  • 帖主:ytruyutyrruyuryyu
  • icesnows

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo