<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 牛人業(yè)話(huà) > ??煽菔蔂€,程序存儲的空間也會(huì )變

??煽菔蔂€,程序存儲的空間也會(huì )變

作者:馬步 時(shí)間:2019-11-08 來(lái)源:電子產(chǎn)品世界 收藏

在這個(gè)薄情的世界上,沒(méi)有什么東西是不會(huì )變的。

本文引用地址:http://dyxdggzs.com/article/201911/406878.htm

曾經(jīng)的情比金堅,愛(ài)意綿綿,到如今一刀兩斷,愛(ài)情的小船翻了船,高調秀過(guò)的恩愛(ài)被無(wú)情地打臉。曾經(jīng)的義結金蘭,并肩向前,也架不住權力游戲對美好心靈的摧殘,昨日推杯換盞,今日一拍兩散,說(shuō)翻臉就翻臉,陰謀刺激堪稱(chēng)政變。

1573198018308442.jpg

海也沒(méi)有枯,石也沒(méi)有爛,但是倔強的時(shí)間一往無(wú)前,將說(shuō)好的永遠打得凌亂。

謎一樣的人類(lèi)就是這么靠不住,所以有人說(shuō):“人類(lèi)靠得住,母豬會(huì )上樹(shù)”!

相比之下,外在的物質(zhì)世界就穩當多了。

古巴比倫王頒布了漢謨拉比法典,刻在黑色的玄武巖,距今已經(jīng)三千七百多年。杰倫說(shuō),“幾十個(gè)世紀后出土發(fā)現,泥板上的字跡依然清晰可見(jiàn)?!?/p>

萬(wàn)里長(cháng)城跨越一座座高山,迎來(lái)送往過(guò)一次次的刀鋒雪劍,至今仍在接待全球各地笑意冉冉的旅行團。金字塔歷經(jīng)五千年的歲月輪轉,走過(guò)王朝更替的狼煙,依然在如血的殘陽(yáng)中傲然矗立,默默無(wú)言。

但是,時(shí)代畢竟發(fā)展了。以前的時(shí)間很慢很慢,一封家書(shū)都要走上小半年,現在的時(shí)間變得很快很快,瞇一會(huì )兒就從塞北來(lái)到了江南。

所以,現如今,基本上所有的東西都打上了一個(gè)叫做“保質(zhì)期”的標簽。在電子產(chǎn)品那里,有一個(gè)更為專(zhuān)業(yè)一點(diǎn)的術(shù)語(yǔ),叫做“產(chǎn)品生命周期”。

1

電子產(chǎn)品的“生命周期”或者說(shuō)壽命可長(cháng)可短,作為一個(gè)物件,它當然有被自然規律支配的客觀(guān)一面,同時(shí),作為人類(lèi)的一種工具,它還取決于人類(lèi)主人隨性隨機的主觀(guān)意愿。

就拿手機來(lái)說(shuō)吧,小青年們基本上一年一換,像我這種老朽也撐不過(guò)三年,從主觀(guān)層面上來(lái)說(shuō),平均壽命不過(guò)兩年。但是,從客觀(guān)上來(lái)說(shuō),電池不行了換電池,屏幕不好了換個(gè)屏,或者主觀(guān)思想停留在上個(gè)世紀,不怕卡頓,不嫌難看,手機的壽命興許可以到十年。

手機用上十年當然很恐怖,但是對于一般的嵌入式產(chǎn)品而言,十年卻是小菜一碟。試問(wèn)你那開(kāi)了十年、跑了二十萬(wàn)公里的愛(ài)車(chē)里,有多少電子控制部件沒(méi)有更換過(guò)?

說(shuō)起來(lái),嵌入式產(chǎn)品是個(gè)耐用品,只要硬件不壞,軟件支持升級,用個(gè)十年八年實(shí)屬稀松平常。但是,天畢竟有不測風(fēng)云,有的時(shí)候,它就壞上那么一點(diǎn)點(diǎn),就這么一點(diǎn)點(diǎn),你就得跟它說(shuō)再見(jiàn)。

