基于Proteus和uC/OS—II的嵌入式课程教学研究与实践

2014-04-29 02:32李创翁绍捷
中国电力教育 2014年36期

李创?翁绍捷

摘要:“嵌入式系统及应用”是自动化、测控技术与仪器等相关专业的重要专业基础课程,主要讲授嵌入式微处理器、嵌入式操作系统和嵌入式系统设计技术。在以往的课程教学过程中,理论课和实验课内容之间脱节,容易出现教学效率低下、学生难以掌握和无法学以致用的情况。针对存在的问题,本文提出将基于Proteus和uC/OS-II的嵌入式仿真平台引入到教学过程中,提出“理论讲授—实验验证”并行展开的教学模式,通过“边学边用”的方式激发学生的学习热情,强调学生分析问题、解决问题能力的提高,强化设计技能训练。教学实践表明,所设计的仿真平台和提出的教学方法有效地提高了课程的教学效果和质量。

关键词:嵌入式系统及应用;Proteus;uC/OS-II;仿真平台

中图分类号:G642.0 文献标识码:A 文章编号:1007-0079(2014)36-0154-03

“嵌入式系统及应用”课程是高等教育院校电气信息类专业一门很重要的专业基础课程,具有实践性、应用性很强的特点。[1,2]掌握该门课程内容能有效地提高学生分析、解决问题的能力,增强实践动手能力,也能培养学生的自主创新能力和探索精神。但是根据多年的教学实践和教学效果问卷调查结果反馈情况,学生普遍反映该课程知识点分散、指令集难记、嵌入式操作系统过于复杂、理论课内容难以指导实验课内容、了解课程的重要性但不知道如何应用等问题;而教师则反映在讲授过程中较难调动学生的学习热情、理论课听课率低、分组实验效果不佳等问题。造成这种情况的原因有多个方面:“嵌入式系统及应用”课程的课时数较少使得学生对课程内容掌握不足,但更主要是由于课程实践性强、实验内容和理论课内容之间联系不强所导致的。

為了改进本课程的教学效果,使学生真正掌握嵌入式系统开发和设计技术,海南大学机电工程学院进行了长期摸索,开展“电工电子系列课程教学创新团队建设”项目,利用英国Labcenter Electronics公司的Proteus软件,搭建了基于Proteus和uC/OS-II的嵌入式仿真平台,将其引入到课堂教学和实验教学中。经过两年的教学实践和教学效果调查,学生对教学效果反映良好,课程设计水平和动手能力得到了极大提高。

一、Proteus-uC/OS-II仿真平台的设计

1.Proteus与uC/OS-II介绍

英国Labcenter Electronics公司推出的Proteus是一款硬件仿真EDA软件Proteus的优势体现在虚拟系统建模(Virtual System Modelling,VSM)系统,支持基于ARM7、8051、PIC、AVR等系列微处理器的数字、模拟协同仿真,并支持源代码级在线调试。[3]Proteus是一个完整的嵌入式软、硬件设计仿真平台,为开发真实的嵌入式系统提供了前期测试和验证平台。[4]

uC/OS-II是美国Jean J. Labrosse设计的轻量级嵌入式操作系统,是一个可移植、可裁剪的基于优先级的抢占式多任务实时内核,已经移植到几乎所有知名的微处理器上。uC/OS-II已经通过联邦航空局(FAA)商用航行器认证,主要采用ANSI-C编写,源代码量大约在6000-7000行,与CPU硬件相关部分采用汇编语言编写,执行效率高,占用ROM空间小。[5]uC/OS-II的上述特点使得其特别适用于嵌入式产品开发和嵌入式系统教学中。

2.Proteus-uC/OS-II仿真平台的设计

