亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

傳感器節(jié)點(diǎn)遠(yuǎn)程升級方法與流程

文檔序號(hào):12664665閱讀:492來源:國知局
傳感器節(jié)點(diǎn)遠(yuǎn)程升級方法與流程

本發(fā)明屬于無線通信物聯(lián)網(wǎng)技術(shù)領(lǐng)域,更具體地說,本發(fā)明涉及一種傳感器節(jié)點(diǎn)遠(yuǎn)程升級方法。



背景技術(shù):

物聯(lián)網(wǎng)是繼計(jì)算機(jī)、互聯(lián)網(wǎng)、移動(dòng)通信網(wǎng)絡(luò)之后又一項(xiàng)新的信息技術(shù),被認(rèn)為是世界信息產(chǎn)業(yè)的第三次浪潮。當(dāng)前物聯(lián)網(wǎng)中的很大一部分應(yīng)用,如環(huán)境信息監(jiān)測、樓宇監(jiān)控、智慧城市等,都需要通過終端節(jié)點(diǎn)設(shè)備使用各種傳感器采集所需要的信息,發(fā)送給上層的云服務(wù)進(jìn)行處理,節(jié)點(diǎn)與節(jié)點(diǎn),節(jié)點(diǎn)與云形成了一個(gè)無線傳感器網(wǎng)絡(luò),該網(wǎng)絡(luò)通常具有以下幾點(diǎn)重要特征:1)節(jié)點(diǎn)計(jì)算資源有限。節(jié)點(diǎn)通常由計(jì)算資源十分有限的單片機(jī)和簡單的傳感器組成。單片機(jī)的計(jì)算速度較低,ROM和RAM空間有限,同時(shí)對成本十分敏感。2)節(jié)點(diǎn)工作環(huán)境多樣,通常一旦安裝很難進(jìn)行回收。3)節(jié)點(diǎn)的網(wǎng)絡(luò)資源有限。節(jié)點(diǎn)傳輸?shù)臄?shù)據(jù)量很少,同時(shí)對功耗極為敏感,不適合傳輸大量的數(shù)據(jù)。4)網(wǎng)絡(luò)部署后,調(diào)節(jié),修復(fù)和更新功能的需求強(qiáng)烈。

由以上幾點(diǎn)可知,能夠使用盡量少的軟硬件資源對節(jié)點(diǎn)進(jìn)行遠(yuǎn)程更新是無線傳感器網(wǎng)絡(luò)的一個(gè)重要功能。當(dāng)前無線傳感網(wǎng)絡(luò)的遠(yuǎn)程升級方案還存在以下問題:1、數(shù)據(jù)傳輸量較大,通常需要傳輸整個(gè)固件程序或較大的差分文件,降低了節(jié)點(diǎn)的升級速度和使用壽命,傳輸數(shù)據(jù)量增大也加大了升級失敗的可能。2、通常需要較大的額外FLASH來進(jìn)行新版本固件的重建,增加了節(jié)點(diǎn)的硬件成本,同時(shí)這類方法往往需要分別對額外FLASH和單片機(jī)內(nèi)部的程序存儲(chǔ)器進(jìn)行讀寫,增加了升級過程中的功耗。3、使用差分方式進(jìn)行遠(yuǎn)程升級,一旦升級失敗,進(jìn)行修復(fù)時(shí)通常需要更新整個(gè)固件程序,增加了節(jié)點(diǎn)修復(fù)時(shí)間,降低了節(jié)點(diǎn)的使用壽命。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明的一個(gè)目的是解決上述問題,并提供至少后面將說明的優(yōu)點(diǎn)。

本發(fā)明還有一個(gè)目的是提供一種低功耗傳感器節(jié)點(diǎn)遠(yuǎn)程升級方法,其具有數(shù)據(jù)傳輸量小,升級時(shí)占用額外FLASH小,功耗少的優(yōu)點(diǎn)。

為了實(shí)現(xiàn)根據(jù)本發(fā)明的這些目的和其它優(yōu)點(diǎn),提供了一種傳感器節(jié)點(diǎn)遠(yuǎn)程升級方法,其特征在于,包括:

將應(yīng)用程序分成多個(gè)模塊并安裝至傳感器節(jié)點(diǎn);

