|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
RAM數(shù)據(jù)存儲(chǔ)變亂的問題 |
| 作者:流金歲月 欄目:技術(shù)交流 |
我用的外部RAM是HY6264,現(xiàn)在我發(fā)現(xiàn)上電初始化好的數(shù)據(jù)在運(yùn)行一段時(shí)間之后就會(huì)變亂了,期間只是對(duì)它讀的過程,沒有寫的過程!這是什么原因?大家?guī)臀遗袛嗯袛嗄!謝謝了 |
| 2樓: | >>參與討論 |
| 作者: HIGHWAY 于 2006/10/22 11:01:00 發(fā)布:
如果電源正常,附近沒有強(qiáng)干擾,那肯定是你寫數(shù)據(jù)進(jìn)去了 亂的有規(guī)律嗎?可以分區(qū)進(jìn)行測(cè)試 |
|
| 3樓: | >>參與討論 |
| 作者: 流金歲月 于 2006/10/22 11:06:00 發(fā)布:
請(qǐng)問HIGHWAY,如何測(cè)試呢? 你好,能告訴我一個(gè)測(cè)試方法嗎?我用的是6264,它的大小應(yīng)該是8192個(gè)RAM,我現(xiàn)在用了7854個(gè),是不是數(shù)據(jù)太大的原因? |
|
| 4樓: | >>參與討論 |
| 作者: yadog 于 2006/10/22 11:08:00 發(fā)布:
re hoho 先確定下是不個(gè)別問題 要不然花大氣力不值得啊 |
|
| 5樓: | >>參與討論 |
| 作者: HIGHWAY 于 2006/10/22 11:10:00 發(fā)布:
用滿了也不會(huì)有問題,另外要注意,片選地址空間不要重疊 你的地址范圍應(yīng)該是唯一的,從什么范圍到什么范圍? 自檢的方法有很多,如果不是存儲(chǔ)重要數(shù)據(jù)的話,采用簡(jiǎn)單的寫1,寫0再讀回判斷 如果是為判斷問題所在的話,請(qǐng)?jiān)敿?xì)描述你的情況 可在寫入數(shù)據(jù)后,讀回比較等 |
|
| 6樓: | >>參與討論 |
| 作者: 平常人 于 2006/10/22 11:31:00 發(fā)布:
用示波器看一下WR信號(hào)是否有脈沖,可以很容易判斷是否有寫操作 |
|
| 7樓: | >>參與討論 |
| 作者: 流金歲月 于 2006/10/23 10:53:00 發(fā)布:
我的初始化程序是這樣的 rama ramb都是外部變量,涉及參數(shù)也都是外部變量!期間只是讀這些數(shù)據(jù),不對(duì)其更改,但是讀的時(shí)候就是有錯(cuò)的時(shí)候,然后重新上電就會(huì)再次恢復(fù)初始值 if((rama!=0xaa)||(ramb!=0xbb)) { round=0; Umax_time[0]=0;Umax_time[1]=0;Umax_time[2]=0; Umin_time[0]=0;Umin_time[1]=0;Umin_time[2]=0; U_time[0]=0;U_time[1]=0;U_time[2]=0; bianbi_u=1;bianbi_i=1; rama=0xaa; ramb=0xbb; upday=0; upday=0x1004010; //典型日上傳時(shí)間天upday uploadday=0x01; uploadhour=0x03; //上傳時(shí)間時(shí)uphour uploadmin=0x35; //上傳時(shí)間分upmin everyday=0; pth=0x01; //pt=1 ptl=0x00; //ptl cth=0; //ct=1 ctl=0x01; //ctl minuh=0x19; //minUh minul=0x80; //minUl----198v maxuh=0x23; //maxUh maxul=0x54; //MaxUl-----235.4v maxi=0x50; //MaxI 5.0A Um=220.0; city=0x3505; //市編碼,BCD碼表示 terminal=132; //終端地址,范圍0-65536 //term=0; //組地址,暫定為0 RTCDisableWP(); RTCSetYear(0x06); RTCSetMonth(0x10); RTCSetDay(0x12); RTCSetHour(0x09); RTCSetMin(0x45); RTCSetSec(0x00); RTCEnableWP(); real_ONLINE=0x55;//不實(shí)時(shí)在線,0xaa,實(shí)時(shí)在線 SEND_ATE[0]='A';SEND_ATE[1]='T';SEND_ATE[2]='E';SEND_ATE[3]='0'; SEND_ATE[4]='V';SEND_ATE[5]='1';SEND_ATE[6]=0x0d;SEND_ATE[7]=0x0a;SEND_ATE[8]=0; SEND_MIPCALL[0] ='A'; SEND_MIPCALL[1] ='T'; SEND_MIPCALL[2] ='+';SEND_MIPCALL[3] ='M'; SEND_MIPCALL[4] ='I'; SEND_MIPCALL[5] ='P'; SEND_MIPCALL[6] ='C';SEND_MIPCALL[7] ='A'; SEND_MIPCALL[8] ='L'; SEND_MIPCALL[9] ='L'; SEND_MIPCALL[10]='=';SEND_MIPCALL[11]='1'; SEND_MIPCALL[12]=','; SEND_MIPCALL[13]='"'; SEND_MIPCALL[14]='C';SEND_MIPCALL[15]='M'; SEND_MIPCALL[16]='N'; SEND_MIPCALL[17]='E'; SEND_MIPCALL[18]='T';SEND_MIPCALL[19]='"'; SEND_MIPCALL[20]=0x0d;SEND_MIPCALL[21]=0x0a;SEND_MIPCALL[22] =0; SEND_MIPCALL[23]=0; SEND_MIPCALL[24]=0; SEND_MIPCALL[25]=0; SEND_MIPCALL[26] =0; SEND_MIPCALL[27]=0; SEND_MIPCALL[28]=0; SEND_MIPCALL[29]=0; SEND_MIPCALL[30] =0; SEND_MIPCALL[31]=0; SEND_MIPCALL[33]=0; SEND_MIPOPEN[0] ='A'; SEND_MIPOPEN[1] ='T';SEND_MIPOPEN[2] ='+';SEND_MIPOPEN[3] ='M';//AT+MIPOPEN=1,1027,"058.222.252.146",06000,0 SEND_MIPOPEN[4] ='I'; SEND_MIPOPEN[5] ='P';SEND_MIPOPEN[6] ='O';SEND_MIPOPEN[7] ='P';// IPOP SEND_MIPOPEN[8] ='E'; SEND_MIPOPEN[9] ='N';SEND_MIPOPEN[10]='=';SEND_MIPOPEN[11]='1';// EN=1 SEND_MIPOPEN[12]=','; SEND_MIPOPEN[13]='1';SEND_MIPOPEN[14]='0';SEND_MIPOPEN[15]='2';// ,102 SEND_MIPOPEN[16]='7'; SEND_MIPOPEN[17]=',';SEND_MIPOPEN[18]='"';SEND_MIPOPEN[19]='0';// 7,"0 SEND_MIPOPEN[20]='5'; SEND_MIPOPEN[21]='8';SEND_MIPOPEN[22]='.';SEND_MIPOPEN[23]='2';// 58.2 SEND_MIPOPEN[24]='2'; SEND_MIPOPEN[25]='2';SEND_MIPOPEN[26]='.';SEND_MIPOPEN[27]='2';// 22.2 SEND_MIPOPEN[28]='5'; SEND_MIPOPEN[29]='2';SEND_MIPOPEN[30]='.';SEND_MIPOPEN[31]='1';// 52.1 SEND_MIPOPEN[32]='4'; SEND_MIPOPEN[33]='6';SEND_MIPOPEN[34]='"';SEND_MIPOPEN[35]=',';// 46", SEND_MIPOPEN[36]='0'; SEND_MIPOPEN[37]='8';SEND_MIPOPEN[38]='2';SEND_MIPOPEN[39]='0';// |
|
| 8樓: | >>參與討論 |
| 作者: 流金歲月 于 2006/10/24 8:16:00 發(fā)布:
有沒有人幫我解析一下,我的錯(cuò)誤所在呀! |
|
| 9樓: | >>參與討論 |
| 作者: PandaFeng 于 2006/10/24 14:02:00 發(fā)布:
是否棧開得不夠大 某個(gè)處理入棧的時(shí)候把數(shù)據(jù)沖了. |
|
| 10樓: | >>參與討論 |
| 作者: 流金歲月 于 2006/10/24 18:44:00 發(fā)布:
請(qǐng)問PandaFeng兄,我的程序沒有開sp棧! 請(qǐng)問PandaFeng兄,我的程序沒有開sp棧!是不是默認(rèn)就可以了!還是再大點(diǎn), 默認(rèn)sp=80H! |
|
| 11樓: | >>參與討論 |
| 作者: PandaFeng 于 2006/10/24 20:28:00 發(fā)布:
如果是片內(nèi)的棧,應(yīng)該也沒問題。 只能慢慢跟蹤。 用 HIGHWAY 的方法確保硬件沒問題。 看看被修改后的數(shù)據(jù)有什么特征。 另外你上面的程序可以寫得更簡(jiǎn)潔一些。 |
|
| 12樓: | >>參與討論 |
| 作者: 流金歲月 于 2006/10/25 10:26:00 發(fā)布:
只有極個(gè)別被修改! 只有極個(gè)別被修改!但是只要有錯(cuò)就會(huì)造成大錯(cuò),因?yàn)槲椰F(xiàn)上面的程序是負(fù)責(zé)通信用的!只要一個(gè)錯(cuò)將會(huì)造成通信無法進(jìn)行! 我用到data區(qū) 和idata區(qū)共計(jì)166個(gè)字節(jié) 現(xiàn)在我把SP=0xc0,可以吧! 現(xiàn)在我用的嵌套比較多!堆棧會(huì)溢出嗎? 現(xiàn)在我得程序已經(jīng)達(dá)到61Kb了 |
|
| 13樓: | >>參與討論 |
| 作者: 流金歲月 于 2006/10/25 12:00:00 發(fā)布:
我測(cè)試下來堆棧是編譯時(shí)默認(rèn)的 我測(cè)試下來堆棧是編譯時(shí)默認(rèn)的,我的data區(qū)和idata區(qū)是175時(shí),SP=0xb5, 當(dāng)data區(qū)和idata區(qū)是146時(shí),sp=0xa2,所以不可能時(shí)堆棧溢出造成的吧!因?yàn)槲椰F(xiàn)在有100個(gè)裝置,大部分可以,小部分不可以! |
|
| 14樓: | >>參與討論 |
| 作者: 流金歲月 于 2006/10/25 14:23:00 發(fā)布:
我得部分原理圖, 大家參考一下我得圖,138是作為片選地址 000 選6264 001 選AD高8位 010 選AD低8位 011 選其他245 100 選4號(hào)245
|
|
| 15樓: | >>參與討論 |
| 作者: PandaFeng 于 2006/10/25 15:46:00 發(fā)布:
re 如果 rama,ramb 定義在外部存儲(chǔ)器,堆棧問題就先別管了。 "有100個(gè)裝置,大部分可以,小部分不可以" 如果是這樣,硬件出問題的可能性較大。 另外,rama,ramb 的定義前再定義一個(gè)數(shù)組.如: CHAR test_buff[16]; CHAR rama,ramb; main() { ... rama = xx; ramb = yy; memset(test_buff,0xaa,16); ... } 看看test_buff的內(nèi)容有沒有被修改? |
|
| 16樓: | >>參與討論 |
| 作者: PandaFeng 于 2006/10/25 20:41:00 發(fā)布:
補(bǔ)充 棧會(huì)不會(huì)溢出,除了編譯器幫你算外,還要自己估算. 如,中斷有沒有嵌套,有沒有遞歸函數(shù)等. 至于棧的大小與程序大小沒有必然的關(guān)系,1k的代碼可以耗掉1M的內(nèi)存。 另外,變量是可以被隱式修改。如memcpy,strcpy等函數(shù)如果發(fā)生越界, 也會(huì)出現(xiàn)你所說的現(xiàn)象。 上面加test_buff的理由就是針對(duì)這個(gè)問題.(你說rama,ramb發(fā)生了改變,是嗎?) 還有,最好以程序框架為基礎(chǔ),逐步加入代碼進(jìn)行測(cè)試,以縮小問題的范圍。 |
|
| 17樓: | >>參與討論 |
| 作者: 流金歲月 于 2006/10/26 15:07:00 發(fā)布:
程序運(yùn)行過程中會(huì)改變初始化的數(shù)據(jù)???? 我在初始化過程當(dāng)中定義數(shù)組AT+MIPPUSH[]="AT+MIPPUSH=1/r" 但是程序執(zhí)行while(1)的過程中就會(huì)改變AT+MIPPUSH[]的組合變?yōu)锳T+MIPPUSH[]="AT+MIPPUS@=1" 這是什么原因????? |
|
| 18樓: | >>參與討論 |
| 作者: 流金歲月 于 2006/10/27 20:56:00 發(fā)布:
奇怪的亂碼 偶爾是AT+MIPPUS@=1 偶爾是AT+MIPPUS?=1 反正是這一位上出錯(cuò)!怪事? |
|
| 19樓: | >>參與討論 |
| 作者: PandaFeng 于 2006/10/28 1:47:00 發(fā)布:
re 改變一下它的內(nèi)存位置試試。 比如: 原來定義: CHAR SEND_MIPPUSH[yy]; CHAR SEND_MIPOPEN[xx]; ... CHAR SEND_DIALNUMBER[zz]; 改為: CHAR SEND_DIALNUMBER[zz]; ... CHAR SEND_MIPOPEN[xx]; CHAR SEND_MIPPUSH[yy]; 如果結(jié)果與原來現(xiàn)象相同,說明有別的地方引用了這個(gè)數(shù)組名。 |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |