摘要:介紹一種應用于液晶顯示的數字存儲示波器波形顯示的算法。通過分析相鄰采樣數據之間的大小關系。得到逼近波形的系列直線段;通過分析不同通道直線段的位置關系,得到最佳的線段合成效果;通過分析待清除線段和需繪制線段的位置關系,得到最優的清除和繪圖列表。算法可有效地提升示波器的顯示速度。
關鍵詞:線程" title="線程">線程;LCD逼近" title="LCD逼近">LCD逼近;遮蔽分析" title="遮蔽分析">遮蔽分析;清除和繪圖分析" title="清除和繪圖分析">清除和繪圖分析
數字存儲示波器所顯示的波形是由系列直線段有效地逼近而得到的。畫波形函數是由畫點函數按照一定的算法寫出的,不同的算法畫出的波形在速度和效果上會有所不同。因此有效的波形顯示算法可以很大程度上提高波形的顯示速度和視覺效果。
1 示波器程序模塊的介紹
示波器采用嵌入式μC/OS操作系統。每一個任務都是一個無限循環。為了降低耦合,增強內聚,需要建立消息郵箱,以保證不同任務之間的通信。示波器的模塊示意圖如圖1所示。

2 波形顯示線程和畫波形函數的說明
波形顯示功能是由波形顯示線程實現的,畫點、畫線、顯示字符等都由基本的畫點函數來實現。一種常見的波形顯示方法就是:分別根據示波器通道的采樣數據繪制波形,待下一屏顯示數據準備就緒之后,將上一屏已經顯示的波形全部擦除,再繪制準備就緒的波形數據。由于執行畫點函數比較耗時,特別是在接近圖形滿屏的情況下,畫點函數被調用次數較多,嚴重影響其他線程獲得CPU的使用權,有可能會產生拖屏現象。示波器采用一種高效地波形顯示算法,可以有效的解決上述問題,算法是在畫波形函數中實現的。圖2是畫波形函數的流程圖。

首先,聲明一個wavebuff類型的指針pdl,pdl指向封裝采樣數據的鏈表。如果示波器僅有一個通道處于工作狀態,則pdl→next指向NULL;如果雙通道同時工作,則將激活狀態的通道數據封裝于鏈表的頭結點,next指向封裝另一通道數據的結點。以鏈表的方式封裝數據,靈活方便,節省內存,擴展性強,如果有其他功能需求可以自由擴展鏈表長度。波形需要由經過處理的采樣值構造系列直線段逼近得到。直線段的參數由CLINE類型的數據結構封裝。遮蔽分析主要是為了在兩通道同時工作的情況下,盡量減少畫點。清屏和繪圖分析是為了將待擦除線段與待繪制線段進行比較,重復線段保留,多余線段擦除,進一步達到減少畫點的目的。

2.1 構造繪圖線段
畫波形函數是由畫點函數按照一定的算法寫出的,不同的算法繪制波形在速度和效果上會有所不同。波形顯示算法要求達到波形粗細均勻,連續,繪制的速度快。示波器每屏顯示600個離散數據。如果僅是將經處理后的采樣離散數據在LCD對應的位置畫出點來,波形不是連續的,而是離散的點,且看起來不清晰。構造繪圖線段的作用就是根據相鄰離散數據的大小關系得到繪制連續波形的一系列直線段的上下端點數值,流程圖如圖3所示。其方法如下:定義一個wavebuff類型的指針pdl。如果當前點的值大于與之相鄰的下一點的值即pdl→buff[i]>pdl→buff[i+1],那么當前點所對應的直線段的上端點值hi=pdl→buff[i],下端點值lo=pdl→buff[i+1]+1;如果pdl→buff[i]
2.2 遮蔽分析
遮蔽分析主要作用就是在兩個通道同時工作的情況下,分析代表不同通道數據的直線段在繪圖時互相的遮擋關系,以達到少畫點的目的,這種會相互遮擋的直線段在液晶屏上的橫坐標總是相同的。數據先進入的通道的優先級高即此通道的波形可以覆蓋其他通道的波形。當代表不同通道的直線段在位置上有重合關系時,優先級高的線段覆蓋優先級低的線段,這樣可以避免重合部分的重復繪制。根據線段之間不同位置關系,遮蔽關系有6種:即(nlo>lo,nhilo,nhi>=hi,nlo<=hi),(nlo>-hi),(nlo<=lo,nhi =lo),(nlo<= lo,nhi>=hi),(nhi

2.3 清除和繪圖分析
在繪制新波形之前,總要先清除舊波形。一般的方法就是,將舊波形數據存于待清除波形列表中,通過畫點函數將舊波形畫成背景色,然后再繪制新波形,清除和繪圖本質都是調用畫點函數進行繪圖。大多數情況下,待清除的波形和待繪制的波形都會有重合部分,如果通過一定的分析找到重合部分,重合部分不清除也不重新繪制,等同于少調用了兩次畫點函數,這就大幅縮短波形顯示線程占用CPU的時間,特別是在示波器采樣率較低,波形接近滿屏的情況下,效果更加明顯。
p1,p2分別是指向待清除、繪制線段數據結構的CLINE類型指針,待清除和待繪制的直線段位置關系有6種:(p1→lo

3 結語
采樣頻率是衡量數字存儲示波器示波器性能的重要指標,但如果顯示算法不理想,即使采樣頻率較高也無法將采集的波形及時的顯示在使用者面前。畫點函數占用CPU時間較其他函數久,這會導致優先級低的任務長時間無法得到CPU的使用權。因此一種有效的波形顯示算法對于提升示波器的性能同樣是十分重要的。算法已在投產的示波器上得到很好的應用,有效解決了波形接近滿屏情況下的拖屏現象,對于提升示波器的顯示速度乃至整機性能有很大幫助。
