
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,感謝您對本站的認可!
本文鏈接:http://m.newhan.cn/zhishi/a/1684720940174828.html
版權聲明:本站內容均來自互聯網,僅供演示用,請勿用于商業和其他非法用途。如果侵犯了您的權益請與我們聯系,我們將在24小時內刪除。
本文word下載地址:keilc51中的dataidataxdatacode詳解.doc
本文 PDF 下載地址:keilc51中的dataidataxdatacode詳解.pdf
| 留言與評論(共有 0 條評論) |