一種高效DSO波形顯示算法的實(shí)現(xiàn)
2.2 遮蔽分析
遮蔽分析主要作用就是在兩個(gè)通道同時(shí)工作的情況下,分析代表不同通道數(shù)據(jù)的直線段在繪圖時(shí)互相的遮擋關(guān)系,以達(dá)到少畫點(diǎn)的目的,這種會(huì)相互遮擋的直線段在液晶屏上的橫坐標(biāo)總是相同的。數(shù)據(jù)先進(jìn)入的通道的優(yōu)先級(jí)高即此通道的波形可以覆蓋其他通道的波形。當(dāng)代表不同通道的直線段在位置上有重合關(guān)系時(shí),優(yōu)先級(jí)高的線段覆蓋優(yōu)先級(jí)低的線段,這樣可以避免重合部分的重復(fù)繪制。根據(jù)線段之間不同位置關(guān)系,遮蔽關(guān)系有6種:即(nlo>lo,nhihi),(nlo>lo,nhi>=hi,nlo=hi),(nlo>-hi),(nlo=lo,nhihi,nhi>=lo),(nlo= lo,nhi>=hi),(nhilo)。其中:hi,lo分別代表高優(yōu)先級(jí)線段的上、下端點(diǎn)值,nhi、nlo分別代表低優(yōu)先級(jí)線段的上、下端點(diǎn)值。以nlolo,nhi>hi的情況為例說明遮蔽分析的原理如圖4所示。圖中1代表先入數(shù)據(jù)線段,2代表后入數(shù)據(jù)線段,其程序具體流程如下:獲取先入數(shù)據(jù)的lo,hi,color,聲明一個(gè)CLINE類型的指針變量pdline,判斷是否還有其他通道數(shù)據(jù),如果沒有,則直接結(jié)束遮蔽分析(遮蔽分析在這種情況下無意義,它起到減少畫點(diǎn)作用是兩通道同時(shí)工作時(shí));如果有另一通道工作,則處理之后線段被分為了三部分。其遮蔽后的效果如圖5所示,最下面的線段2將作為鏈表頭結(jié)點(diǎn),成員值分別是pdline→lo=nlo,pdline→hi=lo-1,pdline→color=ncolor;線段1則成為第二結(jié)點(diǎn),pdline→next→lo=lo,pdline→next→hi=hi,pdline→next→color=color;最上面的線段2為第三結(jié)點(diǎn),pdline→next→next→lo= hi+1,pdline→next→next→hi=nhi,pdline→next→next→color=ncolor。鏈表的方向是由下至上的指向各線段的,這樣可以簡化清除和繪圖分析,具體將在下文說明??梢?,如果不進(jìn)行遮蔽分析,當(dāng)兩個(gè)通道同時(shí)工作時(shí),考慮到數(shù)據(jù)線段的優(yōu)先級(jí),線段繪制的先后順序是先2后1,繪制線段的總長度為(nhi-nlo)+(hi-lo)。進(jìn)行遮蔽分析后,線段繪制的順序是由鏈表的指向性確定的,繪制線段總長度為nhi-nlo。本文引用地址:http://cafeforensic.com/article/161750.htm
2.3 清除和繪圖分析
在繪制新波形之前,總要先清除舊波形。一般的方法就是,將舊波形數(shù)據(jù)存于待清除波形列表中,通過畫點(diǎn)函數(shù)將舊波形畫成背景色,然后再繪制新波形,清除和繪圖本質(zhì)都是調(diào)用畫點(diǎn)函數(shù)進(jìn)行繪圖。大多數(shù)情況下,待清除的波形和待繪制的波形都會(huì)有重合部分,如果通過一定的分析找到重合部分,重合部分不清除也不重新繪制,等同于少調(diào)用了兩次畫點(diǎn)函數(shù),這就大幅縮短波形顯示線程占用CPU的時(shí)間,特別是在示波器采樣率較低,波形接近滿屏的情況下,效果更加明顯。
p1,p2分別是指向待清除、繪制線段數(shù)據(jù)結(jié)構(gòu)的CLINE類型指針,待清除和待繪制的直線段位置關(guān)系有6種:(p1→lop2→lo,p1→hi>p2 →hi),(p1→lop2→lo,p1→hi>=p2→lo,p1→hi=p2→hi),(p1→lo>=p2→lo,p1→hi=p2→hi,p1→hi>p2→lo),(p1→lo>=p2→lo,p1→hi=p2→hi,p1→hi=p2→lo),(p1→hip2→lo),(p1→lo>p2→hi)。以p1→lop2→lo,p1→hi>p2→hi的情況為例,如圖5所示,說明分析的原理。如果p1或p2任一為空,則結(jié)束分析;若都不為空,則需要對(duì)鏈表進(jìn)行插入操作,即將原待清除的線段分成兩部分。令value= p1→hi,當(dāng)待清除和待繪制線段的顏色相同時(shí),p1→lo不變,p1→hi=p2→lo-1,p1→next→lo=p2→hi+1,p1→next→hi=vslue,由于重合部分顏色相同,故不清除也不用繪圖,p2指向的結(jié)點(diǎn)被刪除。當(dāng)顏色不同時(shí),p1→lo不變,p1→hi=p2→lo-1,p1→next→lo=p2→hi+1,p1→next→hi=value,重合部分顏色不同故此部分仍需繪制,p2→hi、p2→lo都不變。由于遮蔽分析使鏈表方向是自下而上的指向各個(gè)線段,故只需讓p1或者p2中指向位置在下面線段的指針指向其下一結(jié)點(diǎn)即可,之后判斷是否符合循環(huán)條件。這樣可以大大簡化循環(huán)流程,假設(shè)清除線段和繪圖線段各有三段,由于鏈表具有自下而上的指向性,則最多循環(huán)3次即可以完成分析;如果沒有指向性,那么就至少需要循環(huán)3×3次才能完成分析。
3 結(jié)語
采樣頻率是衡量數(shù)字存儲(chǔ)示波器示波器性能的重要指標(biāo),但如果顯示算法不理想,即使采樣頻率較高也無法將采集的波形及時(shí)的顯示在使用者面前。畫點(diǎn)函數(shù)占用CPU時(shí)間較其他函數(shù)久,這會(huì)導(dǎo)致優(yōu)先級(jí)低的任務(wù)長時(shí)間無法得到CPU的使用權(quán)。因此一種有效的波形顯示算法對(duì)于提升示波器的性能同樣是十分重要的。算法已在投產(chǎn)的示波器上得到很好的應(yīng)用,有效解決了波形接近滿屏情況下的拖屏現(xiàn)象,對(duì)于提升示波器的顯示速度乃至整機(jī)性能有很大幫助。
評(píng)論