嵌入式系统课程“中断、异常与事件”教学实践及启示

2016-11-10 08:31潘登陈启军
计算机教育 2016年7期
关键词:异常事件嵌入式系统

潘登 陈启军

摘要:从嵌入式系统课程的中断、异常与事件等基本概念出发,针对教学实践中出现的问题,讨论理论教学对于培养、提高学生动手实践能力的重要性,强调将理论与实验教学作为嵌入式系统课程的“一体两翼”,以理论教学为基础并使两者彼此促进,循序渐进地开展课程设计、项目研发等教学内容,以更好地培养、提高学生的实践能力。

关键词:嵌入式系统;中断;异常;事件;理论教学;实验教学;启示

0.引言

中断、异常与事件是嵌入式系统理论与技术的3个基础概念,围绕这3个基础概念形成的理论与软硬件技术,是嵌入式系统课程本科培养阶段教学的核心内容。由于嵌入式系统课程一般在微机原理课程之后开设,学生已经初步掌握了Intel微处理器的基础知识与运用软硬件技术进行简单项目设计开发的基本技能,嵌入式系统与微机原理的教材内容具有很大的相似性,往往导致教师和学生在潜意识中把教与学的重点放在动手能力的提高上,很大程度上忽视了基础概念的掌握,造成学生对这些基础概念缺乏深刻的理解,不清楚这些概念为解决何种问题而提出,对围绕该问题建立起来的理论体系与所采用的关键技术无法上升为自己的理性认识,最后集中反映在项目开发和实验中无法充分利用微控制器提供的先进技术与优越性能。

嵌入式系统课程知识点覆盖面广,“软硬”结合,与工程实践结合紧密,具有理论性强、综合性强、实践性强的显著特点。嵌入式系统的教学在重视培养学生动手能力的同时,如果不加强对嵌入式系统理论的基本概念、基础理论与核心技术的教学工作,不注重揭示理论与技术的源变,不设法加深学生对教学内容的理解,就很难让学生在实验与项目开发中去验证、体验和巩固所学知识,如果学生在实验过程中“理论指导实验、实验验证理论”做得不到位,就不能很好地将理论与实际相联系,很难达到培养、提高学生实践能力的预期目的,更谈不上在潜移默化中培养学生的创新思维与研究能力。

1.加强对基本概念“中断、异常与事件”的理论教学工作

1.1“中断、异常与事件”的感性认识教学

在“中断”方面,Cortex-M系列微处理器根据中断请求产生的时机与优先级,采用“尾链”(俗称“咬尾”)和“迟到中断”等创新技术,对多个中断请求进行更高效的管理,这与微机原理中断处理技术存在很大不同。

几乎所有的国内外嵌入式系统教材或技术文献,均在“中断”之外都提及“异常”,“异常”与“中断”显然不是一个完全等价的概念;另一方面,几乎所有的嵌入式系统教材,在论述微处理器或微控制器的工作原理时,又都毫无例外地将“异常”与“中断”混在一起不做区分,说明微处理器或微控制器处理“中断请求”和系统“异常”事件一定存在着大量共性的方面。

“事件”为触发系统某种行为的消息和请求,或是驱动系统工作或状态改变的某种激励,既可以来自系统内部,也可以来自系统外部,一般由某个对象发出,并由某个对象接收和处理。“中断请求”与“异常”的发生,均可以作为“事件”,以脉冲来表征,并驱动微处理器或微控制器有目的地开展工作。

在教学中,首先引导学生思考上述问题,使其形成一定的感性认识。

1.2“中断、异常与事件”的理性认识教学

当软硬件出现不正常的行为时,通常会发出代表错误或危险的警告,这类事件被称为“异常”事件;对异常进行处理,能够控制错误的代码和系统异常行为,避免错误蔓延。微处理器或微控制器的研发与设计,需要根据市场对“异常”事件处理的需求,提供理论支撑与理论基础之上的技术支持,这在客观上往往要求CPU在“异常”发生时能够中止正在运行的程序,进入特权状态去执行特定的指令或程序,以完成对“异常”事件的处理。正是由于微处理器或微控制器在处理“中断请求”与“异常事件”时遵循同一个处理机制——中断处理机制,才有国内外几乎所有嵌入式系统教材在论述微处理器或微控制器工作原理时,将“中断”与“异常”混在一起不加区分的现象。至于处理“异常”事件的机制,为何未另行命名为“异常处理机制”,乃是因为处理“异常”事件的机制与“中断处理机制”相同,以及“中断处理机制”已经先行提出并形成理论的历史事实所致,但是二者在概念上不完全等同,针对的问题和所要达到的目的均有所不同,在教、学中必须予以明确。

