跳至主要內容

RT-Thread 裁剪分析

马龙伟...大约 4 分钟笔记RT-Thread

Nano 实践

官方文档数据

资源占用小: 对 RAM 与 ROM 的开销非常小,在支持 semaphore 和 mailbox 特性,并运行两个线程 (main 线程 + idle 线程) 情况下,ROM 和 RAM 依然保持着极小的尺寸,RAM 占用约 1K 左右,ROM 占用 4K 左右。

Nano 资源占用情况举例:在运行两个线程 (main 线程 + idle 线程) 情况下,ROM 和 RAM 依然保持着极小的尺寸。以下是基于 Cortex M3 的 MDK 工程编译结果(优化等级 3)。

    Total RO  Size (Code + RO Data)                 4000 (   3.91kB)
    Total RW  Size (RW Data + ZI Data)              1168 (   1.14kB)
    Total ROM Size (Code + RO Data + RW Data)       4092 (   4.00kB)

裸机

CubeMX 生成的 MDK 工程编译结果 (优化等级 3)

仓库链接open in new window

    Total RO  Size (Code + RO Data)                 3688 (   3.60kB)
    Total RW  Size (RW Data + ZI Data)              1648 (   1.61kB)
    Total ROM Size (Code + RO Data + RW Data)       3704 (   3.62kB)

适配 Nano

添加 RT-Thread Nano 4.1.1 到工程 (优化等级 3), 支持 semaphore 和 mailbox 特性,并运行两个线程 (main 线程 + idle 线程)

仓库链接open in new window

    Total RO  Size (Code + RO Data)                 8008 (   7.82kB)
    Total RW  Size (RW Data + ZI Data)              2904 (   2.84kB)
    Total ROM Size (Code + RO Data + RW Data)       8144 (   7.95kB)

两者比较差值

基本一致。工程中使用的是 CubeMX 中 4.1.1 版本的 RT-Thread Nano 组件。

    Total RO  Size (Code + RO Data)                 4320 (   4.22kB)
    Total RW  Size (RW Data + ZI Data)              1256 (   1.23kB)
    Total ROM Size (Code + RO Data + RW Data)       4440 (   4.33kB)

完整版 4.1.X

提示

以下测试数据基于 4.1.1 版本,优化等级 3。

仓库链接open in new window

极简版

相关信息

如 Nano 一般,裁剪成支持 semaphore 和 mailbox 特性,并运行两个线程 (main 线程 + idle 线程)。

适配 Nano 基本一致。RAM 较小是因为 HEAP 差异:

menuconfig 导入配置文件 .config.minimalism,编译后资源占用数据:

    Total RO  Size (Code + RO Data)                 8200 (   8.01kB)
    Total RW  Size (RW Data + ZI Data)              2400 (   2.34kB)
    Total ROM Size (Code + RO Data + RW Data)       8340 (   8.14kB)

对接控制台

使用 CherryRingBufferopen in new window

不使用设备框架

  • 实现打印

menuconfig 导入配置文件 .config.print,编译后资源占用数据:

    Total RO  Size (Code + RO Data)                 9828 (   9.60kB)
    Total RW  Size (RW Data + ZI Data)              2592 (   2.53kB)
    Total ROM Size (Code + RO Data + RW Data)       9968 (   9.73kB)
  • 对接 FinSH

menuconfig 导入配置文件 .config.shell,编译后资源占用数据:

    Total RO  Size (Code + RO Data)                16808 (  16.41kB)
    Total RW  Size (RW Data + ZI Data)              7648 (   7.47kB)
    Total ROM Size (Code + RO Data + RW Data)      17016 (  16.62kB)

使用设备框架

  • 实现打印

menuconfig 导入配置文件 .config.device_print,编译后资源占用数据:

    Total RO  Size (Code + RO Data)                10504 (  10.26kB)
    Total RW  Size (RW Data + ZI Data)              2728 (   2.66kB)
    Total ROM Size (Code + RO Data + RW Data)      10716 (  10.46kB)
  • 对接 Finsh

menuconfig 导入配置文件 .config.device_shell,编译后资源占用数据:

    Total RO  Size (Code + RO Data)                18784 (  18.34kB)
    Total RW  Size (RW Data + ZI Data)              7704 (   7.52kB)
    Total ROM Size (Code + RO Data + RW Data)      19012 (  18.57kB)

完整版 5.1.X

提示

以下测试数据基于 5.1.0 版本,优化等级 3。

仓库链接open in new window

一键配置

RT_USING_NANO

5.1.X 版本提供了一键配置 Nano 选项

裁剪成支持 semaphore 和 mailbox 特性,并运行两个线程 (main 线程 + idle 线程)。

menuconfig 导入配置文件 .config.nano,编译后资源占用数据:

    Total RO  Size (Code + RO Data)                 9008 (   8.80kB)
    Total RW  Size (RW Data + ZI Data)              2440 (   2.38kB)
    Total ROM Size (Code + RO Data + RW Data)       9172 (   8.96kB)

完整裁剪

完整版 4.1.X

  • menuconfig 导入配置文件 .config.minimalism,编译后资源占用数据:
    Total RO  Size (Code + RO Data)                 9264 (   9.05kB)
    Total RW  Size (RW Data + ZI Data)              2440 (   2.38kB)
    Total ROM Size (Code + RO Data + RW Data)       9428 (   9.21kB)
  • menuconfig 导入配置文件 .config.print,编译后资源占用数据:
    Total RO  Size (Code + RO Data)                10892 (  10.64kB)
    Total RW  Size (RW Data + ZI Data)              2640 (   2.58kB)
    Total ROM Size (Code + RO Data + RW Data)      11056 (  10.80kB)
  • menuconfig 导入配置文件 .config.shell,编译后资源占用数据:
    Total RO  Size (Code + RO Data)                19560 (  19.10kB)
    Total RW  Size (RW Data + ZI Data)              7840 (   7.66kB)
    Total ROM Size (Code + RO Data + RW Data)      19724 (  19.26kB)
  • menuconfig 导入配置文件 .config.device_print,编译后资源占用数据:
    Total RO  Size (Code + RO Data)                11708 (  11.43kB)
    Total RW  Size (RW Data + ZI Data)              2848 (   2.78kB)
    Total ROM Size (Code + RO Data + RW Data)      11844 (  11.57kB)
  • menuconfig 导入配置文件 .config.device_shell,编译后资源占用数据:
    Total RO  Size (Code + RO Data)                21496 (  20.99kB)
    Total RW  Size (RW Data + ZI Data)              7912 (   7.73kB)
    Total ROM Size (Code + RO Data + RW Data)      21680 (  21.17kB)

总结

结论

  • RT-Thread 完整版 通过裁剪可以完全媲美 RT-Thread Nano
  • 5.1.0 相比 4.1.1 占用 ROM 略大,但提供 一键配置 Nano(RT_USING_NANO) 选项,更加方便
  • 使能设备框架 (RT_USING_DEVICE) 后,ROM 占用约多 1K 左右

为何推荐完整版

  • 完整版 RT-Thread 有丰富的组件、驱动及软件包等功能,且社区讨论更多以此为主
  • 以往没有测试数据和具体实例比对 Nano 和完整版,很多入门初学者不知从何入手,希望通过这篇文章能有改善
你认为这篇文章怎么样?
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.5