陸宇霆,臧珠萍,歐陽文斌,曾培峰
(東華大學a.計算機科學與技術學院;b.信息科學與技術學院,上海 201620)
解釋型單片機應用程序的研究*
陸宇霆a,臧珠萍a,歐陽文斌b,曾培峰a
(東華大學a.計算機科學與技術學院;b.信息科學與技術學院,上海 201620)
采用配置文件定義系統(tǒng)處理和功能,提出一個組態(tài)簡單、易于功能調整和系統(tǒng)升級的解釋型單片機系統(tǒng).按照業(yè)務邏輯編寫的腳本文件以XML格式存儲于SD(Secure Digital)卡中,腳本程序被單片機讀入內存后,經(jīng)解釋器解釋,調用系統(tǒng)軟件中相應API(App lication Program Interface)函數(shù),執(zhí)行指定功能.建立在硬件層和系統(tǒng)軟件層之上的單片機解釋系統(tǒng),對業(yè)務邏輯的編寫、更改和實現(xiàn)更為方便.
腳本;解釋型;應用程序;單片機;XML
傳統(tǒng)的單片機應用軟件主要為編譯型,具有執(zhí)行效率高、運行速度快的特點,但是編程人員需具備較強的編程知識和業(yè)務知識,程序的編寫、編譯、調試和下載是一個相對比較復雜的過程.
如果應用軟件由腳本語言編寫,通過解釋器逐行讀取、逐行解釋執(zhí)行,雖然相對于編譯型軟件運行速度較慢,但是腳本程序直觀易懂、結構簡單,與單片機系統(tǒng)的底層硬件無關,在不同的平臺上只要有相應的解釋器支持就可以實現(xiàn)相同功能,大大增強了應用軟件的平臺無關性和可移植性,因而在對運行速度要求不高的系統(tǒng)中有一定的應用價值.
近年來單片機技術發(fā)展迅速,運算速度和內存空間不斷提升,這使得解釋型應用軟件在單片機應用中有了用武之地.新型的單片機測控裝置具有可裁剪的微型腳本語言解釋器,使其可以運行簡單的腳本語言,提高了單片機的使用靈活性、可擴展性和自動化程度[1].文獻[2]給出了基于嵌入式操作系統(tǒng)瀏覽器的JavaScrip t語言解釋器的設計與實現(xiàn)方法,提出并實現(xiàn)了一種擴展的算符優(yōu)先算法.在單片機中使用解釋語言編寫程序的結構,即將系統(tǒng)內對輸入、輸出部件的控制及其他所需動作,用相應的“指令代碼”表示,主體程序對代碼進行“解釋”,并執(zhí)行相應的動作[3].文獻[4]采用xml描述業(yè)務邏輯,并實現(xiàn)基于xml腳本的業(yè)務解釋器.
單片機控制系統(tǒng)中的軟件按功能分為操作控制模塊、文件讀取與存儲模塊、通信模塊、系統(tǒng)自檢模塊[5].在設計操作控制模塊中的人機交互圖形界面時,通常采用面向對象的程序設計方法,對顯示的圖形在功能上進行自頂向下、逐步細化的模塊劃分[6];具體實現(xiàn)時,采用液晶顯示屏顯示系統(tǒng)的工作狀態(tài),設置按鈕并實現(xiàn)相關邏輯判斷,提供檢測、顯示和按鍵控制的方法[7-8].文獻[9]提供 SD卡(Secure Digital Memory Card)以及 C8051F020芯片中SPI接口(Serial Peripheral Interface)的結構和工作原理,擴展了單片機存儲的方式.
目前單片機系統(tǒng)中模塊豐富且技術成熟,系統(tǒng)結構多以編譯型為主,采用解釋型的很少.基于單片機技術的發(fā)展、解釋型程序的優(yōu)點以及XML技術的應用,本文提出一種解釋型單片機系統(tǒng)的實現(xiàn)方法,討論系統(tǒng)的結構、腳本文件的設計和提高系統(tǒng)速度的方法.
系統(tǒng)由3個層次4個部分組成,如圖1所示,分別為腳本文件、解釋器、系統(tǒng)軟件和相關硬件.用戶根據(jù)所需業(yè)務邏輯通過PC機編寫XML格式的腳本文件,腳本文件存儲在基于 FA T文件系統(tǒng)的SD卡中,單片機以SPI模式讀寫SD卡中的腳本文件,腳本文件經(jīng)過解釋器解釋,調用系統(tǒng)軟件中相應的應用程序接口(Application Program Interface,API)函數(shù),進行運算并驅動控制系統(tǒng)硬件.
圖1 系統(tǒng)結構Fig.1 System architecture
系統(tǒng)軟件提供實時監(jiān)控程序、相關硬件的驅動程序以及通用的API函數(shù).系統(tǒng)的硬件可以根據(jù)用戶的需求進行設計,基本配置為單片機、液晶顯示模塊、SD卡讀寫模塊和輸入輸出模塊.
腳本文件編寫包括確定系統(tǒng)需要的業(yè)務邏輯、人機交互界面相關的數(shù)據(jù),以實現(xiàn)系統(tǒng)要求完成的功能.腳本文件分為表達、處理和數(shù)據(jù)3個部分.
表達部分:將系統(tǒng)處理的數(shù)據(jù)以一定的格式顯示給用戶,為用戶提供良好的人機交互接口.
處理部分:各種信息和數(shù)據(jù)的處理邏輯,即系統(tǒng)的業(yè)務邏輯的描述.處理部分的調用基于消息響應機制,即對系統(tǒng)的相應消息進行處理.
數(shù)據(jù)部分:為處理部分和表達部分提供相關數(shù)據(jù).根據(jù)數(shù)據(jù)的作用范圍,分為全局數(shù)據(jù)與局部數(shù)據(jù)兩部分.
腳本文件對這3個部分分別建立模板,并根據(jù)模板生成對象.所有的對象可以通過屬性和內容進行描述,屬性和內容的分配由文件的結構決定.
對象屬性包括通用屬性和專用屬性.通用屬性的名稱(Name)屬性是對象間相互區(qū)別的唯一主鍵;類型(Type)屬性用于區(qū)分對象的種類.不同類型的對象,有其相應的專用屬性描述,通過解釋器對其進行相應的處理.
腳本解釋器是單片機系統(tǒng)軟件與腳本文件之間聯(lián)系的橋梁.腳本解釋器對腳本程序進行順序讀取及解釋,根據(jù)解釋的內容調用系統(tǒng)軟件中相應的API函數(shù),進行數(shù)據(jù)的處理以及對系統(tǒng)硬件的控制.
腳本解釋器的工作流程如圖2所示.系統(tǒng)基于事件驅動,首先讀入腳本,完成初始化后,系統(tǒng)監(jiān)控程序進入循環(huán)掃描狀態(tài),等待事件觸發(fā).一旦有事件發(fā)生,即對相應腳本進行檢測,決定是否對當前事件進行消息響應.
圖2 解釋器工作流程Fig.2 Interpreter operating process
系統(tǒng)的大量信息都通過人機交互界面與用戶交流,不同的顯示信息具有不同的顯示頁面,因此,腳本文件由多個頁面構成.鑒于單片機系統(tǒng)資源的限制,將SD卡中的腳本文件以頁面為單位存儲,每一個頁面獨立保存在一個文件中,其優(yōu)點是調用某一個頁面時只需讀取對應的頁面腳本文件,無需對所有的文件進行操作,從而提高了系統(tǒng)的處理速度.對系統(tǒng)的共享數(shù)據(jù),則以全局變量的方式定義,并單獨保存在一個文件中.
表達部分的功能是將用戶需要的、經(jīng)過處理的數(shù)據(jù),通過表達模板和頁面生成器,把數(shù)據(jù)和表達形式相結合,發(fā)送給用戶瀏覽.
表達部分包括頁面、靜態(tài)文本、動態(tài)文本、靜態(tài)按鈕和動態(tài)按鈕類型對象,每一個對象都有兩個通用屬性:即名稱屬性和類型屬性.名稱屬性用于區(qū)別其他頁面,并實現(xiàn)在其他地方調用這個頁面.類型屬性表示對象的功能.除頁面外,其他4種類型對象都有顯示位置(Position)專用屬性,該屬性給出顯示的內容相對于所屬頁面左上角的起始位置坐標 x和y.下面分別描述上述5種類型對象以及所用到的其他專用屬性.
2.1.1 頁面
頁面(Disp)是用戶與系統(tǒng)進行信息交換的一種手段.
頁面范圍(Rectangle)屬性.該屬性規(guī)定頁面的尺寸,頁面默認為長方形,頁面的范圍由頁面左上角 x1,y1和頁面右下角 x2,y2的4個坐標確定.
頁面的內容由頁面包含的對象構成,對象類型有靜態(tài)文本、動態(tài)文本、靜態(tài)按鈕和動態(tài)按鈕,用以顯示系統(tǒng)的狀態(tài)和接受用戶的輸入.
2.1.2 靜態(tài)文本
靜態(tài)文本(Lable)用于顯示頁面中固有的、不變化的文字.
顯示內容(Value)屬性.該屬性描述頁面上需要顯示文字的內容,通常對應頁面的標題、對話框的名稱、按鈕的名稱等信息.
2.1.3 動態(tài)文本
動態(tài)文本(Edit)用于顯示頁面中隨系統(tǒng)狀態(tài)變化實時更新的文字.
顯示資源(Source)屬性.該屬性描述頁面上顯示內容的來源,以數(shù)據(jù)對應的變量名來引用.這些動態(tài)文本主要反映系統(tǒng)實時的數(shù)據(jù)變化、輸入輸出狀態(tài)的變化信息.
如果觸發(fā)頁面刷新(Refresh)事件,解釋器會對當前頁面的動態(tài)對象重新解釋顯示,即動態(tài)文本對象重新讀取顯示資源內容并在頁面相應位置重繪.為了節(jié)省系統(tǒng)資源,此時的靜態(tài)文本對象不采取重繪動作.頁面刷新事件可以通過點擊按鈕進行觸發(fā),也可以在任務對象中創(chuàng)建定時刷新任務進行觸發(fā).
2.1.4 靜態(tài)按鈕
靜態(tài)按鈕(Static Button)是頁面中可接受用戶固定操作的文字或圖形元素,在頁面中操作和位置固定不變的按鈕.
顯示內容(Value)屬性.該屬性描述按鈕上顯示的內容.
按鈕擴展(Expansion)屬性.該屬性可以對按鈕進行橫向或縱向的擴展,擴大按鈕的響應范圍,方便用戶的操作.
當點擊觸摸液晶屏時,系統(tǒng)接收點擊消息,消息包括被點擊點的坐標,通過坐標與當前頁面中按鈕對象的坐標相比對,確認是否有按鈕被點擊.如果有按鈕被點擊,則觸發(fā)相應的按鈕點擊(OnClick)事件,然后對按鈕對象的內容部分進行解釋執(zhí)行,完成指定的功能.按鈕對象的內容由所調用的函數(shù)對象組合構成,而函數(shù)對象來自系統(tǒng)軟件提供的API函數(shù)與驅動控制函數(shù).
2.1.5 動態(tài)按鈕
動態(tài)按鈕(Dynamic Button)是頁面中可接受用戶動態(tài)操作的文字或圖形元素,在頁面中操作和位置可變的按鈕.
顯示資源(Source)屬性.該屬性描述按鈕上顯示內容的來源.
按鈕擴展(Expansion)屬性.該屬性的作用與靜態(tài)按鈕中的按鈕擴展屬性相同.
動態(tài)按鈕給用戶提供多種選擇性操作和控制.在數(shù)據(jù)部分中,結構體變量將按鈕的顯示資源和按鈕中函數(shù)所需的參數(shù)組合起來,數(shù)組變量將結構體變量組合起來.在頁面中,按鈕對象屬性與數(shù)組變量中結構體變量對象屬性相關聯(lián).改變數(shù)組變量的下標就可以選定相應的結構體變量,進而實現(xiàn)按鈕的動態(tài)顯示和動態(tài)操作.
處理部分主要對各種信息和數(shù)據(jù)按一定的邏輯進行判斷并進行處理.處理部分包括函數(shù)類型和任務類型對象.
函數(shù)對象的可選專用屬性有參數(shù)(Parameter)屬性和返回(Return)屬性.參數(shù)屬性可以是常量與變量,返回屬性一般為變量.
系統(tǒng)軟件層提供了功能豐富的API函數(shù),這些函數(shù)采用編譯方式實現(xiàn).編寫腳本程序時只需考慮如何使用API函數(shù)來實現(xiàn)業(yè)務邏輯.這樣既方便修改業(yè)務邏輯,又提高了腳本的執(zhí)行速度.
任務對象的可選專用屬性有定時(Time)屬性和頻率(Frequency)屬性.定時屬性表示到定時屬性值指定的時刻系統(tǒng)產生定時事件;頻率屬性表示每次到達頻率屬性值指定時間的倍數(shù)時刻產生頻率事件.
任務對象的內容由所調用的函數(shù)對象組合構成.
系統(tǒng)的狀態(tài)以及系統(tǒng)處理的中間過程需以數(shù)據(jù)形式保存下來,本文在腳本和內存中各開辟一個專用區(qū)域存放數(shù)據(jù).
數(shù)據(jù)部分包括基本類型、構造類型對象.基本類型有整型、字符型、浮點型等;構造類型有數(shù)組類型、結構體類型等.
基本類型對象的專用屬性僅包括內容(Value)屬性,即變量的具體內容.
構造類型對象具有多層結構,首層包括通用屬性名稱和類型,考慮到腳本結構,增加子一層結構,將所包含的對象作為內容,實現(xiàn)結構與概念的統(tǒng)一.數(shù)組類型對象由一系列相同類型對象組成;結構體類型對象是由不同類型對象組成的集合.
根據(jù)對象定義位置的不同,可分為全局變量和局部變量;按存儲介質的不同,可分為腳本變量和內存變量.全局變量是各個頁面對象都能訪問的變量;局部變量是本頁面對象能訪問的變量.腳本變量是存儲于腳本文件區(qū)的數(shù)據(jù);內存變量是腳本文件為了提高訪問速度在單片機內存中申請的內存變量.
腳本中的全局變量和局部變量不涉及內存的申請與釋放,全局變量的作用域為所有頁面,局部變量的作用域為其定義所在的頁面.處理原則是先局部后全局,如果全局變量和局部變量同名則僅考慮局部變量.腳本文件的讀寫比較慢,如果對系統(tǒng)有速度上的要求,可以在系統(tǒng)中申請內存變量,以實現(xiàn)某些高速數(shù)據(jù)的交換和處理.
根據(jù)前述腳本文件的實現(xiàn)方法,下面給出一個具體的應用實例.腳本文件分成兩個區(qū)域:
(1)全局區(qū)域.全局區(qū)域中申請了內存變量以及任務對象,任務對象在系統(tǒng)初始化時調用系統(tǒng)時間函數(shù),且與內存變量strHour和strMinute關聯(lián).
(2)頁面區(qū)域,其下對象是局部的.頁面區(qū)域中設計了一個大小為5×10字符、名為InitDisp的頁面,頁面中申請了結構體數(shù)組類型和字符類型的腳本變量.
示例的實現(xiàn)效果如圖3所示.在第0行第6個字節(jié)(即 Position="6,0")顯示靜態(tài)文本“東華大學”;在第2行第0個字節(jié)顯示動態(tài)按鈕“頁面1”,該動態(tài)按鈕顯示的內容來源于結構體數(shù)組變量Op t[byDrift].Value的內容,點擊它會運行頁面跳轉函數(shù),進入Op t[byDrift].Uri內容所指示的頁面;在第2行第10個字節(jié)顯示靜態(tài)按鈕“Change”,點擊它則運行增加函數(shù),使腳本字符變量byD rift增加1,進而改變動態(tài)按鈕所顯示的內容;在第4行第0個字節(jié)顯示靜態(tài)文本“當前時間:時 分”;在第4行第10個字節(jié)顯示動態(tài)文本,顯示內容來自全局變量strHour,為系統(tǒng)時間的小時;在第4行第14個字節(jié)顯示動態(tài)文本,顯示內容來自全局變量strMinute,為系統(tǒng)時間的分鐘.
圖3 示例顯示畫面Fig.3 Demonstration display frame
具體代碼如下所示:
選定單片機后,提高解釋型單片機系統(tǒng)的速度主要以提高存儲讀寫速度和程序解釋速度來實現(xiàn),具體方法如下:
(1)腳本程序調用的API函數(shù)固化在單片機ROM中,腳本文件不定義函數(shù).
(2)對定頻率事件,例如采集外設數(shù)據(jù)、申請任務對象和內存變量.任務對象一旦被解釋器解釋后,就在系統(tǒng)中產生常駐的定時或者定頻率任務,按照固定的時間或者固定的頻率進行事件驅動,不需要被反復解釋.內存變量區(qū)別于在腳本中的全局變量與局部變量,內存變量在單片機內部申請,對其進行操作無需進行多次腳本文件的操作(包括查找、定位和讀寫).
(3)一個腳本程序由多個頁面構成,每一個頁面構成一個文件,文件名取自頁面的名稱,FA T文件系統(tǒng)為文件名建立索引,頁面的切換通過相應的頁面文件索引切換完成.
(4)讀取頁面文件至單片機內存后對內存中腳本進行解釋.單片機對內存的讀寫速度快于對SD卡的讀寫速度.
本文研究了單片機系統(tǒng)中解釋型應用程序的實現(xiàn)方法.從數(shù)據(jù)、處理、表達3個方面闡明了腳本文件的具體實現(xiàn),并提出了如何提高解釋型單片機系統(tǒng)的處理速度.本文提出的解釋型程序執(zhí)行方法,效率不如編譯方式高,適用于對業(yè)務邏輯需頻繁更改但是對實時性要求不高的系統(tǒng).隨著單片機處理性能的提高,解釋型程序的執(zhí)行速度也會相應提高,它的應用場合一定會不斷擴大.
[1] 何嶺松,賴紅.用于單片機測控裝置的微型腳本解釋器[J].測試技術學報,2006,20(2):118-122.
[2] 張軍林,陽富民,胡貫榮.JavaScript語言解釋器的設計與實現(xiàn)[J].計算機工程與應用,2003,30:124-125.
[3] 孫力,鮑健.嵌入式單片機應用系統(tǒng)程序結構[J].量子電子學報,2000,17(3):279-281.
[4] 王開西,鄒華,楊放春.基于 XML腳本的增值業(yè)務解釋器的研究[J].北京郵電大學學報,2004,27(S2):74-78.
[5] 項功宏,陳奇.基于單片機的提花機控制系統(tǒng)的設計[J].機床與液壓,2005(12):153-155.
[6] 王妍,張群.雙容水槽微機控制系統(tǒng)顯示軟件設計[J].遼寧大學學報,2001,28(3):234-237.
[7] 邱士安.基于C8051F020單片機的控制系統(tǒng)應用[J].大慶石油學院學報,2006,30(5):72-74.
[8] 李艷,張琛星,李明輝.基于A T89C51單片機的鍋爐液位控制系統(tǒng)[J].自動控制,2006,25(4):54-57.
[9] 李長有,武學東,孫步勝,等.基于C8051F020的SD卡主控制器設計[J].微計算機信息,2007,23(9-2):120-122.
[10] 張延園.JavaScript程序設計及應用[M].西安:西北工業(yè)大學出版社,1997.
Research of Interpreted Programming for MCU Application
LU Yu-tinga,ZANG Zhu-pinga,OU YANG Wen-binb,ZENG Pei-fenga
(a.College of Computer Science and Technology;b.College of Information Science and Technology,Donghua University,Shanghai 201620,China)
The processing and functions are defined by configuration files,an interpreted MCU(Micro controller Unit)system which is easily configured for function modifications or system version up is proposed.The business logic is defined by scrip t files in XML format and stored in SD(Secure Digital)card.The scrip t is moved into memory,and read by XML parser.The defined functions are executed by corresponding API(Application Program Interface)function calling.The MCU interpreted system based on the hardware and the system software is convenient for business logic definition,modification,and implementation.
script ; interpreted ; application ; microcontroller unit(MCU);xml
TP 314
A
2009-10-19
陸宇霆(1985—),男,上海人,碩士,研究方向為單片機系統(tǒng).E-mail:luyutingemail@gmail.com
臧珠萍(聯(lián)系人),女,講師,E-mail:zpzang@dhu.edu.cn
1671-0444(2010)03-0258-05