“异常”作为与“中断”不完全相同的一个概念,其显著差异的另一重要体现(或证据)是针对它们的允许与屏蔽指令不同。

就微处理器或微控制器的角度而言,根据触发源(即“异常”事件)的不同,一般可将异常分为同步异常和异步异常。同步异常是指与CPU当前执行的指令密切相关,造成CPU正常运行状态被中止的系统事件(或称内部事件),如指令未定义、指令预取中止、数据访问中止等。异步异常则由外部事件触发,与CPU当前执行的指令无关,故被称为异步异常(或外部异常)。复位即属于异步异常。

“中断请求”与“异常”的发生都是事件(event)的子集,而中断是处理各种异常事件和中断请求的一种服务机制。CPU与外部设备之间的数据交换,可以采取无条件传送和查询传送,也可以采用中断的方式。若采取中断的方式,相应的服务程序一般被称作“中断服务(子)程序”。就Cortex-M3微处理器而言,对异常的处理借用了中断请求的处理机制,因为这个缘故,大多数教材和相关技术文献对异常和中断并不加以区分,实际上二者是两个不同的概念,这一点必须对其有深刻的认识。

嵌入式系统理论以“脉冲”表征“事件”的发生,事件有广义与狭义之分。“中断请求”与“异常”属于“事件”的子集,此“事件”具有广泛的含义。“中断请求”与“异常(事件)”的相同点:①二者均为随机事件,是事件的子集;②可采取相同的表征手段,一般以脉冲边沿或高、低电平加以表征;③都采取“中断”处理机制,以服务程序对中断请求或异常事件作出相应处理。

二者的差异在于以下两个方面:

(1)“中断请求”一般指确定性随机事件,肯定会发生,一旦发生必须作相应的处理;除了“中断请求”以脉冲表示,具有表征“事件”发生的属性外,“中断”更多地代表一种机制。

(2)“异常”往往表现为非确定性的随机事件,事件内容不清楚或产生的原因不明,不知道其发生还是不发生,出乎人们的意料,其效果往往是负面的,且难以预期,如某些原因不明的潜伏性故障、设备失效等。对“异常”进行处理,是为了防止“错误”的蔓延,使不良后果处在一定程度的受控状态。

狭义的“事件”,则不能将其归人“中断请求”和“异常(事件)”各自所属的事件集合中去。图1对广义“事件”进行了描述和细分,事件的集合为event,中断请求的集合为event IRQ常发生的集合为event exception,其他事件event other-event-event-IPR-event exception谓的狭义“事件”。

从图1可以明显看到,狭义“事件”“event other”与“中断请求”“异常事件”除了具有广义“事件”的属性之外,显然还存在着明显的差异。“event other”在嵌入式系统中具体表现为何种“事件”?应如何处理?与“中断请求”“异常事件”的处理机制是否相同?这些问题都应当在教学中向学生提出,引导并激发学生去深入思考。

“中断(异常)”的发生,一般由相应的中断服务程序对其进行处理,需要CPU的介入;但是CPU是否响应请求并进行处理,与其优先级的高低和是否被屏蔽密切相关。CPU响应中断或异常处理的请求时,会执行对应的中断处理程序。“event other”事件与之不同,可以在不需要CPU干预的情况下,向其他模块发送触发信号,触发其他可编程模块的关联操作,由该模块实现某种功能需求。有了上述理性认识之后,下一个问题是“如何设计电路对‘中断请求‘异常事件和‘狭义事件进行预处理”。需要特别强调的是,这里要设计的处理电路,位于Cortex-M微处理器的外部,所处理的表征“中断请求”“异常事件”和“狭义事件”也必定来自Cortex-M微处理器的外部。显然,来自Cortex-M微处理器外部的“中断请求”“异常事件”和“狭义事件”3个概念除了不同之处外,都属于广义上“事件”的范畴,存在均由脉冲表征并对其进行记录、存储、清除等相关处理的共性方面,这对处理电路的设计显然有着非常大的指导意义。图2描述了STM32F103微控制器EXTI模块对外部“中断请求”、异步“异常事件”和外部“狭义事件”的预处理过程。