针对“嵌入式系统及应用”课程的全部知识点,笔者利用Proteus精心设计了基于NXP公司LPC2124处理器的仿真平台,包括LCD接口(LM4229,240×120点阵)与ZLG/GUI移植、4×4键盘接口、A/D转换接口、I2C接口、、UART接口、SPI接口、外部中断接口、GPIO接口(LED显示)等典型外设接口。利用ARM公司的ADS 1.2和Keil uVision4 for ARM集成开发工具,采用“应用程序-驱动程序-底层代码”的自上而下的软件结构,将uC/OS-II操作系统移植到Proteus仿真平台中,并对学生开放所有设计源代码,方便课堂内外讲解和调试。Proteus仿真平台的结构图如图1所示:

教学过程中使用的软件版本具有8个功能,支持键盘对应的数字键输入和键盘的方向键选择输入。仿真平台的8个功能如表1所示。功能设计的原则是帮助学生明确嵌入式系统设计“自上而下”的概念和体系,尽量将外设功能情况实时地通过LCD显示和串口显示,以直观的方式说明处理器和外设运行情况,加强教学的趣味性和实用性。

表1 仿真平台功能

功能1:ADC转换实验 功能5:SPI接口数码管实验

功能2:I2C读写实验 功能6:外部中断实验

功能3:GUI菜单、曲线绘制实验 功能7:uC/OS-II统计功能实验

功能4:UART读写与Shell实验 功能8:uC/OS-II信号量、邮箱实验

将uC/OS-II移植到Proteus仿真平台,在软件中创建4个任务:LED1显示任务TaskLED1、LED3显示任务TaskLED3、处理器休眠任务TaskPowerDown、键盘处理任务TaskKeyBoard。通过LED1和LED3指示操作系统运行情况,在TaskPowerDown任务中对GUI界面进行刷新和处理器低功耗操作,在TaskKeyBoard中扫描键盘动作,使用函数指针指向表1中的8个功能代码入口地址,通过按键直接选择任意功能进行运行。

仿真平台正常运行后,显示如图2所示的GUI界面和串口调试信息。

