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