當(dāng)需要對應(yīng)用程序升級時(shí),制作每個(gè)模塊的差分升級包并發(fā)送給傳感器節(jié)點(diǎn),并將該差分升級包寫入,完成對應(yīng)用程序的升級;

其中,每個(gè)模塊均提供接口,各模塊之間通過相互調(diào)用接口實(shí)現(xiàn)應(yīng)用程序的功能。

優(yōu)選的是,所述的傳感器節(jié)點(diǎn)遠(yuǎn)程升級方法,將傳感器節(jié)點(diǎn)的存儲(chǔ)空間根據(jù)每個(gè)模塊大小分成多個(gè)獨(dú)立區(qū)域,并指定每個(gè)區(qū)域的位置,將應(yīng)用程序編譯后根據(jù)指定的位置將每個(gè)模塊寫入對應(yīng)的區(qū)域。

優(yōu)選的是,所述的傳感器節(jié)點(diǎn)遠(yuǎn)程升級方法,為每個(gè)模塊之間存在相互調(diào)用關(guān)系的函數(shù)或全局變量建立接口表,獲取該函數(shù)或全局變量的地址,接口表中存放函數(shù)或全局變量的地址,每個(gè)模塊調(diào)用函數(shù)或全局變量時(shí)先通過接口表,再執(zhí)行函數(shù)的功能或訪問全局變量;其中,接口表存放在對應(yīng)模塊的區(qū)域的起始地址處。

優(yōu)選的是,所述的傳感器節(jié)點(diǎn)遠(yuǎn)程升級方法,多個(gè)模塊還包括應(yīng)用描述模塊,所述應(yīng)用描述模塊對應(yīng)的區(qū)域存儲(chǔ)有其它模塊對應(yīng)區(qū)域的起始地址,為每個(gè)其它模塊之間存在相互調(diào)用關(guān)系的函數(shù)或全局變量建立接口表,將接口表固定在對應(yīng)模塊的區(qū)域的起始地址處,接口表中存放函數(shù)或全局變量的地址;在調(diào)用函數(shù)時(shí)先通過應(yīng)用描述模塊中存放的該模塊的起始地址,調(diào)用接口表,通過接口表調(diào)用函數(shù)的功能或訪問全局變量。

優(yōu)選的是,所述的傳感器節(jié)點(diǎn)遠(yuǎn)程升級方法,所述差分升級包的制作包括:將每個(gè)模塊的目標(biāo)版本文件分成多段目標(biāo)版本子文件;

分別計(jì)算每段目標(biāo)版本子文件與每個(gè)模塊的源版本文件的差分信息;

根據(jù)各每段目標(biāo)版本子文件的差分信息,生成相應(yīng)的控制命令,按照預(yù)定格式對差分信息和優(yōu)選的是,控制命令進(jìn)行封裝和壓縮得到所述差分升級包。

優(yōu)選的是,所述的傳感器節(jié)點(diǎn)遠(yuǎn)程升級方法,根據(jù)每段目標(biāo)版本子文件的控制命令,依次對每個(gè)模塊的源版本文件進(jìn)行更新。

優(yōu)選的是,所述的傳感器節(jié)點(diǎn)遠(yuǎn)程升級方法,所述差分信息用于標(biāo)識(shí)每段目標(biāo)版本子文件與每個(gè)模塊的源版本文件之間的匹配區(qū)域或非匹配區(qū)域,當(dāng)每個(gè)模塊的每段目標(biāo)版本子文件與每個(gè)模塊的源版本文件之間為匹配區(qū)域時(shí),生成用來指示數(shù)據(jù)復(fù)制的控制命令;當(dāng)每個(gè)模塊的每段目標(biāo)版本子文件與每個(gè)模塊的源版本文件之間為非匹配區(qū)域時(shí),生成用來指示數(shù)據(jù)替換的控制命令。

優(yōu)選的是,所述的傳感器節(jié)點(diǎn)遠(yuǎn)程升級方法,網(wǎng)關(guān)與網(wǎng)管服務(wù)器通訊連接,多個(gè)傳感器節(jié)點(diǎn)均與網(wǎng)關(guān)通訊連接;升級前指定需要升級應(yīng)用程序的傳感器節(jié)點(diǎn),并將待升級的應(yīng)用程序存儲(chǔ)至網(wǎng)管服務(wù)器并計(jì)算生成差分升級包以及升級命令,網(wǎng)管服務(wù)器將差分升級包以及升級命令發(fā)送給網(wǎng)關(guān),網(wǎng)關(guān)先將升級命令發(fā)送給傳感器節(jié)點(diǎn),傳感器節(jié)點(diǎn)接收到升級命令后向網(wǎng)關(guān)發(fā)送的請求升級命令,網(wǎng)關(guān)發(fā)送的請求升級命令后再將差分升級包發(fā)送給傳感器節(jié)點(diǎn);其中,升級命令包括預(yù)約升級時(shí)間。

