線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:7883
推到 Plurk!
推到 Facebook!

請問一下 DATA SEGMENT TOO LARGE

缺席
lkkl
一般會員


發表:1
回覆:5
積分:1
註冊:2007-02-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-02-10 01:38:50 IP:59.113.xxx.xxx 訂閱
目前自己寫的程式裡面complier後出現DATA SEGMENT TOO LARGE
一個error,請問這是什麼問題咧?
想很久了 ,請各位高手幫幫忙!

謝謝


版主


發表:261
回覆:2302
積分:1667
註冊:2005-01-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-02-10 03:51:03 IP:61.70.xxx.xxx 未訂閱
你是寫 C 嗎? 用那顆chip? 它是說....程式太龐大..... 你寫的 code 應該超出你要用的chip program memory的容量了
------
-------------------------------------------------------------------------
走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!?
lkkl
一般會員


發表:1
回覆:5
積分:1
註冊:2007-02-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-02-10 11:52:03 IP:59.113.xxx.xxx 訂閱

===================引 用 文 章===================
你是寫 C 嗎? 用那顆chip? 它是說....程式太龐大.....?? 你寫的 code 應該超出你要用的chip program memory的容量了

===========================================================

我用keil c 寫C ,寫8051單晶片程式

code 超出chip program memory 意思是不是所寫的程式太大?

還是他所佔用的記憶體太大?

有辦法改善嗎?

版主


發表:261
回覆:2302
積分:1667
註冊:2005-01-04

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-02-10 14:59:37 IP:61.70.xxx.xxx 未訂閱
是的

解決辦法 --> 換容量大一點的chip
或改用組合語言寫
===================引 用 文 章===================


我用keil c 寫C ,寫8051單晶片程式

code 超出chip program memory 意思是不是所寫的程式太大?

還是他所佔用的記憶體太大?

有辦法改善嗎?
------
-------------------------------------------------------------------------
走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!?
processior
一般會員


發表:18
回覆:9
積分:10
註冊:2003-08-24

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-02-12 11:12:37 IP:61.221.xxx.xxx 訂閱

===================引 用 文 章===================
是的

解決辦法 --> 換容量大一點的chip
?????????????????????? 或改用組合語言寫
===================引 用 文 章===================


我用keil c 寫C ,寫8051單晶片程式

code 超出chip program memory 意思是不是所寫的程式太大?

還是他所佔用的記憶體太大?

有辦法改善嗎?

一般而言8051的programe memory 大概8k要超過比較少見除非你的程式很大
如果是code memory超過就要用擴充記憶體
不過我覺得你的情形因該事data memory超過這比較常見
8051大概有128 byte的內部data memory
8052大概有256 byte的內部data memory
如果你是8052可以使用第二顆的記憶體也就是80h~FFh
你要將變數資料宣告成
BYTE idata 變數名稱 這樣keil c就會將他放在第二顆記憶體了
如果你要更詳細的知道到底是data memory或者是code memory超過
你可以到你程式的資料夾中去找依各 *.m51的檔案
他是keil c配置你記憶體的內容

lkkl
一般會員


發表:1
回覆:5
積分:1
註冊:2007-02-10

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-02-12 13:44:42 IP:59.113.xxx.xxx 訂閱

===================引 用 文 章===================

===================引 用 文 章===================
是的

解決辦法 --> 換容量大一點的chip
?????????????????????? 或改用組合語言寫
===================引 用 文 章===================


我用keil c 寫C ,寫8051單晶片程式

code 超出chip program memory 意思是不是所寫的程式太大?

還是他所佔用的記憶體太大?

