全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1881
推到 Plurk!
推到 Facebook!

請教一個有關51 記憶體與宣告問題~

答題得分者是:handystudio
dogcandoit
一般會員


發表:9
回覆:5
積分:2
註冊:2011-09-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-10-01 18:20:04 IP:140.125.xxx.xxx 訂閱
請教一個有關51 記憶體與宣告問題~
目前採用AT89S52的晶片 在規格上為
內部具有8kByte的程式記憶體(Flash Rom)
內部具有256Byte的資料記憶體(Data RAM)
採用Keil C
根據以上的規格~
1.上述所說的程式記憶體指的是程式行數的大小嗎!!?
2.上述所說的資料記憶體指的是在執行程式時,需要給晶片記憶的資料量大小嗎!!?宣告的變數名稱大小是否涵蓋在此資料記憶體內。
3.那如何觀察或程式可以得知目前程式記憶體&&資料記憶體 各已使用了多少!?
4.如果現在我要寫一個程式~記錄一個地圖的資訊~先不管宣告多少變數所佔用掉的資料記憶體
如果如上所述只有256Byte的資料記憶體~而我又需要記錄257個點,採用陣列1個點宣告1Byte
等於無法編譯過~?除了再外接資料記憶體外無解嗎!!?那這又跟編譯軟體(Keil C )有關嗎?
5.上網蒐尋過宣告變數除了像一般的int外,還有像是 int data 、int idata、int xdata
會對資料記憶體產生什麼影響嗎~到現在還是不懂實際用法~與何時該採用哪種~
謝~
kib72377
高階會員


發表:1
回覆:217
積分:238
註冊:2004-11-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-10-02 00:10:57 IP:219.69.xxx.xxx 訂閱
 1.  存放程式指令碼的區域
2. 那個..實際上等同 暫存器.
3. 組譯編譯之後會有說明

handystudio
高階會員


發表:1
回覆:81
積分:106
註冊:2005-03-26

發送簡訊給我
#3 引用回覆 回覆 發表時間:2011-10-08 01:45:29 IP:114.37.xxx.xxx 訂閱
1.上述所說的程式記憶體指的是程式行數的大小嗎!!?
=> 不是,是原始程式碼組譯後,產生機械碼的大小,Keil C 組譯後,會顯示大小.

2.上述所說的資料記憶體指的是在執行程式時,需要給晶片記憶的資料量大小嗎!!?宣告的變數名稱大小是否涵蓋在此資料記憶體內。
=> 不是,是被你程式使用的變數、堆疊或緩衝區等總合最大數量,宣告的變數大小也含在裡面

3.那如何觀察或程式可以得知目前程式記憶體&&資料記憶體 各已使用了多少!?
=> Keil C 組譯後,會顯示資訊, Program Size : data=60.5 xdata=0 code=1470

4.如果現在我要寫一個程式~記錄一個地圖的資訊~先不管宣告多少變數所佔用掉的資料記憶體
如果如上所述只有256Byte的資料記憶體~而我又需要記錄257個點,採用陣列1個點宣告1Byte
等於無法編譯過~?除了再外接資料記憶體外無解嗎!!?那這又跟編譯軟體(Keil C )有關嗎?
=> Keil compiler 在組譯時,會檢查你程式用的資料記憶體是否超過,包含堆疊記憶體,堆疊記憶體是必需要的, 所以程式能用的,一定小於256,編譯軟體是在檢查你程式的合法性,當然與編譯軟體有關.

5.上網蒐尋過宣告變數除了像一般的int外,還有像是 int data 、int idata、int xdata
會對資料記憶體產生什麼影響嗎~到現在還是不懂實際用法~與何時該採用哪種~
=> 256 的資料記憶體 分前128 與 後 128, data 是前128, idata是後128, xdata 是外部記憶體,存取速度以前128 的定址時間最快,何時該採用哪種是看你要處理的資料性質為何,寫程式是要整體性的考慮,要有實際的程式用途敘述,才決定該採用哪種,比方只使用幾十個memory,當然就不考慮 xdata
===================引 用 dogcandoit 文 章===================
請教一個有關51 記憶體與宣告問題~
目前採用AT89S52的晶片 在規格上為
內部具有8kByte的程式記憶體(Flash Rom)
內部具有256Byte的資料記憶體(Data RAM)
採用Keil C
根據以上的規格~
1.上述所說的程式記憶體指的是程式行數的大小嗎!!?
2.上述所說的資料記憶體指的是在執行程式時,需要給晶片記憶的資料量大小嗎!!?宣告的變數名稱大小是否涵蓋在此資料記憶體內。
3.那如何觀察或程式可以得知目前程式記憶體&&資料記憶體 各已使用了多少!?
4.如果現在我要寫一個程式~記錄一個地圖的資訊~先不管宣告多少變數所佔用掉的資料記憶體
如果如上所述只有256Byte的資料記憶體~而我又需要記錄257個點,採用陣列1個點宣告1Byte
等於無法編譯過~?除了再外接資料記憶體外無解嗎!!?那這又跟編譯軟體(Keil C )有關嗎?
5.上網蒐尋過宣告變數除了像一般的int外,還有像是 int data 、int idata、int xdata
會對資料記憶體產生什麼影響嗎~到現在還是不懂實際用法~與何時該採用哪種~
謝~
------
歡迎光臨 輕巧工作室
網站 http://www.handystudio.tw
控制電路板客製設計、製作交貨
8051專題製作/專題客製
dogcandoit
一般會員


