<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 關(guān)于一個arm 異常向量表的問題的擴展

          關(guān)于一個arm 異常向量表的問題的擴展

          作者: 時間:2016-11-10 來源:網(wǎng)絡(luò) 收藏
          很長時間沒有寫bolg了,看看各位同仁的博客,讓我很慚愧,我決定從今天開始,努力堅持寫blog,加油~

          今天在上chinaunix 的時候,一個網(wǎng)友有關(guān)中斷向量表的問題。

          本文引用地址:http://www.ex-cimer.com/article/201611/317545.htm

          具體的鏈接http://bbs.chinaunix.net/thread-3620484-1-1.html,對于這個問題,我講了我的一些看法,那個同學(xué)表示completely 明白了,我也覺的很高興~

          對于問題,我覺的牽扯的東西還是比較多,所以我今天就決定就這個問題,在簡單的拓展一下~

          對于一個特定(ARM)的機器而言,一般有3個軟件的生命周期。

          第一個 生命的周期稱之為 rom boot(一級boot),這是有具體的芯片生產(chǎn)商來實現(xiàn)的。這個rom boot 十分重要,因為它跟你具體的產(chǎn)品量產(chǎn),以及機器的啟動方式有著很重要的關(guān)系.

          三星 有個芯片叫 6410 ,它的啟動方式有 nand flash 啟動 和sd 啟動,就是說你可以通過多個外部 IO 口的高低電平來確定是從SD 啟動,還是從nand flash 啟動.那么為什么會這樣呀?

          原因就是rom boot.比如說,如果6410 是從SD 啟動,那么rom 會根據(jù)外部 IO 高低電平來得知這個信息,并從SD 卡的某個扇區(qū)讀取數(shù)據(jù)(這個數(shù)據(jù)是用戶自己的軟件,對于6410來講 是uboot),加載到ddr 中.

          第二個 生命的周期是 boot loader (二級boot)

          第三個生命的周期是 system

          對于發(fā)帖的內(nèi)容我是這個回應(yīng)的,

          就是在bootloader 和你的system 是運行在同一機器上兩個不同的軟件。
          uboot 完成必要的操作后,就把控制權(quán)交給了system
          這里面有兩個階段
          階段1 uboot 運行階段,這時候如果出現(xiàn)異常,就會轉(zhuǎn)到絕對地址(假設(shè)映射的是存儲介質(zhì)A)上去比如說 undefine,但是在udefine 處理中,是一個死循環(huán),這個也是有道理的,因為在bootloader 中不允許出現(xiàn)異常,所以這時候你要檢查你自己bootloader 中的代碼。
          階段2 system運行階段, 由于這個時候,已經(jīng)進行了地址的remap ,所以絕對地址 映射的是不同的存儲介質(zhì)B。介質(zhì)B中的undefine 中的處理就是system 軟件定義的undefine ,和你uboot中的不是一回事。

          從上面我的回應(yīng)可以看出

          我主要闡明的觀點是

          軟件的生命周期 。發(fā)帖的同學(xué)其實是把軟件的第二生命周期和第三生命周期混為一談了。

          接著讀者又問


          現(xiàn)在不解的問題是,是不是編譯器把異常向量編譯到特定的地址上,然后CPU發(fā)生異常才跳轉(zhuǎn)呢?


          不管你的代碼怎么寫的,只要發(fā)生(undefine)異常,cpu就會到0x00000004 這個地址去指令
          其他的異常也是一樣(這是一個硬件的行為)。具體你0x00000004 上是什么內(nèi)容,那就是你軟件的事情了(你寫的代碼和編譯的事情了)。


          還有我們是不是必須在整個程序的第二行開始寫異常向量表呢,

          恩,這個是規(guī)定好的,我見過的程序都是這樣寫的,另外arm 相關(guān)的手冊上應(yīng)該有相應(yīng)的說明內(nèi)容。

          這是一種和編譯器的約定嗎?
          這個是arm 硬件約定的,但是需要用編譯的來實現(xiàn),確定把處理異常的代碼放在正確的位置(中斷向量表)

          通過我上面的回答,可以看出有時候具體的軟件的code 是和硬件息息相關(guān)的,哪個位置需要什么樣的代碼,都是規(guī)定好的,我覺得這是一個驅(qū)動軟件和應(yīng)用軟件的區(qū)別。如果要做底層軟件的話,也必須了解硬件,因為有些代碼可能看起來是沒有邏輯的,但是這些代碼的邏輯性確實是存在的,只不過這個觀看代碼的主體不是人,而是你的機器,你的硬件,你的網(wǎng)卡,你的SD host,太多了~



          關(guān)鍵詞: arm異常向量

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();