優(yōu)選的是,所述的傳感器節(jié)點(diǎn)遠(yuǎn)程升級方法,網(wǎng)關(guān)接收到升級請求命令后還包括檢驗(yàn)網(wǎng)關(guān)是否處于空閑狀態(tài),如果處于空閑狀態(tài)則網(wǎng)關(guān)根據(jù)升級請求命令發(fā)送差分升級包至所述傳感器節(jié)點(diǎn);否則傳感器節(jié)點(diǎn)進(jìn)入休眠時(shí)間,休眠時(shí)間之后再次發(fā)送升級請求命令至網(wǎng)關(guān)。

優(yōu)選的是,所述的傳感器節(jié)點(diǎn)遠(yuǎn)程升級方法,網(wǎng)關(guān)采用xmodem協(xié)議將差分文件升級包發(fā)送給傳感器節(jié)點(diǎn)。

本發(fā)明至少包括以下效果:

1、本發(fā)明的傳感器節(jié)點(diǎn)遠(yuǎn)程升級方法,將待升級的應(yīng)用程序分成多個(gè)模塊,每個(gè)模塊之間的耦合度小,每個(gè)模塊均可以進(jìn)行獨(dú)立升級,這樣在升級時(shí)僅僅接收需要升級模塊的差分升級包,而不需要接收整個(gè)應(yīng)用程序的差分升級包,這樣接收的收據(jù)少,而且占用的額外FLASH小,開銷小。

2、本發(fā)明對在制作差分升級包時(shí),對每塊模塊按照大小分成多段,再對每段對進(jìn)行差分計(jì)算生成相應(yīng)的控制命令,控制命令可以為數(shù)據(jù)復(fù)制的控制命令或用來指示數(shù)據(jù)替換的控制命令,傳感器節(jié)點(diǎn)接收到差分升級包后對其進(jìn)行解析,根據(jù)每組的控制命令將該組對應(yīng)的目標(biāo)版本的數(shù)據(jù)寫入到FLASH中對應(yīng)的位置區(qū)域,然后對下一組數(shù)據(jù)進(jìn)行更新寫入FLASH中對應(yīng)的位置,這種升級的方法可以大大降低傳感器節(jié)點(diǎn)需要的額外存儲(chǔ)空間。

3、本發(fā)明的傳感器節(jié)點(diǎn)遠(yuǎn)程升級方法,在升級時(shí)還可以設(shè)置預(yù)約升級時(shí)間,這樣在當(dāng)前升級的傳感器節(jié)點(diǎn)升級過程中,這樣不影響待升級的傳感器節(jié)點(diǎn)正常工作,降低功耗。

附圖說明

圖1為本明所述的傳感器節(jié)點(diǎn)遠(yuǎn)程升級方法中各模塊之間相互調(diào)用的示意圖;

圖2為差分升級包生成過程示意圖;

圖3為傳感器節(jié)點(diǎn)遠(yuǎn)程系統(tǒng)示意圖;

圖4本明實(shí)施例的傳感器節(jié)點(diǎn)遠(yuǎn)程升級方法的流程圖。

具體實(shí)施方式

下面結(jié)合附圖對本發(fā)明做進(jìn)一步的詳細(xì)說明,以令本領(lǐng)域技術(shù)人員參照說明書文字能夠據(jù)以實(shí)施。

應(yīng)當(dāng)理解,本文所使用的諸如“具有”、“包含”以及“包括”術(shù)語并不排除一個(gè)或多個(gè)其它元件或其組合的存在或添加。

一種傳感器節(jié)點(diǎn)遠(yuǎn)程升級方法,包括:

將應(yīng)用程序分成多個(gè)模塊并安裝至傳感器節(jié)點(diǎn);

當(dāng)需要對應(yīng)用程序升級時(shí),制作每個(gè)模塊的差分升級包并發(fā)送給傳感器節(jié)點(diǎn),并將該差分升級包寫入,完成對應(yīng)用程序的升級;