外部“中断请求”与异步“异常事件”的处理,与外部“狭义事件”的处理,都需要对表征它们的脉冲(边沿)进行检测,并进行记录、存储,这是处理外部多个中断请求/异常事件/狭义事件所必需的电路功能。外部中断请求/异步异常事件如果未被屏蔽,则由嵌入式向量中断控制器NVIC模块进行后续处理事宜;而外部狭义事件如果未被屏蔽,则触发脉冲发生器PULSEGENERATOR产生脉冲,该脉冲的去向不是嵌入式向量中断控制器NVIC模块,而是其他外围模块。可见,外部“狭义事件”与外部“中断请求”、异步“异常事件”在概念上的异同之处,在处理电路的设计上也得到了很好地反映。

来自Cortex-M微处理器内部的“中断请求”“异常事件”和“狭义事件”是怎样的?都有哪些?又是如何处理的?如何通过软件编程实现外部“中断请求”“异常事件”和“狭义事件”的捕捉、处理?对上述问题的思考,无疑能够帮助学生更深刻地理解“中断请求”“异常事件”和“狭义事件”的概念,更好地掌握微处理器和微控制器工作的基本原理,更熟练地进行项目的软硬件设计、开发。

2.在理论的指导下开展“中断、异常与事件"的实验教学工作

认真学习并深刻理解微处理器与微控制器处理外部“中断、异常与事件”的基本工作原理,对运用基于Cortex-M内核的微控制器进行嵌入式系统项目开发以及充分利用其先进技术与卓越性能显然有巨大的促进作用。案例式、验证式基础实验教学内容主要是以所学知识为指导开展实验工作,巩固所学内容,加深理解,掌握外部“中断、异常与事件”处理的软硬件设计方法。一般可采取问题驱动的实验教学方式,引导、启发学生在实验中细心观察、体会和领悟。

(1)作为实验对象的嵌入式系统具有哪些功能?包括哪些主要的软、硬件模块?它们是如何连接的?

(2)实验涉及微控制器内部哪些主要模块?

(3)实验需要微控制器内部主要模块的哪些功能?怎样通过软件对可编程模块(例如STM32F10x系列微控制器的EXTI模块等)按功能需求进行配置?

(4)如何捕捉外部“中断、异常与事件”?软件设计是如何实现的?

(5)程序是如何利用这些模块的功能开展工作完成既定任务的?模块相互之间的关系是怎样的?能否描述模块之间的动态协作过程?

验证式实验结束后,要求学生的实验报告重点论述两个方面:画出实验项目的硬件工作原理图,详细描述微控制器内部所涉及各模块的具体功能与相互协作的工作原理;画出软件流程图,结合硬件原理图,详细描述微控制器对外部“中断、异常与事件”处理的流程。

实验报告体现了学生对上述问题的思考过程,从中可以发现学生对外部“中断、异常与事件”概念的理解程度,以及对相关理论、技术的掌握情况。

3.对嵌入式系统课程教学的启示

除了“中断、异常与事件”之外,嵌入式系统课程教学内容还有很多,例如嵌入式系统体系架构、微控制器内部的各可编程模块、能耗管理、嵌入式操作系统及其移植、并发任务处理、实时计算与实时控制、嵌入式系统项目研发组织与软硬件开发流程等。关于“中断、异常与事件”理论与实验教学的实践表明:

(1)遵循“理论教学为基础,理论教学与实验教学相结合、相辅相成”的原则,合理、均衡地规划和设计教学内容,加强嵌入式系统课程的体系建设。人类在实践中形成、积累的感性认识,经过长期的实践检验上升为理论认识,对某些一般性问题和共性问题具有普遍的指导意义,其正确性和有效性已经为人类的长期实践所证明。必须重视嵌入式系统的理论教学工作,必须把动手能力的培养建立在理论学习的基础之上,没有对基本概念、基础理论、基本方法和关键创新技术的深刻理解,动手能力的培养不可能达到很高的水平和应有的高度。

(2)理论教学要深入浅出,注重揭示基本概念、基础理论、关键技术的源变,帮助学生在所学内容与现实世界之间架起“相互联系”的桥梁,使学生能够深刻体会到所学知识来源于实践,必然回归到实践中服务于实践,从而认识到理论知识的价值所在。

(3)实验教学旨在帮助学生巩固所学知识,掌握运用理论知识进行软硬件设计、开发的基本技能。实验内容(特别是案例式、验证式实验)要围绕课程重点介绍的基本概念、基础理论和关键、核心技术进行设计,遵循“有用、有趣、建立学生自信”、承上启下、先易后难、从简单到综合、循序渐进的原则。

