找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2959|回复: 2
打印 上一主题 下一主题
收起左侧

STC8/32单片机学习笔记1:指针指向具体数字地址、取值 、宏定义

[复制链接]
跳转到指定楼层
楼主
ID:433166 发表于 2022-12-11 22:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STC8头文件中#define        CKSEL                (*(unsigned char volatile xdata *)0xfe00)  /*  主时钟源选择 */
        0xfe00 是整型数字,在这里一个是地址门牌号数字; (unsigned char volatile xdata *) 是强制类型转换,转换成指针类型,该指针指向unsigned char型数据(1字节8bit);
        (unsigned char volatile xdata *)0xfe00  ////// 是指xdata外部可寻址扩存储区的房间门牌号首地址是0xfe00的指针,存的数据类型是unsigned char(只占一个字节存储单元房间8bit) 类型,volatile 是指这是个随时变化量,每次需不厌其烦从此地址门牌号0xfe00内读取新鲜数据再传送,若传输过程被打断了,再传需重新读取数值,后再传送,不许接着传送中断前保留的那个暂存值。
       *(unsigned char volatile xdata *)0xfe00  ///// 前 加  * 是读取地址门牌号0xfe00内的数据,由于该数据长度是一个字节的char型,只读取0xfe00一个房间内数据值(若是int16位数据,需读取0xfe00和0xfe01两房间2个字节数据,每个房间放一个字节8bit数据 )。
    #define            CKSEL                (*(unsigned char volatile xdata *)0xfe00)    ///////   将  *(unsigned char volatile xdata *)0xfe00   加括号整包裹起来,宏定义 为 CKSEL ,替换成易懂简短的字符标识,后面方便调用不易出错。






评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1060328 发表于 2023-1-5 17:23 | 只看该作者
#define  CKSEL    (*(unsigned char volatile xdata *)0xfe00)
这个可以这么理解吧?
从里层往外看,
有指针变量* (0xfe00),0xfe00是变量的首地址,该地址内的内容为unsigned char volatile xdata类型,即占用外部存储空间0xfe00空间的易失性的无符号字符型变量(8bit);
外层的*(unsigned char volatile xdata *)0xfe00,就是说该指针变量指向了0xfe00,然后将其宏定义为 CKSEL
其本质是就是定义了一个存放于0xfe00的无符号字符型变量,特点是变量首地址确定在0xfe00了
类似于定义了一个指针变量 unsigned char volatile xdata *p,而&p=0xfe00。
我的理解就是这样,各位看看有无问题。
回复

使用道具 举报

板凳
ID:1097337 发表于 2023-11-12 09:26 来自手机 | 只看该作者
不错,大家解释得很清楚,学到了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表