其中,每個(gè)模塊均提供接口,各模塊之間通過相互調(diào)用接口實(shí)現(xiàn)應(yīng)用程序的功能。

本技術(shù)方案將待升級的應(yīng)用程序按照分成多個(gè)模塊,每個(gè)模塊之間通過接口相互調(diào)用,相互獨(dú)立,這樣每個(gè)模塊均可以進(jìn)行獨(dú)立升級,這樣在升級時(shí)僅僅接收需要升級模塊的差分升級包,而不需要接收整個(gè)應(yīng)用程序的差分升級包,這樣接收的數(shù)據(jù)少,而且占用的額外FLASH小,開銷小。

在另一實(shí)施例中,所述的傳感器節(jié)點(diǎn)遠(yuǎn)程升級方法,將傳感器節(jié)點(diǎn)的存儲(chǔ)空間根據(jù)每個(gè)模塊大小分成多個(gè)獨(dú)立區(qū)域,并指定每個(gè)區(qū)域的位置,將應(yīng)用程序編譯后根據(jù)指定的位置將每個(gè)模塊寫入對應(yīng)的區(qū)域。

完成存儲(chǔ)空間劃分后,通過編譯程序生成對應(yīng)的bin文件,通過分散加載機(jī)制為鏈接器指定各模塊bin文件的區(qū)域,這樣區(qū)域劃分以后內(nèi)部的函數(shù)會(huì)相互調(diào)用,修改功能,這些操作只會(huì)影響本區(qū)域,不影響其他區(qū)域。

在另一實(shí)施例中,所述的傳感器節(jié)點(diǎn)遠(yuǎn)程升級方法,為每個(gè)模塊之間存在相互調(diào)用關(guān)系的函數(shù)或全局變量建立接口表,獲取該函數(shù)或全局變量的地址,接口表中存放函數(shù)或全局變量的地址,每個(gè)模塊調(diào)用函數(shù)或全局變量時(shí)先通過接口表,再執(zhí)行函數(shù)的功能或訪問全局變量;其中,接口表存放在對應(yīng)模塊的區(qū)域的起始地址處。

為每個(gè)模塊之間存在相互調(diào)用關(guān)系的函數(shù)或全局變量建立接口表,并放置在模塊起始處。程序中各個(gè)模塊之間首先訪問應(yīng)用描述區(qū)獲取待訪問模塊的起始地址,也就是該模塊接口表的地址,通過訪問模塊的接口表來進(jìn)行相互之間的函數(shù)調(diào)用,或全局變量訪問,以減小模塊之間的相互關(guān)聯(lián)。具體做法如下:每個(gè)模塊將自己需要暴露給外界的函數(shù)和全局變量的地址放置在一塊結(jié)構(gòu)體常量中作為接口表,并將該結(jié)構(gòu)體常量放置在該模塊的開頭,即接口表的地址就是該模塊的起始地址,如此通過在應(yīng)用描述區(qū)中獲取該模塊的起始地址,可以找到該模塊的接口表。當(dāng)該模塊進(jìn)行了修改,暴露給外部的函數(shù)地址或者全局變量地址可能發(fā)生修改,但是函數(shù)地址存放在接口表中的位置不變,因此其他模塊訪問該模塊的代碼不會(huì)隨之發(fā)生改變,降低了模塊之間的關(guān)聯(lián)。如下為某個(gè)模塊接口表實(shí)現(xiàn)的一個(gè)示例:

訪問該模塊中的一個(gè)函數(shù)時(shí)可以通過如下方式:

ModuleDesc_t*desc=(ModuleDesc_t*)DESC_RO_BASE;//獲取應(yīng)用描述模塊信息Module1_t*tab=(Module1_t*)(desc->ModuleAddrArray[MODULE_1]);//獲取接口表tab->Func1();

本方案為了進(jìn)一步減小每個(gè)模塊的聯(lián)系和耦合度,每個(gè)模塊通過接口表,來調(diào)用存在相互調(diào)用關(guān)系的函數(shù)或全局變量,再執(zhí)行函數(shù)的功能或訪問全局變量,實(shí)際上接口表僅起到“中間人”的作用,接口表固定在模塊的區(qū)域的起始地址處,修改相互調(diào)用的函數(shù)后只會(huì)改變本區(qū)域的模塊,不會(huì)影響到調(diào)用它的其他區(qū)域的模塊,從而切斷模塊之間的連帶升級,達(dá)到減少應(yīng)用程序升級范圍的目的。