在软件设计过程中,充分考虑了系统的软硬件可扩展性,提供给学生的软件代码书写规范,函数和变量命名风格统一,采用大量的宏定义(#define)和条件编译,保证了硬件管脚接线变化时能方便地修改ARM处理器的GPIO管脚配置。

以LED1连接在P0.28引脚为例,采用如下代码对LED1的连接和行为进行描述:

#define LED1 28

#define LED1_ON() IOCLR = 1<

#define LED1_OFF() IOSET = 1<

连接LED1管脚的初始化代码如下:

#if LED1 < 16

PINSEL0 &= ~(3<<(2*LED1));

#else

PINSEL1 & =~(3<<(2*(LED1-16)));

#endif

IO0DIR |= (1<

所有外設引脚均采用这种方式进行初始化和行为描述,因此可以在TargetInit函数中仅对必要的外设(如串行口、RTC时钟)进行初始化,在各任务代码中对使用的外设进行独立的初始化。这种代码风格符合学生的使用习惯和教学实际需要,无需在多个*.c文件之间来回进行函数查找和代码修改。

二、Proteus-uC/OS-II仿真平台在实验教学中的应用

“嵌入式系统及应用”课程的核心体现在硬件和软件的结合上。但传统的理论教学中,ARM7TDMI处理器架构和RISC指令集是教学的重点和难点,这部分内容一般安排在外设接口和操作系统教学之前;而实验教学一般以点亮一个LED开始,按照GPIO、串行口、定时器、外部中断的顺序讲授ARM处理器的内部寄存器。在实际教学中发现,处理器架构和指令集内容过于抽象,降低了学生的学习热情,造成教学进度缓慢、学生对知识点掌握不到位等情况,极大地影响了课堂教学效果和实验效果。

1.基于仿真平台的嵌入式操作系统教学

笔者将设计的Proteus-uC/OS-II仿真平台引入到教学中,从操作系统的运行机制、实现原理上进行宏观讲解,然后对应用软件的结构进行分解介绍,最后深入到操作系统源代码和ARM移植代码的分析和讲解。这种教学方式完整地覆盖了嵌入式系统软硬件设计的流程和理论知识点,也能让学生在入门阶段形成“自上而下”的设计思路,彻底摆脱传统的“前-后台”设计思想的限制,对嵌入式操作系统和嵌入式处理器的架构和内部状态寄存器集有更深刻的了解,为以后从事嵌入式系统软硬件开发打下坚实的基础。

uC/OS-II是轻量级的嵌入式操作系统,其源代码仅有7000行左右,在裁剪了邮箱、队列、信号量等功能后,OS_Core.c和OS_task.c文件源代码结构清晰,特别适合在教学中进行源代码级分析。OS_TCB链表结构和最低优先级查找算法是uC/OS-II的精华知识点,对后续学习信号量、邮箱、互斥等链表结构具有举一反三的作用。下面详细列举基于LED1和LED3任务的uC/OS-II任务切换教学过程:

在TaskStart任务中创建TaskLED1和TaskLED3任务,要求LED1每秒闪烁一次,LED3每秒闪烁5次。因此,需要分别在TaskLED1和TaskLED3中分别调用OSTimeDlyHMSM(0,0,1,0)和OSTimeDlyHMSM(0,0,0,50),使得任务延时并交出CPU控制权。在教学中,依次分析OSInit、OSTaskCreate和OSStart的源代码,根据链表断开和插入操作,对OSTCBCur、OSTCBFreeList、OSTCBHighRdy和OSTCBList四个指针的内容进行讨论,使学生掌握操作系统在建立用户任务后OSTCBTbl数组的链表结构。同时,在建立用户任务TaskLED1和TaskLED3的过程中,对OS_core.c的任务就绪表OSRdyTbl、映射表OSMapTbl的内容变化进行分析,掌握uC/OS-II优先级查表算法“以空间换处理时间”的核心思想。在理论课教学中,首先通过源代码和流程图分析,使得学生对uC/OS-II的内部数据结构有一个初步了解,然后在Proteus平台,通过Keil uVision4的联调方式,以单步运行的方式,结合软件流程图走向,在Keil中观察相关变量的内容变化,学生就能比较容易地掌握uC/OS-II的数据结构和任务级任务切换的概念。在这个过程中所涉及到的软件中断、定时器中断等内容则在后续理论课程中进行讲授。

2.基于仿真平台的外设接口知识点教学

在学生从应用的角度,掌握了uC/OS-II的任务创建、信号量等知识点之后,进入到ARM处理器外设接口的知识点学习阶段。在课堂教学中,对于表1中所列的功能1-功能6的各外设功能,按照GPIO、UART、定时器、I2C、SPI、外部中断的知识点顺序在课堂上讲解ARM处理器的内部寄存器和对应的功能。利用Proteus仿真平台中的Debug功能和Keil的联调功能,实时查看不同配置时相关外设寄存器的内容,对仿真效果进行在线分析和调试,加深学生对外设寄存器的理解。

3.基于仿真平台的ARM处理器底层结构知识点教学

在独立讲授Proteus-uC/OS-II仿真平台的功能1 – 功能8之后,进入到uC/OS-II操作系统的移植代码部分。这部分知识点与ARM7TDMI处理器架构和RISC指令集密切相关。通过在课堂上依次讲授ARM处理器启动代码、OS_cpu_a.s、OS_cpu_a.c源代码分析和软件中断等内容。以中断级任务切换函数OSIntCtxSw的讲授过程为例:

OS_TASK_SW是任务级任务切换函数,引起0x00号软中断,并最终会跳转到OSIntCtxSw执行,OSIntCtxSw也是中断级任务切换函数的入口地址。对OSIntCtxSw的理解,实际上是要理解各个任务的堆栈设置。一个任务正常运行,是运行在user模式下,根据ARM7的体系结构,user模式的所有寄存器和system模式下的所有寄存器使用同一个物理地址。其他模式R13,R14不同物理地址,FIQ模式R8-R14不同物理地址。其他模式相比user/sys模式,多一个SPSR寄存器,用于保存发生中断时的CPSR的备份。因此,当发生任务切换,需要保存当前任务的所有寄存器,即R0-R14。

利用Keil软件的联调功能,对uC/OS-II的启动过程、任务级任务切换和中断级任务切换等过程在Proteus仿真平台进行单步Debug调试,配合ARM处理器内部寄存器的内容加深对指令集和处理器架构的理解。

4.基于仿真平台的现场教学实践

在教学准备阶段,教师事先根据知识点准备好Proteus仿真模型,课堂上讲解完相关知识点后,对Proteus仿真结果进行分析,学生结合串行口显示、LCD显示和内部寄存器内容,可以看到真实的运行现象和结果,增强了教学的直观性、生动性和趣味性。

目前,高年级的学生均拥有笔记本电脑,可以要求学生将电脑带进课堂,利用Proteus软件与教师同步运行仿真平台,观察ARM处理器的内部寄存器、存储器和变量的内容变化,观察外设电路的工作状态。此外,在课堂上教师可以提供一些具有典型错误的代码,采用启发式和自主式的方式,要求学生在课堂上修改源代码和调试,加深对嵌入式系统设计与开发的理解。通过在课堂上现场指导学生对实例进行修改、编程和调试,观察仿真运行情况,使学生及时理解相关知识点,领会抽象和复杂的概念,积累软硬件设计、调试的经验,达到“学以致用”的目的。

由于理论课程时间相对较短,嵌入式系统设计需要开发者拥有一定的经验和投入大量的时间,而学生独立开展设计工作的能力相对较弱,为了使得学生充分体验嵌入式系统设计过程,笔者对课程设计进行了精心准备和选题,选取软硬件兼顾、工作量的题目,要求学生在课余时间完成Proteus仿真,如基于GPRS Modem的远程无线数据传输系统、温湿度监测系统、直流电机控制系统等。在学期期中阶段开始课程设计准备工作和指导工作,定期跟踪设计进度,要求学生在期末阶段完成Proteus仿真模型和软件设计;对于部分动手能力较强的学生,则要求完成印刷电路板作品,体会Proteus仿真模型和实际软硬件开发的不同,总结模型与真实电路的差异,将Proteus作为辅助设计工具和前期调试验证工具。

三、结束语

笔者将Proteus-uC/OS-II仿真平台应用于“嵌入式系统及应用”课程的理论教学中,采用“操作系统-外设接口-底层结构”的自上而下的体系结构对课程的理论知识点进行了分解,通过课堂演示和课堂内调试,使学生及时有效地掌握相关知识点。在课程的期中阶段,开展基于Proteus的课程设计,使学生深刻体会嵌入式系统设计和开发的全过程,同时认识到Proteus仿真模型和实际电路的区别,在实际应用中积累设计经验和调试经验。通过近两年将Proteus-uC/OS-II仿真平台引入到《嵌入式系统及应用》教学全过程的实践,学生普遍反映该课程趣味性高,有利于学生实践和创新能力的提高。在教学过程中,有部分同学借助将笔者提供的仿真平台,自行购买元器件,使用印刷电路板对仿真平台进行了实现,也有部分学生将该仿真平台在其他ARM开发板上进行了实现。借助于Proteus-uC/OS-II仿真平台,学生在各种电子大赛,智能车、创新课题和毕业设计中取得了优异的成绩。

参考文献:

[1]李春光,谢光前.以项目为导向的嵌入式系统实践教学研究[J].中国电力教育,2014,(4):183-184.

[2]钱诚,彭馨馨.计算机应用专业嵌入式系统课程教学探讨[J].中国电力教育,2014,(8):144-145.

[3]陈知红,王锦兰.Proteus 仿真软件在电工学中的应用[J].实验技术与管理,2014,31(2):93-95.

[4]張兰红,陆广平.基于 Proteus 仿真的单片机教学的研究与实践[J].中国电力教育,2014,(5):76-77.

[5]邵贝贝.嵌入式实时操作系统uC/OS-II[M].北京:北京航空航天大学出版社,2003.

(责任编辑:刘丽娜)