比如,存儲空間的二進(jìn)制數據暴走,發(fā)生突變。

2

各位看官可能納了悶了,二進(jìn)制數據在存儲空間里呆得好好的,一直做著(zhù)安靜的美男子,竟也會(huì )發(fā)生突變的么?

一般情況下自然是不會(huì )的。但是,二般情況下呢?

1573198063384851.jpg

就像向身體倍棒、看著(zhù)能活到兩百歲的你推銷(xiāo)保險的那些人,他們經(jīng)常帶著(zhù)對人生偶然性的深刻關(guān)切向你拋出直擊靈魂深處的一問(wèn):你能保證永遠不生病嗎?

為了說(shuō)明二進(jìn)制的暴走,照例,先給大家簡(jiǎn)單地科下普。說(shuō)句題外話(huà),對于很多看官來(lái)說(shuō),灑家的科普都是“禿子頭上的虱子明擺著(zhù)的事”,但是為了擴大受眾,灑家還是要多言幾句。

“在很多嵌入式電子產(chǎn)品中,都是由微控制器里的Nor Flash存儲并運行系統程序,Nor Flash的特點(diǎn)是Excute In Place,即不必把程序代碼讀到系統中,程序可以直接在Flash內運行。當然,如果有需要,你也可以把它讀到中運行。微控制器及其片內的Nor Flash是基于CMOS工藝的集成電路芯片,隨著(zhù)工作頻率越來(lái)越快、集成度越來(lái)越高、工藝尺寸越來(lái)越小,微控制器及其內部Flash越來(lái)越容易受到輻射效應的影響。輻射效應可能造成Nor Flash數據的破壞,從而使得基于程序指令運行的嵌入式系統的應用邏輯發(fā)生混亂,帶來(lái)不可意料的問(wèn)題?!?/em>

毋庸多言,程序數據的一致性對產(chǎn)品整個(gè)生命周期內的功能穩定性和數據安全性尤為重要,而電子產(chǎn)品的壽命一般都在10年以上,那是夜也長(cháng)夢(mèng)也多,做為產(chǎn)品設計人員,不能沒(méi)心沒(méi)肺地對程序數據可能的破壞視而不見(jiàn)。

所以,得設計一種方法,檢驗電子產(chǎn)品程序Flash數據的一致性。

3

可是,程序數據那么多,不同產(chǎn)品的程序規模又不一致,怎么設計一個(gè)盡量通用的方法,驗證程序空間數據的一致性呢?

要回答這個(gè)問(wèn)題,先要搞明白程序數據長(cháng)什么樣子。

大家都知道,現在的IDE把應用程序編譯、鏈接后會(huì )生成幾種格式的程序數據文件,有elf格式、bin格式、s19格式。每種格式都有自己的歷史淵源和用武之地,灑家分享的方法里用到的是S19文件格式。

說(shuō)到S19,那是孩子沒(méi)娘說(shuō)來(lái)話(huà)長(cháng),但是咱們長(cháng)話(huà)短說(shuō)。

“S19的全稱(chēng)為Motorola format for EEPROM programming,是摩托羅拉公司為程序和數據文件定義的一種可打印的ASCII形式編碼的s格式文件,以實(shí)現在不同的計算機平臺之間傳輸程序代碼和數據。

S19文件中的每一行數據為一條SRecord,以S0型SRecord開(kāi)始,以S9型SRecord結束,以S2型SRecord存放Flash寫(xiě)入地址、程序數據、程序數據長(cháng)度信息?!?/p>

聰明的小伙伴是不是發(fā)現了什么?

1573198096216660.jpg

對滴,程序數據就在S19文件里的S2型SRecord里面,我們可以用一個(gè)PC端的軟件很容易地把程序數據的地址、內容、長(cháng)度解析出來(lái)。篇幅有限,解析方法就不再贅述,小伙伴們可以自行腦補。

