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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2223|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

我想問問C51單片機(jī)的運(yùn)行內(nèi)存問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:541921 發(fā)表于 2019-6-22 10:21 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
C51單片機(jī)的運(yùn)行的時候,比如說來了個遞歸的函數(shù),那么應(yīng)該需要一點運(yùn)行空間,那么這個空間來自哪里呢?能不能制定到特定的外存拓展器?
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:94031 發(fā)表于 2019-6-22 14:06 | 只看該作者
C51怎么運(yùn)行在編譯時就確定好了,問題是你為什么要干預(yù)它呢。
回復(fù)

使用道具 舉報

板凳
ID:569500 發(fā)表于 2019-6-22 15:23 | 只看該作者
關(guān)于51單片機(jī)內(nèi)存問題,一直是個疑惑大家的問題,因為51單片機(jī)是個很另類的單片機(jī)。
下面我給樓主講解一下:
51單片機(jī)之所以另類,是因為,他尋址內(nèi)存的空間,不是靠總線,是用指令的方式。
51單片機(jī)有以下幾個內(nèi)存模塊組成:
1】ROM或者Flash,叫程序存儲區(qū),你寫的程序是存在這里面的,上電后從這里面執(zhí)行。
程序存儲區(qū)也分為片內(nèi)和片外,一般來說,現(xiàn)在的51很多已經(jīng)做到了64K,所以很少有外擴(kuò)
片外Flash或者片外的Rom了,F(xiàn)lash或者Rom不管是片內(nèi)還是片外的,只能用來定義常量,是用code來修飾,也就是說,用code來修飾的東西,在程序運(yùn)行過程中,不能修改;
2】RAM有------內(nèi)部RAM的低128位(00-7F),對應(yīng)C語言就是data,比如我定義一個變量,
              data unsigned char Var = 0;
那么,這個Var變量就是放在內(nèi)部的低128位Ram中
               -------內(nèi)部RAM的高128位(80-FF),對應(yīng)C語言就是idata,比如我定義一個變量,
idata unsigned char Var = 0;
那么,這個Var變量就是放在內(nèi)部的高128位Ram中
        -------特殊功能寄存器(SFR)(80-FF),對應(yīng)C語言就是Sfr比如我定義一個變量,
Sfr unsigned char Var = 0x90;
那么,這個Var變量就是放在內(nèi)部的特殊功能寄存器中,這是你對Var操作,相當(dāng)于操作一個特殊的寄存器,但是小心,不能隨便定義Sfr變量,很危險
              ------外部RAM 64K(0000-FFFF)
外部的RAM可以擴(kuò)展到65536個,但是前256個算是一頁,這一頁比較特殊,是用
pdata來修飾的,當(dāng)然,也可以用xdata來修飾。
除了第一頁的256個以外的其他65280個空間,只能用xdata來修飾;
回過頭來討論pdata和xdata,這兩個都能修飾外部Ram的第一頁,但是,Pdata只能修飾第一頁,即最前面的256個外部Ram,那么,這最前面的256個到底用Pdata還是Xdata好的呢?
答案是Pdata,因為Xdata修飾的變量,用的是DPTR尋址,Pdata用的是R0和R1.DPTR因為是16位的,所以可以覆蓋整個的64K外部Ram,R0和R1是8位,所以只能尋址最前面的256個,也就是外部Ram的第一頁,但是,用R0尋址,比DPTR快一倍,代碼也小的很多

樓主又疑惑了,好多地址是重復(fù)的,比如,我向80H地址寫一個數(shù)值,單片機(jī)怎么知道讀的是內(nèi)部的高128位RAM?還是SFR?還是外部64K的RAM呢?

答案是用指令,如果是直接尋址,那么訪問的就是SFR,如果是R0或者R1間接尋址,就是內(nèi)部高128位RAM,如果是DPTR或者是R0,R1間接尋址,且配合的是MovX指令,那么就是訪問外部64KRAM中的第80H個地址。

