先说一下标准:一个好的工程,基本可以做到IDE所有优化等级通吃。
关于优化和调试的问题:只要开启优化哪怕O1也不具备调试的意义了(因为变量可能在寄存器中而不是在RAM中),只能通过串口打印的方式查看变量了,所以只有在O0状态下,代码才能生成配合仿真器读取变量的代码,另外代码的不规范导致优化过程中出现异常现象,如共享变量的访问、变量未彻底初始化访问等等,都会体现出来
很多时候我们都希望将程序开到最高优化等级,如果开启后能够正常运行,则万事大吉。如果不能正常运行或者程序异常就比较闹心。排查起来也挺闹心的,这里分享一些实战的方式。
总体解决思路是:项目开始时就开启最高优先级,调试某个文件时,单独设置最低优先级,有利于在线仿真跟踪,调试完成后都开启最高优先级。
对于之前的遗留项目可采用以下方法
分两个方向:
1、开启优化话后,部分功能不正常
这种的解决思路是把这部分的文件继续设置为低优化等级,整体工程设置为高优化等级。
2、开启优化后,直接整体卡死
这种的解决思路是整体工程设置为低优化等级,逐步开启工程文件的优化等级。
3、具体到某些函数的优化也是可以单独开启测试的。
#if defined (__CC_ARM) /*!< ARM Compiler */
#pragma O0
#elif defined (__GNUC__) /*!< GNU Compiler */
#pragma GCC optimize ("O0")
#endif /* __CC_ARM */