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)
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 线程)
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。
极简版
相关信息
如 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)
对接控制台
使用 CherryRingBuffer。
不使用设备框架
- 实现打印
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。
一键配置
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)
完整裁剪
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
和完整版,很多入门初学者不知从何入手,希望通过这篇文章能有改善