1、计 算 机 教 育Computer Education30第 4 期2023 年 4 月 10 日基金项目:教育部产学合作协同育人项目(202102373002)。作者简介:康一梅,女,教授,研究方向为嵌入式系统、人工智能,;张莉(通信作者),女,教授,研究方向为软件工程,。0引 言嵌入式软件是工信部“十四五”软件规划中5 个关键软件之一,嵌入式软件的特点是面向领域应用,如工业检测软件、5G 通信设备软件、自动驾驶控制软件、航天飞行器控制软件等。早期的嵌入式系统开发从硬件设计到软件开发一般是一个工程师完成。随着产业需求与技术发展,嵌入式系统的规模越来越大,系统功能越来越复杂,嵌入式软件也越来越
2、复杂,但是,早期的简单嵌入式系统依然占有巨大的需求份额,简单嵌入式系统、复杂嵌入式系统、智能嵌入式系统将会长期共存。目前,国内大多数嵌入式系统相关课程的内容侧重硬件与简单嵌入式软件开发1-2。国外主要是在 EE 专业开设嵌入式系统的课程,斯坦福的“嵌入式系统设计”(Embedded System Design)非常详细地介绍嵌入式系统的硬件组成与原理;MIT 的“嵌入式与开放系统”(Embedded and Open Systems)重点介绍在高性能嵌入式平台上的边缘计算,比如雷达、通信与人工智能应用;伯克利大学的“嵌入式系统”(Embedded Systems)更侧重嵌入式技术与应用。嵌入式
3、软件设计课程教学实践康一梅,张 莉(北京航空航天大学 软件学院,北京 100191)摘 要:为了培养高级嵌入式软件设计人才,提出以系统工程思想为基础的 5 层课程内容设计,阐述让学生循序渐进地掌握简单嵌入式软件、复杂嵌入式软件、实时嵌入式软件、智能嵌入式软件的设计方法。介绍课程的实践与考核,说明其具有挑战度,在综合培训学生工程能力与创新能力的同时,强调方法论的灵活应用,以达到鱼渔双授、传道致远的教学目标。关键词:简单嵌入式软件设计;复杂嵌入式软件设计;实时嵌入式软件设计;智能嵌入式软件设计上述课程的重点都不在嵌入式软件设计方法论的讲授与训练上,而系统地、完整地介绍自顶向下的简单嵌入式软件、复杂
4、嵌入式软件、实时嵌入式软件、智能嵌入式软件的嵌入式软件设计课程设计方法,可以让学生在技术快速发展中持续从容应对。1课程教学内容设计针对特色化示范性软件学院工业嵌入式软件方向的学生特点及培养定位,在嵌入式软件设计课程教学内容设计中,以系统思想汇聚、融合、集成跨学科知识与技术,以软件工程方法论指导嵌入式软件设计与开发,系统地培养学生针对不同类型嵌入式软件的设计能力,并挑战在复杂嵌入式系统设计中多种嵌入式软件设计方法的集成应用。1.1课程内容结构授课内容分为方法与技术 2 个版块,如图 1所示。IT 技术是快速变化的,软件系统设计方法是相对稳定的,因此,课程内容设计以方法为核心,技术皆作为方法应用所
5、需的案例引入。课程内容设计循序渐进,由简及难。文章编号:1672-5913(2023)04-0030-04中图分类号:G6422022年中国高校计算机教育大会(三)DOI:10.16512/ki.jsjjy.2023.04.0142022 年中国高校计算机教育大会(三)第 4 期31方法版块分为系统工程思想、嵌入式系统组成、嵌入式软件设计、实时软件设计、智能软件设计的基础知识与方法 5 个层次,这里的技术特指硬件主板及实现网络、通信、传感器、人工智能等相关技术的软硬件模块,称为模组,包括网络模组、通信模组、传感器模组、人工智能模组等。课程中技术版块是为方法服务的,按照学生对嵌入式系统了解的程度
6、以及方法的需要,分别选择 Arduino、STM32、RK3399 硬件平台及相关模组,由简单嵌入式系统到复杂嵌入式系统,再到智能嵌入式系统,循序渐进地支撑嵌入式软件设计的教学需要。1.2系统工程思想方法版块中,最底层是系统论与系统工程的基本概念,用 2 个学时快速介绍系统论与系统工程的核心思想,让学生建立系统思想的基本概念,以便理解贯穿后续整个授课内容的系统工程思想。任何领域的系统设计都需要系统思想,由于课时有限,首先在重点介绍系统 9 个要素的基础上,通过详解系统中部件应具有一致性、相关性、有用性的系统特性,让学生建立系统的整体观念;然后,介绍系统工程设计是一个设计决策问题,让学生用决策论
7、中优选、优化的方法进行嵌入式软件设计,从而形成基本的系统工程思想。1.3嵌入式系统组成第 2 层首先用 6 个学时介绍嵌入式系统的软硬件组成及各级总线,然后用 4 个学时以案例分析的方式介绍 Arduino 平台的组成与接口,温湿度传感器及传感器采集的周期、滤波与误差处理,蓝牙通信、串口通信的参数设置与软件设计,让学生建立对嵌入式系统的基本认知。这部分的教学目的是让学生建立嵌入式系统软硬件的基本概念,并介绍简单嵌入式软件即无操作系统的嵌入式软件设计方法。如图 2 所示,在设计课程内容的过程中,重组简单嵌入式软件设计方法知识体。教学中,详细介绍板级支持包BSP 的设计方法,以及应用软件采用轮询结
8、构、带有中断的轮询结构、函数队列调度结构、有限状态机、巡回服务结构、基于中断的前后台结构。同时,让学生了解这些软件结构在其他复杂软件中也可以使用,比如在游戏软件设计中,大量使用有限状态机的软件结构。图 1 课程结构图2 无操作系统的简单嵌入式软件体系结构第 2 层的难点是让学生理解总线及总线通信软件的设计开发。选择 Arduino 平台是因为其硬件模组封装性好,可以让学生将关注点放在接口、协议的软件开发上,而不是陷入硬件设计的细节中。202332计 算 机 教 育Computer Education1.4复杂嵌入式软件设计第 3 层用 6 个学时介绍复杂嵌入式软件设计的基本过程与方法,包括嵌入
9、式操作系统分类、嵌入式操作系统体系结构、嵌入式操作系统移植、BSP 与设备驱动设计方法、有操作系统的嵌入式软件设计方法。有操作系统的嵌入式软件体系结构如图 3 所示,课程按照体系结构一层层讲授相关基础知识与方法,学生在学习这些知识与方法时,面对的不是知识孤岛,而是有组织的有机整体。在嵌入式操作系统与移植部分,详细介绍嵌入式操作系统,实时操作系统的基本功能与特性,典型嵌入式操作系统架构,技术无关的操作系统移植方法;在设备驱动部分详细介绍系统初始化,基于操作系统的设备驱动的设计与开发方法;在持续数据管理部分详细介绍文件系统的原理以及用文件管理持续数据的方法,嵌入式数据库的分类、工作原理以及应用嵌入
10、式数据库管理持续数据的方法;在系统边界处理部分介绍系统自检、异常处理、系统终止等设计方法;最后,简单介绍分布式嵌入式系统的拓扑结构、软件架构和部署架构。1.5复杂嵌入式软件设计第 4 层用 4 个学时介绍实时软件的分析设计方法,包括实时软件的设计过程、分析建模方法、软件设计方法与优化方法,然后以 STM32/FreeRTOS 为例,用 2 个学时介绍实时操作系统的移植以及实时嵌入式软件的设计。课程内容的设计不是简单的取舍,而是分析、研究、创建新知识体系的过程。围绕实时性要求,梳理现有的知识与方法,将可用于实时软件的分析建模方法及软件设计方法进行归纳与组织,通过这些方法建立一个可以完整描述系统的
11、分析模型,如图 4 所示。图4 实时软件分析设计方法数据流图、状态图、时序图、控制流图是在不同时期、不同学科中提出的,将其结合起来构建完整的实时软件功能模型与动态模型。实时软件的设计给出完整的设计方法,其中任务划分原则全部围绕实时性要求而提出,这些原则不仅可以用于实时软件的设计,同时可以用于实时软件的设计评价与优化。经过归纳与重组的知识和方法,使原本零散、不完整的实时软件分析设计方法变得完整且有条理,确保传授给学生的知识是有机的整体,图3 有操作系统的复杂嵌入式软件体系结构2022 年中国高校计算机教育大会(三)第 4 期33避免知识孤岛,同时使这些知识体具有系统性。1.6智能嵌入式软件设计第
12、 5 层用 2 个学时介绍智能嵌入式软件架构设计,然后用 4 个学时以 RISC-V/Linux、SQLite数据库等作为案例,详解 Linux 操作系统移植、嵌入式数据库设计、AI 模块接入、AI 算法 SDK调用等智能嵌入式软件设计方法。2实践与考核学生按照 23 人组队,在选题列表中选择题目,在此基础上提出项目创意,基于低成本、资源有限(内存、处理能力有限)的嵌入式硬件平台与模块,循序渐进地完成一个复杂嵌入式系统的设计与实现。(1)基于 Arduino,完成一个简单嵌入式系统的硬件选型与集成、软件设计与开发。(2)在上述实践基础上,在一个 Arm 主板上,将基于 Arduino 实现的小
13、型嵌入式系统有机融合在一起,完成一个复杂嵌入式系统的设计与开发。要求在 Arm 主板上完成实时操作系统freeRTOS 的移植、设备驱动的开发、应用软件的设计与开发。(3)在 X86 目标板上,完成麒麟操作系统的部署与配置以及设备驱动的开发。可以将基于Arduino/Arm 的嵌入式系统集成到基于 X86 的系统中,这样可以设计更加复杂的嵌入式系统。最终的复杂系统集成,Arduino+Arm 或 Ar-duino+Arm+X86 选其一即可。团队实践的层次、内容如图1第2层、第4层、第5层灰色部分所示。2.1课程实践挑战度(1)实践项目难度基线:摈弃实验箱,在裸板上完成项目的设计与开发。(2)
14、选题列表:提供选题列表,包括无人机自主寻的、无人车避障、环境监测等工业嵌入式软件与消费电子嵌入式软件,引导学生的选题方向。(3)创意创新:在选题列表基础上,学生需要自己提出项目创意,这对应试化、程式化教育培养出来的学生来说,极具挑战。(4)集成性:不仅要完成简单模块,还要通过集成设计,完成一个复杂的嵌入式系统设计与开发。学生必须在课下查阅大量的技术资料,通过大量的实验验证,最后才能够完成实践项目。2.2结果导向的考核方式课程考核包括出勤与项目答辩,以项目验收的综合考核方式替代笔试、作业等单一模式考核,项目验收考核包括设计文档、项目答辩与项目演示。其中,出勤占比 10%;基于 arduino 的
15、简单项目验收考核占比 30%,基于 X86 的设备驱动开发的项目验收考核占比 10%,集成性的复杂项目(Arduino+Arm 或 Arduino+Arm+X86)验收考核占比 50%。考核标准具有较高挑战度,主要体现在以下几个方面。(1)结果导向:实践项目考核采用结果导向的考核方式,学生通过 PPT 介绍系统创意、需求和设计方案,然后演示系统。如系统演示失败,则本次实践项目考核成绩为 050 分。(2)鼓励创新:创意、创新在实践项目考核中占比 20%,鼓励学生创新,相对地便是惩罚平庸。(3)鱼渔并考:融会贯通地掌握方法比掌握技术难很多,技术是快速发展的,但方法是持续有效的。学生方案设计中,一
16、定要明确地给出架构设计、设计策略与优化、设计原则等的具体应用与分析,方法的正确性、使用程度、设计原理与优劣分析在实践项目考核中占比 30%。3结 语针对软件工程专业的特点,提出 2 个版块、5 个层次的课程内容设计。课程以方法论的培养为核心目标,最底层先建立系统思想的基本概念;第 2 层次介绍嵌入式系统的软硬件基础知识与原理,并介绍简单嵌入式软件设计方法;第 3层次介绍复杂嵌入式软件设计的过程与方法;第4 层次介绍实时嵌入式软件的分析设计方法,第5 层次介绍智能嵌入式软件的设计方法。相应地,设计了 3 个层次的嵌入式软件设计实践以及具有挑战度的考核方式,让学生循序渐进地掌握简单嵌入式软件、复杂嵌入式软件、实时嵌入式软件、智能嵌入式软件的设计方法。参考文献:1 吕为工,张策,李斌.高校计算机专业嵌入式系统课程设计内容规划J.软件导刊,2020(12):55-58.2 陈天洲.“嵌入式系统概论”课程设计J.计算机教育,2006(3):4-6.(编辑:赵 原)