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