APP下载

ARM Cortex-M微控制器的教学平台建设

2014-07-02李宁库少平付国江

单片机与嵌入式系统应用 2014年12期
关键词:汇编语言外设微控制器

李宁,库少平,付国江

(武汉理工大学 计算机科学与技术学院,武汉430070)

引 言

自从2006年ARM公司推出第一款基于ARMv7体系结构的32位微控制器内核Cortex-M3以来,各半导体厂商陆续采用该内核设计生产自己的MCU。之后,ARM公司2009年又推出了Cortex-M0和Cortex-M4内核,2012年则推出了Cortex-M0+内核。至2012年,基于Cortex-M的芯片出货量就已经达到22亿片。经过8年的发展,32位的Cortex-M处理器已经开始主导嵌入式领域中的微控制器市场[1]。

为适应技术和市场的需求,国内各高校在近几年也开始逐渐将Cortex-M微控制器引入到本科生教学中。本文将介绍笔者所在教学团队进行Cortex-M微控制器教学的一些实际经验。

1 与8051单片机教学重点的差异

8位的单片机8051由Intel公司开发设计,后来各大半导体厂商都生产了各式各样的51内核单片机,使得8051一度成为MCU领域中的王者,至今仍占有着重要的地位。国内高校的MCU教学曾经绝大多数以8051为对象进行讲解。由于Cortex-M微控制器是32位的,其硬件和软件的复杂程度都高于8051单片机,因此在教学重点上也有所差异。

1.1 硬件教学差异

由于8051单片机出现于1980年,那时候相当多的51内核单片机采用双列直插封装形式,至今市场上仍有大量双列直插封装的51内核单片机。通过面包板和PCB万能板,扩展上拉电阻、电容、LED灯、按键等几个简单器件,每个学生都可非常方便地搭建起8051的最小系统,并作为教学实验平台,如图1(a)所示。目前,各半导体厂商生产的Cortex-M微控制器多数采用QFN、LQFP、BGA等封装形式,几乎见不到双列直插封装形式,Cortex-M微控制器的用户也不会考虑使用双列直插封装形式。因此,让学生自己动手做出一个Cortex-M微控制器的最小系统非常困难,对于很多专业的学生而言,甚至几乎不可能。

由于Cortex-M内核计算能力强大,很多厂商开发的Cortex-M微控制器又提供了丰富的外围接口,使得有大量的外设可以被轻松接入。因此,笔者在教学中采用集成了仿真器,并带有Arduino接口的Cortex-M微控制器学习板,学生可以自由地扩展各种外设板,如图1(b)所示。

1.2 软件教学差异

由于Cortex-M微控制器的计算能力、存储空间都远大于8051单片机,因此在软件上有了更大的扩展空间,在软件的教学上应当也有所调整。

图1 8051教学平台与Cortex-M微控制器教学平台

(1)弱化汇编语言,强化C语言

无论是8051还是Cortex-M微控制器的汇编语言指令集都不是太复杂,尤其是Cortex-M0内核仅有56条Thumb指令,学习和掌握其汇编语言指令集的难度并不大。

在早期的8051教学中,汇编语言是其中的重要内容,甚至整个教学过程均采用汇编语言来讲解,也有很多工程师一直采用汇编语言来对8051进行编程。其理由是C语言编译后的代码密度比汇编语言的低,执行效率也低。早期的8051单片机的计算能力和存储空间都非常有限,导致某些工程师甚至在编程时对每个字节都“斤斤计较”,这是汇编语言曾在MCU领域被广泛使用的重要原因。

Cortex-M微控制器的计算能力已经非常强大,其存储空间也足够大,价格也很便宜;同时编译系统的能力也有显著提高,即使是采用GCC编译器也可以获得很好的代码密度和执行效率。此外,使用C语言进行开发,开发速度更快,更适合开发复杂的软件,例如带有RTOS的系统,相比汇编语言,软件越复杂,C语言的开发效率越高。因此,当前绝大多数工程师已经开始使用C语言作为MCU的开发语言,而基本不再使用汇编语言。

基于以上情况,在教学实践中可适当弱化汇编语言编程的要求,不要求学生用汇编语言完成较为复杂的程序。

