我正在努力将我的代码缩减到最小的骨架大小!我使用的是只有 32k 闪存的 STM32F0,需要很大一部分闪存用于数据存储。我的代码已经有大约 20k 闪存大小!其中一些是由于使用了 STM32 HAL 函数,我可以在以后需要时对其进行解释和优化。
然而,我对闪存的最大消耗是所有隐式包含的库例程。我似乎无法删除这些功能。我的代码或任何 HAL 代码中都没有调用它们。 _malloc_r(1.3k 字节)和 __vfiprintf_r(3kB)等函数以及许多其他函数正在使用我的闪存的很大一部分。我想这些都是libc的函数。我不使用这些,希望它们消失!
有人知道如何删除这些吗?
我尝试过不同的优化级别和链接器选项,但到目前为止还没有运气。我尝试过 -nostdlib 和 --specs=nosys.specs 没有任何变化。如果我删除包含 _exit 等函数定义的文件,我会收到链接器错误,表明该库仍然包含在内并且需要这些。链接器图还确认了许多不需要的函数的存在!
有什么建议么?
当您想知道什么占用了空间,或者为什么链接了函数和库时,请生成一个带有交叉引用的映射文件 - 类似于“-Wl,-Map=program.map,--cref”。用文本编辑器查看该文件,您就会明白为什么包含了像 malloc 这样的函数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)