
目的简要介绍GHS中未被使用的函数如何防止被优化本文以ARM版为例作说明RISCV方式相同。背景使用GHS编译时一般会启用 -delete 链接选项启用后编译器会移除未被使用的函数说明如下这里通过避免指定section不被优化来实现放在section内函数不被优化这里想把两个函数定址在flash上指定位置测试代码如下这里防止 .keep_section 段被优化__attribute__(( section( .keep_section))) void xxx_fun1(void) { INFO(xxx_fun1\n); } extern uint32_t _sidata; __attribute__(( section( .keep_section))) void yyy_fun1(void) { INFO(yyy_fun1\n); INFO(yyy_fun1 %d\n, _sidata); }链接文件部分内容如下方式1链接选项增加如下语句-lnk-keep_from.keep_section如下图链接文件中 .text段增加如下内容*(.interfunc)-keep-from选项说明如下参考《build_arm.pdf》Linker-Specific Options 和 Additional Linker Options (before start file) 部分方式2在链接文件增加如下语句OPTION (-keep_from.keep_section)如下图链接文件中 .text段增加如下内容*(.interfunc)参考《build_arm.pdf》 Setting Linker Options with the OPTION Directive 部分解释如下参考《build_arm.pdf》