(2)弱化寄存器操作,强化使用API

对MCU的各种外设接口的控制,都是通过对寄存器的操作来实现的。因此,过去在以8051为对象的单片机课程教学和以8086 CPU为对象的微机原理课程教学中,都花费了大量时间介绍各外设接口的数据寄存器、控制寄存器和状态寄存器含义,以及相应的操作方法。Cortex-M微控制器中所带有的外设越来越多,越来越复杂,如果逐一介绍各外设接口的寄存器组,其内容将非常多,而且枯燥乏味。

目前,各个MCU厂商为了帮助使用其产品的工程师能进行快速开发,均提供了完善的外设驱动库。在每个外设驱动库中,均定义了相应外设的数据结构和一组API函数,这一组API函数覆盖了该外设的所有功能。而且,这些外设驱动库的文件结构、数据结构、函数名和参数名都进行了标准化。

基于以上情况,在教学实践中通常可以仅介绍1~2个简单外设的寄存器组,例如GPIO的寄存器组,让学生了解如何通过操作寄存器来实现对外设接口的控制即可。同时,应增加对外设驱动库的介绍,包括外设驱动库的文件结构、数据结构、函数名和参数名定义的规范。让学生掌握查阅处理器数据手册和API函数手册进行编程的能力。

(3)引入RTOS,中断与OS任务调度并重

8051的计算能力有限,存储空间很小,因此在实际应用中基本不会使用RTOS,通常是直接进行裸机编程。对于多任务的处理,通常是用中断来实现,因此中断处理是MCU教学的重点。

Cortex-M微控制器的计算能力和存储空间的大幅提高,使得MCU能适用于更加复杂的应用。对于功能复杂的应用,如果使用裸机编程的方法进行开发,则必然会遇到编程复杂、调试困难、代码耦合性高、移植困难等诸多问题,因此,越来越多的Cortex-M微控制器应用开始引入RTOS。基于RTOS的应用程序开发,会大大降低应用程序的复杂性和代码的耦合度,应用的移植也变得简单。当然,仍有大量的Cortex-M微控制器应用本身就比较简单,无需引入RTOS。

基于以上情况,在教学实践中可引入RTOS的知识,同时也仍保持对中断的重点介绍。对于计算机专业的学生而言,RTOS的知识是易于理解和掌握的,但是对于自动化和电子专业的学生而言,则会存在着一些困难。基于这种情况,可将RTOS介绍的重点放在任务调度的概念上,让学生理解RTOS可以帮助编程者实现多任务的切换和调度即可。

2 教学平台建设

2.1 硬件平台

由于常见Cortex-M微控制器的封装形式不方便让学生自己搭建起最小系统,因此笔者在教学中采用集成了仿真器、并带有Arduino接口的Cortex-M学习板,使用Cortex-M0处理器,如图1(b)所示。同时还提供多种Arduino接口扩展板,例如三色LED灯、矩阵键盘、步进电机、温度传感器、光敏传感器、重力加速度传感器、ZigBee模块等,便于搭建各种应用系统。这样既方便完成单一功能的验证实验,又适于进行较为复杂的课程设计,还能用于学生自主创新项目。这样的教学平台体积小、灵活性高、方便携带,学生甚至不必在实验室就可以进行实验或者自主创新开发。

2.2 软件平台

笔者使用Coocox工具作为教学实践的软件平台。Coocox工具包含一套完整的ARM MCU工具链,包含集成开发环境CoIDE、烧写工具CoFlash、实时操作系统CoOS以及快速代码生成工具CoSmart,而且完全免费[2]。更重要的是,其基于组件化的编程思想和分享功能非常便于实践教学的开展。

(1)组件化编程

图2 CoIDE工程组件树

