RT-thread studio编译生产的bin文件太大的问题。

RT-Thread studio和Keil MDK同样的代码,生成的目标文件相差这么大?

RT-thread studio开发环境

前几年就看到了这个开发环境,当时下载下来安装一试,觉得不是很好用,学习成本很高,支持的芯片也不多,支持的调试工具也没几个。于是这期间一直使用VScode编辑器和MDK编译调试器的组合。直到看到有帖子推荐这个开发环境,才又重新安装试一下。

打开软件,确实很有进步的一点就是功能愈发丰富了。支持的芯片开发板也越来越多。编辑器的功能也很好用,调试也比较方便。

之前用MDK,编辑难受,建工程真的痛苦,界面真上古。但调试真好用呀。

后来尝试过VScode+PlatformIO的方式,也还不错,就是环境难以安装,调试没有那么友好。

RT-thread studio中令人惊艳的功能

  • 可以和MDK、IAR、STM32CubeMX、PlatformIO直接对接。
  • 建立工程真的很方便。
  • 如果使用操作系统RT-thread,很多好用的组件可以使用。
  • 界面真挺舒服。
  • 相当强大的生态。

为什么ST的单片机销量这么猛,STM32CubeMX功不可没,太强了。

目标文件大的问题

首先上代码:

#include <stdio.h>
#include <board.h>
#include "CRC.h"


int main(void)
{
    uint8_t CRC_data[]={0x12,0x34,0x23,0x45,0x34,0x56,0x45,0x67,0x56,0x78,0x67,0x89};
    uint16_t CRC_res;

    CRC_res = CRC_16(CRC_data, sizeof(CRC_data)/sizeof(CRC_data[0]));
    printf("CRC result = %x\r\n", CRC_res);

    while (1)
    {
        printf("Hello RT-Thread!\r\n");
        wait_ms(1000);
    }

    return 0;
}

就这么点东西,编译出来的大小吓我一跳。

arm-none-eabi-size --format=berkeley "rtthread.elf"
   text	   data	    bss	    dec	    hex	filename
  34252	   2504	   1184	  37940	   9434	rtthread.elf

              Used Size(B)           Used Size(KB)
Flash:          36756 B               35.89 KB
RAM:             3688 B                3.60 KB

16:21:39 Build Finished. 0 errors, 0 warnings. (took 708ms)

你没看错,仅仅只有使用到一个串口外设和RCC时钟的情况下,代码竟然有37K。

问题解决

后来查看了官方的手册。原因如下,在构建配置窗口下。
构建配置窗口
勾选上红色框内的勾以后再次编译,编译结果如下。

arm-none-eabi-size --format=berkeley "rtthread.elf"
   text	   data	    bss	    dec	    hex	filename
  11404	    496	   1140	  13040	   32f0	rtthread.elf

              Used Size(B)           Used Size(KB)
Flash:          11900 B               11.62 KB
RAM:             1636 B                1.60 KB

16:19:41 Build Finished. 0 errors, 0 warnings. (took 2s.669ms)

当然这里只能使用printf输出整数,比如整数值,字符串等。如果要输出小数,还需要勾选Use float with nano printf选项。

问题原因

MDK使用的是ARMCC编译器,而RT-thread Studio使用的GCC编译器。
MDK的工程配置界面有一个勾选Use MicroLIB选项。这个MicroLIB是Keil针对系统自带的printf等函数做的针对嵌入式系统的优化。如果使用了"stdio.h","string.h"等库,勾选MicroLIB,你会发现目标文件大小有惊喜。
而GCC是开源库,调用的自然不是像MDK中那样针对嵌入式领域被优化的函数。
所以,使用了一个printf函数,造成代码大小翻了一倍的问题就出现了。

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RT-Thread Studio是一款基于Eclipse的RT-Thread开发环境,它提供了一整套的开发工具,包括代码编辑器、编译器、调试器等,用于开发实时操作系统(RTOS)上的嵌入式软件。使用RT-Thread Studio,开发者可以更高效地进行实时系统的开发和调试。以下是关于RT-Thread Studio使用的一些主要特点和介绍: 1. 集成开发环境(IDE):RT-Thread Studio提供了直观的图形界面,使开发者能够轻松地创建、编辑、编译和调试RT-Thread应用程序。 2. 代码编辑器:RT-Thread Studio的代码编辑器支持多种语言,包括C/C++,开发者可以在其中编写和编辑代码。 3. 编译器:RT-Thread Studio集成了RT-Thread编译器,可以将编写好的代码编译成可在嵌入式设备上运行的二进制文件。 4. 调试器:RT-Thread Studio提供了强大的调试工具,允许开发者在嵌入式设备上实时观察和修改代码的运行状态,以便进行调试和优化。 5. 集成工具链:RT-Thread Studio集成了RT-Thread的开发工具链,包括交叉编译工具、下载工具、性能分析工具等,方便开发者进行整个开发流程。 6. 代码版本管理:RT-Thread Studio支持代码版本管理,如Git,方便团队进行协作开发和版本控制。 7. 实时更新和文档:RT-Thread Studio提供了实时更新的RT-Thread版本和相关文档,方便开发者获取最新的功能和信息。 8. 集成仿真器:RT-Thread Studio支持多种仿真器,如QEMU、STM32CubeMX等,方便开发者在开发过程中进行模拟和调试。 使用RT-Thread Studio进行实时系统开发的一般步骤如下: 1. 安装和配置RT-Thread Studio:根据官方文档或教程,安装并配置RT-Thread Studio环境。 2. 创建新项目:使用RT-Thread Studio创建新的实时系统项目。 3. 编写代码:在代码编辑器中编写C/C++代码,实现所需的功能。 4. 编译代码:使用RT-Thread编译器将代码编译成可在嵌入式设备上运行的二进制文件。 5. 下载和部署:使用RT-Thread Studio提供的下载工具将二进制文件部署到嵌入式设备上。 6. 调试和优化:使用RT-Thread Studio的调试工具进行实时调试和性能优化。 7. 测试和发布:对部署到嵌入式设备上的软件进行测试,确保功能正常,然后进行发布。 总的来说,使用RT-Thread Studio进行实时系统开发可以提高开发效率,简化开发流程,并有助于提高软件的质量和性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值