3-13 arduino内存-3 内存优化(智能应用篇)

3-13 arduino内存-3 内存优化

ATmega328中的各类存储介质存储大小
在这里插入图片描述

这节课重点在flash及sram,学习如何优化程序,让arduino开发板发挥出其潜能
在这里插入图片描述

优化SRAM

(1)方法一(Serial.println(F(“hello-world”)))

SRAM更小,先学习如何优化SRAM
在这里插入图片描述

双引号括起来输出一串字符串(在引号里的),会将此字符串作为变量存在SRAM中
这个字符串变量是不会变化的,把一个不会变化的变量放到SRAM存储,是有些浪费SRSM空间的

我们是否可以将其放到flash(存放静态信息,无变化的如程序,而非变化的变量)中
我们可以将其修改如下
在这里插入图片描述

上面两条指令运行结果是一样的,都能在串口监视器显示出字符

只需要F()将字符串括起来,此字符串变量就会被存在flash中,不会放在SRAM中,这样大大降低了SRAM资源消耗,当我们进行大量调试使用串口监视器时这样做的作用非常大的

(2)方法2(const int PROGMEM a= 125;)

在这里插入图片描述

建立一个整数型常量,arduino运行过程中会将其放在SRAM中处理
这个常量在运行过程中是不发生任何改变的,也是属于静态信息,若将其放在SRAM存储也是一种浪费

我们应将常量信息存放在FLASH中如下,只需加入大写字母PROGMEM(program memory程序内存)

在这里插入图片描述

上面的两种方法都是将SRAM中的静态信息放到FLASH中,用flash分担SRAM的压力
在这里插入图片描述

接下来就是对SRAM中的遍量做文章了

(3)方法3尽量多使用局部变量代替全局变量

在这里插入图片描述

在这里插入图片描述

上方代码不会让arduino完成任何工作,这些代码的意义就是展示arduino处理全局、局部变量如何利用SRAM的

在这里插入图片描述

当创建全局变量时,SRAM会给出一个区域给全局变量,此空间别的不能再使用了,当建立第二个全局变量只能在剩下的空间找

全局变量一旦被占领,谁也无法再次使用了

在这里插入图片描述
在这里插入图片描述

运行到function-1中时,局部变量创建如上,创建临时空间给局部变量,当arduino执行完function-1内容后,会将其中所有局部变量空间释放,空间可被再次利用
在这里插入图片描述

在执行function_2的局部变量再次建立空间如右侧
在这里插入图片描述

局部变量占的空间会被释放

此时引出优化SRAM的第3中方法,共享局部变量,尽量多使用局部变量代替全局变量

在这里插入图片描述

(4)方法4尽量使用占用内存少的数据类型

需要注意,各个变量大小的尺寸是不成比例的,SRAM能存储多少个整数型变量,每个整数型变量在SRAM中站2个字节,BOOL型的遍历占1个字节
在这里插入图片描述

SRAM能存放1024个int类型变量,或者存放2048个布尔型变量
在这里插入图片描述

举例如下:
左侧使用布尔型变量用于逻辑判断更优化
在这里插入图片描述

Arduino有非常多的数据类型
了解其存储范围及所占字节大小

http://www.taichi-maker.com/homepage/reference-index/arduino-code-reference/

在这里插入图片描述

http://www.taichi-maker.com/homepage/reference-index/arduino-code-reference/data-types/
在这里插入图片描述

需要注意的是部分arduino开发板是8位控制器,上面的数据类型所占字节等介绍是基于8位开发板来说的,对于32位的arduino开发板上方信息就不再适应了

优化FLASH闪存

(1)代码简洁

如何写程序更加优化flash闪存,其存储静态信息,所有优化程序代码,程序代码则要更简洁,一句话能解决的就不要多句话
在这里插入图片描述

初学者很难一次搞定,要多次修改优化,此时会产生无用的程序代码,一定要删除无用代码否则其会浪费我们的资源

(2)删除无用代码

在这里插入图片描述

(2.1)删除无用库、无用变量、无用函数

在这里插入图片描述

无用的代码一定全部删除

示例程序

接下来进行实际例子
环保小夜灯示例程序-2

原始代码未优化的
运行结果如下
在这里插入图片描述

占用了10%存储空间和9%的动态内容

程序优化后的代码如下

运行结果如下
在这里插入图片描述

存储空间占用5%,而动态内存只有0%

优化哪些内容

(1)所有串行输出字符串加入F(),SRAM的静态信息移到flash闪存中

在这里插入图片描述

(2)常量加入PROGMEM,将SRAM的静态信息移到flash闪存中

在这里插入图片描述

注意这种方法只适合程序常量

(3)控制led的亮度的,是需要0255就可以了,int类型范围太大,使用byte(正好0255之间,只占用1个字节)

1个字节之差也是比较多的,尽量优化的精神
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吾名招财

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值