现有问题
在嵌入式软件中,经常会用数组保存一些备用信息,也许会存在Flash里面,在Application中用偏移地址来访问这些数据,那么问题就来了,当提高优化级别的时候,编译器会将无用的符号(变量/函数/数组)优化掉,这不是我们所希望看到的结果。
该如何解决这个问题呢?
解决方案
在IAR中,有4个解决方法
1:keep
在链接器里面手工添加需要保留的符号
2: root
1 | __root int UnusedData[10]; |
3: required
1 | int UnusedData[10]; |
4 : 禁用编译器Remove优化
可以在链接器配置extra options页中,通过输入下面的选项来禁用编译器remove优化
--no_remove
--no_fragments
如图所示
注意事项
1:本文仅适用于IAR,如果您适用MDK,请参考编译器手册
2:如果您希望测试是否生效,请将编译器优化级别提高到最高(O3),然后在调试模式下,查看变量,如果不存在,则被编译器优化掉;反之,则符号存在。
3:如果您有任何疑问,欢迎交流
全文完,希望本文对您有帮助^_^