单片机的内存问题

一、编译优化

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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值