没有合适的资源?快使用搜索试试~ 我知道了~
基于AVR的E2PROM的数据动态存储策略
需积分: 6 1 下载量 170 浏览量
2020-10-23
19:21:18
上传
评论
收藏 191KB PDF 举报
温馨提示
试读
4页
本文以AVR系列单片机中的ATmega8为例,从程序设计角度出发,提出一种切实可行的E2PROM数据存储策略,最大限度地提高片内E2PROM空间的利用率,从而解决上面提到的问题。
资源推荐
资源详情
资源评论
基于基于AVR的的E2PROM的数据动态存储策略的数据动态存储策略
本文以AVR系列单片机中的ATmega8为例,从程序设计角度出发,提出一种切实可行的E2PROM数据存储策
略,最大限度地提高片内E2PROM空间的利用率,从而解决上面提到的问题。
在一个单片机系统中,往往要求系统能够为用户保存一些参数或数值。这些数据被要求在系统断电后不会“消失”,并在下
一次开机后能够被读取和修改。
随着单片机内部集成功能的不断增加,使用片外数据
另外,单片机内部的E2PROM 空间相对于有待保存的数据量来说是有很大富余的。也就是说,当单片机由于
内部E2PROM 擦写次数超过极限而不能正常工作时,片内仍然有较多的E2PROM 空间没有被利用过,因而产生单片机内
部资源的极大浪费。
本文以AVR 系列单片机中的ATmega8 为例,从程序设计角度出发,提出一种切实可行的E2PROM 数据存储
1、、E2PROM
一般,把数据存储方式设定为静态,即为固定的地址指定惟一的变量,任何时候读取和改写此地址内数据的操作均视为对
该变量的读取和改写。然而这样的存储方式若被用于E2PROM 内的数据存储,当E2PROM 的某一单元因过量擦写而失效后,
这个固定地址内所存放的变量就失去了有效的对应物理空间,这是在做E2PROM 数据存储时不愿意看到的。
解决上述问题的有效方法是对E2PROM 数据实行动态存储。其基本要求和目标是:
① 在整个系统使用寿命内,使E2PROM 空间得到最大利用;
② 系统能够辨别不能使用的E2PROM 单元,从而保障数据安全。
2 、策略分析、策略分析
为方便叙述,将整个E2PROM 空间分为以下几个部分:统称已经分配给用户使用的地址连续的E2PROM 区
域为“占用块”;称未曾分配的地址连续的E2PROM 区域为“可利用块”或“空闲块”。另外,为记录占用块的使用情况,还要在
E2PROM 内划定一个地址连续的区域作为“目录表”。这个目录表记录的是占用块中实际占用空间的地址。与此对应的, 占用
块中另外的部分就是废弃空间(单元) 。
采取这样的策略,在高地址的空闲块中先放入目录表。该目录表的大小决定于占用块中实际占用单元的多少,目录表记录
实际占用单元的地址;占用块从低地址的空闲块开始分配,系统不再回收已经分配的占用块,一直到占用块中出现废弃单元,
系统就为其把现有的占用块扩大,同时修改目录表中的相关地址信息。
在系统运行初期,如果地址信息与数据信息同类型,那么占用块和目录表所占空间大小是一样的,且目录表是
一个低地址的序列。如图1 所示,如果单片机内有N个E2PROM 存储单元内,则在高地址开辟一个目录表空间,记录m
个实际占用单元的地址,即0 ,1 ,2 , …,m-1 。
当系统运行到一定时间后,占用块中的某一个单元会因为E2PROM 数据擦写次数超过限次而失效被废弃,不妨假设这个
单元地址是002H ,那么,系统就开始查找当前目录表中所记录的最大地址值,如图2 所示。这个最大地址值加1 ,便是为废
弃单元在空闲块重新分配单元的地址,这里是(m-1)+1 = m。同时,目录表所记录的该内容的地址也做出相应修改。
可以预想的是,接着系统在一定时间后,会出现第2个废弃单元,假设这个单元地址是000H。依次类推,如图3 所示,系
统会为D0 分配地址m+1 所指向的空间,同时目录表内原先表示D0 所在的地址值会被更改为m+1 。
随着E2PROM 内废弃单元的逐渐增加,空闲块的大小不断缩小。当出现新的废弃单元而没有空闲块可以利用时,系统会
出现故障。采用这样的策略后,相对于首次出现废弃单元系统便被摧毁来说,实际上这个出现故障的时间已经被大大延缓了。
资源评论
weixin_38620314
- 粉丝: 1
- 资源: 914
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功