在STM32上运行实时操作系统:RT-Thread初体验

在STM32F103上运行类Linux实时操作系统是什么体验?可能有人觉得在开玩笑,F103那点资源可以跑类Linux操作系统吗?还真可以,RT-Thread 不是 Linux ,但是设计标准向 Linux 看齐,所有很 Linux !

简述

认识一下 RT-Thread。

RT-Thread,全称是 Real Time-Thread,顾名思义,它是一个嵌入式实时多线程操作系统,基本属性之一是支持多任务,允许多个任务同时运行并不意味着处理器在同一时刻真地执行了多个任务。事实上,一个处理器核心在某一时刻只能运行一个任务,由于每次对一个任务的执行时间很短、任务与任务之间通过任务调度器进行非常快速地切换(调度器根据优先级决定此刻该执行的任务),给人造成多个任务在一个时刻同时运行的错觉。在 RT-Thread 系统中,任务通过线程实现的,RT-Thread 中的线程调度器也就是以上提到的任务调度器。

RT-Thread 主要采用 C 语言编写,浅显易懂,方便移植。它把面向对象的设计方法应用到实时系统设计中,使得代码风格优雅、架构清晰、系统模块化并且可裁剪性非常好。针对资源受限的微控制器(MCU)系统,可通过方便易用的工具,裁剪出仅需要 3KB Flash、1.2KB RAM 内存资源的 NANO 版本(NANO 是 RT-Thread 官方于 2017 年 7 月份发布的一个极简版内核);而对于资源丰富的物联网设备,RT-Thread 又能使用在线的软件包管理工具,配合系统配置工具实现直观快速的模块化裁剪,无缝地导入丰富的软件功能包,实现类似 Android 的图形界面及触摸滑动效果、智能语音交互效果等复杂功能。

相较于 Linux 操作系统,RT-Thread 体积小,成本低,功耗低、启动快速,除此以外 RT-Thread 还具有实时性高、占用资源小等特点,非常适用于各种资源受限(如成本、功耗限制等)的场合。虽然 32 位 MCU 是它的主要运行平台,实际上很多带有 MMU、基于 ARM9、ARM11 甚至 Cortex-A 系列级别 CPU 的应用处理器在特定应用场合也适合使用 RT-Thread。

以上是RT-Thread的官方简介,在STM32F103上跑应该说轻轻松松,更何况我是跑在F401下面。先看一张RT-Thread运行时的串口输出图:

执行 ps 看一下:

是不是很 Linux

硬件

受到RT-Thread吸引,为了能制作一款比较有意思的 Linux卡片电脑 ,我使用 STM32F401CC 作为核心,专门重新画了一份原理图,制作了一款开发板,拥有的基本功能如下:

  • 一个UART调试串口,用于RT-Thread的命令行;
  • 一个USB接口,可以做 USB Host 或者 USB Device,即可以插键盘,也可以接电脑;
  • 一块 25Q32 Flash,这是电脑的 硬盘
  • 四个可编程按钮,可以当做 键盘
  • 一个BMP180气压传感器;
  • 一个MPU6050 6轴姿态传感器,这是电脑的姿态感应器;
  • 一个可编程 RGB LED;
  • 一个可编程蜂鸣器,这相当于电脑的音响;
  • 一颗NTC热敏电阻,可以板载的温度传感;
  • 预留了OLED的接口,相当于可以外接显示器;
  • 预留了RTC电源,即使掉电也能正常计时;

所以看起来似乎一个电脑该具备的东西基本都具备了,还多了几个传感器,更加丰富了这台小电脑的功能。所有的这一切都绘制在一个没有巴掌大的PCB上,使用 0603 封装的电阻电容,焊接完成后大概是这个样子:

跟手掌对比一下:

专门挑选了蓝色的插针,让板子看着灵动一些。

设计

使用Eagle PCB软件进行原理图和PCB设计。

平面预览图:

运行

板子设计制作完成后,开始对RT-Thread进行移植,官方提供了比较好的方法和工具,参考官网的文档就可以轻松完成,这里我就不在啰嗦了,有兴趣的朋友可以参考 Rt-Thread官方文档 进行移植和开发。

因为我的板子上设计了存储器、传感器、蜂鸣器、LED和按钮,所我就针对我已有的这些外设进行驱动开发,并把有些测试做成命令,这样在终端命令行下就可以直接执行了。移植好的运行图是这样:

相比官方默认的输出,我移植的系统也多了一些这张板子特有的命令。比如可以看到此时NTC(ADC模块)电阻的电压已经打印出来,这个ADC模块采集到的电压值可以判断当前板子的温度。文件系统也正常初始化了,并且挂载到了根目录下,这块 硬盘 的容量是 4M 字节。

执行 help 看一下,一些与文件系统有关的命令也被加入到了系统中。

测试一下 MPU6060 传感器,可以看到挂载在 I2C 总线上的 MPU6050 也能正常工作。

枚举一下设备,可以看到编译时用到的外设接口全部可以罗列出来,这跟 Linux 的 一切皆文件 非常类似。

这里不多说了,这个开发板主要是我自己学习 RT-Thread 来使用,后续我会基于 RT-Thread 做一些有趣的小项目,到时再更新。

类似文章

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注