Keil 模拟 STM32F103 示例体验
一般嵌入式操作系统因为它的特殊性,往往和硬件平台密切相关连,具体的嵌入式操作系统往往只能在特定的硬件上运行。对于刚接触 OneOS 操作系统的读者要想马上获得一个和 OneOS 操作系统相配套的硬件模块并不容易,但随着计算机技术的发展,我们可以采用软件方式来模拟一个能够运行 OneOS 操作系统的硬件模块,这就是 ARM 公司的 MDK-ARM(Keil)仿真模拟环境。
MDK-ARM(MDK-ARM Microcontroller Development Kit,也称为Keil)软件是一套完整的集成开发环境(IDE),它出自 ARM 公司,包括了针对 ARM 芯片(ARM7、ARM9、Cortex-M 系列、Cortex-R 系列等)的高效 C/C++ 编译器;针对各类 ARM 设备、评估板的工程向导和工程管理;用于软件模拟运行硬件平台的模拟器;以及与市面上常见的如 ST-Link,JLink 等在线仿真器相连接以配合调试目标板的调试器。MDK-ARM 软件中的软件仿真模拟器,采用完全软件模拟方式解释执行 ARM 的机器指令,并实现外围的一些外设逻辑,从而构成一套完整的虚拟硬件环境,使得用户能够不借助真实的硬件平台就能够在电脑上执行相应的目标程序。
MDK-ARM 集成开发环境因为其完备的 STM32F103 软件仿真环境,也让我们有机会在不使用真实硬件环境的情况下直接在电脑上运行目标代码。这套软件仿真模拟器能够完整地虚拟出 ARM Cortex-M3 的各种运行模式、外设,如中断异常、时钟定时器、串口等,这几乎和真实的硬件环境完全一致。实践也证明,本文使用到的这份 OneOS 入门例程,在编译成二进制代码后,不仅能够在模拟器上运行,也能够在不加任何修改的情况下在真实硬件平台上正常运行。
下面我们将选择 MDK-ARM 集成开发环境作为目标硬件平台来观察 OneOS 操作系统是如何运行的。
1. 准备工作
准备工程如下:
安装 5.14 版本及以上的 MDK-ARM (Keil)集成开发环境(具体安装过程参见MDK环境搭建),在安装好 MDK-ARM 集成开发环境后,再安装 STM32F1xx_DFP PACK包;
下载一份完整的OneOS代码(参见OneOS源码下载);
2. 初识OneOS
在用Keil模拟器运行 STM32F103 示例工程代码时,我们有必要先初步了解一下OneOS操作系统。进入到OneOS操作系统代码根目录下,我们可以看到有多个文件夹和文件,如下图:
各个目录或文件的作用描述见下表。
目录或文件名称 | 描述 |
---|---|
arch | 存放和 MCU(或 CPU )架构体系相关的代码。 |
common | 存放一些通用的没有具体业务指向的程序代码,所有模块都可以使用,不通过编译选项控制是否编译,采用默认编译进工程的方式。 |
components | 存放组件代码,可进行裁剪。 |
demos | 存放内核或组件的对外接口如何使用的示例程序。 |
docs | 存放一些文档,如编码规范、编程指南等。 |
drivers | 存放驱动的抽象层代码和具体外设的驱动代码。 |
kernel | 存放内核代码,如任务管理及调度、任务间同步以及通信、内存管理等代码。 |
libc | Libc 库部分硬件相关接口的底层适配。 |
osal | OneOS操作系统接口抽象层,支持Posix接口、CMSIS接口、RT-Thread接口等 |
projects | 各种开发板的示例工程 |
scripts | 存放OneOS-Cube工具在编译构造时所需要的脚本文件。 |
thirdparty | 存放第三方开源社区或第三方厂家的程序,包括组件、工具、协议实现或对接平台的代码等。 |
Kconfig | Menuconfig配置文件,代码工程(如projects目录下的示例工程)中的Kconfig文件会引用此文件 |
SConscript | OneOS操作系统使用Scons构建工具时的根编译脚本,该脚本会引用其它目录的SConscript脚本,若在OneOS操作系统根目录增加新的代码目录,需要修改此文件(参见“从零开始构建代码工程”章节)。 |
LICENSE | License 授权说明。 |
3. 打开使用Keil模拟器的示例工程
进入到projects\stm32f103-simulator目录中,双击“project.uvprojx”文件,打开stm32f103-simulator的Keil工程文件,见下图:
4. 编译和仿真
见下图:
5. 打开模拟器串口、运行程序并观察SHELL界面
见下图:
6. 运行help命令
通过help命令可以查看当前系统支持的命令:
7. 查看内存堆使用情况
其中 mem 是查看内存堆使用的情况,执行此命令,结果见下图: