RT-Thread Nano 3.0.3 快速入门教程

摘要

本文档介绍了 RT-Thread Nano 3.0.3 的基本功能,以及它的下载、使用和 BSP 例程。

本文的目的和结构

本文的目的和背景

RT-Thread Nano 是 RT-Thread 推出的极简版实时操作系统,适用于家电、消费电子、医疗设备、工控等领域大量使用的 32 位 ARM 入门级 MCU 的场合。本文档是快速入门文档,方便用户快速上手使用 RT-Thread Nano 3.0.3。

本文的结构

本文首先介绍 RT-Thread Nano 3.0.3 基本功能,然后介绍了它的安装及配置,最后介绍如何获取相关例程。

RT-Thread Nano 简介

RT-Thread Nano 是一个精炼的硬实时内核,内存资源占用极小,功能包括任务处理、软件定时器、信号量、邮箱和实时调度等相对完整的实时操作系统特性。MDK5 以后采用 pack 形式管理芯片及各种相关组件,RT-Thread Nano 也是通过 MDK pack 方式发布,RT-Thread Nano pack 包括 device drivers、kernel 和 shell (msh) 三部分功能,用户可以从 MDK 的 Run-time Environment 按需要加载。

RT-Thread Nano 主要功能

在支持 semaphore 和 mailbox 特性,并运行两个线程 (main 线程 + idle 线程) 情况下,ROM 和 RAM 依然保持着极小的尺寸。我们基于 Cortex M0 MCU 的一个例子,编译后的大小(ROM: 3.25K, RAM: 1.04K),除去 MCU 需要的 ROM 和 RAM, RT-Thread Nano 本身需要的 ROM 是 2.5K , RAM 是 1K。

RT-Thread Nano 内存占用情况

用户基于 Nano 的应用程序可以直接迁移到 RT-Thread 完整版。

接下来将描述如何在 MDK5 上基于 RTE(Run-Time Environment), 从裸机开始,创建一个 RT-Thread RTOS 的小系统工程。

Pack 安装

Pack 可以通过 MDK 联网安装,也可以离线安装。下面开始介绍两种安装方式。

  • Pack Installer 安装
    打开 MDK 软件,点击工具栏的 Pack Installer 图标:

Packs 安装

点击右侧的 Pack,展开 General,可以找到 rt-thread::rthread,点击对应的 Action 的 Install,就可以在线安装 Pack 了。安装成功后 Action 栏显示 ”Up to date”。

Packs 管理

Packs 手动安装

基础工程准备

在开始创建 RT-Thread 小系统之前,我们需要准备一个能正常运行的裸机工程。作为示例,本文使用的是基于 STM32L072-Discovery 和 Low-Level Library 的一个 LED 闪烁程序。程序的主要截图如下:

STM32L072-Discovery 示例

在我们的例程中,编译下载程序后,就可以看到 3 个 LED 交替闪烁了。读者可以根据自己的需要使用其他芯片,完成一个简单的类似裸机工程。

添加 RT-Thread Nano 到工程

基于一个可以运行的裸机程序,我们来添加 RT-Thread 到工程。如下图,点击 Manage Run-Time Environment。

MDK RTE

在 Manage Rum-Time Environment 里”Software Component” 栏找到 RTOS,Variant 栏选择 RT-Thread,然后勾选 kernel,点击”OK” 就添加 RT-Thread 内核到工程了。

内核添加

现在可以在 Project 看到 RT-Thread RTOS 已经添加进来了,展开 RTOS,可以看到添加到工程的文件:

添加了 RTOS 的工程

Kernel 文件包括:
  1. clock.c
  2. components.c
  3. device.c
  4. idle.c
  5. ipc.c
  6. irq.c
  7. kservice.c
  8. mem.c
  9. object.c
  10. scheduler.c
  11. thread.c
  12. timer.c
Cortex-M 芯片内核移植代码:
  1. cpuport.c
  2. context_rvds.s
应用代码及配置文件:
  1. board.c
  2. rtconfig.h

适配 RT-Thread

RT-Thread 会用到了异常处理函数 HardFault_Handler() 和悬挂处理函数 PendSV_Handler(),以及 Systick 中断服务函数 SysTick_Handler(),所以用户代码需要保证这几个函数没有被使用,若编译提示函数重复定义,请删除自己定义的函数。

RT-Thread Nano 3.0.3 在 board.c 中默认完成了 systick 的配置,用户可以修改宏 RT_TICK_PER_SECOND 的值配置每秒 systick 数。

systick 配置

RT-Thread Nano 3.0.3 默认是使用数组作为 heap。

heap 配置

替换例程中的 delay 函数:

1). 包含 RT-Thread 的相关头文件 <rtthread.h>

2). 将 delay() 函数替换成 rt_thread_delay(RT_TICK_PER_SECOND)

下面是完成修改的代码:

异常处理修改

编译程序之后下载到芯片就可以看到基于 RT-Thread 的程序运行起来了。

RT-Thread Nano 配置

RT-Thread 是一个高度可配置的嵌入式实时操作系统,配置文件是 rtconfig.h。Nano 就是 rtconfig.h 配置下实现了 2.5K ROM,1K RAM 的内核应用。用户可以根据自己的需要通过修改 rtconfig.h 文件里面的宏定义配置相应功能。

RT-Thread Nano 默认未开启宏 RT_USING_HEAP,故只支持静态方式创建任务及信号量。若要通过动态方式创建对象则需要在 rtconfig.h 文件里开启 RT_USING_HEAP 宏定义。

MDK 的配置向导 configuration Wizard 可以很方便的对工程进行配置,Value 一栏可以选中对应功能及修改相关值,等同于直接修改配置文件 rtconfig.h。

Nano 配置

原文: https://www.rt-thread.org/document/site/rtthread-tutorial/nano/gd0004-rtthread-nano-getting-started/