久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2354|回復: 11
打印 上一主題 下一主題
收起左側

關于51單片機內存理解問題

[復制鏈接]
回帖獎勵 20 黑幣 回復本帖可獲得 1 黑幣獎勵! 每人限 1 次(中獎概率 50%)
跳轉到指定樓層
樓主
ID:427646 發表于 2020-12-10 17:45 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
在看51單片機代碼的時候,有一個疑問。

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

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

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

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


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:235200 發表于 2020-12-10 20:16 | 只看該作者
一方面可加快速度,另一方面是為了可改寫數據
回復

使用道具 舉報

板凳
ID:822755 發表于 2020-12-10 21:02 | 只看該作者
code就是程序區,一般都是只讀的。有可能你看的程序在燒錄時,同時在0x3A00中裝入一些常數。
code區的指針不能強制轉換為xdata, idata, data等指針類型
回復

使用道具 舉報

地板
ID:160500 發表于 2020-12-10 21:08 | 只看該作者
code是代碼區,也就是ROM里,xdata是外部RAM,在你這個代碼里沒有使用到gCode,只有一個copy它的代碼,它被編譯器優化了,所以你看不到,后面使用的都是gXRam變量。至于類型轉換,這個不太清楚,沒有這樣用過。估計和編譯器有關系
回復

使用道具 舉報

5#
ID:235200 發表于 2020-12-10 22:52 | 只看該作者
將code區轉換為data區,起始地址會不會改變?gCode的地址仍然是 0x3A00?gXRam的地址仍然是0x0,但gXRam區的數據變化了
回復

使用道具 舉報

6#
ID:427646 發表于 2020-12-11 09:53 | 只看該作者
經過測試:
------------------------
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,編譯沒有錯誤警告,單片機為 C8051F340。
串口打印結果為:
x:5000
6
c:3a00
x:3a00
-1
5
--------------------------
code定義的代碼貌似可以轉換為xdata,然后起始地址的值好像沒有改變。
有個疑問就是是 C8051F340 的 RAM 只有 256字節+4KB 大小為啥我可以把地址定義超過空間大?地址跟內存大小無關嗎?
回復

使用道具 舉報

7#
ID:858925 發表于 2020-12-11 21:57 | 只看該作者
xdata是外部RAM,在你這個代碼里沒有使用到gCode,只有一個copy它的代碼,它被編譯器優化了,所以你看不到,后面使用的都是gXRam變量。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

8#
ID:764088 發表于 2020-12-14 09:05 | 只看該作者
uint8  code  gCode[256] _at_ 0x3A00; // gCode 是數組
uint8  xdata gXRam[256] _at_ 0; // gXRam是數組

memcpy(gXRam, gCode, 256); //  memcpy的要求頭兩參數(gCode,gXRam)是指針類型
應該為
memcpy(&gXRam, &gCode, 256);
回復

使用道具 舉報

9#
ID:160500 發表于 2020-12-14 21:41 | 只看該作者
kjl123hh 發表于 2020-12-11 21:57
xdata是外部RAM,在你這個代碼里沒有使用到gCode,只有一個copy它的代碼,它被編譯器優化了,所以你看不到 ...

抄襲也能被獎勵??!
回復

使用道具 舉報

10#
ID:427646 發表于 2020-12-15 10:08 | 只看該作者
MikeCai 發表于 2020-12-14 09:05
uint8  code  gCode[256] _at_ 0x3A00; // gCode 是數組
uint8  xdata gXRam[256] _at_ 0; // gXRam是數組 ...

數組名就是地址
回復

使用道具 舉報

11#
ID:621026 發表于 2020-12-15 12:53 | 只看該作者

uint8  code  gCode[256] _at_ 0x3A00; // gCode 是數組
uint8  xdata gXRam[256] _at_ 0; // gXRam是數組
回復

使用道具 舉報

12#
ID:860714 發表于 2020-12-15 16:44 | 只看該作者
強制轉換為xdata, idata, data等指針類型
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99精品在线 | 国产高清一区二区 | 久久99精品久久久久久青青日本 | 玖玖玖在线 | 日本中出视频 | 香蕉大人久久国产成人av | 欧美日韩精品一区 | 欧美亚洲一区二区三区 | 久久精品—区二区三区 | 亚洲精品久久久久中文字幕二区 | 欧美精品一区二区三区在线播放 | 日韩精品一区二区久久 | 干狠狠| 欧美aaa| 国产精品一二三区 | 在线日韩视频 | 国产精品精品久久久 | 亚洲资源在线 | 一区二区视频在线观看 | 日韩精品一区二区三区四区视频 | 羞羞视频在线观看 | 欧美日韩在线一区二区 | 91久久久久| 色综合视频 | 免费三级网站 | 亚洲国产精品区 | 亚洲免费视频网站 | 国产精品一区二区三区在线 | 久久亚洲国产精品 | 色综合一区二区三区 | 欧美最猛性xxxxx亚洲精品 | 美女久久视频 | 欧美一级毛片免费观看 | 欧美日韩久久精品 | 国产精品精品视频一区二区三区 | 亚洲情侣视频 | 免费观看一级特黄欧美大片 | 日韩欧美亚洲 | 牛牛热在线视频 | 免费观看一级特黄欧美大片 | h小视频|