第3章 嵌入式系统软件

早期的嵌入式计算机系统软件开发必须使用汇编语言,编写汇编语言程序的效率极低而且很难维护。今天我们可以使用很多种成熟的高级语言开发嵌入式系统软件, 如C/C++、Python、JavaScript、Lua、Go等。在嵌入式软件开发领域C/C++和Python都十分流行,C/C++是编译型语言的代表,Python则是解释型语言的代表, 本章将采用这两种编程语言。在过去的20年间,嵌入式Liunx(即ucLinux)、嵌入式Windows(即Windows CE)几乎被当作标准版本的嵌入式系统软件开发的模版, 事实上99%的嵌入式系统软件根本不用OS或使用FreeRTOS、RTX RTOS等极其小型的OS,本章将分析无OS的和带有OS的嵌入式系统软件开发的基础(分层抽象)架构 和基本开发方法,以及如何使用Python和C/C++语言开发嵌入式系统软件。

动手实战是一种高效率的嵌入式系统学习方法,本章包含一个动手项目:创建一个兼容Arduino开源板和软件开发环境。通过动手实战能够帮助我们理解前三章 的理论内容,还为后续学习过程中的动手验证准备一些工具。


Note

嵌入式系统软件相关的基础概念:

  1. RTOS (Real-Time Operatiing System),实时操作系统是一种多任务的操作系统,相较于非实时的桌面操作系统(如Linux),RTOS不仅支持时间片轮转的多任务调度,也支持抢占型多任务调度,每个任务都能在规定时间期限内得到执行。但是,RTOS没有桌面管理,缺少人机交互等,编译系统程序时RTOS作为系统组件的一部分一起编译生成目标系统的可执行文件。
  2. FreeRTOS,一种使用C/C++语言实现的开源的实时操作系统,FreeRTOS具有可裁剪、易移植等特性,而且代码极少(最小系统仅占9KB存储空间),目前应用最广泛的一种RTOS,绝大多数半导体厂商都已移植FreeRTOS支持自有的MCU/SoC。
  3. 编译型编程语言,如C/C++、Rust等编程语言,可读性较高的高级编程语言,程序源码和库文件必须经过编译、连接生成目标系统的可执行文件,然后才能被目标系统执行。
  4. 解释型编程语言,如Python、JavaScript等变成语言,可读性较高的脚本编程语言,脚本程序可以被已经安装有脚本解释器的计算机直接执行。
  5. Python解释器,一种独立的应用程序,不仅可以从控制台读取单行或多行脚本执行并输出结果,也可以从指定的Python脚本文件逐行读取脚本程序执行并输出结果。支持第三方库文件加载,程序开发十分高效。
  6. 交叉编译,在开发者宿主计算机系统上将源码、库文件(和RTOS)等一起编译和连接并生成在目标系统可执行文件的过程称作交叉编译,尤其那些计算性能低、存储资源少的嵌入式系统,无法运行编译器等工具链软件,这些嵌入式系统开发必须采用交叉编译方法。
  7. IDE (Integrated Development Environment),安装在系统开发者的宿主计算机上的应用程序,一般的IDE都包含有源码编辑器、源码调试器、编译器等功能,用于嵌入式系统开发的IDE还带有固件下载器等。Arduino IDE是一种入门级的开源的嵌入式系统的集成开发环境,但不支持源码调试。MU编辑器是一种开源的Python脚本集成开发环境,支持REPL和串口控制台。
  8. 固件 (Firmware),嵌入式系统的可执行文件的俗名,所以固件都是二进制格式的,文件也比较小。当目标系统上已有引导程序(Bootloader),我们可以通过引导程序下载和更新系统固件,如果引导程序没有此功能或系统还没有引导程序时,必须借助于专用工具和嵌入式系统专用的接口下载固件。