说明
由于 SDCC 的工作方式与其它编译器有点不同,它不支持死代码消除功能,因此生成的程序包含了未使用的函数,数据,这导致最终生成的 hex 很大,很容易就超出 flash 容量,对于单片机这种资源缺乏的设备,这是不可接受的;
但 SDCC 还是可以实现和死代码消除一样的效果,如果用户在编写程序时,按照 一个文件一个函数 来进行,这样编译时,每个函数都在一个单独的模块中,这样 SDCC 就能只导入要使用的模块,不用的模块就不会被链接到程序中,程序大小就会减小,参见:https://sourceforge.net/p/sdcc/discussion/1865/thread/2c68831d/?limit=25#c1dc/2edb
虽然按照一个函数一个文件这样写程序,能够解决程序大小的问题,但是对于老的代码库,程序,这很浪费时间;
于是本插件中加入了 ‘模块优化’ 功能,通过干预编译流程,在编译前,预处理生成的汇编文件,将函数,数据,拆分至单独的模块中,然后编译,打包成 lib, 最后交给 sdcc 链接,这样就能优化掉不用函数段,数据段;经过一些测试,这个方法的效果显著;
测试效果
本处使用了一些测试工程来展示 禁用/启用 该优化选项后,生成程序的最终大小的对比效果
使用方法
将插件更新至最新的预览版:v3.7.202207xx
确保 eide_binaries
更新至 v8.1.0
及以上(打开 C:\Users\用户名\.eide\bin\VERSION
文件检查版本)
打开 SDCC 的 构建配置->全局,勾选 模块拆分优化,保存

按 F7 重新编译程序即可
注意:由于该功能将重新分析 asm 文件,因此总的编译时间会有所增加