rt-thread 很优秀的开源物联网的RTOS,提供许多开源组件供使用。这些组件也需要一些简单的硬件支持。
一、rt-thread最小硬件系统
除了基本的MCU复位晶振电路外,一个串口与一个SPI flash为其标配硬件配置。串口用于控finsh控制台连接 ,可以为TTL、RS232、或USB转串口。如果控制板是在设备中运行,最好还是232或USB,强电或比较差环境还是首推232。SPI flash用于文件系统、系统日志、固件升级、用于开发调试阶段的时序数据库、KV数据库等的功能。flash的容量8M、16M、32M都可,只要sfud驱动支持。
二、rt-thead最小软件系统
除了系统内核与系统组件外,还有一些第三方的组件,下面列一下我的系统下常用的一些组件。
1、FAL
用于将flash芯片划分分多个不同功能的分区,将STM32内部falsh划分为2个区 bl:bootloader引导,用于升级应用 app:应用程序区 将SPI Flash划分为6个区 fm_area:新固件下载区 df_area:出厂默认固件存储区 flashdb_kv:键值数据库存储区 filesystem:文件系统区 flashdb_ts:时序数据库存储区,用于实时记录一测试数据 ef:日志存储区,用于存储程序状态,运行记录等
2、EasyFlash
EasyFlash 是一款开源的轻量级嵌入式Flash存储器库,方便实现基于Flash存储器的常见应用开发。适合智能家居、可穿戴、工控、医疗等需要断电存储功能的产品,资源占用低,支持各种 MCU 片上存储器。也有KV数据库与log功能,在我的系统里面只使用了LOG功能,作为日志存储的功能模块。 Log:无需文件系统,日志可直接存储在Flash上 非常适合应用在小型的不带文件系统的产品中,方便开发人员快速定位、查找系统发生崩溃或死机的原因。同时配合EasyLogger(我开源的超轻量级、高性能C日志库,它提供与EasyFlash的无缝接口)一起使用,轻松实现C日志的Flash存储功能。搭配系统ulog组件使用。
3、FlashDB
FlashDB 是一款超轻量级的嵌入式数据库,专注于提供嵌入式产品的数据存储方案。与传统的基于文件系统的数据库不同,FlashDB 结合了 Flash 的特性,具有较强的性能及可靠性。并在保证极低的资源占用前提下,尽可能延长 Flash 使用寿命。 FlashDB 提供两种数据库模式: 键值数据库 :是一种非关系数据库,它将数据存储为键值(Key-Value)对集合,其中键作为唯一标识符。KVDB 操作简洁,可扩展性强。 时序数据库 :时间序列数据库 (Time Series Database , 简称 TSDB),它将数据按照 时间顺序存储 。TSDB 数据具有时间戳,数据存储量大,插入及查询性能高。 使用场景 原来使用过SQLiite存储数据,但这数据库源码有点庞大,一个文件2M,编译时间太长,而且使用起来太占CPU与内存资源,优点是兼容SQL表达式,但不适合MCU,所以选择使用FlashDB。
按时间范围查询8个通道的温度时序数据
4、CmBacktrace
针对 ARM Cortex-M 系列 MCU 的错误代码自动追踪、定位,错误原因自动分析的开源库。主要特性如下: 支持的错误包括: 断言(assert) 故障(Hard Fault, Memory Management Fault, Bus Fault, Usage Fault, Debug Fault) 故障原因 自动诊断 :可在故障发生时,自动分析出故障的原因,定位发生故障的代码位置,而无需再手动分析繁杂的故障寄存器; 输出错误现场的 函数调用栈(需配合 addr2line 工具进行精确定位),还原发生错误时的现场信息,定位问题代码位置、逻辑更加快捷、精准。也可以在正常状态下使用该库,获取当前的函数调用栈;
系统或应用出现hardfault情况下可以快速定位。
5、littlefs
LittleFS 是由ARM开发并开源一个小型SPI Flash文件系统,最大优点掉电安全,不会因为读写过程中断电文件系统被破坏,最大缺点写入速度较慢,但优点大于缺点作为我最小系统一个必备组件 flash目录对应就是filesystem分区的使用littlefs文件挂载在根目录下。
6、SEGGER_RTT
将调试数据打印出来,如果使用finsh打印必会影响用户命令输入,将其通过jlink的SWD接口打印出来,适合那种循环打印调试的情况下使用,打印是写内存打印速度极快,不会在Finsh是阻塞式打印。
7、syswatch
rtos的守护线程,用于重启线程及系统重启,RTOS必备功能,与硬件看门狗搭配使用,对产品提供极强的守护能力。 syswatch守护线程,处于最高优先级。
8、RT-thread的自定义调试命令
rt-thread比较好用的一个功能,定义一个自定义命令,调试某一个功能或查看某一个状态,原来在FreeRTOS也使用过这方面功能,但在FreeRTOS不属于系统标准搭配的功能,需要集成与适配。 在RT-thread属于系统一部分,直接可以使用,上面定义三个操作显示温度的三个命令。
硬件上成本只增加一个几块钱的Flash,嵌入式开发最难不是写程序,最难的是调试及其需要长期稳定运行,以上所使用的组件可使系统更健壮,调试更方便,问题查找更快捷,节省开发时间也就节省开发成本。
|