桂林電子科技大學(xué)信息科技學(xué)院 張 錕
隨著嵌入式技術(shù)的快速發(fā)展,國內(nèi)眾多高校、職業(yè)技術(shù)學(xué)院和培訓(xùn)機構(gòu)紛紛開展嵌入式系統(tǒng)的教學(xué)和培訓(xùn)工作[1]。由于嵌入式技術(shù)涉及眾多課程,不同課程、內(nèi)容的講授需要根據(jù)各自的特點進行設(shè)計,院校之間也應(yīng)在教學(xué)的各個方面分享經(jīng)驗,加強交流。本文以嵌入式微處理器課程中異常返回內(nèi)容為例,分享教學(xué)內(nèi)容的設(shè)計思路和方法,供同行參考。
ARM7嵌入式微處理器課程當(dāng)中,“異?!钡南嚓P(guān)概念和原理一般在講述“微處理器組成及編程模式”章節(jié)中引入,屬于前期授課的重要內(nèi)容。學(xué)生明確地理解相關(guān)概念和原理,才能進行更深入的學(xué)習(xí)。然而,這部分內(nèi)容(尤其“異常的進入與返回”)與先修的單片機課程有很大區(qū)別,要求學(xué)生充分掌握,有一定的教學(xué)難度。
ARM7的異常種類較多,包括軟件中斷、未定義指令、中斷(普通中斷和快速中斷)、中止(預(yù)取中止和數(shù)據(jù)中止)等。不同類型異常的進入與返回既有相似性,又明顯不同:不同的異?;蛘哒{(diào)用的返回,都需要將預(yù)先保存在R14(LR)當(dāng)中的值進行處理再傳送給R15(PC)。教學(xué)中如果僅講述表1內(nèi)容而不講解具體原因,學(xué)生難免產(chǎn)生混淆。
ARM7處理器核使用三級流水線結(jié)構(gòu)。正常情況下,一條指令在執(zhí)行時,它的后續(xù)指令正在被譯碼,再后一條指令正在被取出[3]??梢越⒁粋€模型來描述ARM7的三級流水線,如圖1所示。
正常執(zhí)行A指令期間(不考慮跳轉(zhuǎn)、調(diào)用或異常),PC的當(dāng)前值為addr+8。但在發(fā)生跳轉(zhuǎn)、調(diào)用或異常時,正常的流水線結(jié)構(gòu)會被打破。不同異?;蛘哒{(diào)用在進入時,其指令流水線處于不同的狀態(tài),而針對不同情況,異?;蛘哒{(diào)用返回時需要對R14(LR)的值進行不同的調(diào)整。因此,可建立異?;蛘{(diào)用發(fā)生時流水線的模型,分析其過程和狀態(tài),推導(dǎo)異常返回時PC的調(diào)整方式。
根據(jù)表1中不同的返回指令,可以將調(diào)用或異常返回分為三大類。
表1 異常或調(diào)用的返回[2]
圖1 ARM7三級流水線模型
圖2 “直接返回類型”產(chǎn)生跳轉(zhuǎn)時的流水線模型
圖3 預(yù)取中止時的流水線模型
圖4 數(shù)據(jù)中止時的流水線模型
(1)直接返回類型。直接返回是指將相關(guān)R14(LR)的值直接傳送給PC,包括BL調(diào)用、軟件中斷和未定義指令的返回。
(2)中斷返回類型。該類型是將R14(LR)的值減去4之后再傳送給PC,包括普通中斷和快速中斷的返回。
(3)中止返回類型。該類型是將R14(LR)的值減去相應(yīng)的值,以保證重新執(zhí)行原來被中止的指令,包括數(shù)據(jù)中止和預(yù)取中止的返回。
對教學(xué)內(nèi)容進行分類之后,還需根據(jù)難易程度進行合理排序,再針對不同情況建立相應(yīng)的模型來分析其原因和特點。三種類型的返回中,中斷返回類型與單片機中的中斷返回類似,學(xué)生對此有一定的了解,屬于較易理解的部分,可以首先講解;中止返回類型屬于比較特殊的返回類型,可以放在最后講解。據(jù)此可以得出授課內(nèi)容的講述順序,先易后難。
下面針對不同類型的返回建立相關(guān)的模型。
(1)中斷返回類型以圖1為模型
假設(shè)當(dāng)前正在執(zhí)行的指令為“A”,如果發(fā)生中斷(快速中斷或普通中斷)將在執(zhí)行完“A”指令之后響應(yīng)中斷,此時PC=addr+8將被保存到相應(yīng)的R14中;當(dāng)中斷返回時,需要返回到“B”指令處繼續(xù)執(zhí)行。所以,要將R14-4,即(addr+8)-4返回給PC,以回到“B”指令處執(zhí)行。
(2)直接返回類型以圖2為模型
假設(shè)當(dāng)前正在執(zhí)行的指令為“A”,“B”指令(BL、SWI或者未定義指令)正在譯碼,而通過譯碼可以解析出“B”指令執(zhí)行后將會發(fā)生跳轉(zhuǎn)。因此當(dāng)執(zhí)行“B”指令時,無需再對“D”指令進行預(yù)取操作,從而使PC停留在“C”指令處,即跳轉(zhuǎn)發(fā)生時addr+8被保存到R14。當(dāng)返回的時候,需要回到“C”指令處繼續(xù)執(zhí)行,所以R14的值可直接傳送給PC。
(3)中止返回類型以圖3、圖4為模型
分析圖3預(yù)取中止返回的模型:當(dāng)執(zhí)行“A”指令同時對“C”指令預(yù)取時,如果產(chǎn)生預(yù)取中止,“C”指令將會被標(biāo)記為非法,但不會馬上產(chǎn)生中止[4]。當(dāng)執(zhí)行“B”指令時,指令已經(jīng)預(yù)取到“D”指令,即PC=addr+12;而在執(zhí)行“C”指令之前會先發(fā)生預(yù)取中止而導(dǎo)致跳轉(zhuǎn),從而使PC=addr+12保存到相應(yīng)的R14。當(dāng)返回時,需要重新執(zhí)行產(chǎn)生預(yù)取中止的“C”指令,因此要將R14-4(即addr+8)返回給PC。
分析圖4數(shù)據(jù)中止返回的模型:當(dāng)執(zhí)行“A”指令時如果產(chǎn)生數(shù)據(jù)中止,將導(dǎo)致程序產(chǎn)生數(shù)據(jù)中止跳轉(zhuǎn),而此時正在預(yù)取“C”指令,從而使PC=addr+8被保存到相應(yīng)的R14。當(dāng)從數(shù)據(jù)中止返回時需要重新執(zhí)行“A”指令,所以要將R14-8(即addr)返回給PC。
把握異常返回的特點進行適當(dāng)分類,再對三種返回類型發(fā)生跳轉(zhuǎn)時的流水線情況建立模型,可以比較清楚的分析其狀態(tài)和過程,從而容易得出異常返回對R14進行不同調(diào)整的原因。
通過對ARM7的異常返回建立相應(yīng)的三級流水線模型,分析在不同異常或調(diào)用發(fā)生時其所處的狀態(tài),清楚的講解了異常返回時對PC值進行不同處理的原因,使學(xué)生知其所以然,明顯提高了當(dāng)堂課程的教學(xué)效果??梢姡ㄟ^建立簡易模型或者簡單實例,將復(fù)雜問題的教學(xué)內(nèi)容進行簡化設(shè)計,可以加深學(xué)生對課堂內(nèi)容的理解和使用,有利于實現(xiàn)較為理想的教學(xué)目標(biāo)。
[1]章民融,徐亞鋒.嵌入式教學(xué)關(guān)鍵點的研究和嵌入式實驗教學(xué)平臺的設(shè)計[J].計算機應(yīng)用與軟件,2009,(3).
[2]劉彥文.基于ARM7TDMI的S3C44B0X嵌入式微處理器技術(shù)[M].北京:清華大學(xué)出版社,2009:38-39.
[3]杜春雷.ARM體系結(jié)構(gòu)與編程[M].北京:清華大學(xué)出版社,2003:14-15.
[4]劉嵐,尹勇,李京蔚.基于ARM的嵌入式系統(tǒng)開發(fā)[M].北京:電子工業(yè)出版社,2008:23-27.