极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 19820|回复: 11

Arduino系列除了2560以外还有哪款SRAM比较大的?

[复制链接]
发表于 2014-12-15 16:58:43 | 显示全部楼层 |阅读模式
最近用Mini Pro做个自动控制的小温室,用了DS18B20,DHT11,DS3231,在github找到的这几个库占用SRAM太高,想额外做个串口控制发现内存空间就剩不到10个字的字符串,串口一口气输入超过10个字符就死机了,328p的2k sram太小,用2560那个8k的又有点浪费而且也贵,想问一下还有哪款sram比较大又相对便宜的
回复

使用道具 举报

发表于 2014-12-15 17:05:34 | 显示全部楼层
本帖最后由 Paderboy 于 2014-12-15 17:09 编辑

Atmega644pa 64k flash 4k sram 2k eeprom
Atmega128a 128k flash 4k sram 4k eeprom
Atmega1280 128k flash 8k sram 4k eeprom
回复 支持 反对

使用道具 举报

发表于 2014-12-15 17:08:38 | 显示全部楼层
DUE - 512 KB flash memory all available for the user applications, 96 KB SRAM, 而且仲要係 84 MHz clock speed.

不過, DUE 既 library 唔係完全用到, 要測試清楚....但價錢比 mega 貴, 最近加價了, 要八十元以上.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-15 17:20:07 | 显示全部楼层
Paderboy 发表于 2014-12-15 17:05
Atmega644pa 64k flash 4k sram 2k eeprom
Atmega128a 128k flash 4k sram 4k eeprom
Atmega1280 128k  ...

128和644确实便宜,但是好像没找到合适的bootloader……1280的价格和2560差不多了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-15 17:23:58 | 显示全部楼层
Super169 发表于 2014-12-15 17:08
DUE - 512 KB flash memory all available for the user applications, 96 KB SRAM, 而且仲要係 84 MHz clo ...

曾经考虑过试试DUE,性能不是一般的厉害啊,但是我怕我这个大老粗接到5v电把它烧了,曾经接错烧了几片NRF24L01……
回复 支持 反对

使用道具 举报

发表于 2014-12-15 17:31:00 | 显示全部楼层
当风过时 发表于 2014-12-15 17:23
曾经考虑过试试DUE,性能不是一般的厉害啊,但是我怕我这个大老粗接到5v电把它烧了,曾经接错烧了几片NRF ...

但要  SRAM 多, 選擇不多.  

或者嘗試從程式上著手, 可能的話盡量把固定的東西放上 flash.
你提及的 DS18B20, DHT11, DS3231 應該不會需要太多 SRAM 吧.  2KB SRAM 應該也夠用.
一般比較耗 SRAM 是 顯示屏的 buffer, 單是 12864 已經要用上 1KB.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-15 18:02:09 | 显示全部楼层
Super169 发表于 2014-12-15 17:31
但要  SRAM 多, 選擇不多.  

或者嘗試從程式上著手, 可能的話盡量把固定的東西放上 flash.

我的主程序里边就全局变量只有几个boolean和int外带DS3231储存时间的结构体,剩下的就是那3个器件的实例了,调试了一个多星期,已经把能不放全局的东西都不放了,程序也只是判断一下取到的温度和时间控制引脚电平启动继电器而已
回复 支持 反对

使用道具 举报

发表于 2014-12-15 18:10:40 | 显示全部楼层
当风过时 发表于 2014-12-15 18:02
我的主程序里边就全局变量只有几个boolean和int外带DS3231储存时间的结构体,剩下的就是那3个器件的实例了 ...

嘗試用 1.5.X IDE compile 一次, 把有關的資訊貼上來, 看看  Global variables 的使用量.

例如 compile BareMinimum 的資料, 只需要 9 bytes.

Sketch uses 450 bytes (1%) of program storage space. Maximum is 30,720 bytes.
Global variables use 9 bytes (0%) of dynamic memory, leaving 2,039 bytes for local variables. Maximum is 2,048 bytes.


看看你的程式是否真的因為 SRAM 不足而出問題.
回复 支持 反对

使用道具 举报

发表于 2014-12-15 19:04:35 | 显示全部楼层
本帖最后由 Paderboy 于 2014-12-15 19:08 编辑

楼上说的是的,不带显示的话,上面几个库文件,不会用到多少的sram。还是先从程序上查看下。。

可能是你串口输出的字符太多了,占用了很多的内存。。。把不需要变动的,字符内容写到flash里,,这个语句
Serial.print(F(“Hello World”))。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-15 20:49:55 | 显示全部楼层
Super169 发表于 2014-12-15 18:10
嘗試用 1.5.X IDE compile 一次, 把有關的資訊貼上來, 看看  Global variables 的使用量.

例如 compil ...

谢谢了,我也一直在找这个可以显示所需全局变量空间的功能,我一直纳闷keil里边这么方便的功能怎么在arduino里会没有,我一直用着1.0.5,原来是在1.5.x才有啊,现在解决问题了,是我这边捕获串口数据写在了上一个程序块中进入死循环了
我这边的信息,看到这个信息马上就去老老实实查源码了……
Sketch uses 11,342 bytes (36%) of program storage space. Maximum is 30,720 bytes.
Global variables use 515 bytes (25%) of dynamic memory, leaving 1,533 bytes for local variables. Maximum is 2,048 bytes.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-15 20:54:43 | 显示全部楼层
Paderboy 发表于 2014-12-15 19:04
楼上说的是的,不带显示的话,上面几个库文件,不会用到多少的sram。还是先从程序上查看下。。

可能是你 ...

我一直以为这个字符是算在flash中……用F()包住可以放到flash里,学习了,问题已经解决了,是我的循环写错地方导致的假死
回复 支持 反对

使用道具 举报

发表于 2014-12-15 22:47:53 | 显示全部楼层
Paderboy 发表于 2014-12-15 19:04
楼上说的是的,不带显示的话,上面几个库文件,不会用到多少的sram。还是先从程序上查看下。。

可能是你 ...

我现在做的一个64x32的点阵时钟就是这样,之前即使用2560也会因为SRAM用尽导致显示不正常,后来把字库写入到flash后就可以了,当然也优化了code,尽量减少定义大的数组变量,可以定义一个数组重复使用
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-26 16:15 , Processed in 0.044572 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表