在另一實(shí)施例中,多個(gè)模塊還包括應(yīng)用描述模塊,所述應(yīng)用描述模塊對應(yīng)的區(qū)域存儲(chǔ)有其它模塊對應(yīng)區(qū)域的起始地址,為每個(gè)其它模塊之間存在相互調(diào)用關(guān)系的函數(shù)或全局變量建立接口表,將接口表固定在對應(yīng)模塊的區(qū)域的起始地址處,接口表中存放函數(shù)或全局變量的地址;在調(diào)用函數(shù)時(shí)先通過應(yīng)用描述模塊中存放的該模塊的起始地址,調(diào)用接口表,通過接口表調(diào)用函數(shù)的功能或訪問全局變量。

如圖1所示,應(yīng)用描述模塊中存放有含有應(yīng)用程序的版本號(hào),應(yīng)用程序入口,應(yīng)用程序大小,應(yīng)用程序校驗(yàn)值,模塊數(shù)量,指向存放各模塊的起始地址數(shù)組的指針的常量結(jié)構(gòu)體,應(yīng)用描述模塊放置在應(yīng)用程序所占用的存儲(chǔ)區(qū)域的最前端,起始地址為固定值,應(yīng)用描述模塊的頭文件中,聲明有每個(gè)模塊地址在存放各模塊的起始地址數(shù)組中的索引。如此完成編譯后應(yīng)用描述區(qū)中的信息都會(huì)被編譯在一個(gè)固定的位置,每個(gè)模塊的起始地址也會(huì)存放在起始地址數(shù)組的固定元素中,當(dāng)模塊地址發(fā)生變化后,只是起始地址數(shù)組中存放的地址值發(fā)生了變化,其他模塊訪問時(shí)還是去應(yīng)用描述區(qū)中起始地址數(shù)組中的相同位置獲取該模塊的起始地址,減小了模塊之間的耦合度應(yīng)用程序入口,例如當(dāng)模塊1需要調(diào)用模塊2中的函數(shù)2時(shí),首先模塊1需要在應(yīng)用描述模塊的模塊起始地址數(shù)組中根據(jù)模塊2在應(yīng)用描述模塊中的索引找到模塊2的起始地址,也即模塊2的接口表的地址,由于模塊2的接口表結(jié)構(gòu)已知,通過接口表的函數(shù)2的地址再調(diào)用函數(shù)2。如下為應(yīng)用描述模塊實(shí)現(xiàn)的一個(gè)示例:

其中APP_RO_BASE是應(yīng)用程序存儲(chǔ)區(qū)域的起始地址,也是應(yīng)用描述模塊存放的起始地址。

幾種升級中可能出現(xiàn)的情況:

1、任何修改會(huì)導(dǎo)致程序版本更新,應(yīng)用描述模塊都需要進(jìn)行更新,默認(rèn)應(yīng)用描述模塊都要進(jìn)行升級。

2、本區(qū)域內(nèi)增加、刪除、修改功能,該功能與其他區(qū)域無關(guān)聯(lián),沒有調(diào)用關(guān)系發(fā)生變化。這種情況下只是該接口表中存放的地址值可能發(fā)生變化,不會(huì)導(dǎo)致其他模塊變化,該模塊可以獨(dú)立升級。

3、本區(qū)域內(nèi)增加、刪除、修改功能,該功能與其他區(qū)域無關(guān)聯(lián),其他區(qū)域需要調(diào)用該模塊。

如果是刪除功能,則說明其他模塊對該功能不再有需要,其他模塊必然也進(jìn)行了對應(yīng)修改,則相關(guān)的模塊需要進(jìn)行升級。

如果是修改功能,其他模塊不受影響。

如果是添加功能,則在接口表的最后追加功能對應(yīng)的函數(shù)/變量地址,原先調(diào)用該模塊中其他函數(shù)/變量的模塊不受影響,對應(yīng)的需要使用到新增加功能的模塊需要一起升級。

4、實(shí)現(xiàn)新的模塊,調(diào)用了新模塊中函數(shù)/變量的模塊需要進(jìn)行升級。

