您的位置 首页 数字

海可枯石可烂,程序存储的空间也会变

现如今,基本上所有的东西都打上了一个叫做“保质期”的标签。在电子产品那里,有一个更为专业一点的术语,叫做“产品生命周期”。

在这个不念情义的国际上,没有什么东西是不会变的。

从前的情比金坚,爱意连绵,到现在当机立断,爱情的小舟翻了船,高调秀过的恩爱被无情地打脸。从前的义结金兰,并肩向前,也架不住权利游戏对夸姣心灵的糟蹋,昨日推杯换盏,今天一拍两散,说争吵就争吵,诡计影响可谓政变。

1573198018308442.jpg

海也没有枯,石也没有烂,可是顽强的时刻一往无前,将说好的永久打得杂乱。

谜一样的人类便是这么靠不住,所以有人说:“人类靠得住,母猪会上树”!

相比之下,外在的物质国际就稳妥多了。

古巴比伦王公布了汉谟拉比法典,刻在黑色的玄武岩,距今现已三千七百多年。杰伦说,“几十个世纪后出土发现,泥板上的笔迹仍然清晰可见。”

万里长城跨过一座座高山,迎来送往过一次次的刀锋雪剑,至今仍在招待全球各地笑意冉冉的旅行团。金字塔历经五千年的年月轮转,走过王朝替换的狼烟,仍然在如血的残阳中凛然矗立,默不作声。

可是,年代究竟开展了。曾经的时刻很慢很慢,一封家书都要走上小半年,现在的时刻变得很快很快,眯一瞬间就从塞外来到了江南。

所以,现现在,基本上一切的东西都打上了一个叫做“保质期”的标签。在电子产品那里,有一个更为专业一点的术语,叫做“产品生命周期”。

1

电子产品的“生命周期”或许说寿数可长可短,作为一个物件,它当然有被自然规律分配的客观一面,一起,作为人类的一种东西,它还取决于人类主人随性随机的片面志愿。

就拿手机来说吧,小青年们基本上一年一换,像我这种老朽也撑不过三年,从片面层面上来说,平均寿数不过两年。可是,从客观上来说,电池不行了换电池,屏幕不好了换个屏,或许片面思维停留在上个世纪,不怕卡顿,不嫌丑陋,手机的寿数也许能够到十年。

手机用上十年当然很恐惧,可是关于一般的嵌入式产品而言,十年却是小菜一碟。试问你那开了十年、跑了二十万公里的爱车里,有多少电子控制部件没有更换过?

说起来,嵌入式产品是个耐用品,只需硬件不坏,软件支撑晋级,用个十年八年实属稀松往常。可是,天究竟有不测风云,有的时分,它就坏上那么一点点,就这么一点点,你就得跟它说再会。

比方,程序存储空间的二进制数据暴走,产生骤变。

2

各位看官或许纳了闷了,二进制数据在程序存储空间里呆得好好的,一向做着安静的美男子,竟也会产生骤变的么?

一般情况下自然是不会的。可是,二般情况下呢?

1573198063384851.jpg

就像向身体倍棒、看着能活到两百岁的你推销稳妥的那些人,他们常常带着对人生偶然性的深入关心向你抛出直击灵魂深处的一问:你能确保永久不患病吗?

为了阐明二进制程序的暴走,按例,先给咱们简略地科下普。说句题外话,关于许多看官来说,洒家的科普都是“秃子头上的虱子明摆着的事”,可是为了扩展受众,洒家仍是要多言几句。

“在许多嵌入式电子产品中,都是由微控制器里的Nor Flash存储并运转体系程序,Nor Flash的特点是Excute In Place,即不用把程序代码读到体系RAM中,程序能够直接在Flash内运转。当然,假如有需求,你也能够把它读到RAM中运转。微控制器及其片内的Nor Flash是依据CMOS工艺的集成电路芯片,跟着作业频率越来越快、集成度越来越高、工艺尺度越来越小,微控制器及其内部Flash越来越简单遭到辐射效应的影响。辐射效应或许形成Nor Flash数据的损坏,然后使得依据程序指令运转的嵌入式体系的应用逻辑产生紊乱,带来不行预料的问题。”

无须多言,程序数据的共同性对产品整个生命周期内的功用稳定性和数据安全性尤为重要,而电子产品的寿数一般都在10年以上,那是夜也长梦也多,做为产品规划人员,不能没心没肺地对程序数据或许的损坏视若无睹。