發表:9
回覆:5
積分:2
註冊:2011-09-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2011-10-21 22:40:27 IP:140.125.xxx.xxx 訂閱
多謝前面2位的解答~大致上都了解了~
只是根據上面的回答中提到~
的資料記憶體分前是前是後128
1.忽然想到那code呢~code是佔用程式記憶體嗎~還是一樣是資料記憶體~~?
因為似乎有書上某處有提到code有64K!!!? 那是不是也可能拿來宣告變數使用??可以變成儲存很多資料
2.普通所宣告的 像是int char 等等 也是占用在資料記憶體嗎??可是..不是前述前後128分別為data與idata?
因為在寫程式測試過後~發現似乎將程式記憶體寫到臨界值後~忽然砍掉一個變數的int宣告就可編譯過了
才覺得怪怪的~是不是是所宣告的變數屬於同時計算在程式與資料記憶體內?

因為初學~若有哪邊觀念不正確 所以產生很多疑問 還望指正~謝~~


編輯記錄
dogcandoit 重新編輯於 2011-10-21 08:41:44, 註解 無‧
kib72377
高階會員


發表:1
回覆:217
積分:238
註冊:2004-11-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2011-10-22 12:59:39 IP:219.69.xxx.xxx 訂閱
1.  code 區可以放資料,不過要用讀取程式記憶體的指令,
然後因為code區是在rom裡,所以是read only.

2. 51的資料記憶體 要用分頁的方式,所以實際上一次只能看到128bytes (關於這點,僅憑記憶,不敢確定)

還有....你要的其實買書來看,書上都有詳細解說.
編輯記錄
kib72377 重新編輯於 2011-10-21 23:00:38, 註解 無‧
handystudio
高階會員


發表:1
回覆:81
積分:106
註冊:2005-03-26

發送簡訊給我
#6 引用回覆 回覆 發表時間:2011-10-22 19:01:45 IP:114.37.xxx.xxx 訂閱
首先對"變數"下個定義:變數故名思義, 是內容可被改變
所以定義變數時,需放置於可改變值的地方,擺錯地方,就失去變數的功能
而 code, data, idata, xdata.... 決定了資料擺放位置
data unsigned int var; => var 擺放在前128 byte 資料記憶體,(data 可省略),內容可被改變
idata unsigned int var => var 擺放在後128 byte
資料記憶體,內容可被改變
code unsigned int var => var 擺放在程式記憶體,內容不可被改變
xdata unsigned int var => var 擺放在8051外部
記憶體,如果外部記憶體是RAM,則內容可被改變,如果外部記憶體是ROM,內容不可被改變


===================引 用 dogcandoit 文 章===================
多謝前面2位的解答~大致上都了解了~
只是根據上面的回答中提到~
的資料記憶體分前是前是後128
1.忽然想到那code呢~code是佔用程式記憶體嗎~還是一樣是資料記憶體~~?
因為似乎有書上某處有提到code有64K!!!? 那是不是也可能拿來宣告變數使用??可以變成儲存很多資料
2.普通所宣告的 像是int char 等等 也是占用在資料記憶體嗎??可是..不是前述前後128分別為data與idata?
因為在寫程式測試過後~發現似乎將程式記憶體寫到臨界值後~忽然砍掉一個變數的int宣告就可編譯過了
才覺得怪怪的~是不是是所宣告的變數屬於同時計算在程式與資料記憶體內?

因為初學~若有哪邊觀念不正確 所以產生很多疑問 還望指正~謝~~


------
歡迎光臨 輕巧工作室
網站 http://www.handystudio.tw
控制電路板客製設計、製作交貨
8051專題製作/專題客製
系統時間:2024-04-24 14:54:15
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!