解析出來(lái)以后呢?當然是做某種運算,用這個(gè)運算結果來(lái)“標識”程序數據了。

這個(gè)套路是不是很熟悉?想想編程的本質(zhì)是什么?就是數據+運算呀!

運算是一種模式pattern,你盡可以自由選擇,可以對數據累加求和,或者求異或同或,也可以進(jìn)行加密運算,當然,也可以選擇用得非常之廣的CRC32運算。

4

妥了,程序數據解析出來(lái)了,標識這個(gè)程序完整性的CRC32結果也出來(lái)了,這些信息提取工作都是在PC端進(jìn)行的,電子產(chǎn)品的MCU端怎么辦?

這就要借助一個(gè)叫做bootloader的東西了。

Bootloader在linux中用得非常普遍,它做好板級初始化后把數據導到里,然后加載操作系統。但是在這里的bootloader不是這種概念。

這里的bootloader是獨立于應用程序的一段代碼,它用來(lái)接收應用程序數據,把程序數據寫(xiě)入到相應地址的地址處,然后把程序完整性標識-CRC32結果存儲下來(lái),標記應用程序的有效性。

有了bootloader之后,你就可以從PC端下載應用程序了,這里指的是第一臺產(chǎn)品。換句話(huà)說(shuō),第一臺產(chǎn)品是不能用燒寫(xiě)器來(lái)下載的,要通過(guò)專(zhuān)屬的協(xié)議來(lái)下載,后面的產(chǎn)品可以完全復制第一臺產(chǎn)品里的程序數據用燒寫(xiě)器下載。

什么樣的專(zhuān)屬協(xié)議呢?這就要看你的產(chǎn)品上有什么接口了。RS232-RS485-CAN都行,總之,在下載應用程序Flash數據的過(guò)程中,上位機解析S19文件,把一條條SRecord發(fā)給下位機,bootloader解析出來(lái)地址和數據,調用 driver把程序數據存到程序地址空間中,說(shuō)句題外話(huà),S19文件實(shí)際包括好幾段,每個(gè)段都有多條SRecord,bootloader要把分段信息提取出來(lái)并存儲。

解析并存儲的過(guò)程中,bootloader同時(shí)對程序數據做著(zhù)CRC32運算,下載完程序后,上位機把CRC32結果發(fā)下來(lái),兩相對照,兩者一致則表明應用程序燒錄正確,然后在MCU內部數據Flash中存儲校驗信息,并將應用程序有效標志置為0x55,存入數據Flash中。

程序存好了,完整性標識-CRC32運算結果也存好了,應用程序標志為有效了,接下來(lái),就萬(wàn)事俱備只欠東風(fēng)了-MCU上電后要做程序一致性驗證了!

在產(chǎn)品運行階段,上電后,MCU首先跳入Bootloader的地址空間運行,檢查應用程序有效標志,如果讀取到的有效標志為0x55,MCU跳入應用程序的地址空間運行。

在應用程序的初始化階段,讀取存儲在數據Flash中的校驗信息,根據校驗信息中的分段尺寸,讀取各個(gè)分段中的Flash數據,進(jìn)行CRC32校驗,并將計算結果和校驗信息中的CRC32校驗值進(jìn)行比對,如果數據一致,表明程序Flash數據沒(méi)有損壞,系統正常運行,如果不一致,表明程序Flash數據被損壞,進(jìn)入跛行模式。

5

掰扯了半天,里面的知識點(diǎn)不少,不知道各位看官有沒(méi)有完全理解。怎奈篇幅有限,不能鋪展太過(guò)。灑家的本意當然是:“緊緊地握住您的手,熱情的話(huà)兒說(shuō)不完?!?/p>

當然,說(shuō)一千道一萬(wàn),灑家只是想提醒諸位:??煽菔蔂€,程序存儲的空間也會(huì )變!



關(guān)鍵詞: RAM flash 程序

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>