C语言嵌入式系统软件设计架构教学研究
2017-12-25张智慧
摘 要: 良好的软件设计架构能够提高软件系统的开发质量和维护效率。文章从软件工程角度,将软件设计架构模式引入嵌入式应用开发课程的教学实践,结合C语言编程特点,完善软件开发过程中的项目文件组织、程序框架设计、功能模块划分以及代码重用方法等内容,为学生利用C语言进行嵌入式系统开发提供参考解决方案。通过项目驱动式课堂教学内容设计,使学生掌握软件设计模式、分层开发逻辑架构和模块化程序设计方法,综合培养学生分析问题、解决问题的软件开发实践能力。
关键词: 嵌入式系统; C语言; 设计架构; 软件开发
中图分类号:G424 文献标志码:A 文章编号:1006-8228(2017)12-76-03
Research on the teaching of software design model in C language
programmed embedded system
Zhang Zhihui
(Beijing Information Technology College, Beijing 100015, China)
Abstract: Good software design architecture can improve the development quality and maintenance efficiency of software systems. Considering the software engineering technology and the characteristics of C language programming, the software design architecture model is introduced into the embedded system development course. The project file organization, program design framework, function modules and code reuse method are discussed, trying to provide a reference solution. Through the project driven classroom teaching content design, students can master the software design model, hierarchical development, logical structure and modular programming. It aims to improve students' ability to analyze and solve problems, and to develop their practical ability.
Key words: embedded system; C language; design model; software development
0 引言
嵌入式系統课程的重点在于培养学生解决实际问题的工程应用能力。随着嵌入式应用不断拓展,系统开发复杂度日益提高,对嵌入式系统应用开发人才培养提出了更高要求。传统的嵌入式系统教学主要是培养学生对相关软硬件基础知识的掌握和运用,知识点掌握比较分散,无法让学生真正形成解决实际应用问题的能力。本文将面向对象技术、分层技术应用到嵌入式系统应用开发课堂教学实践,引导学生了解掌握项目文件组织、程序框架设计、功能模块划分的理念和方法,并结合C语言编程特点介绍具体的实现方案,有利于学生掌握整个嵌入式系统的分析及设计方法,又能提升学生解决实际问题的综合能力。
1 嵌入式系统软件设计的教学思路
在嵌入式系统教学内容中贯穿软件设计方法,能够指导学生更好地完成需求分析,进行系统设计和功能模块划分,从而具备开发出可正确工作的复杂软件的能力,为后续课程实训和第一岗位任职能力打下坚实的基础。
1.1 强调软件模块划分的重要性
嵌入式系统是建立在特定硬件平台上的专用计算机系统,一般由嵌入式微处理器、外围功能电路和对外应用接口组成,软件开发主要是驱动硬件设备完成特定的业务逻辑应用。随着嵌入式软件系统的规模和复杂度日益增长,软件设计在嵌入式系统开发中发挥着越来越重要的作用,如何更好地将开发需求转变成软件模块划分,进而转变成能够用代码实现的程序功能,成为系统设计面临的主要问题。
分层设计 分层的目的是为了将复杂的问题进行合理区分、递进简化,从而将系统功能抽象成一个个具体的模块结构,最终将应用需求转变为编程实现。在教学过程中采用项目化的教学方法,通过让学生完成项目的分层设计来掌握软件功能划分原则和方法,形成对嵌入式系统开发的整体理解。比如设计一个电子罗盘,可以从概念上划分为数据采集层、处理层、显示层等,层层递进实现,每层解决不同的问题,下层要能够为上层应用提供支撑。
模块优化 每层内部按照任务分解、功能优化、重用程度进行模块划分,尽量实现软件功能的高内聚、低耦合。每个软件模块的功能实现应该方便理解和应用,软件模块之间的相关性要尽可能小,这样设计的程序便于协同开发,提高开发质量和效率。在教学过程中,要注重让学生研究讨论需求问题域与编程实现域之间的映射关系,理解软件功能模块紧凑性和正交性的重要性,增强对系统设计科学合理性的理解和认识。比如,显示器功能的设计,亮度、饱和度等调节功能彼此独立,使得功能无论在实现上还是在应用中都很便捷。
1.2 明确系统软件框架设计
一个好的软件框架不仅有利于提高软件开发质量和效率,而且还可以提高软件的可维护性和代码重用性。对于刚接触嵌入式系统开发的学生来说,如何将C语言的语句、算法等知识来解决实际问题的能力还很弱,需要在学习其他内容之前先有一个整体的框架概念,带着问题、目标去学,才能提高学生学习的积极性、主动性。
四层逻辑架构模型 软件分层逻辑架构设计的关键是理清层次结构、优化功能模块组织,使得系统设计开发高效灵活、软件功能可按需扩展,已有的成熟代码能够得到有效重用、迭代发展。采用面向对象设计思想对现有嵌入式系统开发进行去中心化重新设计,将系统逻辑架构区分为应用管理层、算法协议层、功能拓展层、硬件驱动层等四个层次,每一层内将同类或相似技术实现的功能进行聚合,以减少业务应用、模型算法和硬件操作之间的耦合性,使得应用程序结构变得更加清晰和灵活。在嵌入式系统课程中引入四层逻辑架构模型的内容,目的是让学生掌握一种比较先进的程序架构方法,做到“授之以渔”,也会使课堂教学与工程应用结合更紧密,增强学生利用成熟的软件开发方法分析问题、解决问题的能力。
层内软件功能组织 每层的软件功能设计,除了要考虑当前的应用需求,还要着眼后续的重用和拓展,对所有功能进行合并整合,优化功能模块设计,尽量实现硬件无关性,使软件功能模块能够支撑多个应用逻辑和不同开发要求。应用管理层主要包括界面交互、业务逻辑调度等功能。算法协议层主要包括模型算法、协议解析、文件管理、数据库管理等功能,如位置转换计算、罗盘指针方位计算等。功能拓展层主要包括器件的无关性,提供各种器件的通用性处理、接口访问等功能,如LCD的线、圆、矩形处理,传感器数据转换等。硬件驱动层主要包括硬件的无关性,提供硬件的操作原语功能,如LCD的定位、写点、写字节,传感器数据采集等功能。在教学过程中,指导学生按照四层模型进行软件功能设计和开发,理解并掌握软件设计框架的概念,正确进行编程开发。
2 项目驱动式课堂教学内容设计
课堂教学内容设计关键是把教与学结合在一起,通过实施一个完整的项目,由教师提供“设计蓝图”,采用任务驱动方式,让学生主动参与、相互协作,将学习到的软硬件知识系统地应用到嵌入式系统开发实际应用中。
内容安排 在教学目标上,以提高学生从事实际嵌入式系统开发能力为核心,突出软件工程化管理理念,围绕软件设计模式、系统分层逻辑架构和模块化程序设计等内容,融入嵌入式系统开发概念介绍,贯穿到整个教学内容。在教学计划上,根据学生软硬件知识基础,有针对性地补充软件工程相关知识,增加面向对象技术、分层技术和软件重用技术的理解和掌握,将嵌入式系统开发内容与软件设计框架有机集合,提高课堂授课的灵活性和针对性。在教学重点上,围绕一个涵盖数据采集、处理、显示等关键功能的嵌入式系统开发,灵活运用任务驱动和项目教学法,充分调动学生的学习兴趣、发掘其创造潜能,由简单到复杂,逐步实现框架内容的各项功能。
項目实施 教师充分利用自身的开发经验和知识优势,帮助学生理解软件设计框架,建立基本的项目工程文件,按照课程计划安排进行上机实践、组织项目开发并撰写项目开发报告。在项目组织管理上,虽然标准的C语言开发工具并不提供软件框架管理,但根据本文提供的系统逻辑架构设计,可以按照分层原则组织文件目录建立自己的工程文件管理原则,提高代码文件的组织管理和协同开发能力。主程序文件、全局变量头文件通常放在根目录,其他文件按照应用管理层、算法协议层、功能拓展层、硬件驱动层分别存放在AppFunc、ModelFunc、HardExt、HardOpt文件夹,所有文件命名遵循统一的规范。在功能模块开发上,指导学生应少用或不用全局变量,尽量通过函数参数来传递数据,上层功能模块的开发可以调用下层功能模块,下层功能模块尽量避免交叉调用或越级调用。下面是利用角速度传感器制作电子罗盘的项目案例,其中LCD显示功能在各层的示例代码如下。
应用管理层,uint Draw_Compass( uint angle,uint pcolor);显示当前angle角度的电子罗盘,pcolor为显示颜色,分别调用了算法模型层中罗盘角度函数、功能拓展层的画线函数。
算法模型层,uint Cac_Compass(uint x, uint y, uint z);计算罗盘指针方位,x、y、z为传感器获取的数值,转换成指针的角度。
功能拓展层,uint Lcd_Line(uint x1, uint y1, uint x2, uint y2, uint pcolor); //画线,调用画点函数。
硬件驱动层,uint Lcd_Pixel(uint x, uint y, uint pcolor); //驱动LCD显示硬件进行画点。
课程评价 为了增强学生对软件设计框架概念的理解和应用,将课程评价分为学生讨论和教师评价。学生讨论按照小组进行组织,每个小组3-5人,小组之间相互检查项目进展、软件设计、框架应用和模块划分等内容,交流开发经验,有利于提升学习的积极性和创造性。教师评价根据学生项目报告和程序文档,分析学生对设计模式的理解和掌握情况,查看开发过程中的应用情况,根据每个学生的特点给出针对性的指导,提高学生对知识的综合运用能力,考评成绩按照一定权重(可按40%)纳入课程考核成绩。
3 结束语
本文提出的嵌入式系统软件设计架构教学方法,将软件工程化思想、程序设计模式融入课堂教学实践,以项目任务驱动提高学生学习的积极性和主动性,提高学生从事实际应用系统开发能力,该方法实施以来取得了较好的成效,很多学生在毕业实习阶段就能很快融入企业开发团队。
未来嵌入式系统应用的加速发展,对软件开发的质量和效率提出了更高的要求,高效开发和软件质量特性保证,将是嵌入式系统开发人才培养和工程实践下一步需要重点研究和解决的问题。
参考文献(References):
[1] 张智慧.面向职业技能培养的软件开发课程改革探索[J].计
算机时代,2015.5:54-58
[2] 张智慧.多层模型在嵌入式软件开发中的应用研究[J].计算
机时代,2017.4:17-20
[3] 田泽.嵌入式系统开发与应用[M].北京航空航天大学出版社,
2005.
[4] 程欣宇,张丽,王忠德.数据结构实验的三层模型[J].计算机教
育,2014.12:65-67
[5] 李小遐,刘惠梅.C语言程序设计能力教程[M].北京理工大学
出版社,2011.