學習嵌入式開發,那當然會涉及到arm狀態和thumb狀態,很多初學者對這兩個狀態一直不是很理解,都是一直處于迷茫中,今天我就用實際的例子來教給你,對于arm狀態和thumb狀態的學習。
我們首先先來清楚一下:arm處理器的工作狀態分為3種,一是:ARM狀態,二是:Thumb狀態及Thumb-2狀態,三是:調試狀態
對于arm狀態和Thumb狀態我們可以用一個簡單的比喻來先了解一下:我們可以把ARM核比作一個高中學校,那種包含普通高中和職業高中的。普通高中就相當于ARM狀態,職業高中就相當于Thumb狀態,這樣還不能理解的話:可以認為 泡泡卡丁車 中普通模式和加速模式,,卡丁車加速要等到集氣管加滿,然后“ctrl”一下,就切換到了加速模式,氣放完了就又回來了,不管加速模式還是普通模式都是在跑,只是速度不一樣而已。
而ARM狀態和Thumb狀態也是可以直接通過某些指令直接切換,都是在運行程序,只不過指令長度不一樣而已。這個概念對初學者相當重要,因為當ARM Thumb是什么還沒弄清楚,怎么能理解兩種狀態呢?通過上面的例子,我想大家都大概了解了ARM狀態和Thumb狀態的一些關系了吧,那么這樣就可以深入了解ARM狀態是什么,Thumb狀態是什么了。
另外:ARM的M系列主要用Thumb指令,ARM9和A系列主要用ARM指令
S3C2440.S啟動代碼中根本就沒用Thumb指令。
ARM狀態此時處理器執行32位的字對齊的ARM指令,Thumb狀態此時處理器執行16位的,半字對齊的THUMB指令。 切換程序:從ARM到Thumb: LDR R0,=lable+1 BX R0 從ARM到Thumb: LDR R0,=lable BX R0
1,ARM狀態
arm處理器工作于32位指令的狀態,所有指令均為32位
2,thumb狀態
arm執行16位指令的狀態,即16位狀態
3,接下來就是arm與thumb間的切換了,他們到底是如何切換的,這些是你需要掌握的
(1)由thumb狀態切換到ARM狀態
寄存器最低位設置為0
BX指令:R0[0]=0,則執行BX
R0指令將進入arm狀態
當處理器進行異常處理時,則從異常向量地址開始執行,將自動進入ARM狀態。
(2)由arm狀態切換到thumb
狀態將寄存器的最低位設置為1
BX指令:R0[0]=1,則執行BX
R0指令將進入thumb狀態
注意:ARM處理器復位后開始執行代碼時總是只處于ARM狀態;
Cortex-M3只有Thumb-2狀態和調試狀態;
由于Thumb-2具有16位/32位指令功能,因此有了thumb-2就無需Thumb了。
另外,具有Thumb-2技術的ARM處理器也無需再ARM狀態和Thumb-2狀態間進行切換了,因為thumb-2具有32位指令功能。
上面這些你都明白了嗎,其實總的來說,arm狀態和Thumb狀態的他們最根本的區別就是指令的位數不同而已,就像arm狀態是32位的,thumb是16位的,你只要把他們之間的這些東西都掌握好,那對你學習arm狀態和thumb狀態是很容易的,快快學起來吧!