Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
RT-Thread 裁剪分析
发布于 2024-07-29 18:26:20 浏览:495
订阅该版
[tocm] # RT-Thread 裁剪分析 ## Nano 实践 **官方文档数据** **资源占用小:** 对 RAM 与 ROM 的开销非常小,在支持 semaphore 和 mailbox 特性,并运行两个线程 (main 线程 + idle 线程) 情况下,ROM 和 RAM 依然保持着极小的尺寸,RAM 占用约 1K 左右,ROM 占用 4K 左右。 Nano 资源占用情况举例:在运行两个线程 (main 线程 + idle 线程) 情况下,ROM 和 RAM 依然保持着极小的尺寸。以下是基于 Cortex M3 的 MDK 工程编译结果(优化等级 3)。 ```md 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) [仓库链接](https://github.com/loogg/STM32F4_ATK_Explorer_NANO/tree/nos) ```md 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 线程) [仓库链接](https://github.com/loogg/STM32F4_ATK_Explorer_NANO/tree/nano) ```md 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 组件。 ```md 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。 [仓库链接](https://github.com/loogg/STM32F4_ATK_Explorer_NANO/tree/rtt4.1.1) ### 极简版 如 Nano 一般,裁剪成支持 semaphore 和 mailbox 特性,并运行两个线程 (main 线程 + idle 线程)。 与 [适配 Nano](#适配-nano) 基本一致。RAM 较小是因为 `HEAP` 差异: - [裸机](#裸机)和 [适配 Nano](#适配-nano) 中 `HEAP` 为 512 字节。 - 本工程中 `HEAP` 默认值为 0。 `menuconfig` 导入配置文件 `.config.minimalism`,编译后资源占用数据: ```md 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](https://github.com/cherry-embedded/CherryRB)。 #### 不使用设备框架 - 实现打印 `menuconfig` 导入配置文件 `.config.print`,编译后资源占用数据: ```md 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`,编译后资源占用数据: ```md 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`,编译后资源占用数据: ```md 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`,编译后资源占用数据: ```md 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。 [仓库链接](https://github.com/loogg/STM32F4_ATK_Explorer_NANO/tree/rtt5.1.0) ### 一键配置 - RT_USING_NANO 5.1.X 版本提供了一键配置 Nano 选项 裁剪成支持 semaphore 和 mailbox 特性,并运行两个线程 (main 线程 + idle 线程)。 `menuconfig` 导入配置文件 `.config.nano`,编译后资源占用数据: ```md 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](#完整版-4-1-x) - `menuconfig` 导入配置文件 `.config.minimalism`,编译后资源占用数据: ```md 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`,编译后资源占用数据: ```md 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`,编译后资源占用数据: ```md 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`,编译后资源占用数据: ```md 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`,编译后资源占用数据: ```md 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` 和完整版,很多入门初学者不知从何入手,希望通过这篇文章能有改善
1
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
Cfly
这家伙很懒,什么也没写!
文章
14
回答
24
被采纳
3
关注TA
发私信
相关文章
1
有关动态模块加载的一篇论文
2
最近的调程序总结
3
晕掉了,这么久都不见layer2的踪影啊
4
继续K9ii的历程
5
[GUI相关] FreeType 2
6
[GUI相关]嵌入式系统中文输入法的设计
7
20081101 RT-Thread开发者聚会总结
8
嵌入式系统基础
9
linux2.4.19在at91rm9200 上的寄存器设置
10
[转]基于嵌入式Linux的通用触摸屏校准程序
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
ota在线升级
UART
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
at_device
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
张世争
8
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
KunYi
6
个答案
1
次被采纳
本月文章贡献
程序员阿伟
6
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部