音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

路過的高手,進來幫忙救救火!

作者:z41992929 欄目:單片機
路過的高手,進來幫忙救救火!

小弟是才入這個行當(dāng)不久,最近寫了個程序,可就是調(diào)試不過去,錯誤信息如下:
linking...
*** ERROR L107: ADDRESS SPACE OVERFLOW
     SPACE:   IDATA   
     SEGMENT: ?STACK
     LENGTH:  0001H
*** ERROR L107: ADDRESS SPACE OVERFLOW
     SPACE:   IDATA   
     SEGMENT: ?STACK
     LENGTH:  0001H
*** ERROR L119: REFERENCE MADE TO ERRONEOUS SEGMENT
     SEGMENT: ?C_C51STARTUP
     MODULE:  D:\KEIL\C51\LIB\C51S.LIB (?C_STARTUP)
     ADDRESS: 23B7H
Program Size: data=242.3 xdata=0 code=9210
Target not created

這個程序只使用了定時器0和串行口中斷(低優(yōu)先級),函數(shù)嵌套最大4層,定義的外部變量占用4DH--FFH空間(太多了?),留給stack和局部變量的有36bytes,在局部變量里用的多的就是一個25byte的數(shù)組。。。。

小弟有幾點疑問,望高手指點哈
1. 象第1和2個錯誤是不是堆棧出錯,比如溢出或是修改了堆棧指針(我在main函數(shù)里改過)?然后為什么長度就只有1H。。。?
2.第3個是不是說調(diào)用了沒定義的段?但是startup早被我刪掉了,怎么會憑空蹦出來呢?還有那個地址23B7H是指的是出錯的地方?

  小弟先拜過各位了。。

2樓: >>參與討論
劍寒情暖
用的什么CPU?
 
3樓: >>參與討論
cxd731
80H~FFH 的空間是單片機自己用了,你不能用
IDATA就是指這部分地址空間

4樓: >>參與討論
z41992929
AT89C51RC2

  8051 controller with PCA, DUAL DPTR, WDT
40 MHz High-Speed Architecture, X2 function, 32 I/O lines
3 Timers/Counters, 9 Interrupts/4 priority levels, SPI, UART
32K FLASH, 256 Bytes on-chip RAM, additional 1K XRAM

資源應(yīng)該還是比較夠的。。。以后會不會換型號就要看老板的了,不過不管換不換對程序影響應(yīng)該不是很大

呵呵,敬侯樓上的高手reply。。。。

5樓: >>參與討論
劍寒情暖
把至少一半的變量和數(shù)組定義成idata
 
6樓: >>參與討論
z41992929
不會吧!

我查了規(guī)格書,那高128 byte與SFR是不沖突的,雖然地址一樣,但是在單片機訪問機制上決定了不會沖突的,再說了,廠家干嘛要放256RAM進來,我想應(yīng)該是別的原因吧。。。。還是謝謝你!呵

7樓: >>參與討論
z41992929
劍寒情暖,IDATA里全是外部變量和數(shù)組

  RAM里很擠啦,在data區(qū) 50--7F也定義了外部變量,但是不定義成外部變量不行,要用的。。。

8樓: >>參與討論
z41992929
幫幫忙啊,小弟先拜過各位高手了!!
 
9樓: >>參與討論
sharks
你的RAM不夠了!
 
10樓: >>參與討論
xb
試試換個模式
你看看你的編譯選項里編譯模式尸什么模式。如果是小模式,改成大模式試試。

11樓: >>參與討論
z41992929
換了模式4了。。。有點問題。。。

  換了COMPACT模式后,變量從data區(qū)跳了29個到xdata區(qū),但是錯誤還是和上面的一樣,不解啊。。。

  補充:我定義的外部變量全是用“_at_”定位了的,不曉得這有沒有影響,但是影響應(yīng)該是不大的

   堆棧指針是不是由編譯系統(tǒng)來定,編程不用管的,那可重入函數(shù)的指針是怎么運行的??

  小弟還不行啊,還請各位多多提攜!

12樓: >>參與討論
z41992929
謝謝樓上各位,搞定了

  我說出來給大家共享一下,不知道是不是這個原因,總之是ok了

  我定義的外部變量全用“_at_”定位,那么在編譯的時侯編譯器不會去優(yōu)化變量的存儲,但是又存在有些外部變量未使用,白白占用了寶貴的RAM空間;后來我試著刪掉了所有的“at”,讓編譯器自己定位,結(jié)果就ok了

  我估計是優(yōu)化掉了未使用的變量,并發(fā)現(xiàn)堆棧指針SP定位在IDATA區(qū)的頂部,驗證了那句:堆棧永遠處在數(shù)據(jù)區(qū)的上方。(原先我自己還初始化了SP,自作聰明??哎。。)

  不知道我的理解是否正確,如有錯誤,請各位高手及時指點!

13樓: >>參與討論
szzfq61
就是你不該去‘指定‘IDATA的啦!只管申請就好,但別溢出
 
14樓: >>參與討論
不熔玉石
小結(jié)
不必指定地址,防止遞歸調(diào)用等RAM大量使用的情況(除非你能確定RAM夠用),
就很少出現(xiàn)SP溢出,即使出現(xiàn),查看匯編代碼,也可以很快解決問題。

15樓: >>參與討論
z41992929
可能RAM不夠用列

 現(xiàn)在程序也改得差不多了,大大小小有20幾個函數(shù),調(diào)用深度有4層,定義了一個可重入函數(shù),后來看匯編代碼,發(fā)現(xiàn)sp已在0XF3,空間不夠啊,估計還是要用內(nèi)部XDATA的,就是不懂用它,不會和用外部XDATA一樣吧??高手指點哈,小弟謝了!

16樓: >>參與討論
jackf125
data,idata,xdata(MOVX)
 
參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
有人在用PSoC這種新處理器嗎???
電機正反轉(zhuǎn)問題,圖。。!高手幫忙,謝謝!
EM78P153S的CODE操作寄存器修改?幫幫我啊
有熟悉通訊產(chǎn)品的軟件的人嗎
【畢業(yè)一年一點不平凡經(jīng)歷,不平常感受,有了不平常自信】大修訂
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號