在集成开发环境CoIDE中,外设驱动、算法、通信协议栈、RTOS等均被包装为组件(Component)。开发者只要通过鼠标选择相应的组件,即可将组件添加到自己的应用程序中。在组件树窗口中可以清楚地显示应用程序所使用的外设、通信协议、RTOS等,如图2所示。相比于文件树而言,组件树的结构更清晰明确,而且还可以和文件树相互参照。这种模块化的编程方式,让编程者非常易于理解应用程序的结构,也大大加快了编程的进度,减少了添加驱动函数库、RTOS等过程中可能出现的错误。同时,每个组件均有基本例程可以参考,只需选择相应例程即可自动将相关代码加入到自己的应用程序中去。学生无需编程,就可完成第一个入门实验,实践教学的难度明显降低,大大减少了学生对于MCU实践教学的畏难心理。

(2)分享功能

CoIDE还具有基于Internet的分享功能,开发者可以将自己开发的组件、例程上传到服务器上与其他开发者分享,这个功能也方便了教师对学生实践教学的检查和评分。学生可将自己的实验程序作为例子上传,教师则可以非常方便地下载、查看并运行学生的实验代码,从而进行评分,而不必当场逐一检查实验结果。这样,老师和学生在实验场地和实验时间的安排上都变得非常灵活,学生甚至可以在寝室完成实验,老师也可以根据自己的时间来进行实验成绩评分。

同时,CoIDE也具有其他商用集成开发环境的各项功能,可以用于各种复杂的ARM MCU应用的开发。近年来,Coocox工具链也逐渐成为一些欧美大学的MCU教学的软件教学平台。

3 与物联网、Android教学的结合

3.1 与物联网教学结合

随着物联网的快速发展,许多高校都开设了物联网专业,计算机、电子、自动化等专业也开设了物联网的相关课程。物联网感知层中的各种传感器节点,其实就是MCU加上相关传感器,如果能将MCU的教学与物联网教学进行结合,会有助于学生建立完整的物联网系统概念。

在实践教学中,在Arduino学习板上扩展ZigBee模块和传感器模块,可实现一个传感器节点;或者扩展ZigBee模块和一个步进电机模块,实现一个控制节点。一组学生即可构建一个小的物联网,例如实现简单的智能家居系统原型。

3.2 与Android教学结合

移动终端、可穿戴设备的迅速普及,使得Android应用开发成为了计算机专业学生的热门选修课程。在Android应用开发实践教学中,也可以与MCU教学相结合。将MCU实践教学与其他相关课程的实践教学进行有机的结合,不仅可以帮助学生建立各知识领域之间的联系,还可以提高学生的兴趣,也有利于鼓励学生进行自主创新开发。

结 语

在笔者的MCU教学实践中也遇到如下一些问题和困难:

①缺乏合适教材。很多关于Cortex-M微控制器的书籍都是为MCU厂商做市场推广而写作的,更适合作为编程参考手册,而不适合作为教材。由于ARM MCU比8051复杂,涉及的软硬件内容更丰富,已有的一些Cortex-M微控制器教材很难兼顾。各个专业的MCU教学需求也有所偏重,市面也缺乏根据专业特点来编写合适的教材。

②学时少,内容多,尤其实践学时太少。对于这一问题,通过鼓励学生将学习板带回寝室学习,得以适当缓解。

③软硬件知识如何平衡。对于不同专业的学生,需求是不同的。计算机专业的学生,偏向于软件方面;电子专业的学生,偏向硬件方面;自动化专业的学生,则更偏向于接口控制与通信方面。

④如何与其他相关课程的实践课相互有机结合,在有限的学时中做到相互促进、相互兼顾,并能完成相关知识点全覆盖。

[1]ARM Limited.Cortex-M 系列[EB/OL].[2014-06].http://www.arm.com/zh/markets/embedded/mcu.php.

[2]Free/Open Cortex-M微控制器 Development Tools[EB/OL].[2014-06].http://www.coocox.org.

猜你喜欢

汇编语言外设微控制器
高等学校计算机专业课程教学改革实践——以汇编语言与接口技术课程为例
汇编语言与C语言的混合程序设计技术研究
提高《汇编语言程序设计》教学效率的思考与实践
物联网技术在微控制器实验教学中的应用
用于高品质电动汽车的分布式并行计算
Mouser推出TI C2000Delfino微控制器LaunchPad套件
可视化的微控制器分析平台设计*
外设天地行情
外设天地行情
外设天地行情