欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 關(guān)于51單片機(jī)內(nèi)存理解問(wèn)題 [打印本頁(yè)]

作者: 842790397    時(shí)間: 2020-12-10 17:45
標(biāo)題: 關(guān)于51單片機(jī)內(nèi)存理解問(wèn)題
在看51單片機(jī)代碼的時(shí)候,有一個(gè)疑問(wèn)。

代碼如下:
-------------------------

uint8  code  gCode[256] _at_ 0x3A00;
uint8  xdata gXRam[256] _at_ 0;

memcpy(gXRam, gCode, 256);
-------------------------
定義地址空間后,gCode 沒(méi)有賦值,拷貝到 Ram 中,后續(xù)都是操作 gXRam,是為了加快執(zhí)行速度嗎?還是有其他的意義。
還有轉(zhuǎn)換問(wèn)題:
---------------------

(uint8 xdata *)gCode
---------------------
將code區(qū)轉(zhuǎn)換為data區(qū),起始地址會(huì)不會(huì)改變? gCode 是否等于 0x3A00?



作者: csmyldl    時(shí)間: 2020-12-10 20:16
一方面可加快速度,另一方面是為了可改寫數(shù)據(jù)
作者: KongQuan    時(shí)間: 2020-12-10 21:02
code就是程序區(qū),一般都是只讀的。有可能你看的程序在燒錄時(shí),同時(shí)在0x3A00中裝入一些常數(shù)。
code區(qū)的指針不能強(qiáng)制轉(zhuǎn)換為xdata, idata, data等指針類型
作者: liuzx66    時(shí)間: 2020-12-10 21:08
code是代碼區(qū),也就是ROM里,xdata是外部RAM,在你這個(gè)代碼里沒(méi)有使用到gCode,只有一個(gè)copy它的代碼,它被編譯器優(yōu)化了,所以你看不到,后面使用的都是gXRam變量。至于類型轉(zhuǎn)換,這個(gè)不太清楚,沒(méi)有這樣用過(guò)。估計(jì)和編譯器有關(guān)系
作者: csmyldl    時(shí)間: 2020-12-10 22:52
將code區(qū)轉(zhuǎn)換為data區(qū),起始地址會(huì)不會(huì)改變?gCode的地址仍然是 0x3A00?gXRam的地址仍然是0x0,但gXRam區(qū)的數(shù)據(jù)變化了
作者: 842790397    時(shí)間: 2020-12-11 09:53
經(jīng)過(guò)測(cè)試:
------------------------
u8  code  gCode[256] _at_ 0x3A00;
u8  xdata gXRam[256] _at_ 0x5000;

*gXRam = 6;
printf("%p\n", gXRam);
printf("%bd\n", *gXRam);
printf("%p\n", gCode);

*((u8 xdata *)gCode) = 5;

printf("%p\n", (u8 xdata *)gCode);
printf("%bd\n", *gCode);
printf("%bd\n", *((u8 xdata *)gCode));
-----------------------------
軟件是 keil5,編譯沒(méi)有錯(cuò)誤警告,單片機(jī)為 C8051F340。
串口打印結(jié)果為:
x:5000
6
c:3a00
x:3a00
-1
5
--------------------------
code定義的代碼貌似可以轉(zhuǎn)換為xdata,然后起始地址的值好像沒(méi)有改變。
有個(gè)疑問(wèn)就是是 C8051F340 的 RAM 只有 256字節(jié)+4KB 大小為啥我可以把地址定義超過(guò)空間大小?地址跟內(nèi)存大小無(wú)關(guān)嗎?
作者: kjl123hh    時(shí)間: 2020-12-11 21:57
xdata是外部RAM,在你這個(gè)代碼里沒(méi)有使用到gCode,只有一個(gè)copy它的代碼,它被編譯器優(yōu)化了,所以你看不到,后面使用的都是gXRam變量。
作者: MikeCai    時(shí)間: 2020-12-14 09:05
uint8  code  gCode[256] _at_ 0x3A00; // gCode 是數(shù)組
uint8  xdata gXRam[256] _at_ 0; // gXRam是數(shù)組

memcpy(gXRam, gCode, 256); //  memcpy的要求頭兩參數(shù)(gCode,gXRam)是指針類型
應(yīng)該為
memcpy(&gXRam, &gCode, 256);

作者: liuzx66    時(shí)間: 2020-12-14 21:41
kjl123hh 發(fā)表于 2020-12-11 21:57
xdata是外部RAM,在你這個(gè)代碼里沒(méi)有使用到gCode,只有一個(gè)copy它的代碼,它被編譯器優(yōu)化了,所以你看不到 ...

抄襲也能被獎(jiǎng)勵(lì)??!
作者: 842790397    時(shí)間: 2020-12-15 10:08
MikeCai 發(fā)表于 2020-12-14 09:05
uint8  code  gCode[256] _at_ 0x3A00; // gCode 是數(shù)組
uint8  xdata gXRam[256] _at_ 0; // gXRam是數(shù)組 ...

數(shù)組名就是地址
作者: lzm102968    時(shí)間: 2020-12-15 12:53

uint8  code  gCode[256] _at_ 0x3A00; // gCode 是數(shù)組
uint8  xdata gXRam[256] _at_ 0; // gXRam是數(shù)組
作者: Sinner~    時(shí)間: 2020-12-15 16:44
強(qiáng)制轉(zhuǎn)換為xdata, idata, data等指針類型




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1