異常向量表

來源:互聯網
上載者:User

            今天網上下載了一個作業系統,編譯,運行,木有反應。跟移植者討論了下,後來發現是異常向量表表的問題。他並沒有開啟MMU,而我是bootloader引導下載.bin代碼的。0地址處存放的是bootloader,作業系統本身也要從0地址處讀取向量表的資訊,包括reset中斷,設定堆棧指標等一系列的問題。找不到中斷向量表,那其他的步驟就無從談起了。所以後來解決方案是使用的tq2440的bootloader中的menu choice 1 ,即將 此作業系統下載到 nandflash的bootloader分區。然後再將tq的開關調製從nandflash啟動。那樣就能夠正常運行了。

          至此,分析了下有無bootloader的讀取中斷向量表的情況:

          有bootloader的時候,在bootloader的引導下,將程式下載到響應的地址,大於0x30000000(sdram地區),然後運行,此時發生異常時,到0地址處取異常向量表。因為此時程式是在sdram中的,如從0x30000000開始存放的,那異常向量表就在0x30000000處,此時如果發生異常的話,從0地址找就找不到,所以兩種方法,一種開啟MMU,映射0地址到0x30000000處,另外一種是在程式裡面進行異常向量表的拷貝,拷貝到0地址。     
在沒有bootloader的時候,直接燒到0地址,但是在代碼中執行了cp2sdram的操作,目標地址是0x30000000,此時有兩個地方存著異常向量表,一是0地址,二是0x30000000處,沒有進行MMU的時候程式讀取的是0地址處的異常向量表,如果進行映射了的話,異常出現的時候,也還是去0地址找,但是此時0地址已經被MMU映射了,所以到相關映射的地址處尋找。

           要點:發生異常,永遠是去0地址找。(特指arm下)。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.