本书的硬件开发平台为苏州大学EAI&IoT实验室(简称SD-EAI&IoT)研发的以意法半导体(ST)的STM32L431芯片为核心的通用嵌入式计算机,型号为AHL-STM32L431。嵌入式软件开发平台为SD-EAI&IoT研制的适用于多种类型微控制器的金葫芦集成开发环境AHL-GEC-IDE,对于本书的样例工程,兼容ST的集成开发环境STM32CubeIDE。本节首先介绍GEC架构,接着介绍软硬件平台,然后介绍本书配套的电子资源。
为了能够提高编程颗粒度和可移植性,可以借鉴通用计算机(General Computer)的概念与做法,在一定条件下,利用通用嵌入式计算机,把基本输入输出系统(Basic Input and Output System,BIOS)与用户程序分离开来,实现彻底的工作分工。GEC虽然不能涵盖所有嵌入式开发,但可涵盖其中大部分。
GEC概念的实质是把面向寄存器的编程提高到面向知识要素的编程,从而提高编程颗粒度。但是,这样做也会降低实时性。弥补实时性的方法是提高芯片的运行时钟频率。目前,MCU的总线频率是早期MCU总线频率的几十倍,甚至几百倍,因此更高的总线频率给提高编程颗粒度提供了物理支撑。
另外,软件构件技术的发展与普及也为提出GEC概念提供了机遇。嵌入式软件开发工程师越来越认识到软件工程对嵌入式软件开发的重要支撑作用,意识到掌握和应用软件工程的基本原理对嵌入式软件的设计、升级、芯片迭代与维护等方面具有不可或缺的作用。因此,从“零”开始的编程,将逐步分化为构件制作与构件使用两个不同层次,这为嵌入式人工智能提供先导基础。
一个具有特定功能的GEC,体现在硬件与软件两个方面。在硬件上,把MCU硬件最小系统及面向具体应用的共性电路封装成一个整体,为用户提供SOC级芯片的可重用的硬件实体,并按照硬件构件要求进行原理图绘制、文档撰写及硬件测试用例设计。在软件上,把嵌入式软件分为BIOS程序与User程序两部分。BIOS程序先于User程序固化于MCU内的非易失存储器(如Flash)中。启动时,BIOS程序先运行,随后转向User程序。BIOS提供工作时钟及面向知识要素的底层驱动构件,并为User程序提供函数原型级调用接口。
与MCU对比,GEC具有硬件直接可测性、用户软件编程快捷性与可移植性三个基本特点。
1)GEC硬件的直接可测性
与一般MCU不同,GEC类似于个人计算机,通电后可以直接运行内部BIOS程序,BIOS驱动保留使用的小灯引脚,高低电平切换(在AHL-STM32L431开发套件上,可直接观察到小灯闪烁)。可利用金葫芦GEC集成开发环境AHL-GEC-IDE使用串口连接GEC,直接将用户程序User写入GEC,User程序中包含类似于个人计算机程序调试的printf语句,通过串口向个人计算机机输出信息,实现了GEC硬件的直接可测性。
2)GEC用户软件的编程快捷性
与一般MCU不同,GEC内部驻留的BIOS与个人计算机上电过程类似,完成系统总线时钟初始化;BIOS包含一个系统定时器,提供时间设置与获取函数接口;BIOS内驻留了实时操作系统内核程序和嵌入式常用驱动,如GPIO(General Purpose Input/Output,通用输入输出)、UART、ADC、Flash、I2C、SPI、PWM等,并提供了函数原型级调用接口。利用User程序不同框架,用户软件不需要从“零”编起,而是在相应框架基础上,充分应用BIOS资源,实现快捷编程。
3)GEC用户软件的可移植性
与一般MCU软件不同,GEC的BIOS软件由GEC提供者研发完成,随GEC芯片提供给用户,即软件被硬件化,具有通用性。BIOS驻留了大部分面向知识要素的驱动,提供了函数原型级调用接口。在此基础上编程,只要遵循软件工程的基本原则,GEC用户软件则具有较高的可移植性。
嵌入式软件开发区别于个人计算机软件开发的一个显著的特点在于,它需要一个交叉编译和调试环境,即工程的编辑和编译所使用的软件通常在个人计算机上运行,而编译生成的嵌入式软件的机器码文件则需要通过写入工具下载到目标机上执行。由于主机和目标机的体系结构存在差异,增加了嵌入式软件开发的难度,因此选择好的开发套件将有助于学习与开发。
学习实时操作系统应该在一个实际的硬件系统中进行,在具备基本硬件条件下,不建议读者使用仿真平台进行学习,所谓“仿真”不真,无法实现实际的学习目标。实际上,随着技术的不断发展和芯片制造成本的下降,可以买到价格十分低廉、功能却十分强大的实时操作系统硬件学习平台。
本书介绍的可用于实时操作系统学习的开发套件的型号为AHL-STM32L431,其主要特点如下。
(1)核心芯片为64引脚LQFP封装的STM32L431RC芯片。内含256KB的Flash(共有128个扇区)、64KB的RAM,包含SysTick、GPIO、串口、A/D、D/A、I2C、SPI等模块。
(2)开发套件由硬件最小系统、红绿蓝三色灯、触摸按键、温度传感器、两路TTL-USB等构成。引出所有MCU引脚。其中的三色灯部件,内含蓝、绿、红三个发光二极管,俗称小灯,这三个小灯的正极过1kΩ电阻接电源正极,三个小灯的负极分别接MCU的三个引脚,具体接在MCU的哪几个引脚,参见样例工程“...\CH3.3-Nos\05_UserBoard\User.h”文件,用户使用的所有硬件引脚应该在此进行宏定义,这样符合嵌入式软件设计规范。
(3)开发套件硬件的扩展底板上还有个Type-C接口。实际上,它是两路TTL串口,默认它与个人计算机进行串行通信,将USB-Type-C数据线的USB端口连接个人计算机机的USB口,数据线的Type-C端接硬件底板上的Type-C口,就可以使用printf输出进行跟踪调试,printf输出的字符信息将送到个人计算机的串口工具显示栏,方便嵌入式程序的调试。
(4)可扩展应用。AHL-STM32L431开发套件不仅可以用于Mbed OS实时操作系统的学习,还可以用于通过板上的开放式外围引脚,外接其他接口模块进行创新性实验。
当然,读者可以使用自己的硬件平台,参考本书的工程框架,完成自身硬件平台下的工程框架设计。
AHL-STM32L431嵌入式开发套件分迷你型(见图3-1)、扩展型两种型号,更详细的介绍见本书配套电子资源。迷你型可以完成本书第1~12章所有实验,扩展型可以完成本书所有实验,并用于实践创新。
图3-1 AHL-STM32L431嵌入式开发套件(迷你型)
具体引出脚含义及相关内容参见本书配套的电子资源。
目前,大多数嵌入式集成开发环境(Integrated Development Environment,IDE)基于Eclipse架构 开发。本书使用的IDE主要有两种:SD-EAI&IoT推出的AHL-GEC-IDE与ST推出的STM32CubeIDE。本书给出的基于STM32L431程序实例兼容AHL-GEC-IDE与STM32CubeIDE。
建议使用AHL-GEC-IDE,必要时,利用AHL-GEC-IDE的“外接软件”菜单,将STM32CubeIDE作为外接软件使用。
AHL-GEC-IDE是SD-EAI&IoT于2018年推出的免费嵌入式集成开发环境,优点是操作简单、功能实用、兼容几个芯片公司的常用开发环境及厂家工程模板。其集成GNU编译器、汇编器等,面向ARM Cortex-M微处理器开发,具有编辑、编译、程序下载、printf打桩调试等功能,为设计人员提供了一个简捷易用的嵌入式开发工具。
AHL-GEC-IDE与其他常用开发环境相比,有以下特点。
(1)常用开发环境兼容性。对于STM32芯片,兼容STM32CubeIDE及Keil开发环境;对于TI芯片,兼容CCS(Code Composer Studio)开发环境;对于NXP芯片,兼容KDS(Kinetis Design Studio)开发环境。
(2)支持串口下载调试。基于BIOS与User框架,支持通过串口的下载调试,无须其他烧录工具,下载后User程序立即执行,可应用类似于个人计算机编程的printf输出调试语句,跟踪程序运行过程,提示信息立即显示在个人计算机显示屏的文本框中,使嵌入式编程与个人计算机编程过程几乎一致。
(3)外接软件功能。可自行外接其他软件,随后在菜单栏中打开用户需要的软件运行,方便功能集成与开发应用。
(4)丰富的常用工具。程序调试过程可以通过串口实现对存储器的某个区域进行读取和修改,支持对Flash、RAM区域读出;也可以直接通过软件中的串口工具,观察串口输出情况,不需要借助其他外部串口工具。
(5)简化工程配置。当工程文件中有新增的文件或文件夹时,其他的开发环境需要通过工程配置操作将该文件包含在工程中,而AHL-GEC-IDE默认工程下级文件夹为工程编译所需,不须在工程中设置,自动支持C语言、汇编语言等。在该AHL-GEC-IDE环境下,通过自行识别,可直接编译C语言或者汇编语言下的工程,不需要对编译器进行选择。
(6)可扩展功能。AHL-GEC-IDE除了具备开发的基本功能(导入工程、编辑、查找和替换、程序编译和烧写等),还提供很多扩展功能。例如,支持远程更新,当目标芯片配置好相应的远程通信硬件后,在AHL-GEC-IDE开发环境中可以通过NB-IoT、2G、4G等无线方式实现远程的程序更新;支持动态命令,可将机器码下载到特定的Flash区域直接运行该机器码,实现命令的动态扩充。
STM32CubeIDE是适用于ST公司的MCU的免费集成开发环境,集成GNU编译器集合(GCC)、GNU调试器(GDB)等在内的免费开源软件,为设计人员提供一个简单易用的开发工具,具有编辑、编译和调试等功能。本书提供的样例工程兼容AHL-GEC-IDE与STM32CubeIDE。
Mbed OS金葫芦电子资源 ,内含所有源程序、文档资料及常用软件工具等,内含有六个子文件夹:01-Information、02-Document、03-Hardware、04-Softwareware、05-Tool、06-Other。如表3-1所示为电子资源中各子文件夹的内容索引表。其中,第1~7章的程序对Mbed OS内核程序的调用是通过对外接口函数的方式(BIOS提供的Mbed OS对外接口函数可查看04-Softwareware内各工程文件夹下05_UserBoard文件夹中的Os_Self_API.c、Os_Self_API.h和Os_United_API.h文件),第8~14章程序中提供了Mbed OS内核源代码程序(在04-Softwareware内各工程文件夹下的 05_UserBoard\mebedOS_Src文件中),是对源代码程序进行剖析和应用。
表3-1 电子资源中各子文件夹的内容索引表