一、编译优化
1、编译优化说明
-
编译器想尽办法去压缩程序存储空间,提高运行速度。
-
一般编译器,优化有多个等级:-O0、-O1、-O2、-O3。
-O0:缺省(默认)优化级别,不压缩程序存储空间,不提高程序运行速度,保证程序的可靠执行。
-O1:轻度优化,轻度压缩程序存储空间,轻度优化程序运行速度。
-O2:推荐优化等级,在程序存储空间和程序运行速度取得平衡点。
-O3:最高级别的优化等级,有可能导致程序不能运行,也会使用以空间换时间的方法,导致程序体积增大。
2、单片机程序内存说明
Code:代码指令,存储在ROM/Flash,只读不可修改。
RO-data:只读常量(const修饰),存储在ROM/Flash。
RW-data:已初始化全局和静态变量,ROM存初始值,RAM存实际变量。
ZI-data:未初始化全局和静态变量,占用RAM空间。
ROM占用 = Code +RO-data + RW-data
RAM占用 = RW-data + ZI-data
Code、RO-data、RW-data、ZI-data解释说明: https://blog.csdn.net/qq_45467083/article/details/116203243
查看具体的文本信息:


二、volatile关键字说明
volatile关键字分析,往往应用在三种场合:
(1)、多线程编程共享全局变量的时候,该全局变量要加上volatile进行修饰,让编译器不要省略该变量的访问。
(2)、裸机编程的时候,某函数与中断服务函数共享全局变量的时候,该全局变量要加上volatile进行修饰,让编译器不要省略该变量的访问。
(3)、ARM定义寄存器的时候,寄存器是指向一个地址,要加上volatile进行修饰,让编译器不要优化而省略该变量的访问。
编译器不要优化该变量指的是防止编译器出现优化过度,导致代码运行失效。 加上volatile关键字生成的汇编代码会发生明显的变化,同样调用delay函数,灯的速度发生变化!
汇编指令参考:https://blog.51cto.com/u_12468355/3402996?b=totalstatistic
三、仿真调试
-
首先,需要将单片机通过调试器(j-link就有这个功能)连接到电脑上,就可以在电脑上的keil5软件上去调试单片机
-
其次,学会keil5软件上的debug的操作,仿真调试实时跟踪代码的运行,程序出现问题并能跟踪到问题所在。能够观察变量的变化、逐步执行代码。
注意:点击debug按键时,程序先要保证编译并还是0errors。


1370

被折叠的 条评论
为什么被折叠?



