IAR中保留未用代码段

现有问题

在嵌入式软件中,经常会用数组保存一些备用信息,也许会存在Flash里面,在Application中用偏移地址来访问这些数据,那么问题就来了,当提高优化级别的时候,编译器会将无用的符号(变量/函数/数组)优化掉,这不是我们所希望看到的结果。

该如何解决这个问题呢?

解决方案

在IAR中,有4个解决方法

1:keep

在链接器里面手工添加需要保留的符号

2: root

示例代码
1
__root int UnusedData[10];

3: required

示例代码
1
2
int UnusedData[10];
#pragma required=UnusedData

4 : 禁用编译器Remove优化

可以在链接器配置extra options页中,通过输入下面的选项来禁用编译器remove优化

--no_remove
--no_fragments

如图所示

注意事项

1:本文仅适用于IAR,如果您适用MDK,请参考编译器手册
2:如果您希望测试是否生效,请将编译器优化级别提高到最高(O3),然后在调试模式下,查看变量,如果不存在,则被编译器优化掉;反之,则符号存在。
3:如果您有任何疑问,欢迎交流

全文完,希望本文对您有帮助^_^