趙 宇, 翟劍錕, 劉 偉
(1.北京信息科技大學 北京 100085;2.中科院計算與通信學院 北京 100049;3.北京德潤興業科技開發公司 北京100195)
在主流技術應用開發過程中,對于那些已經存在的很多理論和技術,在實現的過程中需要有針對性性地刪減和優化,以此達到應用級別開發的目的。在集成測試過程中無法發現的很多問題,在系統測試中,要采用更加極端的手段來甄別系統的穩定性和高性能。
應用處理部分包括小鍵盤的處理響應、液晶顯示、監控模塊的數據內容和執行機構等。
應用進程中的微型數據庫操作分布在設備參數記錄的讀取中,按照用戶信息查詢當前用戶信息的存款記錄,完成操作后的應用通訊記錄的插入和應用記錄的插入等。
人機界面的處理包括用戶鍵盤信息的響應、液晶顯示界面和蜂鳴器提示等。
監控模塊的數據校驗是必須的在運行過程中,會出現很多意想不到的情況,只有在數據校驗通過的前提下才能保證執行機構工作的正確性。

圖1 應用處理流程圖Fig.1 Flow chart of application process
后臺監控軟件負責設備的平臺監視和控制命令。
設備通訊模式分為在線控制模式、在線監視模式、離線工作模式3種。
1)在線控制模式 監控人員有設備啟動、停止、停止用戶消費的控制權限。在發現用戶消費過程中信息以及操作有問題的情況下可以立即停止消費行為,并暫時取消用戶的消費權限,用來控制用戶消費的合法性和合理性。
2)在線監視模式 監控人員可以看到設備狀態,用戶消費的全部信息無任何控制權限。
3)離線工作模式 設備網絡通訊故障時,離線工作。消費記錄存儲在設備內,在線后可以上傳至監控軟件。
通訊進程使用設備的配置參數和后臺軟件通訊,傳輸用戶信息,消費狀態,消費記錄、信息。以此達到監控用戶消費全過程過程,收集用戶消費信息的目的。

圖2 通訊監控處理流程圖Fig.2 Flow chort of communication process
應用處理進程響應用戶操作并生成消費數據記錄,監控通訊進程負責傳送消費數據記錄給監控軟件,進程間使用消息通訊。
當設備工作在線模式時,監控軟件垂詢設備當前的工作狀態。其中一項是消費數據記錄的狀態,有兩種狀態當前沒有新的數據記錄和有新的數據記錄。應用處理進程在查詢當前所有消費數據之后得到了一個新的數據記錄的數目,并發消息給監控通訊進程。或者監控通訊進程自己去查詢當前數據記錄的狀態。
在微型數據庫的建立過程中使用的是最簡單的順序存儲,并且未對任何屬性建立有效的索引。在消費記錄中有一個字段是是否上傳標志。在監控通訊進程中,需要查詢是否有未上傳的數據并設置當前的通訊狀態。監控程序實時查詢設備的狀態,包括是否有問上傳的數據。
開發完成并功能測試后,順利的進入了試點測試階段。
試點現場安裝了4臺設備,開始的兩個星期內沒有任何問題,設備運行良好、通訊正常、消費數據記錄完整。
到了第3個星期,突然一臺設備無法正常通訊。拆機檢查后沒有發現任何硬件故障和軟件問題,無奈之下更換新的設備。過了一個星期,一臺設備又出現了通訊故障。嚴重時4臺設備完全通訊不上,無法監控設備狀態。只能離線運行模式,使用U盤采集離線數據后上傳到監控軟件。

圖3 現場設備布局示意圖Fig.3 Field device location
現場發現了一個問題,在通訊過程中,如果數據記錄的條數超過了1 000條,通訊就會出現時斷時續的情況。如果超過了5 000條,通訊基本上就斷開了。在清除了數據記錄后銅尊正常。也就是在數據記錄條數,小于1 000條時通訊正常,大于1 000條通訊時,通訊異常。
現場反饋的問題總結非常清晰明了。在測試了文件操作的過程中發現,文件操作嚴重制約了實時響應速度。
下面這個函數是在消費記錄中讀取是否有未上傳數據,在記錄操作1 000條后,執行時間大于100 ms,這個時間在通訊監控程序的響應范圍之外。這時就會出現通訊中斷的情況。

優化策略一:添加文件上傳標志索引文件。
建立一個索引文件,在生成數據記錄的同時記錄當前數據記錄的指針和數據記錄的匯總信息包括未上傳數據記錄的個數。結構和操作如圖4所示。

圖4 索引文件、記錄文件物理關系示意圖Fig.4 Relationship of index file and record file
對應的操作有生成記錄時的是否上傳判斷,添加至交易記錄中。如果未上傳修改索引文件的記錄數量,并添加未上傳指針。在通訊正常情況下,上傳未上傳交易記錄數量,按照指針提取交易記錄。上傳記錄成功后,修改交易記錄標志,修改未上傳記錄數目,刪除未上傳指針。

圖5 記錄操作流程圖Fig.5 Flow chart of record operation
在經過一段時間的程序調整和測試發現,當前應用程序完全符合實時要求。但是程序的修改和實時響應的優化代價實在是太大了。在應用處理和通訊的流程中,添加了太多的操作。使得程序的可讀性和可維護性變得越來越差。
優化策略二:添加通訊文件
經過一段時間的調整和測試,最終采用了添加一個通訊文件的模式。在記錄生成的同時在通訊文件和記錄文件添加,記錄文件中的上傳屬性作廢。

圖6 記錄存儲示意圖Fig.6 Schematic diagram of record storage

圖7 記錄操作示意圖Fig.7 Schematic diagram of record operation
不需要生成未上傳記錄數目。在通訊文件內都是未上傳的記錄。查詢未上傳記錄數目,只要獲取通訊文件的尺寸除以一個元組的尺寸就是當前未上傳記錄的數目。
不需要生成未上傳記錄指針。通訊文件內都是未上傳記錄,順次上傳即可。同時不需要操作記錄文件內的記錄。
按照這個模式優化的結果。操作簡單、實時響應比第一種的還要快,完全滿足通訊要求。通過現場測試,經過策略二的優化的應用程序 完全滿足應用需要。結構簡單、實時性強。
在了解標準文件操作的時效性后,按照數據庫技術哈希索引的技術指導,建立了一個高效率的索引文件,提高了數據搜索的效率。然而卻帶來了文件操操作的延時。對于嵌入式開發來講,應用程序結構簡單、操作方便和高效率、實時性才是更加重要的。對于大型的數據庫系統技術指導下的實現方法一般結構都相對復雜,處理流程過長。需要在各種技術指導下,改進和選擇最簡單、有效的方法來實現嵌入式應用。通過本文的應用程序的文件操作優化過程,希望能讓更多的人了解到結構簡單的應用程序、效率高的文件操作才是嵌入式應用追求的目標之一。
參考資料:
[1]孫瓊.嵌入式Linux應用程序開發詳解[M].北京:人民郵電出版社,2006.
[2]Molay B.Understanding unix/Linux programming[M].北京:清華大學出版,2004.
[3]朱義君,楊育紅,趙凱,等.AT91系列ARM微控制器體系結構與開發實例[M].北京:北京航空航天大學出版社,2005.
[4]Silberschatz A.數據庫系統概念[M].5版.唐世渭,馬秀莉,楊冬青,譯.北京:機械工業出版社,2008.
[5]孫瓊.嵌入式Linux應用程序開發詳解[M].北京:人民郵電出版社,2006.
[6]Owens M.The definitive guide to SQLite[M].Apress,2006.