keil 中优化等级的bug
一,问题描述
程序中代码有的执行,有的不执行,仔细研究,查询人工智能。
程序中printf打印后面的代码不执行, 然后过几十个函数又开始正常了。
二.分析问题
跳过函数一般又判断和Goto等语句,其它的溢出和错误编译器会报错,而这个编译器并没有报错,那么怎么回事呢?
三.解决办法
将代码优化等级降低,代码优化等级高导致的部分函数无法正确执行,我觉得这是个bug。
将图中optimization选项改成default或者Level 0即可解决,优化太高导致。
四,总结
- 优化等级0(O0)是开发调试的“安全区”,以牺牲性能为代价换取调试友好性。
- 优化等级2(O2)是性能优化的“竞技场”,需在调试困难和代码效率之间权衡。
- 最佳实践:
- 开发阶段使用O0,确保问题可复现、可定位。
- 发布阶段使用O2,结合
volatile
和#pragma
等手段平衡优化与调试需求。 - 在嵌入式系统中,针对不同模块采用混合优化策略。
- 个人建议不要优化,如果你非常熟悉编译优化,那么你可以使用,如果不熟悉编译器原理和优化方案最好不要优化。