在遇到编译器仿真跳转不按常理跳转(程序执行仿真从下边跳至上边行数),if语句无法正常执行,需要注意检查以下几个方面。
将此处设置为Level 0或者None(有那个设置成那个即可)
2. 增大编译器堆栈内存,如下图
增大此处堆栈内存的大小。
以上两处设置能解决90%遇见的奇葩问题。
3. 问题描述:
在调试程序中发现if条件很明显正常,仿真确一直不执行或者直接if,else都执行,直接崩溃!
以下是程序中各个优化设置的区别及优化机制分析(个人查找资料总结,不权威)-----
Keil中的程序优化机制主要通过编译器对源代码进行分析和转换来实现。编译器会根据所选的优化级别,对代码进行各种优化操作,以提高程序的执行效率和/或减小程序的存储空间占用。 优化机制包括但不限于以下几个方面: 代码结构优化:编译器会对代码的结构进行调整,以提高指令的执行效率,例如循环展开、函数内联等。 数据优化:编译器会对数据的存储和访问方式进行优化,包括寄存器分配、变量存储方式选择等。 控制流优化:编译器会对程序的控制流进行优化,以减少分支跳转、简化条件表达式等。 内联函数:编译器会根据情况将函数内联展开,以减少函数调用的开销。 常量折叠:编译器会尝试将表达式中的常量进行计算和合并,以减少运行时的计算开销。 死代码消除:编译器会识别和删除不会被执行的代码,以减小程序的存储空间占用。
以上优化机制可以根据所选的优化级别进行不同程度的应用,通常情况下,较高级别的优化会带来更好的执行效率,但也可能增加编译时间和代码大小。在实际开发中,需要根据项目的需求和目标平衡执行效率、存储空间占用和编译时间。
Code 是代码占用的空间 RO-data是
Read Only 只读常量的大小
RW-data是(Read Write) RW是可读可写变量,初始化已经赋值的变量
RW + ZI就是你的程序总共使用的RAM字节数。 Level 0
Program Size: Code=35990 RO-data=8514 RW-data=4800 ZI-data=13336
Level 1
Program Size: Code=29160 RO-data=8512 RW-data=2788 ZI-data=13332
Level 2
Program Size: Code=27802 RO-data=8514 RW-data=2788 ZI-data=13332
Level 3
Program Size: Code=27754 RO-data=8514 RW-data=2788 ZI-data=13332
|