葉 臻,茅正沖,黃 芳
(江南大學(xué)物聯(lián)網(wǎng)工程學(xué)院,江蘇無(wú)錫 214122)
一種自動(dòng)氣象站嵌入式軟件構(gòu)件裁剪算法
葉 臻,茅正沖,黃 芳
(江南大學(xué)物聯(lián)網(wǎng)工程學(xué)院,江蘇無(wú)錫 214122)
為了解決自動(dòng)氣象站嵌入式軟件構(gòu)件冗余度大,不利于低網(wǎng)速環(huán)境下遠(yuǎn)程更新的問(wèn)題,提出了一種自動(dòng)氣象站嵌入式軟件構(gòu)件裁剪算法,將算法分為預(yù)處理、函數(shù)信息表的構(gòu)造、有序二叉樹(shù)和狀態(tài)轉(zhuǎn)移及文本指針跳轉(zhuǎn)表的構(gòu)造、函數(shù)調(diào)用樹(shù)的構(gòu)造、函數(shù)的裁剪幾個(gè)階段,并對(duì)每個(gè)階段作了詳細(xì)介紹;根據(jù)提出的裁剪算法,實(shí)現(xiàn)了一個(gè)嵌入式軟件構(gòu)件裁剪工具,設(shè)計(jì)了裁剪實(shí)驗(yàn),并將裁剪前后的構(gòu)件體積進(jìn)行了分析對(duì)比;實(shí)驗(yàn)表明,算法能夠有效地對(duì)自動(dòng)氣象站嵌入式軟件構(gòu)件進(jìn)行裁剪,去除構(gòu)件的冗余代碼,大大提高遠(yuǎn)程更新的效率。
嵌入式軟件;構(gòu)件;裁剪;自動(dòng)氣象站
為了解決自動(dòng)氣象站數(shù)據(jù)采集器嵌入式軟件復(fù)用率低,開(kāi)發(fā)效率低,維護(hù)困難的問(wèn)題,文獻(xiàn)[1]提出了一種基于構(gòu)件的嵌入式軟件開(kāi)發(fā)模式,使得軟件的復(fù)用率和開(kāi)發(fā)效率得到了很大的提高。在此基礎(chǔ)之上,文獻(xiàn)[2]又制定了基于構(gòu)件的嵌入式軟件遠(yuǎn)程更新方案,很大程度上減小了通信流量的消耗,提高了軟件維護(hù)的效率。
但是,以上的研究還存在一個(gè)很大的問(wèn)題。功能構(gòu)件[1]是面向領(lǐng)域的,存放著氣象領(lǐng)域中與數(shù)據(jù)采集、數(shù)據(jù)質(zhì)量控制、數(shù)據(jù)計(jì)算、數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)通信相關(guān)的函數(shù)集合。隨著氣象領(lǐng)域的發(fā)展,氣象要素的增加,功能構(gòu)件的體積也會(huì)越來(lái)越大。而在一個(gè)具體的項(xiàng)目中,氣象要素的數(shù)量有限,功能構(gòu)件庫(kù)中有很多函數(shù)是永遠(yuǎn)不會(huì)被調(diào)用到的。若直接將領(lǐng)域級(jí)的功能構(gòu)件部署在目標(biāo)設(shè)備上,大量的冗余代碼會(huì)增加功能構(gòu)件的體積,這對(duì)低網(wǎng)速環(huán)境下的遠(yuǎn)程更新是極為不利的。目前已有學(xué)者提出了一些嵌入式軟件裁剪方案,但是對(duì)于文獻(xiàn)[1]設(shè)計(jì)的構(gòu)件式數(shù)據(jù)采集軟件并不完全適用。因此,提出了一種自動(dòng)氣象站嵌入式軟件構(gòu)件裁剪算法,將領(lǐng)域級(jí)的功能構(gòu)件進(jìn)行裁剪,得到體積較小的應(yīng)用級(jí)功能構(gòu)件,再部署到目標(biāo)設(shè)備上,這樣將進(jìn)一步減小遠(yuǎn)程更新的流量消耗,提高遠(yuǎn)程更新的效率。
本文設(shè)計(jì)的構(gòu)件裁剪算法是針對(duì)自動(dòng)氣象站數(shù)據(jù)采集器構(gòu)件式嵌入式軟件的,其特點(diǎn)可參考文獻(xiàn)[1]。
對(duì)于此套軟件,在部署到采集器之前,需要裁剪的是功能構(gòu)件。在領(lǐng)域級(jí)功能構(gòu)件源代碼中,函數(shù)的調(diào)用有兩種形式。一種形式是編寫(xiě)代碼的時(shí)候顯式地進(jìn)行調(diào)用,稱之為靜態(tài)調(diào)用,這部分代碼始終會(huì)被調(diào)用,因此不會(huì)被裁剪;另一種形式是通過(guò)函數(shù)指針調(diào)用,函數(shù)是否被調(diào)用由配置構(gòu)件中的信息決定,稱之為動(dòng)態(tài)調(diào)用,這部分代碼會(huì)根據(jù)具體的應(yīng)用環(huán)境做相應(yīng)的裁剪。對(duì)于靜態(tài)調(diào)用和動(dòng)態(tài)調(diào)用,在生成函數(shù)調(diào)用樹(shù)時(shí)所做的處理不同,在下文中會(huì)詳細(xì)說(shuō)明。
使用集合S= {fs1,fs2,...,fsn}表示領(lǐng)域級(jí)源代碼中所有靜態(tài)調(diào)用的函數(shù),集合DR={fdr1,fdr2,...,f drn}表示領(lǐng)域級(jí)源代碼中需要為具體應(yīng)用保留的動(dòng)態(tài)調(diào)用的函數(shù),集合DT={fdt1,fdt2,…,fdtn}表示領(lǐng)域級(jí)源代碼中不被具體應(yīng)用調(diào)用而需要被裁剪的動(dòng)態(tài)調(diào)用的函數(shù)。由于S∩DR=?,S∩DT=?,DR∩DT=?,所以有領(lǐng)域級(jí)源代碼函數(shù)集合W=S+DR+DT={fs1,fs2,...,fsn,fdr1,fdr2,...,fdrn,fdt1,fdt2,...,fdtn},則DT= W-SDR。本算法的目的就是分析源代碼,得到集合W,S和DR,計(jì)算出DT,將其裁剪,以縮小功能構(gòu)件的體積。
下面給出一個(gè)簡(jiǎn)化的C語(yǔ)言程序示例,下文將結(jié)合此示例說(shuō)明算法的流程。程序代碼如下:
functionPointer1和functionPointer2為函數(shù)指針,假定它們的值為fdr1和fdr3。代碼中,W={main,fs1,fs2,fs3,fs4,fs5,fdr1,fdr2,fdr3,fdt1,fdt2,fdt3},S={main,fs1,fs2,fs3,fs4,fs5},DR= {fdr1,fdr2,fdr3},DT= {fdt1,fdt2,fdt3},由代碼可以得到如圖1所示的函數(shù)調(diào)用關(guān)系圖。
圖1 示例程序函數(shù)調(diào)用關(guān)系圖
圖中,實(shí)線箭頭表示顯式調(diào)用,虛線表示通過(guò)函數(shù)指針調(diào)用。由圖可知,函數(shù)fdt1,fdt2和fdt3沒(méi)有被調(diào)用,需要被裁剪。
基于樹(shù)的嵌入式軟件構(gòu)件裁剪算法流程圖如圖2所示。下文將結(jié)合上面給出的C程序示例,對(duì)算法的步驟作詳細(xì)的說(shuō)明。
1.1 預(yù)處理
本文提出的構(gòu)件裁剪算法是基于多模式字符串匹配算法的,如果文本中搜索到函數(shù)名字符串,則認(rèn)定為函數(shù)調(diào)用。在源代碼中,若在注釋或雙引號(hào)之間出現(xiàn)函數(shù)名字符串,則會(huì)對(duì)函數(shù)調(diào)用的判斷造成干擾,如:
因此,首先需要對(duì)源代碼進(jìn)行預(yù)處理,創(chuàng)建源代碼的副本,找出源代碼中的注釋和雙引號(hào)組,用占位符替代原先的內(nèi)容,以消除對(duì)函數(shù)調(diào)用判斷造成的干擾,如:
最后,根據(jù)經(jīng)過(guò)處理的源代碼副本構(gòu)造函數(shù)調(diào)用樹(shù)。
圖2 基于樹(shù)的嵌入式軟件構(gòu)件裁剪算法流程圖
1.2 函數(shù)信息表的構(gòu)造
函數(shù)信息表是一個(gè)鏈表,它用來(lái)存儲(chǔ)源代碼中所有函數(shù)的信息,如下:
Name為函數(shù)名稱,DefinitionFile為函數(shù)定義所在文件的名稱,DefinitionStartOffset為函數(shù)定義頭部在文件中的偏移量,Definition End Offset為函數(shù)定義尾部在文件中的偏移量,Tailor指示函數(shù)是否需要被裁剪,Next用于指示下一個(gè)節(jié)點(diǎn)。
要構(gòu)造函數(shù)信息表,關(guān)鍵在于如何從源代碼中提取函數(shù)名稱以及如何確定函數(shù)定義在源代碼中的位置。本文采用正則表達(dá)式來(lái)匹配函數(shù)定義,以提取函數(shù)名稱。用于匹配函數(shù)名稱的正則表達(dá)式如下:
通過(guò)逐行掃描源代碼,使用上述表達(dá)式進(jìn)行匹配,就可以得到源代碼中所有的函數(shù)定義字符串,然后根據(jù)C語(yǔ)言的語(yǔ)法規(guī)則從函數(shù)定義字符串中提取函數(shù)名稱。
得到函數(shù)名稱之后,還要確定此函數(shù)的定義在文件中的偏移量。函數(shù)定義頭部的偏移量即為正則表達(dá)式匹配結(jié)果首字符的偏移量,下面敘述確定函數(shù)定義尾部偏移量的方法。由于函數(shù)體是字符‘{’,‘}’構(gòu)成的語(yǔ)句塊,它們成對(duì)出現(xiàn),并且有一定的層次性,因此定義一個(gè)計(jì)數(shù)變量count,并初始化為0,然后從正則表達(dá)式匹配結(jié)果末字符開(kāi)始向下搜索,匹配到‘{’則加1,匹配到‘}’則減1,當(dāng)count第一次減為0時(shí),指針指向的位置即為函數(shù)定義的尾部。
1.3 有序二叉樹(shù)和狀態(tài)轉(zhuǎn)移及文本指針跳轉(zhuǎn)表的構(gòu)造
本文采用基于有序二叉樹(shù)的快速多模式字符串匹配算法(SMA-QS算法)構(gòu)造有序二叉樹(shù)和狀態(tài)轉(zhuǎn)移及文本指針跳轉(zhuǎn)表,并且在2.4節(jié)中還會(huì)利用此算法進(jìn)行字符串多模式匹配,算法的詳細(xì)步驟可參考文獻(xiàn)[5]。
SMA-QS算法分為預(yù)處理和匹配兩個(gè)部分。在預(yù)處理階段,首先將模式集合排列為字典序,然后對(duì)于每個(gè)模式串,根據(jù)一定的規(guī)則,向二叉樹(shù)中添加節(jié)點(diǎn),生成一顆有序二叉樹(shù),然后對(duì)于每個(gè)節(jié)點(diǎn)狀態(tài)和文本指針將指向的下一個(gè)字符計(jì)算狀態(tài)轉(zhuǎn)移及文本指針跳轉(zhuǎn)表。在匹配階段,按照一定的訪問(wèn)規(guī)則訪問(wèn)二叉樹(shù),使用棧記錄已經(jīng)匹配的字符,若訪問(wèn)到標(biāo)記為“輸出”的節(jié)點(diǎn),說(shuō)明已經(jīng)匹配到一個(gè)模式串,則將棧中的字符串輸出。若出現(xiàn)失配,則根據(jù)狀態(tài)轉(zhuǎn)移及文本指針跳轉(zhuǎn)表中的信息進(jìn)行跳躍,開(kāi)始下一次比較。
在本步驟中,以2.2節(jié)構(gòu)造的函數(shù)信息表中函數(shù)名字符串集合作為輸入模式集,使用SMA-QS算法構(gòu)造一顆有序二叉樹(shù)及一個(gè)狀態(tài)轉(zhuǎn)移及文本指針跳轉(zhuǎn)表,為函數(shù)調(diào)用樹(shù)的構(gòu)造做好準(zhǔn)備。示例程序?qū)?yīng)的有序二叉樹(shù)和狀態(tài)轉(zhuǎn)移及文本指針跳轉(zhuǎn)表分別如圖3和表1所示。
圖3 示例程序模式集合對(duì)應(yīng)的有序二叉樹(shù)
表1 示例程序?qū)?yīng)的狀態(tài)轉(zhuǎn)移及文本指針跳轉(zhuǎn)表
1.4 函數(shù)調(diào)用樹(shù)的構(gòu)造
函數(shù)調(diào)用樹(shù)的構(gòu)造分為兩部分,首先構(gòu)造深度為2的函數(shù)調(diào)用樹(shù)鏈表,然后將其轉(zhuǎn)化為函數(shù)調(diào)用樹(shù),下面首先給出函數(shù)調(diào)用樹(shù)節(jié)點(diǎn)的定義:
Function Name為函數(shù)名稱,Right為右節(jié)點(diǎn),Child為子節(jié)點(diǎn)。
首先從頭至尾掃描函數(shù)信息表,對(duì)于每個(gè)節(jié)點(diǎn),打開(kāi)DefinitionFile指定的源文件,在DefinitionStartOffset和Definition End Offset指定的偏移量范圍內(nèi),對(duì)源碼進(jìn)行逐行掃描,利用SMA-QS匹配算法進(jìn)行模式匹配,若有匹配結(jié)果,則說(shuō)明當(dāng)前節(jié)點(diǎn)對(duì)應(yīng)的函數(shù)調(diào)用了其它的函數(shù),則將此節(jié)點(diǎn)及其調(diào)用的函數(shù)對(duì)應(yīng)的節(jié)點(diǎn)加到深度為2的函數(shù)調(diào)用樹(shù)鏈表的尾部。在函數(shù)信息表掃描結(jié)束后,會(huì)生成一個(gè)源碼對(duì)應(yīng)的深度為2的函數(shù)調(diào)用樹(shù)鏈表。下面給出生成深度為2的函數(shù)調(diào)用樹(shù)鏈表的算法描述:
算法1:生成深度為2的函數(shù)調(diào)用樹(shù)鏈表
輸入:函數(shù)信息表,有序二叉樹(shù),MOVE表
輸出:深度為2的函數(shù)調(diào)用樹(shù)鏈表
步驟:
1)對(duì)于函數(shù)信息表的每個(gè)節(jié)點(diǎn)m,執(zhí)行以下操作:
(1)如果m對(duì)應(yīng)的函數(shù)fm進(jìn)行了函數(shù)調(diào)用,則:
①創(chuàng)建fm對(duì)應(yīng)的節(jié)點(diǎn)nm。
②將nm連接在深度為1的節(jié)點(diǎn)組成的鏈表尾部。
③對(duì)于fm調(diào)用的每個(gè)函數(shù)f,執(zhí)行以下操作:
a.創(chuàng)建f對(duì)應(yīng)的節(jié)點(diǎn)nf。
b.如果nm有子節(jié)點(diǎn),則把nf連接在以nm的子節(jié)點(diǎn)為頭節(jié)點(diǎn)的鏈表尾部,否則nm的子節(jié)點(diǎn)←nf。
對(duì)于上文給出的C語(yǔ)言示例程序,生成的深度為2的函數(shù)調(diào)用樹(shù)鏈表如圖4所示。
圖4 示例程序?qū)?yīng)的深度為2的函數(shù)調(diào)用樹(shù)鏈表
圖中的每個(gè)節(jié)點(diǎn)有3個(gè)域,左邊的域指向子節(jié)點(diǎn),中間的域存儲(chǔ)函數(shù)名稱,右邊的域指向右節(jié)點(diǎn)。此鏈表是將以main,fs1,fs2,fdr1,fdt1為根節(jié)點(diǎn)的深度為2的函數(shù)調(diào)用樹(shù)串接在一起的結(jié)果。
接下來(lái),給出將深度為2的函數(shù)調(diào)用樹(shù)鏈表轉(zhuǎn)化為函數(shù)調(diào)用樹(shù)的算法描述:
算法2:生成函數(shù)調(diào)用樹(shù)
輸入:深度為2的函數(shù)調(diào)用樹(shù)鏈表,根節(jié)點(diǎn)r
輸出:以r為根節(jié)點(diǎn)的函數(shù)調(diào)用樹(shù)
步驟:
1)對(duì)于深度為2的函數(shù)調(diào)用樹(shù)鏈表中每個(gè)深度為1的節(jié)點(diǎn)n,執(zhí)行以下操作:
(1)如果n的函數(shù)名稱=r的函數(shù)名稱,則:
①r的子節(jié)點(diǎn)←n的子節(jié)點(diǎn)。
②跳出循環(huán)。
(2)以r的子節(jié)點(diǎn)為根節(jié)點(diǎn)遞歸生成函數(shù)調(diào)用樹(shù)。
(3)以r的右節(jié)點(diǎn)為根節(jié)點(diǎn)遞歸生成函數(shù)調(diào)用樹(shù)。
以main函數(shù)對(duì)應(yīng)的節(jié)點(diǎn)為根節(jié)點(diǎn),調(diào)用上述算法,可生成被靜態(tài)調(diào)用的函數(shù)構(gòu)成的函數(shù)調(diào)用樹(shù)Ts;以用戶配置的動(dòng)態(tài)調(diào)用的函數(shù)為根節(jié)點(diǎn),調(diào)用上述算法,可生成若干被動(dòng)態(tài)調(diào)用的函數(shù)構(gòu)成的函數(shù)調(diào)用子樹(shù)Tdk(k=1,2,...,n),將這些函數(shù)調(diào)用子樹(shù)Tdk掛在Ts的根節(jié)點(diǎn)下,最終得到代碼對(duì)應(yīng)的函數(shù)調(diào)用樹(shù)T,樹(shù)T中所有函數(shù)都會(huì)被調(diào)用,樹(shù)T以外的函數(shù)為冗余代碼,應(yīng)被裁剪。對(duì)于上文給出的C語(yǔ)言示例程序,生成的函數(shù)調(diào)用樹(shù)T如圖5所示。
圖5 示例程序?qū)?yīng)的函數(shù)調(diào)用樹(shù)
1.5 函數(shù)的裁剪
在初始化時(shí),將函數(shù)信息表中的Tailor初始化為true,意為需要裁剪。然后遍歷2.4節(jié)生成的函數(shù)調(diào)用樹(shù),對(duì)于樹(shù)中每個(gè)節(jié)點(diǎn)對(duì)應(yīng)的函數(shù),在函數(shù)信息表中將其Tailor修改為false,意為不需要裁剪。遍歷結(jié)束之后,函數(shù)信息表中所有Tailor為true的函數(shù)即為需要被裁剪的函數(shù)。對(duì)于每個(gè)需要被裁剪的函數(shù),打開(kāi)DefinitionFile指定的源文件,在DefinitionStartOffset 和DefinitionEnd Offset指定的偏移量分別寫(xiě)入”/*”和”*/”注釋其間的代碼,這樣就完成了函數(shù)裁剪,在編譯時(shí)此函數(shù)將不會(huì)被編譯進(jìn)目標(biāo)文件。
根據(jù)以上裁剪算法,開(kāi)發(fā)了一個(gè)自動(dòng)氣象站嵌入式軟件構(gòu)件裁剪工具,進(jìn)行了裁剪實(shí)驗(yàn),以驗(yàn)證算法的可行性。實(shí)驗(yàn)針對(duì)不同的應(yīng)用環(huán)境,對(duì)文獻(xiàn)[1]中的構(gòu)件式嵌入式軟件示例代碼進(jìn)行了裁剪。示例代碼中包含了適用于風(fēng)向、風(fēng)速、氣溫、氣壓、降水量、蒸發(fā)量、相對(duì)濕度的所有函數(shù)以及其它通用的函數(shù),不同應(yīng)用環(huán)境中涉及的要素是上述七個(gè)要素的子集。對(duì)于應(yīng)用環(huán)境1,要素為風(fēng)向、風(fēng)速;對(duì)于應(yīng)用環(huán)境2,要素為氣溫、氣壓;對(duì)于應(yīng)用環(huán)境3,要素為降水量、蒸發(fā)量、相對(duì)濕度。實(shí)驗(yàn)結(jié)果如表2和表3所示。
表2 裁剪前構(gòu)件體積
裁剪率計(jì)算公式如式(1)所示:
由式(1)可知,對(duì)于應(yīng)用環(huán)境1,裁剪率為10.8%;對(duì)于應(yīng)用環(huán)境2,裁剪率為9.5%;對(duì)于應(yīng)用環(huán)境3,裁剪率為13.3%。目前在實(shí)際工程中,要素多達(dá)數(shù)百個(gè),構(gòu)件庫(kù)體積龐大,因此對(duì)于一個(gè)具體的應(yīng)用環(huán)境,裁剪率會(huì)比實(shí)驗(yàn)中大得多。
表3 裁剪后構(gòu)件體積
針對(duì)自動(dòng)氣象站嵌入式軟件構(gòu)件代碼冗余度大,不利于遠(yuǎn)程更新的問(wèn)題,提出了一種自動(dòng)氣象站嵌入式軟件構(gòu)件裁剪算法,對(duì)算法的各個(gè)步驟進(jìn)行了詳細(xì)說(shuō)明,并實(shí)現(xiàn)了構(gòu)件裁剪工具,設(shè)計(jì)了裁剪實(shí)驗(yàn)。實(shí)驗(yàn)表明,提出的裁剪算法可以有效地對(duì)構(gòu)件進(jìn)行裁剪。隨著氣象領(lǐng)域的飛速發(fā)展,監(jiān)測(cè)的氣象要素越來(lái)越多,構(gòu)件庫(kù)的體積越來(lái)越大,遠(yuǎn)程更新時(shí)無(wú)意義的流量消耗越來(lái)越大,因此嵌入式軟件構(gòu)件的裁剪在氣象領(lǐng)域中的應(yīng)用具有深遠(yuǎn)的意義。
[1]茅正沖,葉 臻,黃 芳.基于構(gòu)件的可配置嵌入式應(yīng)用程序設(shè)計(jì)模式[J].計(jì)算機(jī)測(cè)量與控制,2015,23(4):1432-1434,1437.
[2]茅正沖,葉 臻,黃 芳,基于構(gòu)件的自動(dòng)氣象站嵌入式程序遠(yuǎn)程更新[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2015,15(11):44 -47.
[3]王亞剛,陳莉君.ELF目標(biāo)文件的裁剪方法研究[J].電腦知識(shí)與技術(shù),2009,5(11):3018-3020.
[4]成月良,方壽海.面向應(yīng)用的嵌入式Linux裁剪方法研究與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2009,30(11):2684-2686,2697.
[5]周 燕,侯整風(fēng),何 玲.基于有序二叉樹(shù)的快速多模式字符串匹配算法[J].計(jì)算機(jī)工程,2010,36(17):42-44.
[6]崔歡歡,霍 華,王永杰.一種面向應(yīng)用的嵌入式Linux內(nèi)核混合裁剪方法[J].河南科技大學(xué)學(xué)報(bào)(自然科學(xué)版),2011,32 (2):32-35.
[7]江夢(mèng)濤,荊 琦.C語(yǔ)言靜態(tài)代碼分析中的調(diào)用關(guān)系提取方法[J].計(jì)算機(jī)科學(xué),2014,41(z1):442-444.
[8]苗 磊,陳莉君.基于靜態(tài)分析的函數(shù)調(diào)用關(guān)系研究[J].計(jì)算機(jī)與數(shù)字工程,2014,42(9):1653-1656,1728.
[9]莊克良,高云嶺,紀(jì)向尚.嵌入式系統(tǒng)程序調(diào)用關(guān)系分析設(shè)計(jì)方法[J].艦船電子工程,2010,30(10):129-131,149.
[10]嚴(yán) 義,左 鼎.基于關(guān)系矩陣的嵌入式組件裁剪方法[J].計(jì)算機(jī)工程與應(yīng)用,2009,45(24):77-79,90.
[11]蔡 虹,沈 雷,李永紅,等.基于覆蓋測(cè)試的嵌入式軟件自動(dòng)裁剪[J].計(jì)算機(jī)工程,2010,36(1):73-75.
[12]Matthys N,Hughes D,Michiels S,et al.Fine-grained tailoring of component behaviour for embedded systems[A].7th IFIP WG 10.2 International Workshop on Software Technologies for Embedded andUbiquitous Systems[C].SEUS2009.Compendex,2009:156-167.
A Tailor Algorithm of Embedded Software Components of Automatic Meteorological Station
Ye Zhen,Mao Zhengchong,Huang Fang
(College of Io T Engineering,Jiangnan University,Wuxi 214122,China)
To solve the problem of big redundancy of embedded software components of automatic meteorological station which goes against remote update under low internet speed environment,proposing a tailor algorithm of embedded software components of automatic meteorological station.Dividing the algorithm into several stages which are pretreatment,construction of function information table,construction of ordered binary tree,state transfer and text pointer skip table,construction of function call tree and tailor of functions and then introducing each stage specifically.Realizing a tailor tool of embedded software according to proposed tailor algorithm and designing a tailor experiment.Analyzing and comparing the volume of components before and after tailor.The experiment shows that the algorithm is able to tailor embedded software components of automatic meteorological station effectively,cut redundant code of components and improve the efficiency of remote update immensely.
embedded software;component;tailor;automatic meteorological station
1671-4598(2016)08-0157-04
10.16526/j.cnki.11-4762/tp.2016.08.042
:TP311
:A
2016-03-04;
:2016-03-29。
江蘇省自然科學(xué)基金(BK20131107)。
葉 臻(1991-),男,江蘇南京人,碩士研究生,主要從事嵌入式軟件構(gòu)件技術(shù)方向的研究。