嵌入式软件设计(第2版)
上QQ阅读APP看书,第一时间看更新

前言

工业软件是我国新时期发展战略中的重点攻关方向之一。嵌入式软件是工业软件的核心分支。嵌入式软件是面向应用的,工业控制软件、5G通信设备软件、自动驾驶控制软件、航天飞行器控制软件等都是嵌入式软件。随着技术的发展,各个应用领域的需求不断扩展,嵌入式软件的规模越来越大、复杂性越来越高、对性能的要求越来越高。因此,嵌入式软件开发需要更专业的软件设计,以保证在技术与需求快速变化的情况下,软件满足稳定性、可靠性、扩展性、复用性等非功能性要求。这就要求嵌入式软件设计人员不仅要掌握具体的开发技术,更要掌握系统化的嵌入式软件设计方法。

2007年,我们编写了《嵌入式软件设计》第1版,中国科学院与中国工程院两院院士王越教授为这本书作了序,同年这本书还被评为北京市精品教材。十多年来,虽然技术在不断发展,但是嵌入式软件设计的方法论相对稳定,这本教材从撰写之初就将重点放在基础理论与方法论上,因此一直没有修订。

这次修订在结构上做了很大的调整,系统、完整地介绍实时软件与复杂嵌入式软件的分析、建模方法和软件设计方法,并分别以开源实时操作系统FreeRTOS、嵌入式Linux作为实时软件与复杂嵌入式软件的系统软件平台介绍相关软件开发实例。除了第9章、第10章沿用上一版第11章、第12章的内容并删除了上一版第15章之外,其他章节的内容都做了较大的调整。

本书第1章介绍嵌入式系统的基础知识,对上一版内容的调整主要有三个方面。

1)将“嵌入式系统软件基础知识”拆分并调整,移到其他章节中。

2)将嵌入式系统总线按照片级总线、板级总线、系统级总线进行分类和详细介绍,并增加了基于Arduino的串口总线实例。选择Arduino的串口总线作为实例,是因为Arduino的封装性非常好,学生不需要对硬件有深入的了解,可以将所有注意力都集中在对串口总线的理解与应用设计上。

3)将上一版中第13章调整后移到第1章,重点介绍工业应用中分布式嵌入式系统的架构。

第2章介绍嵌入式系统的软硬件协同设计。嵌入式系统软硬件协同设计是系统工程思想在嵌入式系统设计中的具体体现,因此,我们合并了上一版第2章和第3章的内容并对其做了相应的调整。

第3章介绍实时软件的分析设计方法。由于大多数实时软件都是用结构化的程序设计语言——C语言或是用汇编语言与C语言混合开发的,我们期望给出完整的实时软件分析建模方法与设计方法,因此增加了结构化分析建模方法,详细介绍了数据流图、控制流图、状态图的建模方法,完整地构建了一个实时系统的功能模型、控制模型与动态模型。然后介绍用DARTS方法中的任务划分原则与接口设计方法进行系统的分解。接下来介绍实时软件常用的软件架构,基于这些架构及其组合来组织任务。最后,在此基础上介绍了任务设计、模块设计、任务与系统集成。

第4章介绍复杂嵌入式软件的分析设计方法,主要介绍面向对象的复杂嵌入式软件分析设计方法。目前,一些复杂的实时软件是用面向对象程序设计语言C++开发的,或是用汇编语言、C语言、C++语言混合开发的,大多数非实时嵌入式软件都是用面向对象程序设计语言开发的,因此,针对复杂嵌入式软件,我们系统地介绍了面向对象的嵌入式软件分析设计方法。对于实时软件,这一章介绍的方法要与第3章介绍的任务划分原则与接口设计方法结合使用;对于非实时嵌入式软件,仍然可以借鉴第3章的设计原则。为了复杂嵌入式软件分析设计方法的内容完整性,我们将上一版的第10章移至4.5节。

第5章介绍嵌入式操作系统与移植,嵌入式操作系统的选型与移植在嵌入式软件开发中是基础,也是难点。我们在上一版1.3.2节的基础上增加了嵌入式操作系统架构的内容,并以开源实时操作系统FreeRTOS在STM32硬件平台上的移植作为实例,介绍了实时操作系统的移植与硬件平台的关系。

第6章介绍板级支持包与设备驱动,在上一版第7章的基础上增加了STM32硬件平台上的FreeRTOS设备驱动程序开发实例,介绍了基于ARM MPU硬件平台的Linux操作系统的设备驱动开发。

第7章介绍嵌入式数据库,对上一版第9章的内容进行了调整,删除了一些关于设计数据库、不常用嵌入式数据库的内容,增加了目前最常用的嵌入式数据库SQLite的持续数据管理应用设计的内容。

第8章介绍嵌入式软件图形用户界面设计,对上一版第8章中目前不常用的技术进行了删减,并增加了目前常用的GUI设计中间件QT的介绍。此外,还增加了不用第三方GUI设计中间件而用C语言设计图形化界面的方法。

第11章介绍嵌入式软件开发环境。这一版我们以实时操作系统FreeRTOS作为实时软件的系统软件平台的实例,以嵌入式Linux操作系统作为复杂嵌入式软件的系统软件平台的实例,因此,在上一版第14章的基础上,删掉了“Windows CE应用开发环境”,增加了“FreeRTOS嵌入式系统开发环境”。

在本书修订过程中,刘亚楠提供了STM32硬件平台上的FreeRTOS移植与驱动开发实例,张博华提供了Arduino串口应用、SQLite数据库应用的开发实例,并整理了QT、C语言设计图形化界面方法的相关内容,邱世同根据课件整理了结构化分析建模方法等内容,在此感谢他们的辛勤工作。

本书主要面向特色化示范性软件学院软件工程专业大三以上本科生与研究生的嵌入式软件设计课程,对电工电子类专业、通信专业、机械专业开设的嵌入式系统相关课程也有所帮助。

理论授课内容、实践内容与学时安排建议如表1所示,内容与课时可根据具体情况调整。比如,若是面向研究生的课程,第9章和第10章的课时可以增加;若是面向本科生的课程,第9章和第10章的内容也可以不讲。第3章和第4章放到后面讲授,是为了让学生先了解嵌入式系统的硬件平台与软件平台,通过理论授课与实践相结合让学生对嵌入式系统有了基本的了解与认知后,再学习系统的嵌入式软件分析设计方法,在前述实践的基础上完成实时嵌入式软件与复杂嵌入式软件的分析、设计与开发。

表1 理论授课内容、实践内容与学时安排建议