5、模塊整體發(fā)生了移動(dòng)、刪除、增加。

模塊發(fā)生了移動(dòng),如原先空間不足,需要移動(dòng)到另一個(gè)新分配的空間中。應(yīng)用描述模塊中存放的模塊地址會(huì)發(fā)生變化,但是如果模塊之間的調(diào)用關(guān)系為發(fā)生變化,則不會(huì)影響其他模塊,只有調(diào)用關(guān)系發(fā)生改變的模塊需要升級,類似2,3。

模塊被刪除、則調(diào)用了該模塊內(nèi)函數(shù)的模塊必然發(fā)生了修改,需要一起升級。

增加新的模塊,在應(yīng)用描述模塊的最后追加該模塊的地址,只有調(diào)用了新模塊中函數(shù)/變量的模塊需要進(jìn)行升級。

在另一實(shí)施例中,所述的傳感器節(jié)點(diǎn)遠(yuǎn)程升級方法,所述差分升級包的制作包括:將每個(gè)模塊的目標(biāo)版本文件分成多段目標(biāo)版本子文件;

分別計(jì)算每段目標(biāo)版本子文件與每個(gè)模塊的源版本文件的差分信息;

根據(jù)各每段目標(biāo)版本子文件的差分信息,生成相應(yīng)的控制命令,按照預(yù)定格式對差分信息和控制命令進(jìn)行封裝和壓縮得到所述差分升級包。

所述的傳感器節(jié)點(diǎn)遠(yuǎn)程升級方法,根據(jù)每段目標(biāo)版本子文件的控制命令,依次對每個(gè)模塊的源版本文件進(jìn)行更新。

所述的傳感器節(jié)點(diǎn)遠(yuǎn)程升級方法,所述差分信息用于標(biāo)識(shí)每段目標(biāo)版本子文件與每個(gè)模塊的源版本文件之間的匹配區(qū)域或非匹配區(qū)域,當(dāng)每個(gè)模塊的每段目標(biāo)版本子文件與每個(gè)模塊的源版本文件之間為匹配區(qū)域時(shí),生成用來指示數(shù)據(jù)復(fù)制的控制命令;當(dāng)每個(gè)模塊的每段目標(biāo)版本子文件與每個(gè)模塊的源版本文件之間為非匹配區(qū)域時(shí),生成用來指示數(shù)據(jù)替換的控制命令。

在本技術(shù)方案中,獲取需要升級的模塊源版本和目標(biāo)版本程序bin文件,如果待升級模塊的存儲(chǔ)區(qū)域發(fā)生變化,如移動(dòng)到另一區(qū)域,則將該模塊目標(biāo)版本bin文件本身作為差分升級包;如果模塊存儲(chǔ)區(qū)域不變,則獲取傳感器節(jié)點(diǎn)設(shè)置在RAM中構(gòu)建程序所用的緩存大小,將每個(gè)模塊的目標(biāo)版本bin文件按照緩存大小分為多段數(shù)據(jù),如果目標(biāo)版本bin文件大小小于緩存大小則必然不需要分段;使用字節(jié)級差分計(jì)算算法,本技術(shù)使用的是MDCD算法,依次計(jì)算每段數(shù)據(jù)與源版本bin文件之間的差分信息,完成一段數(shù)據(jù)的差分計(jì)算后,使用該段數(shù)據(jù)覆蓋源版本bin文件對應(yīng)位置的數(shù)據(jù),然后進(jìn)行下一段數(shù)據(jù)的差分計(jì)算,得到整個(gè)目標(biāo)版本bin文件與源版本bin文件之間的差分信息,生成相應(yīng)的控制命令,如復(fù)制命令,替換命令等,按照預(yù)定格式對差分信息和控制命令進(jìn)行封裝和壓縮得到所述差分升級包。如圖2所示,進(jìn)行計(jì)算的每段數(shù)據(jù)大小等于節(jié)點(diǎn)中緩存大小,每段數(shù)據(jù)均與部分修改的源版本bin文件進(jìn)行差分計(jì)算。由于每次進(jìn)行差分計(jì)算的目標(biāo)版本bin文件數(shù)據(jù)段大小都不超過節(jié)點(diǎn)中緩存大小,因此傳感器節(jié)點(diǎn)的bootloader可以在RAM中設(shè)置的緩存中根據(jù)差分升級包中的控制命令構(gòu)建模塊的每段數(shù)據(jù),完成構(gòu)建后寫入FLASH的對應(yīng)區(qū)域,進(jìn)行差分計(jì)算時(shí)每完成每段數(shù)據(jù)的計(jì)算后,使用該段數(shù)據(jù)覆蓋源版本bin文件的對應(yīng)位置的數(shù)據(jù),使得該方式可以在存放該模塊程序的FLASH區(qū)域進(jìn)行原地構(gòu)建程序,避免了使用額外的FLASH作為緩存構(gòu)建新版本程序,大大減少了對FLASH資源的消耗。