(4)以学生为认知的主体,把教与学紧密结合起来,形成教学相长的良好局面。采取问题引导与思维启发的方式,在关键点处“埋地雷”,让这些“地雷”引爆实质性问题,产生震撼性效果,在学生失去方向时“亮一盏灯”,让一点微弱的“光亮”引导学生继续前行,激发学生思考、学习的兴趣,提高学生学习、研究的主动性、积极性,变被动学习为主动学习,在潜移默化中培养学生创新思维与创新研究能力。

(5)密切跟踪相关领域的最新研究进展,从卓越人才的培养出发,将课程设计、项目研发/科技竞赛、校企合作实训等作为嵌入式系统课程教学的后续内容,注重教学内容基础性与先进性的统一。以课程设计、项目研发/科技竞赛、校企合作实训等为主要内容的嵌入式系统教学模式,有别于传统的全日制教学模式,作为补充是非常必要的,可以丰富嵌入式系统的教学手段,帮助学生了解智能感知、智能计算、网络通信、云计算、物联网等研究前沿与热点问题,学习并掌握思考问题、解决问题的方法,亲身体验工程项目研发的全部流程,一般放在理论与实验教学之后比较适宜,个别比较突出的学生也可提前开展。

图3描述了同济大学嵌入式系统教学的路线,体现了“以培养学生动手实践能力为目标导向、以理论教学为基础,在理论知识的指导下,以实验、课程设计、项目研发/科技竞赛、毕业设计作为主要实践手段,循序渐进地提高学生的动手实践能力”的教学理念。

实验分两个阶段开展:案例式、验证式实验为基础实验部分,旨在巩固学生所学的书本知识,加深理解;综合性、探究式实验有一定的难度,着眼于学生动手能力的提高,引导、激发学生的学习、研究兴趣,使其初步了解问题的分析方法和研究的基本过程。课程设计、项目研发/科技竞赛与毕业设计综合性和难度逐步提升,注重学生对前沿性热点问题的了解,让学生能够综合、灵活运用掌握的嵌入式系统基本理论知识与软硬件开发技能认识问题、分析问题和解决问题,对项目研发组织有初步的感性认识。综合式、探究式实验,课程设计、项目研发/科技竞赛、毕业设计等内容的开展,可考虑与企业深度合作。对于项目研发与科技竞赛,学生既可以从教师设定的项目中选取,也可以自行拟定研究课题。

从图3还可以看到,学生动手能力的提高,归根结底建立在理论知识的深刻理解、牢固掌握和综合、灵活运用的基础之上,教学反馈的目的正在于此。

4.结语

嵌入式系统是一种专用的计算机系统,融合了计算机、电子、通信等多种技术,广泛应用于通信设备、信息家电、工控设备、智能仪器、网络设备、汽车电子等各个领域。由于巨大的市场需求,嵌入式技术是近年来IT领域发展最快的方向之一。嵌入式技术人才的培养,一般分为硬件和软件两个方向,均强调对学生实践能力的培养和提高,而教学过程中学生动手能力的提高,必须以嵌入式系统软、硬件基础理论与核心技术的学习、理解和掌握为依托,应着眼于提高学生运用理论于实践中解决实际问题的综合能力。脱离了对基本概念、基本理论、基本思路、先进技术与方法的深刻领会与综合、灵活运用,任何提高学生动手能力的想法和采取的措施只能是无源之水,不可能达到更高的水平和所期望的高度。理论教学与实验教学是嵌入式系统课程的“一体两翼”,是提高学生动手实践能力的必经之途,宜双管齐下,不能偏废,更不能将教学目标与教学手段混为一谈。认真学习和理解被人类实践长期且无数次检验和证明的理论、方法、技术,并与教学实验和项目研发实践相结合,是提高学生动手实践能力的有效途径。

猜你喜欢
异常事件嵌入式系统
发电机负序电流异常增大的原因分析
电力计量装置异常的监测方法及处理对策
网络舆情反转现象中的“参照点效应”
保罗·利科的“话语事件”思想
授之以鱼,不如授之以渔
热点事件中的“舆论搭车”现象探析
基于物联网项目驱动的嵌入式系统教学改革的研究与实践
面向实践创新人才培养的嵌入式系统教学研究
探讨糖尿病合并促甲状腺激素、甲状腺激素异常患者的临床诊断治疗