有辦法改善嗎?
==============================================================
一般而言8051的programe memory 大概8k要超過比較少見除非你的程式很大
如果是code memory超過就要用擴充記憶體
不過我覺得你的情形因該事data memory超過這比較常見
8051大概有128 byte的內部data memory
8052大概有256 byte的內部data memory
如果你是8052可以使用第二顆的記憶體也就是80h~FFh
你要將變數資料宣告成
變數名稱 BYTE idata這樣keil c就會將他放在第二顆記憶體了
如果你要更詳細的知道到底是data memory或者是code memory超過
你可以到你程式的資料夾中去找依各??? *.m51的檔案
他是keil c配置你記憶體的內容

=============================================

後來發現是data merory太大,請問宣告變數BYTE idata 可以宣告一個陣咧嗎?
例如:BYTE idata MESS[ ]="VCM V1.0 CONTROL ....";

如果不能請問該如何宣告?
processior
一般會員


發表:18
回覆:9
積分:10
註冊:2003-08-24

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-02-14 16:02:13 IP:61.221.xxx.xxx 訂閱
 可以阿當然可以用idata來宣告陣列
idata就是8052的另一顆data memory
lkkl
一般會員


發表:1
回覆:5
積分:1
註冊:2007-02-10

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-02-23 15:26:25 IP:59.113.xxx.xxx 訂閱

===================引 用 文 章===================
?可以阿當然可以用idata來宣告陣列
idata就是8052的另一顆data memory
==============================================
過年期間都沒有寫程式

請問一下 我用idata來宣告

comlier後出現non-address/-constant initializer

是怎麼回事咧??看不懂 謝謝大大解答
processior
一般會員


發表:18
回覆:9
積分:10
註冊:2003-08-24

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-02-26 16:46:40 IP:61.221.xxx.xxx 訂閱
可不可以把你的code或者語法放上來阿這樣我看不懂事什麼問題ㄟ
lkkl
一般會員


發表:1
回覆:5
積分:1
註冊:2007-02-10

發送簡訊給我
#10 引用回覆 回覆 發表時間:2007-02-27 23:38:14 IP:122.126.xxx.xxx 訂閱

===================引 用 文 章===================
可不可以把你的code或者語法放上來阿這樣我看不懂事什麼問題ㄟ
================================================
這是我把code拍照下來的網址
http://www.wretch.cc/album/show.php?i=lkkl&b=6&f=1761808703&p=0
stanely
一般會員


發表:1
回覆:8
積分:1
註冊:2002-07-29

發送簡訊給我
#11 引用回覆 回覆 發表時間:2007-03-02 22:25:46 IP:218.168.xxx.xxx 訂閱
看了你貼的程式圖,我不懂你有幾行的寫法用意為何.
idata aaa[] = "1"; // ?????

>BYTE idata MESS[ ]="VCM V1.0 CONTROL ....";
Keil C當然可以這樣寫,只是如果內容是這類的constant的話,建議放到code去
BYTE code szVer[15] = {'V', 'C', 'M', ' ', 'V', '1', '0', ' ', 'C', 'O', 'N', 'T', 'R', 'O', 'L'};
------
I like linux.
I like programming.
I like everything.
lkkl
一般會員


發表:1
回覆:5
積分:1
註冊:2007-02-10

發送簡訊給我
#12 引用回覆 回覆 發表時間:2007-03-02 23:15:36 IP:122.126.xxx.xxx 訂閱

===================引 用 文 章===================
看了你貼的程式圖,我不懂你有幾行的寫法用意為何.
idata aaa[] = "1";? // ?????

>Keil C當然可以這樣寫,只是如果內容是這類的constant的話,建議放到code去
BYTE code szVer[15] = {'V', 'C', 'M', ' ', 'V', '1', '0', ' ', 'C', 'O', 'N', 'T', 'R', 'O', 'L'};

=====================================================
很感謝 不好意思 那是我之前改的忘記改回來沒有發現
應該是要寫這樣 BYTE idata MESS[ ]="VCM V1.0 CONTROL ....";
只是當初想要測試一下改成單一數字會不會沒出現這種問題
這樣我就應該懂了 謝謝
系統時間:2024-04-25 18:53:46
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!