楊蕾蕾,慕福奇,張文明,呂欣巖
(1.中國(guó)科學(xué)院大學(xué) 微電子學(xué)院,北京 100049;2.江蘇中科羿鏈通信技術(shù)有限公司,江蘇 無(wú)錫 214135)
一種靈活的嵌入式設(shè)備配置管理方法
楊蕾蕾1,慕福奇2,張文明2,呂欣巖2
(1.中國(guó)科學(xué)院大學(xué) 微電子學(xué)院,北京 100049;2.江蘇中科羿鏈通信技術(shù)有限公司,江蘇 無(wú)錫 214135)
針對(duì)嵌入式設(shè)備的配置管理需求,利用Lua腳本語(yǔ)言設(shè)計(jì)了一種靈活的嵌入式設(shè)備配置管理方法。實(shí)現(xiàn)了通過(guò)串口服務(wù)、Telnet服務(wù)和Web服務(wù)對(duì)嵌入式設(shè)備進(jìn)行配置管理。該方法通過(guò)在QiLINK(Queue Information LINK)鏈狀網(wǎng)節(jié)點(diǎn)(使用TMS320C6670芯片開(kāi)發(fā))上實(shí)際驗(yàn)證,證明了其可行性,符合預(yù)期效果。為嵌入式設(shè)備提供了一種移植性強(qiáng)、多方式的配置管理方法。
嵌入式;配置管理;Lua語(yǔ)言;Web;Telnet;串口;MVC框架
隨著計(jì)算機(jī)技術(shù)和集成電路的發(fā)展,嵌入式技術(shù)日漸普及。嵌入式設(shè)備由于體積小、功耗低、成本低廉的特點(diǎn)在通信、家電、醫(yī)療以及軍事等領(lǐng)域中的應(yīng)用越來(lái)越廣泛。
無(wú)論是以單片機(jī)為主的中低端嵌入式應(yīng)用,還是以ARM、DSP、MIPS為主的高端嵌入式設(shè)備,都需要提供一種或幾種方式供開(kāi)發(fā)人員或其他使用者對(duì)其進(jìn)行配置和管理。常用的方式可以分為以下3種:利用串口通信或Telnet遠(yuǎn)程登錄服務(wù)直接輸入指令[1];通過(guò)發(fā)送指定格式的UDP包[2];使用Web可視化界面[3]。目前嵌入式設(shè)備的配置管理方法多采用以上3種方式中的一種,不夠全面。此外,實(shí)現(xiàn)方式也不夠理想,如自定義的命令格式以及自定義的配置數(shù)據(jù)文件容易出現(xiàn)解析錯(cuò)誤等[4]。綜上,沒(méi)有一個(gè)移植性較強(qiáng)的、比較完備的配置管理方法可以應(yīng)用在不同的嵌入式設(shè)備中。
Lua語(yǔ)言是一種輕量級(jí)的語(yǔ)言,適用于多種操作系統(tǒng)以及用ANSI C開(kāi)發(fā)的平臺(tái),它在嵌入式設(shè)備中的應(yīng)用已經(jīng)屢見(jiàn)不鮮[5-7]。此外,Lua腳本可以直接用來(lái)存儲(chǔ)配置數(shù)據(jù),占用空間小并且容易解析,不易出錯(cuò)。在這種前提下,本文考慮依托Lua語(yǔ)言,實(shí)現(xiàn)一套集Web服務(wù)、Telnet服務(wù)和串口服務(wù)為一體的嵌入式設(shè)備配置管理方法。
圖1 系統(tǒng)結(jié)構(gòu)圖
本嵌入式設(shè)備配置管理方法的系統(tǒng)結(jié)構(gòu)如圖1所示,嵌入式設(shè)備提供網(wǎng)口和串口供PC管理機(jī)可以通過(guò)遠(yuǎn)程登錄、訪問(wèn)Web頁(yè)面以及輸入串口命令的方式對(duì)嵌入式設(shè)備進(jìn)行配置管理。
本方法的實(shí)現(xiàn)依賴于Lua源碼,它提供解釋Lua腳本的解釋器,同時(shí)還可以靈活地修改以滿足不同接口的需求。在系統(tǒng)結(jié)構(gòu)中,Lua源碼的下層是底層驅(qū)動(dòng)函數(shù),它們可以注冊(cè)到Lua中,供Lua腳本調(diào)用。Lua源碼的上層是本方法實(shí)現(xiàn)所依賴的三大服務(wù):串口服務(wù)、Telnet服務(wù)以及Web服務(wù)。串口服務(wù)直接由Lua串口處理程序?qū)崿F(xiàn),而其他兩種服務(wù)均依賴于嵌入式TCP/IP協(xié)議棧。NDK(Network Developer’s Kit)是德州儀器公司(Texas Instruments,TI)開(kāi)發(fā)的TCP/IP協(xié)議棧,它在提供Telnet服務(wù)的基礎(chǔ)上,增加了解釋Lua指令的功能。而Web服務(wù)利用Lua社區(qū)提供的相關(guān)Http模塊實(shí)現(xiàn),它們由純Lua腳本實(shí)現(xiàn),修改十分簡(jiǎn)單,避免了傳統(tǒng)的C語(yǔ)言編寫的CGI(Common Gateway Interface)程序每次修改都需要重新編譯代碼的問(wèn)題。這些模塊又依賴于Luasocket,Luasocket是將NDK的Socket函數(shù)封裝給Lua使用的一個(gè)接口層。系統(tǒng)的最上層即是配置管理操作的對(duì)象、配置數(shù)據(jù)以及代碼文件等。在系統(tǒng)實(shí)現(xiàn)過(guò)程中還移植了Fatfs文件系統(tǒng),用來(lái)更好地存放和管理這些文件。
2.1 文件系統(tǒng)移植及IO操作實(shí)現(xiàn)
嵌入式文件系統(tǒng)選擇Fatfs。它使用ANSI C編寫,不依賴于硬件平臺(tái),并且代碼量小、移植簡(jiǎn)單[8-9],適用于小型的嵌入式設(shè)備。Lua源碼中的io庫(kù)的實(shí)現(xiàn)依賴于標(biāo)準(zhǔn)C的文件操作函數(shù),與Fatfs提供的函數(shù)不同,因此需要將Fatfs提供的相關(guān)API函數(shù)封裝成一套新的Lua io庫(kù)。
2.1.1 Fatfs文件系統(tǒng)的移植
以MX25U25635F SPI FLASH為例闡述Fatfs在嵌入式存儲(chǔ)設(shè)備中的移植過(guò)程。
MX25U25635擦除的最小單位是4 K,所以將Fatfs的簇(最小文件單位)大小設(shè)置為4 K。一個(gè)扇區(qū)大小為512 B,一個(gè)簇8個(gè)扇區(qū)。移植Fatfs需要修改的是diskio.c文件,其中,需要特別注意的是磁盤寫函數(shù)。
如圖2所示,寫一個(gè)文件時(shí)會(huì)將這個(gè)文件分成兩部分:整扇區(qū)和最后不足一個(gè)扇區(qū)的部分。整扇區(qū)的寫操作是由用戶緩沖區(qū)直接寫入物理磁盤,最后不足一扇區(qū)的部分,先從磁盤讀取相應(yīng)扇區(qū)的內(nèi)容到文件緩沖區(qū),修改緩沖區(qū)內(nèi)容,并設(shè)置回寫標(biāo)記,最終在調(diào)用文件關(guān)閉函數(shù)或再一次寫文件時(shí),再將文件緩沖區(qū)的內(nèi)容回寫到物理磁盤中。這樣就一共調(diào)用了兩次磁盤寫函數(shù),磁盤寫函數(shù)調(diào)用SPI寫函數(shù),而每次調(diào)用SPI寫函數(shù)時(shí)都會(huì)根據(jù)寫入數(shù)據(jù)的長(zhǎng)度擦除所在的整個(gè)簇。如果文件緩沖區(qū)寫入的扇區(qū)和之前已經(jīng)寫好的整扇區(qū)在一個(gè)簇內(nèi),則第二次調(diào)用SPI寫函數(shù)時(shí)會(huì)再一次把整個(gè)簇擦掉,因此之前寫入的整扇區(qū)內(nèi)容也被擦掉了。為了避免這種情況,在SPI寫函數(shù)中加了一個(gè)判斷,在擦之前判斷擦除的地址是否是一個(gè)簇的起始地址,如果是則進(jìn)行擦除操作,否則直接寫入。
圖2 文件寫操作示意圖
2.1.2 IO庫(kù)的封裝及本地文件到Flash的映射
IO庫(kù)主要實(shí)現(xiàn)對(duì)文件的打開(kāi)、關(guān)閉以及讀、寫這幾個(gè)函數(shù)。其中需要注意的是,F(xiàn)atfs對(duì)外提供的每一個(gè)文件操作函數(shù)的第一個(gè)參數(shù)都是一個(gè)文件指針,以此來(lái)確定操作對(duì)象。但是Lua中并沒(méi)有指針變量,因此封裝時(shí)在文件打開(kāi)函數(shù)的末尾返回所打開(kāi)的文件的指針,此后調(diào)用讀、寫、關(guān)閉函數(shù)時(shí)都直接將得到的這個(gè)文件指針作為第一個(gè)參數(shù)使用。
當(dāng)寫入Flash的文件數(shù)量較多時(shí),逐個(gè)寫入太過(guò)麻煩,因此用一個(gè)簡(jiǎn)單的Lua腳本實(shí)現(xiàn)文件從PC端指定路徑到Flash指定路徑的映射。它完成的操作有:定義一個(gè)目錄查找函數(shù),將PC端指定目錄下的指定格式文件的絕對(duì)路徑全部存入到table變量input_table{}中;使用字符串匹配替換函數(shù)string.gsub()將input_table{}中的文件路徑替換為Flash文件系統(tǒng)中的指定路徑,存入另一個(gè)table變量save_table{}中;利用Lua原有的io庫(kù)從input_table{}中依次讀取文件,利用封裝Fatfs函數(shù)的io庫(kù)按照save_table{}中的路徑依次創(chuàng)建文件并將讀到的內(nèi)容寫入。
2.2 Web服務(wù)器設(shè)計(jì)
嵌入式Web服務(wù)器的實(shí)現(xiàn)借助于Lua社區(qū)提供的相關(guān)模塊,包括Xavante、Wsapi、Copas、Cgilua、Sailor。Xavante是基于URI模塊化架構(gòu)的HTTP1.1 Web服務(wù)器映射處理程序,提供文件處理、重定向處理和Wsapi處理。Wsapi將抽象的Lua程序映射為具體的Web應(yīng)用,解決了Lua代碼的平臺(tái)依賴性,使之可以應(yīng)用于主流的平臺(tái)。Copas是一個(gè)基于協(xié)程的調(diào)度器,可以用于調(diào)度TCP或UDP服務(wù)。Cgilua是一個(gè)用于創(chuàng)建動(dòng)態(tài)Web頁(yè)面和Web表單的工具,支持界面和數(shù)據(jù)分離。Sailor是一個(gè)MVC框架,用于組織Web界面和數(shù)據(jù)。這些模塊依賴于Luasocket,它是用C封裝的提供給Lua使用的Socket函數(shù)。
2.2.1 Web服務(wù)器結(jié)構(gòu)及處理流程
Web服務(wù)器的結(jié)構(gòu)如圖3所示。
圖3 Web服務(wù)器結(jié)構(gòu)圖
Copas模塊完成Tcp Socket的調(diào)度工作,負(fù)責(zé)接收請(qǐng)求、建立連接,并監(jiān)視Socket套接字的狀態(tài)變化,當(dāng)監(jiān)聽(tīng)到有數(shù)據(jù)后,交給Xavante模塊處理。Xavante模塊將接收到的數(shù)據(jù)包進(jìn)行解析,得到包頭信息,并根據(jù)解析出來(lái)的Url請(qǐng)求使用不同的處理函數(shù)進(jìn)行處理,包括Index頁(yè)面處理函數(shù)、文件處理函數(shù)以及Cgi處理函數(shù)。Cgi處理函數(shù)調(diào)用Cgilua模塊進(jìn)行處理。處理完畢后將處理結(jié)果交給Wsapi模塊,它將抽象的Lua語(yǔ)句轉(zhuǎn)換為規(guī)范的html語(yǔ)句。最后Xavante模塊將處理結(jié)果加上包頭信息發(fā)送給客戶端。其中,Web頁(yè)面的組織方式使用Sailor MVC框架。具體處理流程如圖4所示。
圖4 Web服務(wù)器處理流程圖
2.2.2 Socket接口層
Lua的Http服務(wù)模塊依賴于Luasocket提供的tcp socket函數(shù)。Lua官網(wǎng)提供的Luasocket是以動(dòng)態(tài)庫(kù)的格式供用戶使用,并且依賴于Linux/Windows操作系統(tǒng),不適用于所有的嵌入式設(shè)備(例如TMS320C6670所依賴的CCS開(kāi)發(fā)平臺(tái))。因此需要將所使用的TCP/IP協(xié)議棧提供的Socket函數(shù)封裝成Luasocket的tcp socket格式,并注冊(cè)到Lua源碼中供Lua Http相關(guān)模塊使用。在封裝Luasocket庫(kù)時(shí),盡量保持函數(shù)結(jié)構(gòu)和依賴關(guān)系不變,只替換內(nèi)部實(shí)現(xiàn)函數(shù),減少使用Luasocket的Http模塊的改動(dòng)。
2.2.3 MVC框架
為了更好地組織Web,使用了Sailor MVC框架。MVC指的是Model、View、Controller三部分。MVC框架可擴(kuò)展性強(qiáng)、易于維護(hù)[10]。
Sailor的視圖是lp文件,它與Html文件的區(qū)別是可以直接插入Lua代碼(Wsapi模塊將解釋處理這些Lua代碼)。Lua代碼的插入方法有兩種:和。如果是連續(xù)的一段Lua代碼,則按代碼塊的格式插入,如果是單獨(dú)的一句Lua語(yǔ)句,則按Lua表達(dá)式的格式插入。
Sailor通過(guò)定義一些頁(yè)面操作函數(shù)來(lái)實(shí)現(xiàn)Controller對(duì)視圖的控制,如視圖加載函數(shù)、輸出函數(shù)以及重定向操作函數(shù)等。
Sailor同樣定義了模型操作函數(shù)。Controller對(duì)模型的控制從新建模型開(kāi)始,Sailor提供的模型新建函數(shù)將用戶定義的模型NewObj作為參數(shù),在繼承模型通用函數(shù)的同時(shí),引入用戶在NewObj中自定義的函數(shù)及數(shù)據(jù)格式規(guī)范。Model部分通常采用數(shù)據(jù)庫(kù)存儲(chǔ),但由于本系統(tǒng)數(shù)據(jù)量不是很大,也為了盡量減少不必要的模塊,所以配置數(shù)據(jù)直接以Lua的table數(shù)據(jù)類型存儲(chǔ)在Lua腳本中,因?yàn)镃和Lua極強(qiáng)的交互性,所以在C代碼中解析Lua配置腳本也很容易。
2.3 Telnet串口服務(wù)設(shè)計(jì)
Telnet服務(wù)和串口服務(wù)均是通過(guò)直接輸入Lua命令來(lái)對(duì)嵌入式設(shè)備進(jìn)行配置管理,它們共用一套配置管理接口。Telnet實(shí)現(xiàn)了對(duì)嵌入式設(shè)備的遠(yuǎn)程控制,并且操作簡(jiǎn)單,只要PC管理機(jī)與嵌入式設(shè)備在同一網(wǎng)段即可。同時(shí),對(duì)一個(gè)完整的嵌入式設(shè)備配置管理方法而言,不可缺少的配置方式是通過(guò)串口服務(wù)進(jìn)行配置。它在嵌入式設(shè)備沒(méi)有入網(wǎng)、默認(rèn)IP也沒(méi)有生效的情況下仍然可以使用,保證了本配置方法的完備性。串口處理程序與Lua結(jié)合還可以避免不同格式的串口數(shù)據(jù)幀給嵌入式設(shè)備軟件帶來(lái)的解析困難[11],提高了交互的靈活性。
2.3.1 配置管理接口
Telnet服務(wù)和串口服務(wù)除了可使用規(guī)范的Lua語(yǔ)句直接對(duì)Lua配置腳本進(jìn)行修改外,本方法還增添了快捷配置方式以及直接調(diào)用某些管理函數(shù)的功能,將它們統(tǒng)稱為配置管理接口。配置管理接口是由相關(guān)C函數(shù)注冊(cè)到Lua源碼中實(shí)現(xiàn)的。調(diào)用格式與普通的Lua函數(shù)一樣:庫(kù)名.函數(shù)名(參數(shù)1,參數(shù)2,參數(shù)3…)。
2.3.2 Telnet服務(wù)
NDK協(xié)議棧提供的Telnet服務(wù)的用戶指令包含多個(gè)關(guān)鍵字,它們被存放在大小為10的字符指針數(shù)組tok中,各命令需要匹配多少個(gè)關(guān)鍵字,就從tok數(shù)組中依次取出相應(yīng)的元素進(jìn)行匹配。Lua命令只需輸入“Lua”一個(gè)關(guān)鍵字,因此將tok[0]指向的字符串和“Lua”比較,如果相同,則進(jìn)入Lua命令輸入模式(即調(diào)用Lua解釋器),等待用戶輸入Lua指令,以回車鍵作為一次輸入的截止標(biāo)志。Lua解釋器將輸入的字符串作為一段Lua代碼載入并編譯,然后作為一個(gè)代碼塊(稱為chunk)壓入棧中。此后,調(diào)用Lua的異常處理函數(shù)去執(zhí)行這個(gè)代碼塊。圖5為Telnet解析Lua指令流程圖。
圖5 Telnet解析Lua指令流程圖
2.3.3 串口服務(wù)
串口命令的解析過(guò)程與Telnet不同,Telnet是通過(guò)直接調(diào)用Lua解釋器來(lái)執(zhí)行Lua命令,而串口服務(wù)的解析過(guò)程經(jīng)過(guò)了一個(gè)中間函數(shù)即串口數(shù)據(jù)收發(fā)函數(shù),它被注冊(cè)到Lua中。設(shè)備初始化時(shí)完成對(duì)串口的配置并啟動(dòng)加載Lua串口處理腳本。當(dāng)PC管理機(jī)通過(guò)串口調(diào)試助手給嵌入式設(shè)備發(fā)來(lái)Lua命令時(shí),串口處理程序?qū)邮盏降臄?shù)據(jù)進(jìn)行處理,然后將其傳給串口數(shù)據(jù)接收函數(shù)。Lua串口處理腳本檢測(cè)到串口數(shù)據(jù)接收函數(shù)接收到數(shù)據(jù)后,將這些接收到的內(nèi)容作為L(zhǎng)ua代碼執(zhí)行。執(zhí)行完畢后,通過(guò)調(diào)用串口數(shù)據(jù)發(fā)送函數(shù)將執(zhí)行結(jié)果發(fā)送給串口處理程序,串口處理程序?qū)⒅幚硗戤吅笸ㄟ^(guò)串口線發(fā)送給PC管理機(jī),反饋給用戶。其中,串口配置數(shù)據(jù)也被存放在一個(gè)Lua腳本中,初始化時(shí)由C解析這個(gè)配置腳本完成對(duì)串口的配置。
使用本方法在QiLINK鏈狀網(wǎng)其中一個(gè)節(jié)點(diǎn)(使用TMS320C6670芯片開(kāi)發(fā))上進(jìn)行測(cè)試,測(cè)試拓?fù)鋱D如圖6所示。所有節(jié)點(diǎn)的默認(rèn)IP為192.168.1.3,入網(wǎng)后的IP為10.9.X.2,其中X為節(jié)點(diǎn)號(hào)乘以9,比如節(jié)點(diǎn)4的IP為10.9.36.2。
圖6 測(cè)試拓?fù)鋱D
圖7是將PC管理機(jī)與節(jié)點(diǎn)4用串口線相連,使用串口調(diào)試助手對(duì)INTCof文件成功進(jìn)行配置的結(jié)果圖。
圖7 串口調(diào)試圖
本文提出了一種靈活的嵌入式設(shè)備配置管理方法,實(shí)現(xiàn)了利用串口服務(wù)、Telnet服務(wù)、Web服務(wù)3種方式對(duì)嵌入式設(shè)備進(jìn)行配置及管理。本方法適用于用ANSI C開(kāi)發(fā)的嵌入式設(shè)備,并提供對(duì)外網(wǎng)口或串口。本方法與傳統(tǒng)的嵌入式設(shè)備配置管理方法相比,提高了靈活性,對(duì)配置數(shù)據(jù)或Web界面的修改只需修改相關(guān)腳本文件,無(wú)需重新修改編譯軟件代碼;此外,提高了完備性,無(wú)論嵌入式設(shè)備是否入網(wǎng)都可以對(duì)它進(jìn)行配置管理;更為重要的一點(diǎn)是,本方法通用性強(qiáng),不依賴開(kāi)發(fā)平臺(tái)和操作系統(tǒng),為各式各樣的嵌入式設(shè)備的配置管理提供了很好的解決方案。
[1] 周家緒, 鄢萍, 張研. 一種嵌入式系統(tǒng)BootLoader參數(shù)自動(dòng)配置方法[J/OL].[2016-09-25].http://www.docin.com/p-390606777.html.
[2] 王曉東. 基于以太網(wǎng)和Uboot遠(yuǎn)程配置嵌入式系統(tǒng)啟動(dòng)參數(shù)[J]. 現(xiàn)代科學(xué)儀器, 2010(2):67-70.
[3] 譚海, 潘紹明. 嵌入式系統(tǒng)中配置參數(shù)修改研究及其實(shí)現(xiàn)[J/OL]. (2006-08-29)[2016-09-25].http://www.paper.edu.com.
[4] 李長(zhǎng)春, 張磊. 基于嵌入式Web門禁控制器的網(wǎng)絡(luò)配置實(shí)現(xiàn)[J]. 工業(yè)控制計(jì)算機(jī), 2009, 22(4):58-59.
[5] 汪君鵬, 李宥謀. 基于Lua腳本技術(shù)的網(wǎng)絡(luò)化測(cè)控系統(tǒng)設(shè)計(jì)[J]. 西安郵電大學(xué)學(xué)報(bào), 2013, 18(1):90-94.
[6] 段鑫, 陳宇, 孫偉力. Lua遠(yuǎn)程調(diào)試協(xié)議研究與實(shí)現(xiàn)[J]. 自動(dòng)化應(yīng)用, 2011,25(6):3-5.
[7] 沙俊星. 在嵌入式環(huán)境中使用Lua和SQLite擴(kuò)展Net-SNMP代理[J]. 北京聯(lián)合大學(xué)學(xué)報(bào):自然科學(xué)版, 2011,25(1):9-13.
[8] 秦偉. STM32的FatFS在數(shù)據(jù)采集系統(tǒng)中的應(yīng)用[J]. 單片機(jī)與嵌入式系統(tǒng)應(yīng)用, 2015,15(6):55-58.
[9] 洪岳煒, 王百鳴, 謝超英. 一種易于移植和使用的文件系統(tǒng)FatFs Module[J]. 單片機(jī)與嵌入式系統(tǒng)應(yīng)用, 2008,8(5):29-31.
[10] 閆志貴, 孟操. MVC模式在嵌入式調(diào)試工具開(kāi)發(fā)中的研究與實(shí)現(xiàn)[J]. 電子設(shè)計(jì)工程, 2010, 18(4):85-87.
[11] 李英明, 閆志輝, 周水斌. 基于Lua腳本語(yǔ)言的嵌入式UART通信方案設(shè)計(jì)[J]. 單片機(jī)與嵌入式系統(tǒng)應(yīng)用, 2012, 12(4):29-32.
A flexible configuration management method for embedded devices
Yang Leilei1,Mu Fuqi2,Zhang Wenming2,Lv Xinyan2
(1. School of Microelectronics, University of Chinese Academy of Sciences, Beijing 100049, China; 2. Jiangsu Zhongke Yilian Communication Technology Co., Ltd., Wuxi 214135, China)
According to the requirements of configuration management of embedded devices, a flexible configuration management method for embedded devices using Lua scripting language was designed. The configuration management for embedded devices was realized by serial services, Telnet services and Web services. This method is proved to be feasible by testing on QiLINK (Queue Information LINK) chain network node(Developed using TMS320C6670 chip). Therefore, a highly portable and perfect configuration management method for embedded devices was provided.
embedded devices;configuration management;Lua;Web;Telnet; serial port; MVC framework
TP311
A
10.19358/j.issn.1674- 7720.2017.03.026
楊蕾蕾,慕福奇,張文明,等.一種靈活的嵌入式設(shè)備配置管理方法[J].微型機(jī)與應(yīng)用,2017,36(3):88-92.
2016-10-05)
楊蕾蕾(1991-),女,碩士研究生,主要研究方向:嵌入式,移動(dòng)自組網(wǎng),自動(dòng)化測(cè)試。
慕福奇(1957-),男,本科,博士生導(dǎo)師,主要研究方向:無(wú)線通信系統(tǒng)與技術(shù),物聯(lián)網(wǎng)傳輸與應(yīng)用。
張文明(1979-),男,碩士研究生,主要研究方向:無(wú)線通信協(xié)議,嵌入式,移動(dòng)自組網(wǎng)。