AVR单片机 FLASH扩展

比如我写的程序比较大,编译出来比如说是20K,而我的单片机的FLASH只有16K,我知道FLASH的扩展芯片,比如说AT24C**,我不知道接上这块芯片后,我的程序要怎么... 比如我写的程序比较大,编译出来比如说是20K,而我的单片机的FLASH只有16K,我知道FLASH的扩展芯片,比如说AT24C**,我不知道接上这块芯片后,我的程序要怎么改,才能把程序烧进入。我的程序大的原因是有很大的全局变量,比如uchar buf[512],用来装中间变量的。
我写的是单片机U盘读写,常用uchar buf[512]注意是为了扇区写,一次性写入数据,提高U盘的寿命。
1楼 FLASH我指的是我编译出来的HEX文件比较大,我使用的AVR16装不了
2楼 和 3楼 我的这个全局变量是变化的 所以不能保存为const
4楼 是执行代码,我在考虑代码怎么优化 如果是数据,AVR怎么定义外部存储器,像51那样XDATA吗?
我用EEPROM,能这样做啊
展开
 我来答
百度网友7644a69
2010-08-30 · TA获得超过361个赞
知道小有建树答主
回答量:967
采纳率:0%
帮助的人:534万
展开全部
一般程序中是用不到这么多全局变量的

可以想办法 让其变为常量

就可以将RAM 变成FLASH 储存

const uchar buf[512]; //具体编译器 不同 关键字不同

如果实在是想要这么多RAM 随机存储器 ,可以选用大一点的IC 如:M32 M64

M128 或是高档一点的MCU。

在之前IC没有这么大的RAM 和FLASH的时候 曾经外扩过

可以用如 RAM 62256;ROM 29C02,29256

关于外扩电路 可以参考AVR的的相关书籍。

补: 你了解EEPROM吗?

他和RAM有什么区别? 你都不了解,还敢用?

RAM基本和IC的寿命是一样的,而EEPROM 最多只能擦写10万,现在最高也只有

100万次,而且写入和读出远远慢于RAM的速度。

注:要么提高MCU的档次,要么采用非常的手段,用在U盘读写上面。
ATF144X
2010-08-29 · TA获得超过1.2万个赞
知道大有可为答主
回答量:5344
采纳率:77%
帮助的人:4690万
展开全部
你的程序有20K,是可执行代码的大小还是其中包含了大量的数据?如果是后面一种情况,就把数据保存在单片机外部的存储器中。如果把单片机执行的代码保存在外部存储器中是不可能执行的。

不知你用的AVR单片机属于哪个型号,如果是Atmega16的话,就换成Atmega32来代替,Atmega32有32K的存储空间,足够你使用。如果是Atmega8515/162,这就很好办了,因为这单片机和51一样可以外部扩展存储器。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mike_gang
2010-08-28
知道答主
回答量:29
采纳率:0%
帮助的人:0
展开全部
你可以试试把这些变量放在eeprom中存储,一般的数据被默认为flash存贮,
你先这样试试 eeprom ucahr buff[512];如果不行,你就用SPI串行通信,将你要装的中间变量暂且放到EEPROM(比如24c256)中存储,当然这个存贮方式是要你自己编辑个函数的来调用或者修改的。应该不难,理论上一定行得通,我就做过这个小测试。
对于较大的常量数组,你可以这样unsigned const int xxxx[]保存。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bobjinbob
2010-08-28 · 超过26用户采纳过TA的回答
知道答主
回答量:109
采纳率:0%
帮助的人:76.9万
展开全部
全局变量好像是和RAM关系。和FLASH没啥关系吧?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式