徐婷婷,王宜懷,張 蓉,葉柯陽
(蘇州大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,江蘇 蘇州 215006)
由于3D打印[1]的應(yīng)用場(chǎng)景復(fù)雜,用戶的需求不斷增長(zhǎng),以及程序缺陷等問題的存在,需要及時(shí)對(duì)打印設(shè)備中的嵌入式應(yīng)用程序更新維護(hù),一般采取由技術(shù)人員到現(xiàn)場(chǎng)調(diào)試或回收設(shè)備后再更新的方式,但3D打印設(shè)備的體型較大,分量較重且其分布分散,導(dǎo)致其維護(hù)的工作量大、維護(hù)成本高,對(duì)維護(hù)人員的專業(yè)性要求也高、費(fèi)時(shí)費(fèi)力。為了保障3D打印機(jī)工作的穩(wěn)定性以及維持較好的打印性能[2],對(duì)設(shè)備中的嵌入式應(yīng)用程序采取遠(yuǎn)程更新的方式已成為當(dāng)今的發(fā)展趨勢(shì)。窄帶物聯(lián)網(wǎng)(narrow band internet of things,NB-IoT)是3GPP標(biāo)準(zhǔn)定義的一種基于蜂窩網(wǎng)絡(luò)的低功耗廣域網(wǎng)通信技術(shù)[3],具備接入數(shù)量多、成本低、覆蓋范圍廣、穿透能力強(qiáng)等優(yōu)勢(shì),在智能抄表、遠(yuǎn)程測(cè)控、環(huán)境監(jiān)測(cè)等方面得到廣泛應(yīng)用。
本文以汽車電子芯片S9KEAZ128AMLX(簡(jiǎn)稱KEAZ128)結(jié)合ME3616通信模組為硬件平臺(tái),設(shè)計(jì)并實(shí)現(xiàn)了基于NB-IoT通信技術(shù)的面曝光3D打印機(jī)遠(yuǎn)程更新系統(tǒng)。本系統(tǒng)依據(jù)構(gòu)件化原則設(shè)計(jì)程序,使系統(tǒng)程序具有較好的封裝性、可復(fù)用性、可移植性以及可維護(hù)性。
本文基于NB-IoT通信技術(shù)設(shè)計(jì)的遠(yuǎn)程更新系統(tǒng)的結(jié)構(gòu)如圖1所示,其中基站、NB-IoT云服務(wù)器組成了信息郵局,由運(yùn)營(yíng)商建立并維護(hù),起到信息傳送的紐帶作用;終端主要實(shí)現(xiàn)了3D打印功能,同時(shí)借助NB-IoT技術(shù)獲取服務(wù)器中用于更新應(yīng)用程序的機(jī)器碼和參數(shù),以及上傳打印設(shè)備的狀態(tài)信息;遠(yuǎn)程管理端使用WebSocket協(xié)議與云服務(wù)器相連,獲取并顯示終端3D打印設(shè)備的主要信息,也可以對(duì)終端打印設(shè)備的參數(shù)信息進(jìn)行配置。終端與遠(yuǎn)程管理端組成了遠(yuǎn)程更新系統(tǒng)的核心部分。
圖1 遠(yuǎn)程更新系統(tǒng)結(jié)構(gòu)
終端硬件選取系統(tǒng)時(shí)鐘頻率為48 MHz的汽車電子芯片KEAZ128,該芯片基于ARM Cortex-M0+內(nèi)核,擁有128 KB大小的Flash區(qū)域和16 KB的RAM區(qū)域,包含模擬、定時(shí)、通信和控制等模塊[4]。NB-IoT通信模組選取ME3616,它支持串口AT指令,TCP/UDP、MQTT等網(wǎng)絡(luò)協(xié)議。將ME3616通信模組的UART模塊與KEAZ128芯片UART0模塊經(jīng)電路轉(zhuǎn)換后相連接,實(shí)現(xiàn)數(shù)據(jù)傳輸,并將eSIM卡作為固定部件接入到通信模組中,實(shí)現(xiàn)3D打印機(jī)中集成NB-IoT通信模組,為遠(yuǎn)程更新做好硬件準(zhǔn)備。
軟件部分主要包含了Flash扇區(qū)分配、BIOS程序設(shè)計(jì)、應(yīng)用程序設(shè)計(jì)3個(gè)部分。
為了實(shí)現(xiàn)遠(yuǎn)程更新的功能,需要將終端節(jié)點(diǎn)的程序劃分成兩個(gè)部分:負(fù)責(zé)更新應(yīng)用程序的BIOS程序和控制設(shè)備實(shí)現(xiàn)3D打印功能的應(yīng)用程序。在Flash空間中進(jìn)行分區(qū)存儲(chǔ)BIOS程序和應(yīng)用程序是實(shí)現(xiàn)遠(yuǎn)程更新的第一步,在此基礎(chǔ)上還需設(shè)計(jì)駐留驅(qū)動(dòng)構(gòu)件以及存儲(chǔ)更新代碼的方案。
文獻(xiàn)[5]結(jié)合GPRS、ZigBee技術(shù)實(shí)現(xiàn)遠(yuǎn)程更新系統(tǒng),借助SD卡暫存新機(jī)器碼,其硬件成本較高、可移植性較差;為暫存新機(jī)器碼文獻(xiàn)[6]從Flash中劃分了一塊與應(yīng)用程序大小相同的暫存區(qū),導(dǎo)致應(yīng)用程序的規(guī)模受到了限制。針對(duì)以上不足,對(duì)Flash分區(qū)方案進(jìn)行優(yōu)化。如圖2所示,將Flash區(qū)域劃分為BIOS程序區(qū)、應(yīng)用程序區(qū)和設(shè)備配置信息區(qū)3個(gè)部分。
圖2 KEAZ128的Flash劃分
在駐留驅(qū)動(dòng)構(gòu)件函數(shù)方面,本文采用請(qǐng)求管理調(diào)用(supervisor call,SVC)機(jī)制取代劃分專用的Flash區(qū)域的方式,將驅(qū)動(dòng)構(gòu)件駐留在BIOS程序區(qū)中,通過SVC機(jī)制向應(yīng)用程序提供驅(qū)動(dòng)接口;存儲(chǔ)更新代碼方面,不采用劃分暫存區(qū)的方式,而是與應(yīng)用程序復(fù)用一塊Flash區(qū)域,從而擴(kuò)大應(yīng)用程序規(guī)模。
引導(dǎo)加載程序(Bootloader)[7]是指在啟動(dòng)內(nèi)核或應(yīng)用程序之前運(yùn)行的程序,其主要目的是為應(yīng)用程序準(zhǔn)備好運(yùn)行的環(huán)境。本文基于Bootloader程序,設(shè)計(jì)了嵌入式版基本輸入輸出系統(tǒng)(basic input and output system,BIOS)程序。BIOS程序除了擁有引導(dǎo)加載程序的基本功能,還具備對(duì)應(yīng)用程序進(jìn)行遠(yuǎn)程更新、為應(yīng)用程序提供底層驅(qū)動(dòng)構(gòu)件函數(shù)接口的功能。BIOS程序涉及的關(guān)鍵技術(shù)包括:中斷向量表重定向、驅(qū)動(dòng)構(gòu)件駐留、程序跳轉(zhuǎn)以及遠(yuǎn)程更新。
2.2.1 中斷向量表重定向
中斷向量表是一段用來連續(xù)存儲(chǔ)中斷服務(wù)程序(ISR)起始地址的區(qū)域,一般存放在Flash區(qū)域中。由于BIOS程序和應(yīng)用程序都在運(yùn)行、維護(hù)各自的中斷向量表,當(dāng)運(yùn)行3D打印的應(yīng)用程序時(shí),BIOS程序?qū)o法響應(yīng)中斷,導(dǎo)致很難實(shí)現(xiàn)遠(yuǎn)程更新的功能。因此BIOS程序和應(yīng)用程序需要共享一張中斷向量表,即將兩個(gè)程序的中斷服務(wù)程序的地址記錄在一張中斷向量表中。由于Flash以扇區(qū)為單位進(jìn)行擦除操作,不易對(duì)向量表中的部分表項(xiàng)進(jìn)行修改,而修改RAM區(qū)域中的數(shù)據(jù)卻無此操作要求。因此在本文中先將BIOS的中斷向量表拷貝到RAM區(qū),將之作為兩個(gè)程序的共享表,之后對(duì)中斷向量表進(jìn)行重定向的操作。在ARM Cortex-M0+處理器中可以將RAM區(qū)中共享的中斷向量表的首地址賦值給向量表偏移寄存器(vector table offset regi-ster,VTOR),從而實(shí)現(xiàn)對(duì)中斷向量表的共享和重定向。
2.2.2 驅(qū)動(dòng)構(gòu)件駐留
BIOS程序駐留應(yīng)用程序常用的驅(qū)動(dòng)構(gòu)件可以簡(jiǎn)化應(yīng)用程序的開發(fā),在遠(yuǎn)程更新應(yīng)用程序時(shí),基礎(chǔ)驅(qū)動(dòng)構(gòu)件程序也無須更新,進(jìn)而減少通信的傳輸量。本文在BIOS程序中駐留驅(qū)動(dòng)構(gòu)件并借助SVC機(jī)制向3D打印應(yīng)用程序開放驅(qū)動(dòng)構(gòu)件接口。SVC機(jī)制是使任務(wù)能夠觸發(fā)特定OS異常的軟件中斷機(jī)制,通過該指令可以觸發(fā)SVC中斷,并執(zhí)行對(duì)應(yīng)的中斷服務(wù)程序[8]。SVC指令包含一個(gè)8位立即數(shù),其中0號(hào)表示系統(tǒng)指令,本文中使用的是1號(hào)指令即“svc 1”,用于返回駐留在BIOS程序中的驅(qū)動(dòng)構(gòu)件函數(shù)的接口。
2.2.3 程序跳轉(zhuǎn)
上電后首先運(yùn)行的是BIOS程序,為應(yīng)用程序準(zhǔn)備好運(yùn)行環(huán)境,之后再跳轉(zhuǎn)到指定的3D打印應(yīng)用程序。通過獲取應(yīng)用程序的Reset_Handler復(fù)位向量(即應(yīng)用程序的中斷向量表的第二項(xiàng))的地址,并賦值給程序計(jì)數(shù)器(program counter,PC),即可實(shí)現(xiàn)由BIOS程序跳轉(zhuǎn)至應(yīng)用程序的功能,該功能使用匯編語言實(shí)現(xiàn),具體代碼如下:
void user_reset(volatile uint_32 addr){
__asm(" push{r0, r1, lr};");
//(1)給棧指針SP寄存器賦值
__asm(" mov r1,r0;"); //r0中為C語言默認(rèn)的第一個(gè)參數(shù)
__asm(" ldr r1,[r1];"); //取出USER程序SP的值
__asm(" mov sp,r1;"); //賦給CPU內(nèi)部SP寄存器
//(2)轉(zhuǎn)至USER的Reset_Handler執(zhí)行
__asm(" ldr r0,[r0,#4];"); //r0←User的Reset_Handler地址
__asm(" blx r0;"); //跳轉(zhuǎn)至USER程序Reset_Handler函數(shù)
//(3)結(jié)尾
__asm(" pop {r0, r1, pc};");
}
2.2.4 遠(yuǎn)程更新
在遠(yuǎn)程通信方面,選用KEA128芯片的串口模塊(UART0)使用AT指令與ME3616模組進(jìn)行交互,模組再與服務(wù)器進(jìn)行通信獲得數(shù)據(jù)。其中將芯片與通信模組交互有關(guān)的一系列函數(shù)封裝成uecom構(gòu)件,該構(gòu)件主要包含控制通信模塊供電狀態(tài)、初始化接口、獲取通信模組的IMSI號(hào)、與基站建立連接、與服務(wù)器建立TCP連接、通過TCP通道發(fā)送數(shù)據(jù)、從串口中斷獲取服務(wù)器發(fā)來的數(shù)據(jù)等函數(shù),終端與服務(wù)器的通信步驟如圖3(a)所示。
圖3 遠(yuǎn)程更新判斷
終端節(jié)點(diǎn)發(fā)起遠(yuǎn)程更新的請(qǐng)求,服務(wù)器提供相應(yīng)服務(wù),因此需要在終端程序中判斷是否需要遠(yuǎn)程更新的操作,該判斷應(yīng)該由BIOS程序執(zhí)行,具體流程如圖3(b)所示,其中可以依據(jù)Flash扇區(qū)的前4個(gè)字節(jié)判定是否存在應(yīng)用程序,它存放的是堆棧指針(stack pointer,SP),若存在應(yīng)用程序,該指針應(yīng)該指向棧頂(KEAZ128為0x20003000),若不存在應(yīng)用程序時(shí),該指針的值一般為0xffffffff。在進(jìn)行程序更新時(shí),為避免出現(xiàn)更新不完整的情況,將最后寫入Flash區(qū)的前4個(gè)字節(jié)。
終端節(jié)點(diǎn)提供了2種存儲(chǔ)新代碼的方式:①當(dāng)Flash區(qū)域空間足夠同時(shí)容納新、舊代碼時(shí),在應(yīng)用程序后的空閑的扇區(qū)暫存新代碼;②當(dāng)Flash區(qū)域空間不足時(shí),擦除之前應(yīng)用程序的代碼后,存儲(chǔ)新代碼。
應(yīng)用程序存儲(chǔ)在BIOS程序之后的扇區(qū),主要用于實(shí)現(xiàn)3D打印功能,并每隔一段時(shí)間就將終端設(shè)備的主要信息通過NB-IoT上傳至遠(yuǎn)程管理端。當(dāng)應(yīng)用程序需要更新時(shí),可通過BIOS程序向應(yīng)用程序的Flash區(qū)寫入新機(jī)器碼實(shí)現(xiàn)。面曝光3D打印機(jī)的工作流程如圖4所示,先將模型切分得到切片位圖,再使用投影設(shè)備將切片位圖投射到裝有液態(tài)光敏樹脂的液槽中,利用紫外線照射使樹脂固化成膜并附著在成型臺(tái)面上,最后逐層累積固化膜從而打印出模型實(shí)體[9]。
圖4 3D打印流程
應(yīng)用程序使用KEAZ128芯片的UART、PWM、UART、KBI、GPIO等外設(shè)資源,實(shí)現(xiàn)對(duì)設(shè)備信息的感知以及對(duì)執(zhí)行機(jī)構(gòu)的控制,通過UART串口接收上位機(jī)發(fā)送的指令以及發(fā)送反饋信息至上位機(jī),調(diào)整PWM的頻率可以有效控制電機(jī)運(yùn)動(dòng)的速度,使用KBI捕捉限位開關(guān)的狀態(tài),當(dāng)電機(jī)運(yùn)行至限位開關(guān)處則立即停止電機(jī),利用GPIO控制紫外線燈的亮暗從而有效控制曝光的時(shí)長(zhǎng),進(jìn)而機(jī)器可以根據(jù)打印流程完成3D打印任務(wù)。
3D打印的遠(yuǎn)程管理軟件是指用戶能對(duì)終端設(shè)備中的嵌入式應(yīng)用程序進(jìn)行遠(yuǎn)程更新操作的交互軟件,包含解析機(jī)器碼文件(.hex文件)以及設(shè)計(jì)更新方案。
.hex(Intel HEX)是一種可以直接燒錄到單片機(jī)中的機(jī)器碼文件,使用GCC編譯器可以將C程序、匯編程序編譯成.hex文件。該文件中的每一行對(duì)應(yīng)一條機(jī)器碼記錄[10],共有6種類型的記錄,每條記錄由6個(gè)字段組成,字段的具體含義見表1。
表1 .hex文件記錄的格式及語義分析
寫入機(jī)器碼時(shí),可以通過擴(kuò)展段地址、擴(kuò)展線性地址類型的記錄輔助計(jì)算出數(shù)據(jù)段在Flash中的地址,BIOS程序再將數(shù)據(jù)記錄中的數(shù)據(jù)段寫入指定位置。以記錄為單位解析.hex文件,提取記錄類型為“00”的數(shù)據(jù)記錄的數(shù)據(jù)長(zhǎng)度、數(shù)據(jù)內(nèi)容,以及通過偏移量與當(dāng)前的擴(kuò)展地址(由“02”和“04”記錄類型改變)相加獲得該條數(shù)據(jù)的存儲(chǔ)位置,最后將得到數(shù)據(jù)長(zhǎng)度、記錄類型、存儲(chǔ)地址、數(shù)據(jù)內(nèi)容以及校驗(yàn)和組成一個(gè)結(jié)構(gòu)體存入鏈表中,.hex文件提取的具體流程如圖5所示。
圖5 .hex文件解析流程
遠(yuǎn)程管理端解析機(jī)器碼文件后,借助NB-IoT技術(shù)將機(jī)器碼和控制命令發(fā)送給終端設(shè)備。為保證數(shù)據(jù)的完整性和可靠性,本文設(shè)計(jì)了通信幀格式以及5種命令幀:開始幀、復(fù)制幀、機(jī)器碼數(shù)據(jù)幀、檢查幀、更新命令幀。
通信幀格式見表2,包含7個(gè)字段:幀頭、長(zhǎng)度、幀序、命令、數(shù)據(jù)、校驗(yàn)、幀尾,其中校驗(yàn)碼使用的是16位CRC校驗(yàn),生成多項(xiàng)式為G(X)=X16+X15+X2+1。
表2 通信幀格式
開始幀:命令字段為“0x00”,該幀主要包含了通信的總幀數(shù)、新機(jī)器碼占用的Flash扇區(qū)數(shù)、程序版本信息,用于通知終端節(jié)點(diǎn)為更新操作做好準(zhǔn)備工作。
復(fù)制幀:命令字段為“0x01”,包括復(fù)制的次數(shù)、復(fù)制字符串的長(zhǎng)度、復(fù)制操作在Flash區(qū)域的源地址以及目標(biāo)地址。根據(jù)復(fù)制幀攜帶的信息從舊程序拷貝機(jī)器碼,采用增量式更新方式,減少需要傳輸?shù)拇a量,僅當(dāng)遠(yuǎn)程管理端保存了舊程序且終端節(jié)點(diǎn)剩余的扇區(qū)足夠存儲(chǔ)新程序時(shí)才能采用該方式。
機(jī)器碼數(shù)據(jù)幀:命令字段為“0x02”,該幀用于傳輸機(jī)器碼段數(shù),每段機(jī)器碼的存儲(chǔ)地址、長(zhǎng)度、機(jī)器碼數(shù)據(jù),終端節(jié)點(diǎn)收到該命令幀后將機(jī)器碼存放到指定的位置。
檢查幀:命令字段為“0x03”,用于檢查在更新過程中,終端節(jié)點(diǎn)是否丟幀以及所丟幀的幀號(hào),遠(yuǎn)程控制端將對(duì)丟幀情況進(jìn)行補(bǔ)發(fā),從而提高遠(yuǎn)程更新的成功率。
更新命令幀:命令字段為“0x04”,通知終端節(jié)點(diǎn)更新機(jī)器碼并反饋更新結(jié)果。
系統(tǒng)中終端設(shè)備、服務(wù)器端以及遠(yuǎn)程管理端的通信流程如圖6所示。終端打印設(shè)備將信息傳遞給服務(wù)器,服務(wù)器再將數(shù)據(jù)傳輸給遠(yuǎn)程管理端的程序,該過程為數(shù)據(jù)上行;遠(yuǎn)程管理端通過服務(wù)器將配置信息傳輸給終端打印設(shè)備為數(shù)據(jù)下行的過程,整個(gè)過程將服務(wù)器端維護(hù)的上行表與下行表作為中轉(zhuǎn)站。終端設(shè)備通過通信模組與服務(wù)器成功建立TCP連接后,便可向服務(wù)器端發(fā)送設(shè)備的狀態(tài)信息以及請(qǐng)求遠(yuǎn)程更新。遠(yuǎn)程管理程序與服務(wù)器使用WebSocket協(xié)議成功建立連接后可獲取設(shè)備狀態(tài),以及修改終端配置參數(shù),修改的信息將會(huì)保存在下行表中,將在終端設(shè)備與服務(wù)器再一次成功連接后發(fā)送給終端設(shè)備,并對(duì)終端信息進(jìn)行更新。
圖6 通信流程
本實(shí)驗(yàn)終端程序在結(jié)合了ME3616通信模組的KEAZ128芯片上進(jìn)行,并使用Visual Studio 2013平臺(tái)進(jìn)行遠(yuǎn)程控制端程序的開發(fā),更新的界面如圖7所示。在應(yīng)用程序中新增傳感器信息采集等任務(wù),得到大小不同的機(jī)器碼文件,并以此進(jìn)行遠(yuǎn)程更新實(shí)驗(yàn),其中方案A是將存儲(chǔ)完BIOS程序之后的95 KB的Flash區(qū)等分為兩塊,分別用作應(yīng)用程序區(qū)和新機(jī)器碼暫存區(qū),上位機(jī)發(fā)送全部的機(jī)器碼給終端,終端設(shè)備將接收到機(jī)器碼存儲(chǔ)在新機(jī)器碼暫存區(qū);方案B為本文方案,應(yīng)用程序與新代碼暫存區(qū)復(fù)用一塊Flash區(qū),可用大小為95 KB,當(dāng)Flash區(qū)能夠同時(shí)容納新舊機(jī)器碼時(shí),優(yōu)先采用比較增量更新的方式以減少代碼傳輸量,F(xiàn)lash區(qū)的大小不足以存儲(chǔ)新舊機(jī)器碼時(shí),新的機(jī)器碼將直接覆蓋終端設(shè)備中的舊機(jī)器碼。
圖7 遠(yuǎn)程管理端更新界面
首先分別采用方案A與方案B對(duì)3個(gè)不同大小的機(jī)器碼文件進(jìn)行40次遠(yuǎn)程更新實(shí)驗(yàn),對(duì)比兩種方案的更新耗時(shí)以及成功率,結(jié)果見表3,可以看出當(dāng)Flash區(qū)域能夠同時(shí)容納新舊機(jī)器碼時(shí),方案B所需傳輸?shù)臄?shù)據(jù)量較少,更新耗時(shí)不到方案A的一半。當(dāng)機(jī)器碼有效字節(jié)數(shù)為52.3 KB時(shí),超出了方案A可容納的最大尺寸導(dǎo)致更新失敗,而方案B能夠完成更新操作,且更新成功率可以達(dá)到95%。
表3 方案A與方案B實(shí)驗(yàn)結(jié)果對(duì)比
其次采用方案B分別對(duì)3個(gè)不同大小的.hex文件進(jìn)行循環(huán)100次的遠(yuǎn)程更新操作測(cè)試,計(jì)算更新過程中的丟幀率以及平均耗時(shí)。從表4可知本文方案的丟幀率低于5%,且輔之以檢查幀,可以對(duì)丟掉的幀進(jìn)行重傳,從而可以保證更新的成功率。平均每幀的下發(fā)、處理、接收時(shí)間在2.5 s左右,更新的效率較高。
表4 采用方案B更新測(cè)試
由實(shí)驗(yàn)結(jié)果可知,在終端節(jié)點(diǎn)能夠暫存機(jī)器碼且在遠(yuǎn)程管理端也保存了舊版本的機(jī)器碼的條件下,采用比較增量
更新的方案,相較于傳輸全部的機(jī)器碼方案,能夠有效減小網(wǎng)絡(luò)開銷、大大縮短了更新時(shí)間;當(dāng)應(yīng)用程序規(guī)模較大時(shí),若采取等分存儲(chǔ)完BIOS程序后的Flash區(qū)域的方案,由于暫存區(qū)無法容納新代碼導(dǎo)致無法更新,而采用應(yīng)用程序與更新代碼共用一塊Flash區(qū)域的方法能夠有效擴(kuò)大程序規(guī)模,實(shí)驗(yàn)結(jié)果表明,本文設(shè)計(jì)的遠(yuǎn)程更新方案的成功率較高,更新所需時(shí)間較短。
成功更新機(jī)器碼后,進(jìn)行3D打印實(shí)驗(yàn),本文利用自主研制的數(shù)字光處理(DLP)3D打印機(jī)進(jìn)行實(shí)驗(yàn),該設(shè)備最大可打印120 mm×64 mm×300 mm的模型,其單層打印精度可達(dá)0.05 mm。選取尺寸為26.60 mm*25.54 mm*29.53 mm的“小飛龍”模型進(jìn)行打印,每層的打印厚度為0.05 mm,打印結(jié)果如圖8所示,打印出的模型表面光潔度較好、細(xì)節(jié)完整,結(jié)果表明本系統(tǒng)的控制精度較高,終端節(jié)點(diǎn)的應(yīng)用程序能夠完整、穩(wěn)定地完成模型的打印工作。
圖8 3D打印成品
本文設(shè)計(jì)了具備遠(yuǎn)程更新功能的BIOS程序以及3D打印應(yīng)用程序,并在終端節(jié)點(diǎn)的Flash區(qū)域?qū)@兩個(gè)程序進(jìn)行合理劃分,從而有效減輕了開發(fā)應(yīng)用程序的工作量、降低了開發(fā)難度。在遠(yuǎn)程更新方面,提供了兩種更新方案:當(dāng)遠(yuǎn)程管理端存有舊版本機(jī)器碼文件且終端節(jié)點(diǎn)有足夠空間暫存新版本機(jī)器碼時(shí),采用比較增量更新的方案,大大減輕了網(wǎng)絡(luò)傳輸?shù)呢?fù)擔(dān),否則采用整體替換的方式,使用新的代碼替換掉舊的代碼,使得應(yīng)用程序的規(guī)模擴(kuò)大一倍。實(shí)驗(yàn)結(jié)果表明更新后的3D打印機(jī)能夠很好地完成打印功能。
本文設(shè)計(jì)的遠(yuǎn)程更新系統(tǒng)采用構(gòu)件化的思想,具備很好的可維護(hù)性,可適用于基于NB-IoT技術(shù)的多種遠(yuǎn)程通信方式以及有遠(yuǎn)程維護(hù)需求的眾多應(yīng)用場(chǎng)景,對(duì)維護(hù)自動(dòng)化設(shè)備中的嵌入式程序具有很大的參考價(jià)值。