在另一種實(shí)施例中,所述的傳感器節(jié)點(diǎn)遠(yuǎn)程升級方法,網(wǎng)關(guān)與網(wǎng)管服務(wù)器通訊連接,多個(gè)傳感器節(jié)點(diǎn)均與網(wǎng)關(guān)通訊連接;升級前指定需要升級應(yīng)用程序的傳感器節(jié)點(diǎn),并將待升級的應(yīng)用程序存儲(chǔ)至網(wǎng)管服務(wù)器并計(jì)算生成差分升級包以及升級命令,網(wǎng)管服務(wù)器將差分升級包以及升級命令發(fā)送給網(wǎng)關(guān),網(wǎng)關(guān)先將升級命令發(fā)送給傳感器節(jié)點(diǎn),傳感器節(jié)點(diǎn)接收到升級命令后向網(wǎng)關(guān)發(fā)送的請求升級命令,網(wǎng)關(guān)發(fā)送的請求升級命令后再將差分升級包發(fā)送給傳感器節(jié)點(diǎn);其中,升級命令包括預(yù)約升級時(shí)間。

在另一種實(shí)施例中,所述的傳感器節(jié)點(diǎn)遠(yuǎn)程升級方法,網(wǎng)關(guān)接收到升級請求命令后還包括檢驗(yàn)網(wǎng)關(guān)是否處于空閑狀態(tài),如果處于空閑狀態(tài)則網(wǎng)關(guān)根據(jù)升級請求命令發(fā)送差分升級包至所述傳感器節(jié)點(diǎn);否則傳感器節(jié)點(diǎn)進(jìn)入休眠時(shí)間,休眠時(shí)間之后再次發(fā)送升級請求命令至網(wǎng)關(guān),所述休眠時(shí)間由差分文件升級包數(shù)據(jù)大小除以傳輸速率得到。

如圖3、圖4所示,本發(fā)明的還包括傳感器節(jié)點(diǎn)遠(yuǎn)程系統(tǒng):包括,網(wǎng)關(guān)、網(wǎng)管服務(wù)器,多個(gè)傳感器節(jié)點(diǎn),網(wǎng)關(guān)與網(wǎng)管服務(wù)器通訊連接,每個(gè)傳感器節(jié)點(diǎn)均與網(wǎng)關(guān)通訊連接;其中應(yīng)用程序的升級是指傳感器節(jié)點(diǎn)中MCU的應(yīng)用程序升級,并需要升級時(shí),指定待升級的傳感器節(jié)點(diǎn),同時(shí)將需要升級應(yīng)用程序上傳至網(wǎng)管服務(wù)器并由網(wǎng)管服務(wù)器計(jì)算生成每個(gè)模塊的差分升級包以及升級命令,傳感器節(jié)點(diǎn)中MCU的還包括bootloader區(qū);網(wǎng)管服務(wù)器將差分升級包以及升級命令發(fā)送至網(wǎng)關(guān),網(wǎng)關(guān)接收到差分升級包以及升級命令之后,先將升級命令發(fā)送至傳感器節(jié)點(diǎn),傳感器節(jié)點(diǎn)接收到升級命令后進(jìn)入bootloader區(qū),并等待升級傳感器節(jié)點(diǎn)發(fā)出請求升級命令請求開始一次升級,當(dāng)網(wǎng)關(guān)接收到待升級傳感器節(jié)點(diǎn)發(fā)出的升級請求時(shí),如果網(wǎng)關(guān)處于可以進(jìn)行升級的狀態(tài)即處于空閑狀態(tài),則發(fā)送待升級模塊的相關(guān)信息如:控制命令,模塊起始地址,長度,crc32校驗(yàn)值,給傳感器節(jié)點(diǎn),并進(jìn)入xmodem模式將差分升級包發(fā)送至對應(yīng)模塊完成升級。當(dāng)完成一次升級包傳輸后,網(wǎng)關(guān)等待下一個(gè)傳感器節(jié)點(diǎn)的升級請求;在一個(gè)傳感器節(jié)點(diǎn)完成升級之前,如果網(wǎng)關(guān)接收到其他傳感器節(jié)點(diǎn)的升級請求,則計(jì)算升級大致剩余的時(shí)間,發(fā)送給傳感器節(jié)點(diǎn)令其休眠,休眠時(shí)間之后再次發(fā)送升級請求命令至網(wǎng)關(guān),本實(shí)施例中所述休眠時(shí)間由差分文件升級包數(shù)據(jù)大小除以傳輸速率得到。升級命令包括預(yù)約升級時(shí)間,即升級命令到達(dá)傳感器節(jié)點(diǎn)之后到傳感器節(jié)點(diǎn)向網(wǎng)關(guān)發(fā)送請求升級命令之間等待的時(shí)間,這樣不影響網(wǎng)關(guān)對當(dāng)前需要升級的傳感器節(jié)點(diǎn)的正常工作,降低了功耗。

