怎样利用好单片机程序存储器上的存储器资源来实现OD的存

怎样利用好单片机上的存储器资源来实现OD的存储与访问 - 其他技术 - 电子工程世界网
怎样利用好单片机上的存储器资源来实现OD的存储与访问
09:26:48来源: eefocus 关键字:&&&&&&
我们知道(对象字典)是CANopen的核心,所有功能都是围绕它开展的,是协议栈的数据中心,良好的OD实现是协议栈高效稳定运行的基础,而OD的实现最基本的一点就是怎么去保存它。因为OD的内容比较杂,读写属性上,有只读数据、只写数据、可读写数据;保存要求上有非易失和掉电丢失两种类型;数据类型上有字符型、整型、长整型等等;存储格式上有8位、16位、32位等。其它的不管,本文现只讨论怎么利用的资源去尽量满足OD的存储需求。有人会以为这还要讨论么?只读的就放在只读存储器中,可写的就放在RAM中,需要掉电保存的就放在非易失可读写存储器中。话是这么说,但实际上问题很多,罗列如下:1.&对协议栈只读并不表示对应用程序只读。2.&&可读写而又掉电保存的数据不能放在RAM里。3.&&频繁读写的数据不能放在非易失存储器中,因为非易失存储器往往速度慢,有写次数限制。4.&&单片机资源有限,存取方式和读写速度有限值,因此得合理利用。既然有这些问题,我们先对OD的数据进行分析分类:1.&&系统只读参数。自节点出厂就无需更改,例如,节点硬件序列号、软硬件版本等。2.&&过程数据对象。频繁读写,掉电无需保存。例如,采集的模拟量、待输出的开关量。3.&&系统配置参数。可读写,偶尔配置,大部分时间只读。基本上所有的OD对象都可以归到这三类中去。下面再以AVR单片机为例说说单片机的几类存储资源以及其特点:类型运行中读写属性访问速度容量特点FLASH程序存储器只读一般较大操作方便但只能放程序和初始化只读数据,掉电不丢失SRAM数据存储器读写最快小操作方便,速度快,掉电数据丢失EEPROM数据存储器读写读一般,写很慢小操作复杂,写速度极慢看到上面这个表,你会马上把OD的三类数据存放位置定下来吧,系统只读参数放在FLASH中;过程数据对象放在SRAM中;系统配置参数放在EEPROM中。实际上确实该如此安排,但是所有问题的解决了?NO,NO,NO!OD中的数据对象是怎么安排进存储器的?系统启动怎么初始化?怎么去访问?下面提供一种方案:出厂设置随程序一起写入FLASH,然后系统重器开始运行,在软件初始化过程中,程序将出厂默认的整个OD对象从FLASH&载入到RAM中去,不论是OD的那种分类的数据;之后如果判断是第一次运行,将用RAM中属于的统配置参数的那一类数据去初始化EEPROM,否则用EEPROM中的系统配置参数去重新覆盖对应的RAM映像。好了初始化完成,开始运行,因为所有OD数据都load到RAM中,因此OD对外可以提供统一快速的数据服务接口,外部的读操作就是直接读RAM,写则是先写RAM映像,然后再判断如果是OD的系统配置参数那一类则同时更新EEPROM。最后要注意一点就是OD的对象属性等信息一定要放在FLASH中,否则将是一个极大的RAM开销。上面方案优点是在满足OD需求的前提下能够提供统一快速的OD访问接口;能够及时存储非易失性数据;并能在软件上实现恢复出厂设置的操作而不增加额外的出厂设置备份空间(在EEPROM中置一标志就行了,自己去想)。明显的优点也意味着明显的缺点,就是占用较多RAM空间,只读数据和非易失性数据都要映射到RAM中,浪费了一部分RAM,这将使得本来就紧张的RAM资源更加紧张,好在一般节点上的OD内容一般不多,而且现在RAM非常便宜。上面的方案同样适用于其他单片机,基本上现在的单片机上都有FLASH和RAM,而即使有的单片机没有EEPROM,但是本身FLASH区是可以运行中在线写入的,也可以当EEPROM用(但此时最好就不要来一个写一个了,因为FLASH是页擦除的,比较耗时间,因此建议做成批量写入方式,OD的0x1对象有涉及),实在不行还可以外扩。
关键字:&&&&&&
编辑:什么鱼 引用地址:
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
微信扫一扫加关注 论坛活动 E手掌握
微信扫一扫加关注
芯片资讯 锐利解读
热门关键词
大学堂最新课程
汇总了TI汽车信息娱乐系统方案、优质音频解决方案、汽车娱乐系统和仪表盘参考设计相关的文档、视频等资源
热门资源推荐
频道白皮书
何立民专栏
北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。我们知道对象字典是的核心,所有功能都是围绕它开展的,是协议栈的数据中心,良好的实现是协议栈高效稳定运行的基础,而的实现最基本的一点就是怎么去保存它。因为的内容比较杂,读写属性上,有只读数据、只写数据、可读写数据;保存要求上有非易失和掉电丢失两种类型;数据类型上有字符型、整型、长整型等等;存储格式上有位、位、位等。其它的不管,本文现只讨论怎么利用单片机的资源去尽量满足的存储需求。
有人会以为这还要讨论么?只读的就放在只读存储器中,可写的就放在中,需要掉电保存的就放在非易失可读写存储器中。话是这么说,但实际上问题很多,罗列如下:
对协议栈只读并不表示对应用程序只读。
可读写而又掉电保存的数据不能放在里。
频繁读写的数据不能放在非易失存储器中,因为非易失存储器往往速度慢,有写次数限制。
单片机资源有限,存取方式和读写速度有限值,因此得合理利用。
既然有这些问题,我们先对的数据进行分析分类:
系统只读参数。自节点出厂就无需更改,例如,节点硬件序列号、软硬件版本等。
过程数据对象。频繁读写,掉电无需保存。例如,采集的模拟量、待输出的开关量。
系统配置参数。可读写,偶尔配置,大部分时间只读。
基本上所有的对象都可以归到这三类中去。下面再以单片机为例说说单片机的几类存储资源以及其特点:
运行中读写属性
程序存储器
操作方便但只能放程序和初始化只读数据,掉电不丢失
数据存储器
操作方便,速度快,掉电数据丢失
数据存储器
读一般,写很慢
操作复杂,写速度极慢
看到上面这个表,你会马上把的三类数据存放位置定下来吧,系统只读参数放在中;过程数据对象放在中;系统配置参数放在中。
实际上确实该如此安排,但是所有问题的解决了?,,!中的数据对象是怎么安排进存储器的?系统启动怎么初始化?怎么去访问?下面提供一种方案:
出厂设置随程序一起写入,然后系统重器开始运行,在软件初始化过程中,程序将出厂默认的整个对象从载入到中去,不论是的那种分类的数据;之后如果判断是第一次运行,将用中属于的统配置参数的那一类数据去初始化,否则用中的系统配置参数去重新覆盖对应的映像。好了初始化完成,开始运行,因为所有数据都到中,因此对外可以提供统一快速的数据服务接口,外部的读操作就是直接读,写则是先写映像,然后再判断如果是的系统配置参数那一类则同时更新。最后要注意一点就是的对象属性等信息一定要放在中,否则将是一个极大的开销。
上面方案优点是在满足需求的前提下能够提供统一快速的访问接口;能够及时存储非易失性数据;并能在软件上实现恢复出厂设置的操作而不增加额外的出厂设置备份空间在中置一标志就行了,自己去想。明显的优点也意味着明显的缺点,就是占用较多空间,只读数据和非易失性数据都要映射到中,浪费了一部分,这将使得本来就紧张的资源更加紧张,好在一般节点上的内容一般不多,而且现在非常便宜。
上面的方案同样适用于其他单片机,基本上现在的单片机上都有和,而即使有的单片机没有,但是本身区是可以运行中在线写入的,也可以当用但此时最好就不要来一个写一个了,因为是页擦除的,比较耗时间,因此建议做成批量写入方式,的和对象有涉及,实在不行还可以外扩。
阅读(...) 评论()转自:http://www.cnblogs.com/winshton/p/4897789.html
我们知道OD(对象字典)是CANopen的核心,所有功能都是围绕它开展的,是协议栈的数据中心,良好的OD实现是协议栈高效稳定运行的基础,而OD的实现最基本的一点就是怎么去保存它。因为OD的内容比较杂,读写属性上,有只读数据、只写数据、可读写数据;保存要求上有非易失和掉电丢失两种类型;数据类型上有字符型、整型、长整型等等;存储格式上有8位、16位、32位等。其它的不管,本文现只讨论怎么利用单片机的资源去尽量满足OD的存储需求。
有人会以为这还要讨论么?只读的就放在只读存储器中,可写的就放在RAM中,需要掉电保存的就放在非易失可读写存储器中。话是这么说,但实际上问题很多,罗列如下:
1.&对协议栈只读并不表示对应用程序只读。
2.&&可读写而又掉电保存的数据不能放在RAM里。
3.&&频繁读写的数据不能放在非易失存储器中,因为非易失存储器往往速度慢,有写次数限制。
4.&&单片机资源有限,存取方式和读写速度有限值,因此得合理利用。
既然有这些问题,我们先对OD的数据进行分析分类:
1.&&系统只读参数。自节点出厂就无需更改,例如,节点硬件序列号、软硬件版本等。
2.&&过程数据对象。频繁读写,掉电无需保存。例如,采集的模拟量、待输出的开关量。
3.&&系统配置参数。可读写,偶尔配置,大部分时间只读。
基本上所有的OD对象都可以归到这三类中去。下面再以AVR单片机为例说说单片机的几类存储资源以及其特点:
运行中读写属性
程序存储器
操作方便但只能放程序和初始化只读数据,掉电不丢失
数据存储器
操作方便,速度快,掉电数据丢失
数据存储器
读一般,写很慢
操作复杂,写速度极慢
看到上面这个表,你会马上把OD的三类数据存放位置定下来吧,系统只读参数放在FLASH中;过程数据对象放在SRAM中;系统配置参数放在EEPROM中。
实际上确实该如此安排,但是所有问题的解决了?NO,NO,NO!OD中的数据对象是怎么安排进存储器的?系统启动怎么初始化?怎么去访问?下面提供一种方案:
出厂设置随程序一起写入FLASH,然后系统重器开始运行,在软件初始化过程中,程序将出厂默认的整个OD对象从FLASH&载入到RAM中去,不论是OD的那种分类的数据;之后如果判断是第一次运行,将用RAM中属于的统配置参数的那一类数据去初始化EEPROM,否则用EEPROM中的系统配置参数去重新覆盖对应的RAM映像。好了初始化完成,开始运行,因为所有OD数据都load到RAM中,因此OD对外可以提供统一快速的数据服务接口,外部的读操作就是直接读RAM,写则是先写RAM映像,然后再判断如果是OD的系统配置参数那一类则同时更新EEPROM。最后要注意一点就是OD的对象属性等信息一定要放在FLASH中,否则将是一个极大的RAM开销。
上面方案优点是在满足OD需求的前提下能够提供统一快速的OD访问接口;能够及时存储非易失性数据;并能在软件上实现恢复出厂设置的操作而不增加额外的出厂设置备份空间(在EEPROM中置一标志就行了,自己去想)。明显的优点也意味着明显的缺点,就是占用较多RAM空间,只读数据和非易失性数据都要映射到RAM中,浪费了一部分RAM,这将使得本来就紧张的RAM资源更加紧张,好在一般节点上的OD内容一般不多,而且现在RAM非常便宜。
上面的方案同样适用于其他单片机,基本上现在的单片机上都有FLASH和RAM,而即使有的单片机没有EEPROM,但是本身FLASH区是可以运行中在线写入的,也可以当EEPROM用(但此时最好就不要来一个写一个了,因为FLASH是页擦除的,比较耗时间,因此建议做成批量写入方式,OD的0x1对象有涉及),实在不行还可以外扩。
本作品采用进行许可。
阅读(...) 评论()}

我要回帖

更多关于 单片机程序存储器 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信