
keilc51中的dataidataxdatacode详解
51单⽚机采⽤哈佛结构。内存空间编址有重叠。可以在不同总线(本⽂称其为总线域,简称域)上定义不同的变量。在keilc51中定义了data
idata xdata code⼏种域修饰符。这些修饰符决定了变量访问⽅式。
data:⽤mov直接访问的内部RAM
idata:⽤mov @间接访问的内部RAM
xdata:⽤movx访问的外部RAM
code:⽤movc访问的rom
这些假定以上以及类型为where。数据类型为type。
⼲货:
变量(包括指针)默认存储在data中。指针能够智能的指向所有的域。
指定变量(包括指针)在某个域时,域修饰符写在变量类型后⾯。type where value,type* where point。
想让指针只能指向某个域type where* point
指定指针的域并指定指针本⾝的存储域 type where* where point
const写在前⾯const type where* where point
声明struct类型不⽤where。定义变量时候⽤。struct变量不能跨域。
以下是⼲货来源
⼀下是实验结果
type value :data中的变量
where type value :where中的变量
type where value :where中的变量
where type where value 是的,没错,这种神经病写法也是在where中的变量
type * point data中的跨域指针,
where type * point 存储在where中的跨域指针
type * where point 存储在where中的跨域指针
where type * where point 这种更神经病的写法也是存储在where中的跨域指针
type where* point 存储在内部RAM中只能指向where的指针
where type where* point 存储在where中指向where的指针
type where* where point 存储在where中指向where的指针
很乱是吧?我们整理⼀下
聪明的同学已经发现规律了,是不是?
作为c不得不提的⼀种变量——指针。keil c51中还存在⼀个指针,这个指针实际上是sizeof(type*) + 1的。有⼀个字节来存储指针指向的
区域。访问*point时对于不同区域的数据使⽤不同的指令。也就是说这中指针可以访问所有的总线。暂且称其跨域指针。
既然指针也是变量“指向什么东西”是指针变量的类型。那么互忽略类型,把这些写法调换顺序。
发现规律了么?data,idata,xdata,code可以在类型前,也可以在类型之后,或者前后都有。
定义变量时,c类型最前⾯最着最后⾯添加(或者前后都有)总线域修饰符,可以决定该变量存储的位置。前后都不加,默认是
data。
我们在单独关⼼⼀下指针。
发现规律了么?type *是可以指向任何区域的指针。决定指针指向位置时候域修饰符必须在type和*之间。
⾄于const struct,呵呵⾃⼰试试就知道了。

本文发布于:2023-05-22 10:02:19,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/zhishi/a/1684720940174828.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:keilc51中的dataidataxdatacode详解.doc
本文 PDF 下载地址:keilc51中的dataidataxdatacode详解.pdf
| 留言与评论(共有 0 条评论) |