标题:
STC8/32单片机学习笔记1:指针指向具体数字地址、取值 、宏定义
[打印本页]
作者:
liu888888
时间:
2022-12-11 22:00
标题:
STC8/32单片机学习笔记1:指针指向具体数字地址、取值 、宏定义
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
,替换成易懂简短的字符标识,后面方便调用不易出错。
作者:
hjc5035
时间:
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。
我的理解就是这样,各位看看有无问题。
作者:
MCU2023
时间:
2023-11-12 09:26
不错,大家解释得很清楚,学到了。
作者:
白水大虾2016
时间:
2024-5-7 13:42
入坑又搞了一个STC32G12K128想把所有的O/I口用起来搞一个花式彩灯,先试着将51例程中流水灯程序导入STC32中,显示操作成功但没有一个O/I 口有输出信号,毛病出在哪里呢?内部频率选的是11.0592。后来又将程序导入原有STC11F08XE芯片结果8灯全部闪烁状可能是速度变快了,为什么呢?求解!
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1