桂林电子科技大学信息科技学院 张 锟
随着嵌入式技术的快速发展,国内众多高校、职业技术学院和培训机构纷纷开展嵌入式系统的教学和培训工作[1]。由于嵌入式技术涉及众多课程,不同课程、内容的讲授需要根据各自的特点进行设计,院校之间也应在教学的各个方面分享经验,加强交流。本文以嵌入式微处理器课程中异常返回内容为例,分享教学内容的设计思路和方法,供同行参考。
ARM7嵌入式微处理器课程当中,“异常”的相关概念和原理一般在讲述“微处理器组成及编程模式”章节中引入,属于前期授课的重要内容。学生明确地理解相关概念和原理,才能进行更深入的学习。然而,这部分内容(尤其“异常的进入与返回”)与先修的单片机课程有很大区别,要求学生充分掌握,有一定的教学难度。
ARM7的异常种类较多,包括软件中断、未定义指令、中断(普通中断和快速中断)、中止(预取中止和数据中止)等。不同类型异常的进入与返回既有相似性,又明显不同:不同的异常或者调用的返回,都需要将预先保存在R14(LR)当中的值进行处理再传送给R15(PC)。教学中如果仅讲述表1内容而不讲解具体原因,学生难免产生混淆。
ARM7处理器核使用三级流水线结构。正常情况下,一条指令在执行时,它的后续指令正在被译码,再后一条指令正在被取出[3]。可以建立一个模型来描述ARM7的三级流水线,如图1所示。
正常执行A指令期间(不考虑跳转、调用或异常),PC的当前值为addr+8。但在发生跳转、调用或异常时,正常的流水线结构会被打破。不同异常或者调用在进入时,其指令流水线处于不同的状态,而针对不同情况,异常或者调用返回时需要对R14(LR)的值进行不同的调整。因此,可建立异常或调用发生时流水线的模型,分析其过程和状态,推导异常返回时PC的调整方式。
根据表1中不同的返回指令,可以将调用或异常返回分为三大类。
表1 异常或调用的返回[2]
图1 ARM7三级流水线模型
图2 “直接返回类型”产生跳转时的流水线模型
图3 预取中止时的流水线模型
图4 数据中止时的流水线模型
(1)直接返回类型。直接返回是指将相关R14(LR)的值直接传送给PC,包括BL调用、软件中断和未定义指令的返回。
(2)中断返回类型。该类型是将R14(LR)的值减去4之后再传送给PC,包括普通中断和快速中断的返回。
(3)中止返回类型。该类型是将R14(LR)的值减去相应的值,以保证重新执行原来被中止的指令,包括数据中止和预取中止的返回。
对教学内容进行分类之后,还需根据难易程度进行合理排序,再针对不同情况建立相应的模型来分析其原因和特点。三种类型的返回中,中断返回类型与单片机中的中断返回类似,学生对此有一定的了解,属于较易理解的部分,可以首先讲解;中止返回类型属于比较特殊的返回类型,可以放在最后讲解。据此可以得出授课内容的讲述顺序,先易后难。
下面针对不同类型的返回建立相关的模型。
(1)中断返回类型以图1为模型
假设当前正在执行的指令为“A”,如果发生中断(快速中断或普通中断)将在执行完“A”指令之后响应中断,此时PC=addr+8将被保存到相应的R14中;当中断返回时,需要返回到“B”指令处继续执行。所以,要将R14-4,即(addr+8)-4返回给PC,以回到“B”指令处执行。
(2)直接返回类型以图2为模型
假设当前正在执行的指令为“A”,“B”指令(BL、SWI或者未定义指令)正在译码,而通过译码可以解析出“B”指令执行后将会发生跳转。因此当执行“B”指令时,无需再对“D”指令进行预取操作,从而使PC停留在“C”指令处,即跳转发生时addr+8被保存到R14。当返回的时候,需要回到“C”指令处继续执行,所以R14的值可直接传送给PC。
(3)中止返回类型以图3、图4为模型
分析图3预取中止返回的模型:当执行“A”指令同时对“C”指令预取时,如果产生预取中止,“C”指令将会被标记为非法,但不会马上产生中止[4]。当执行“B”指令时,指令已经预取到“D”指令,即PC=addr+12;而在执行“C”指令之前会先发生预取中止而导致跳转,从而使PC=addr+12保存到相应的R14。当返回时,需要重新执行产生预取中止的“C”指令,因此要将R14-4(即addr+8)返回给PC。
分析图4数据中止返回的模型:当执行“A”指令时如果产生数据中止,将导致程序产生数据中止跳转,而此时正在预取“C”指令,从而使PC=addr+8被保存到相应的R14。当从数据中止返回时需要重新执行“A”指令,所以要将R14-8(即addr)返回给PC。
把握异常返回的特点进行适当分类,再对三种返回类型发生跳转时的流水线情况建立模型,可以比较清楚的分析其状态和过程,从而容易得出异常返回对R14进行不同调整的原因。
通过对ARM7的异常返回建立相应的三级流水线模型,分析在不同异常或调用发生时其所处的状态,清楚的讲解了异常返回时对PC值进行不同处理的原因,使学生知其所以然,明显提高了当堂课程的教学效果。可见,通过建立简易模型或者简单实例,将复杂问题的教学内容进行简化设计,可以加深学生对课堂内容的理解和使用,有利于实现较为理想的教学目标。
[1]章民融,徐亚锋.嵌入式教学关键点的研究和嵌入式实验教学平台的设计[J].计算机应用与软件,2009,(3).
[2]刘彦文.基于ARM7TDMI的S3C44B0X嵌入式微处理器技术[M].北京:清华大学出版社,2009:38-39.
[3]杜春雷.ARM体系结构与编程[M].北京:清华大学出版社,2003:14-15.
[4]刘岚,尹勇,李京蔚.基于ARM的嵌入式系统开发[M].北京:电子工业出版社,2008:23-27.