各位高手快進來看一下
我采用AT89C52 用C51編寫一個控制系統軟件,經過KEIL C51編譯過後,實際運行中出現程序跑飛的現象,因為我的系統是逐步增加功能的方式進行調試,每增加一個功能就不斷反復驗證直到OK后,才加入下一功能,但發現後來隨程序不斷的增加,就出現一些怪現象,甚至CPU無法正常復位跑程序,因為程序從理論上是通過的,所以直接懷疑經KEIL C51編譯后出現自動編排的碓棧空間不足造成程序跑飛,分析產生的M51文件,發現很奇怪為什麼 STACK 放在idata 區的0x66,而且從直接跟在前面的data變量後面,所以只有26字節空間,采用軟件仿真有時可看到sp_max:0x7c,所以很容易造成STACK不足,請教各位KEIL C51高手,怎樣才能人為地將STACK放在idata區的ox20
請看下面M51文件的變量分配空間:
* * * * * * * D A T A M E M O R Y * * * * * * *
REG 0000H 0008H ABSOLUTE "REG BANK 0"
DATA 0008H 0016H UNIT ?DT?MAINLOOP
001EH 0002H *** GAP ***
DATA 0020H 0006H BIT_ADDR ?BA?IRQ
DATA 0026H 0001H BIT_ADDR ?BA?MAINLOOP
BIT 0027H.0 0002H.0 UNIT _BIT_GROUP_
BIT 0029H.0 0001H.0 UNIT ?BI?DRIVER
BIT 002AH.0 0000H.5 UNIT ?BI?IRQ
BIT 002AH.5 0000H.3 UNIT ?BI?MAINLOOP
BIT 002BH.0 0000H.2 UNIT ?BI?VIIC_C51
002BH.2 0000H.6 *** GAP ***
DATA 002CH 0026H UNIT ?DT?IRQ
DATA 0052H 0011H UNIT _DATA_GROUP_
IDATA 0063H 0003H UNIT ?ID?MAINLOOP
IDATA 0066H 0001H UNIT ?STACK
各位高手幫幫忙啊!我已經沒有辦法 了。在下感激不盡!
发表时间:2004年4月6日8:58:51