概括一下來說,51的內(nèi)存由以下組成:
1----程序存儲器(包括片內(nèi)Flash或Rom,也包括片外Flash或Rom,C語言用Code定義)
2----內(nèi)部低128位Ram,C語言用data定義
3---內(nèi)部高128位Ram,C語言用idata定義
4---內(nèi)部SFR,C語言用Sfr定義
5---外部65536個Ram(通常,很多單片機(jī)廠家不會給你擴(kuò)展那么多的,一般來說擴(kuò)展256個字節(jié)或者1024個字節(jié)就差不多了,最近宏晶的出了個擴(kuò)展4096字節(jié)的。這65536字節(jié)的Ram,前256個可以用Pdata修飾,也可以用Xdata修飾,超過256個之后的,只能用Xdata修飾)

以上所說的只是針對51內(nèi)核的單片機(jī),其他內(nèi)核的,像ARM之類的,不是這種結(jié)構(gòu)的。

最后,回答樓主的問題:
片外存儲區(qū)是什么?
這個問題太模糊,答案可以是外擴(kuò)的Flash,也可以說是外擴(kuò)的RAM,
如果問題是這么問的:
程序或者常量存儲在片外存儲區(qū),這個片外存儲區(qū)指的是什么?
答案是外擴(kuò)Flash;
如果問題是---變量存儲在片外存儲區(qū),這個片外存儲區(qū)指的是什么?
答案是外擴(kuò)RAM;
一般來說,如果不指明的話,外內(nèi)存儲區(qū),行業(yè)內(nèi)人士指的是外部的Ram。

片內(nèi)存儲器是什么?是不是就是內(nèi)部的E2PROM?
片內(nèi)存儲區(qū)一般來說,指的是內(nèi)部的Ram,包括高128位(idata)和低128位(data)
片內(nèi)存儲器,這個說法我沒聽說過,可能是EEPROM吧。
參考鏈接:https://www.cnblogs.com/yygsj/p/4974895.html
回復(fù)

使用道具 舉報

地板
ID:401564 發(fā)表于 2019-6-22 17:22 | 只看該作者
遞歸的重點不在于內(nèi)存,C編譯器會自動分配的。
遞歸主要是占用堆棧,8051的堆棧是軟件堆棧,它是自動向下壓的,理論上來說是無限堆棧,就是你可以一直進(jìn)棧也沒有關(guān)系。但實際上是會溢出的。
8051有128個字節(jié)的RAM,這已經(jīng)可能處理大多函數(shù)了,函數(shù)在調(diào)用的時候,一個變量會占用一個地址的,返回的時候,又會釋放這個地址了,除非你一個函數(shù)定義了255個變量,那你就要考慮一下內(nèi)存的問題了。如果不是的話,那就不要去管這個問題了,那是編譯器的事,實在是想知道,那就去學(xué)匯編,有你受的。
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美一区2区三区4区公司二百 | 久久99视频这里只有精品 | 色伊人久久 | 欧美乱操 | 成年人在线视频 | 无码一区二区三区视频 | 在线一区二区三区 | 欧美精品一区二区三区在线播放 | 久久免费看 | 日本精品视频在线观看 | 亚州综合一区 | 91社区在线观看播放 | 国产成人99久久亚洲综合精品 | 日韩一区二区黄色片 | 999精品在线| 波多野结衣精品在线 | 日韩网站在线观看 | 亚洲 日本 欧美 中文幕 | 午夜日韩| 99精品网站| 青青草av | 中文字幕高清av | 一区二区三区四区国产 | av色在线 | 国产精品一区二区视频 | 黄色a三级 | 国产高清视频在线播放 | 日韩精品专区在线影院重磅 | 黑人巨大精品欧美一区二区免费 | 成人久久久 | 操网站| 精品国产乱码久久久久久蜜臀 | 一本综合久久 | 中文字幕在线视频网站 | 成年人视频免费在线观看 | 免费观看一级特黄欧美大片 | 亚洲欧美日韩在线 | 午夜久久久 | 中文字幕中文字幕 | 美美女高清毛片视频免费观看 | 污污免费网站 |