在另一種實(shí)施例中所述的傳感器節(jié)點(diǎn)遠(yuǎn)程升級方法,網(wǎng)關(guān)采用xmodem協(xié)議將差分文件升級包發(fā)送給傳感器節(jié)點(diǎn)。

傳感器節(jié)點(diǎn)使用預(yù)先固化在節(jié)點(diǎn)中的bootloader區(qū)接收差分升級包,并解析差分升級包,完成對模塊的升級。節(jié)點(diǎn)使用xmodem協(xié)議接收差分升級包,需要注意這里的xmodem數(shù)據(jù)包是打包在節(jié)點(diǎn)運(yùn)行的網(wǎng)絡(luò)協(xié)議中的。如果待升級模塊存放的區(qū)域發(fā)生了改變,則每接收到一個(gè)xmodem數(shù)據(jù)包后,將數(shù)據(jù)包中的內(nèi)容依次寫入目標(biāo)區(qū)域的對應(yīng)位置中;如果待升級模塊存放的區(qū)域沒有發(fā)生變化,則認(rèn)為xmodem數(shù)據(jù)包中存放的是控制命令,每接收到一個(gè)xmodem數(shù)據(jù)包后bootloader解析xmodem數(shù)據(jù)包中的控制命令后按照命令在RAM中設(shè)置的緩存中構(gòu)建目標(biāo)程序,每當(dāng)緩存填滿或解析并執(zhí)行完最后一個(gè)xmodem數(shù)據(jù)包中的控制命令后,將緩存中的數(shù)據(jù)寫入目標(biāo)區(qū)域的對應(yīng)位置中,如此完成一個(gè)模塊的更新。如此,bootloader進(jìn)行升級時(shí)只存儲(chǔ)了一個(gè)xmodem數(shù)據(jù)包的內(nèi)容,不需要接收整個(gè)差分升級程序再進(jìn)行處理,同時(shí)程序構(gòu)建在RAM中完成,不需要額外的FLASH空間,大大減少了對FLASH資源的消耗。

本發(fā)明的遠(yuǎn)程升級方法還可以在傳感器節(jié)點(diǎn)收到升級命令后,將傳感器節(jié)點(diǎn)升級標(biāo)志寫入EERPOM并將升級標(biāo)志標(biāo)記為待升級。傳感器節(jié)點(diǎn)在向網(wǎng)關(guān)發(fā)出請求升級命令之前檢驗(yàn)升級標(biāo)志是否為待升級,如果是待升級則發(fā)出請求升級命令;升級完成后清除待升級標(biāo)志。

盡管本發(fā)明的實(shí)施方案已公開如上,但其并不僅僅限于說明書和實(shí)施方式中所列運(yùn)用,它完全可以被適用于各種適合本發(fā)明的領(lǐng)域,對于熟悉本領(lǐng)域的人員而言,可容易地實(shí)現(xiàn)另外的修改,因此在不背離權(quán)利要求及等同范圍所限定的一般概念下,本發(fā)明并不限于特定的細(xì)節(jié)和這里示出與描述的圖例。

當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會(huì)獲得點(diǎn)贊!
1