sep4020上移植的ucos,norflash啟動(dòng),拷貝到sdram中執(zhí)行(基本解決)
存在的問題:時(shí)鐘中斷經(jīng)常執(zhí)行不了,有時(shí)候卻能正常執(zhí)行,學(xué)習(xí)ucos的可以研究一下原因
[attach]490[/attach]
[attach]491[/attach]
原因:
設(shè)置sdram中的中斷向量時(shí),sdram還沒有初始化,初始化sdram后再設(shè)置中斷向量即可
為什么說基本解決呢,是因?yàn)樯想姇r(shí)有時(shí)仍然無法執(zhí)行,按復(fù)位鍵就能執(zhí)行,要么是上電復(fù)位這塊硬件電路有點(diǎn)問題,要么就是某個(gè)地方需要加延時(shí)
[[i] 本帖最后由 zchong 于 2009-7-30 07:49 編輯 [/i]]
yulutong 發(fā)表于 2009-7-28 11:23
這個(gè)方案有例子的啊。zchong 發(fā)表于 2009-7-28 11:24
例子好亂,看暈了也沒有詳細(xì)一點(diǎn)的說明
shixq 發(fā)表于 2009-7-28 12:01
你的SDRAM是多大的?在你的start.s文件中有這么幾句話:
; Setup IRQ handler
LDR
LDR
STR
通過對(duì)比.bin,你的HandleIRQ匯編出來是0x01FFFF18,是一個(gè)接近32M處的地址,而你在下面的SDRAM配置中:
LDR
LDR
STR
這樣配置出來的SDRAM是8M的,上下明顯不符,請(qǐng)核實(shí)你的硬件。
另外,你的REMAP是在什么地方做的?這一塊我沒有仔細(xì)看,你先把上面這個(gè)問題解決一下。
zchong 發(fā)表于 2009-7-28 12:33
我用的是UB4020MBT(V1.0),32M的sdramEMI_SDCONF1寄存器中有些地方不懂,如何設(shè)置成32M呢
zchong 發(fā)表于 2009-7-28 12:50
這樣可以了吧,就是把行列地址重新設(shè)置一下LDR
LDR
STR
晚上下班回家測(cè)試一下,以后每個(gè)寄存器都要認(rèn)真看一下了,尤其自己不熟悉的地方更應(yīng)該搞懂
謝謝史工!:lol
[[i] 本帖最后由 zchong 于 2009-7-28 12:52 編輯 [/i]]
shixq 發(fā)表于 2009-7-28 12:56
呵呵,不客氣!zchong 發(fā)表于 2009-7-29 07:51
救命啊,還是不行啊
還是不能正常執(zhí)行,偶爾可以,很納悶如果ZI段沒有初始化成0,會(huì)有什么后果?
[[i] 本帖最后由 zchong 于 2009-7-29 09:01 編輯 [/i]]
shixq 發(fā)表于 2009-7-29 09:18
如果ZI段沒有初始化為零,可能帶來程序運(yùn)行錯(cuò)誤,究竟會(huì)出什么錯(cuò)誤...天知道在使用某些全局變量的時(shí)候,考慮得不太周全的代碼會(huì)以為某個(gè)變量的值“應(yīng)該”是零,但卻是一個(gè)隨機(jī)的值,而程序又把它當(dāng)零來用,結(jié)果就不知道會(huì)變成什么了。比如以下代碼
int i=0;(假設(shè)該變量為全局變量,且被分配到ZI段)
在使用這個(gè)變量的時(shí)候:
for(;i<10;i++)a[i]=0;
i初始應(yīng)該為零的,結(jié)果卻是一個(gè)類似于0x26756432的隨機(jī)值,原來這個(gè)循環(huán)應(yīng)該被執(zhí)行10次,但由于ZI段沒有被清零,這個(gè)循環(huán)卻沒有被執(zhí)行(i初始值遠(yuǎn)大于10)。
類似的問題還有很多,我在做UBOOT移植的時(shí)候就遇到過,導(dǎo)致Malloc函數(shù)無法分配內(nèi)存。
zchong 發(fā)表于 2009-7-30 08:18
解決,原因在頂樓