所以,得规划一种办法,查验电子产品程序Flash数据的共同性。

3

可是,程序数据那么多,不同产品的程序规划又不共同,怎样规划一个尽量通用的办法,验证程序空间数据的共同性呢?

要回答这个问题,先要搞了解程序数据长什么姿态。

咱们都知道,现在的IDE把应用程序编译、链接后会生成几种格局的程序数据文件,有elf格局、bin格局、s19格局。每种格局都有自己的历史渊源和用武之地,洒家共享的办法里用到的是S19文件格局。

提到S19,那是孩子没娘说来话长,可是咱们长话短说。

“S19的全称为Motorola format for EEPROM programming,是摩托罗拉公司为程序和数据文件界说的一种可打印的ASCII方式编码的s格局文件,以实现在不同的计算机渠道之间传输程序代码和数据。

S19文件中的每一行数据为一条SRecord,以S0型SRecord开端,以S9型SRecord完毕,以S2型SRecord寄存Flash写入地址、程序数据、程序数据长度信息。”

聪明的小伙伴是不是发现了什么?

1573198096216660.jpg

对滴,程序数据就在S19文件里的S2型SRecord里边,咱们能够用一个PC端的软件很简单地把程序数据的地址、内容、长度解析出来。篇幅有限,解析办法就不再赘述,小伙伴们能够自行脑补。

解析出来今后呢?当然是做某种运算,用这个运算成果来“标识”程序数据了。

这个套路是不是很熟悉?想想编程的实质是什么?便是数据+运算呀!

运算是一种形式pattern,你尽能够自由挑选,能够对数据累加求和,或许求异或同或,也能够进行加密运算,当然,也能够挑选用得十分之广的CRC32运算。

4

妥了,程序数据解析出来了,标识这个程序完整性的CRC32成果也出来了,这些信息提取作业都是在PC端进行的,电子产品的MCU端怎样办?

这就要凭借一个叫做bootloader的东西了。

Bootloader在linux中用得十分遍及,它做好板级初始化后把flash数据导到RAM里,然后加载操作体系。可是在这儿的bootloader不是这种概念。

这儿的bootloader是独立于应用程序的一段代码,它用来接纳应用程序数据,把程序数据写入到相应地址的flash地址处,然后把程序完整性标识-CRC32成果存储下来,符号应用程序的有用性。

有了bootloader之后,你就能够从PC端下载应用程序了,这儿指的是第一台产品。换句话说,第一台产品是不能用烧写器来下载的,要经过专属的协议来下载,后边的产品能够彻底仿制第一台产品里的程序数据用烧写器下载。

什么样的专属协议呢?这就要看你的产品上有什么接口了。RS232-RS485-CAN都行,总归,在下载应用程序Flash数据的过程中,上位机解析S19文件,把一条条SRecord发给下位机,bootloader解析出来地址和数据,调用flash driver把程序数据存到程序地址空间中,说句题外话,S19文件实践包含好几段,每个段都有多条SRecord,bootloader要把分段信息提取出来并存储。

解析并存储的过程中,bootloader一起对程序数据做着CRC32运算,下载完程序后,上位机把CRC32成果发下来,两相对照,两者共同则标明应用程序烧录正确,然后在MCU内部数据Flash中存储校验信息,并将应用程序有用标志置为0x55,存入数据Flash中。

程序存好了,完整性标识-CRC32运算成果也存好了,应用程序标志为有用了,接下来,就万事俱备只欠东风了-MCU上电后要做程序共同性验证了!

在产品运转阶段,上电后,MCU首要跳入Bootloader的地址空间运转,查看应用程序有用标志,假如读取到的有用标志为0x55,MCU跳入应用程序的地址空间运转。

在应用程序的初始化阶段,读取存储在数据Flash中的校验信息,依据校验信息中的分段尺度,读取各个分段中的Flash数据,进行CRC32校验,并将计算成果和校验信息中的CRC32校验值进行比对,假如数据共同,标明程序Flash数据没有损坏,体系正常运转,假如不共同,标明程序Flash数据被损坏,进入跛行形式。

5

掰扯了半响,里边的知识点不少,不知道各位看官有没有彻底了解。怎奈篇幅有限,不能铺展过分。洒家的原意当然是:“紧紧地抓住您的手,热心的话儿说不完。”

当然,说一千道一万,洒家仅仅想提示诸位:海可枯石可烂,程序存储的空间也会变!

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/shuzi/114476.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部