【单片机】添加printf函数后,gcc编译出来的固件大小明显比armcc大

news/2024/7/23 10:06:45

在使用 GCC 编译器(如 arm-none-eabi-gcc)和 ARMCC 编译器时,可能会注意到它们生成的固件大小有所不同。这种差异可能是由于以下原因造成的:

  1. 优化设置:不同编译器的优化选项和优化策略可能导致生成的二进制文件大小不同。尝试调整优化级别,例如使用 -Os 选项(针对大小优化)或 -O2(平衡性能和大小),以减小 GCC 生成的固件大小。

  2. 库差异:GCC 和 ARMCC 可能使用不同的库实现,例如 C 标准库、启动文件和其他辅助库。这些库实现的差异可能导致生成的固件大小有所不同。在使用 GCC 时,可以考虑使用较小的库实现(如 newlib-nano),以减小固件大小。

  3. 链接选项:在链接过程中,可以通过设置链接器选项来移除未使用的代码和数据。在 GCC 的链接选项中,可以添加 –gc-sections 来去除未使用的代码段和数据段:

    arm-none-eabi-gcc ... -Wl,--gc-sections ...
    
  4. 在编译和链接过程中,使用 -ffunction-sections-fdata-sections 选项将每个函数和数据对象放入独立的代码段和数据段,以便链接器可以更有效地移除未使用的代码和数据:

    arm-none-eabi-gcc ... -ffunction-sections -fdata-sections ...
    
  5. 特定功能的实现:GCC 和 ARMCC 可能在实现某些功能(如 printf 函数)时采用不同的策略。在使用 GCC 编译代码时,可以考虑使用更简单的 printf 替代品(如 iprintf),以减小生成的固件大小。

要减小使用 GCC 编译器生成的固件大小,请尝试调整优化设置、库实现和链接选项。这些调整可以帮助生成更紧凑的二进制文件,同时在很大程度上保持性能。


http://www.niftyadmin.cn/n/214769.html

相关文章

YOLOv5:IoU、GIoU、DIoU、CIoU、EIoU

YOLOv5:IoU、GIoU、DIoU、CIoU、EIoU前言前提条件相关介绍IoU(Intersection over Union)GIoU(Generalized-IoU)DIoU(Distance-IoU)CIoU (Complete-IoU)EIoU(E…

代码随想录算法训练营第五十七天| 647 回文子串 516 最长回文子序列

代码随想录算法训练营第五十七天| 647 回文子串 516 最长回文子序列 LeetCode 647 回文子串 题目: 647.回文子串 本题与昨天的leetcode.115题相比,两个字符串都可以删除,整体思路不变。 动规五部曲: 确定dp数组以及下标的含义 布尔类型…

Java核心技术知识点笔记—线程(同步)

前言:实际应用中,经常会遇到多个线程共享对同一数据的存取。如果有多个线程存取相同的对象,并且每个线程都调用了一个修改该对象状态的方法,这样的情况,很可能会产生讹误的对象。这种情况通常称为竞争条件(…

react2:children属性 - props进阶 - 生命周期

children属性:父想给子组件传递内容,都需要通过children占位 children属性:类似vue中的slot效果 props 类型验证 :现在都是 typescript 替代了 ref 放普通标签上可以获取dom节点 ref 放组件上获取组件实例,可以调用组件…

7-4 2048

小明最近迷上了一个类似2048的游戏。最初你有 n 个整数的集合 s 。这个集合 s 中的每个整数都是二的幂。 您可以使用该集合 s 执行任意数量(可能为零)的操作。 在每个操作中,从集合 s 中选择两个相等的整数,从集合 s 中移除它们,并将它们的和…

【前端做项目常用】相关插件的官网 总结

以下整理本人在做项目的时候遇到的一些常用的相关插件的官网: 相关插件的官网: 1.Swiper官网:——常用于轮播图 网址: Swiper中文网-轮播图幻灯片js插件,H5页面前端开发 2.iconfont官网:—…

【Linux】进程控制(2)(阻塞vs非阻塞 进程程序替换 替换函数 单进程: 别的方式 进程程序替换原理 通过myexec执行自己写的程序)

文章目录进程等待阻塞vs非阻塞进程程序替换替换函数单进程:别的方式进程程序替换原理通过myexec执行自己写的程序进程等待 阻塞vs非阻塞 waitpid调用成功 && 子进程没退出子进程没有退出,我的waitpid没有等待失败,仅仅是没有检测到…

牛津3000词汇表(The Oxford 3000™)

文章目录The Oxford 3000™ABCDEFGHIJKLMNOPQRSTUVWYZ本文首发于 Josh Gao 的博客:https://josh-gao.top/posts/e28b5ccc.html The Oxford 3000™ The Oxford 3000 is the list of the 3000 most important words to learn in English, from A1 to B2 level. The P…