|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
ads編譯后運(yùn)行和匯編不一致的的奇怪問題。請教。! |
| 作者:zhaojiude 欄目:ARM技術(shù) |
在LPC2132,ADS編譯,AXD調(diào)試。 前2天發(fā)現(xiàn)的跳不出for循環(huán)的問題,今天在匯編里跟蹤,發(fā)現(xiàn)是寄存器的31位置1,一個很大的數(shù)據(jù),導(dǎo)致程序越界。但為什么會出現(xiàn)該現(xiàn)象,請各位看看,請教周工公司的技服,說沒遇見過,也沒好的辦法,再次請教高手,F(xiàn)象如下: 函數(shù)調(diào)用關(guān)系如下: main()-->MyDeCodeAndProc(uint8 *Buffer,uint16 Length)-->ProcMeter(unsigned CHAR *RecvData,uint16 Length)-->SaveWaterData(unsigned CHAR WaterID[],unsigned CHAR *WaterData,uint16 Len) 在SaveWaterData()函數(shù)里,有以下語句: volatile uint32 LLen; LLen = (uint32)Len; for(i=0;i < (uint16)LLen;i++) { n = 16 + i; DataFlashBuffer[n] = *wdata; wdata++; //if(i>=Length) //異常后的測試 //break; } uint16 Len的參數(shù)傳遞發(fā)生了改變--在C調(diào)試窗口是正確的,進(jìn)入反匯編查看,本來是0x0038的值,在反匯編窗口R2寄存器的值為0x80000038, 在進(jìn)入SaveWaterData()函數(shù)后,如果在for循環(huán)的條件判斷處為i〈Len;則跳不出for循環(huán),按上述先定義一個uint32變量,再強(qiáng)制轉(zhuǎn)換,正常;但在進(jìn)入該函數(shù)里調(diào)用的另一個函數(shù)后,又出現(xiàn)上述問題。奇怪!,我改過堆棧,改過程序的定位,都沒影響,請教各位了。。。 |
| 2樓: | >>參與討論 |
| 作者: zhaojiude 于 2005/12/27 15:52:00 發(fā)布:
自己頂一下 自己頂一下 |
|
| 3樓: | >>參與討論 |
| 作者: lws 于 2005/12/27 15:57:00 發(fā)布:
呵呵,同病相憐 幾乎和你一樣,之前是好的,不過就加了幾個函數(shù)和變量就這樣了,每次加載程序到RAM后總是跳到一個固定地址,不是到main,用以前的沒問題,莫名其妙. |
|
| 4樓: | >>參與討論 |
| 作者: zhaojiude 于 2005/12/27 16:13:00 發(fā)布:
自己再頂一下 自己再頂一下 |
|
| 5樓: | >>參與討論 |
| 作者: zhaojiude 于 2005/12/27 16:40:00 發(fā)布:
再頂再頂再頂再頂 |
|
| 6樓: | >>參與討論 |
| 作者: 深思 于 2005/12/28 9:35:00 發(fā)布:
re unsigned CHAR *pWaterID,unsigned CHAR *WaterData,uint16 Len uint16 i; for (i=0; i<len;i++) { ... |
|
|
|
| 免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |