展子靜
(中電科思儀科技股份有限公司微波儀器事業(yè)部,山東青島,266555)
監(jiān)測接收機在設計實時性控制軟件多任務框架的過程中,已經(jīng)顧及到整機所需的實時性,具體表現(xiàn)在以下幾個方面:
(1)設計定時刷新任務,使得測量過程減少了冗余的刷新操作時間,在一定程度上節(jié)省了掃描循環(huán)的耗時;
(2)通過耗時長短和事件急迫程度,確定了較好的多任務優(yōu)先級,保證了整機處理任務調(diào)度機制的性能;
(3)通過實時時鐘中斷,設置超時錯誤,并調(diào)度相關的定時作業(yè);
但相對于整機所要求的功能和指標,如環(huán)境適應性,掃描速度,屏幕刷新率, 測量/窗口切換時間等,還有不小的差距,這主要表現(xiàn)在以下方面:
(4)在CPU占用上,許多高耗時的工作仍然需要串行執(zhí)行,簡單的計算一下,測量設置+消磁的時間將占去80ms時間,這還沒有計算其他的過程,僅此一項,就已經(jīng)不滿足掃描次數(shù)15次/秒的指標了;
(5)執(zhí)行一次全部刷新的時間太長,在軌跡(掃描的測量結果)全部顯示的情況下,3條正常檢波方式下的軌跡刷新就需要60ms左右時間,全部刷新的時間在100ms左右,這和屏幕刷新率的指標要求也有差距。
解決這些問題,僅靠提高CPU執(zhí)行速度和硬件反映速度是不現(xiàn)實的,因此必須優(yōu)化整機軟件的執(zhí)行過程。在儀器的整個測量過程中,執(zhí)行最為頻繁的代碼和序列占比一般不超過整個軟件的10%,但其CPU等資源占用卻高達90%以上,因此優(yōu)化的對象將主要是這些關鍵的執(zhí)行序列;在整機多任務軟件框架已經(jīng)建立的情況下,關鍵執(zhí)行序列是可以確定下來的。
關鍵執(zhí)行序列應該在監(jiān)測接收機最常工作的狀態(tài)下獲取,只有這樣,才能夠反映大部分時間下的執(zhí)行性能,而這種狀態(tài)下的性能也正是我們最關心的。我們把監(jiān)測接收機執(zhí)行性能歸結為兩種:突發(fā)事件響應能力、常態(tài)任務執(zhí)行能力,諸如和使用者實現(xiàn)交互的按鍵、GPIB以及部分異常屬于突發(fā)事件,而監(jiān)測接收機執(zhí)行各種狀態(tài)下的掃描屬于常態(tài)執(zhí)行。使用者希望將監(jiān)測接收機設置在他所需要的狀態(tài)下進行測量,當然他最主要關注的是當狀態(tài)設定完成后監(jiān)測接收機在沒有外界干擾的情況下完成掃描測量,因此常態(tài)執(zhí)行情況下參與掃描測量循環(huán)的執(zhí)行序列就是整機最為關鍵的軟件序列。
監(jiān)測接收機正常的掃描流程如圖1所示,可以看出大部分的執(zhí)行過程都是在測量主任務中完成的,使用實時時鐘進行超時檢測和回掃消磁;由于刷新任務是定時器觸發(fā)的,該任務肯定會延長掃描的執(zhí)行過程,因此關鍵路徑也必須包含刷新在內(nèi)。其中觸發(fā)掃描、結束掃描處理等過程均屬于判斷或者賦值,耗時不多,而整機狀態(tài)分解和信號分析功能并不是每次都執(zhí)行固定的內(nèi)容,并且和使用者的操作相關,也可以不考慮;因此比較重要的是掃描過程以及定時刷新幾個部分的時間耗費,經(jīng)過一段時間的統(tǒng)計,我們獲得了這些部分平均的執(zhí)行時間,如表1所示。
表1 關鍵序列個部分的執(zhí)行時間
圖1 正常掃描過程的執(zhí)行序列
從統(tǒng)計結果可以看出,即使回掃消磁和等待取樣的過程可以和刷新任務重疊,但測量設置時間+數(shù)據(jù)組裝時間+刷新時間都已經(jīng)達到150ms,如果犧牲刷新次數(shù)指標,可以采用150ms一次刷新,但掃描次數(shù)也僅有6-7次,如果保證掃描次數(shù)在12次/秒以上,在1秒鐘內(nèi)剩余的時間只有不到400ms,僅能掃描3-4次,無論如何都和指標要求差的太遠。因此對關鍵執(zhí)行序列中的這幾個處理過程進行優(yōu)化是必須的。
編碼方面:軟件是逐漸積累的過程,從設計之初到最終的定型,改動很大也很頻繁,在這個過程中難免會殘留一些并不是實現(xiàn)功能所必需的代碼(比如測試用的類Printf操作,或者一些變量,甚至一些循環(huán)體),在關鍵執(zhí)行序列中,應逐個函數(shù)嚴格審查,確保代碼精煉。
減少硬件冗余操作:假設端口A是一個16位寄存器,它的16位輸出分別控制4種相互獨立的功能,我們的部分功能程序采用了如圖2所示的A類的實現(xiàn)方式:
圖2 端口操作的優(yōu)化
由于監(jiān)測接收機大部分硬件端口操作是通過SPI總線進行的,實現(xiàn)單一的端口操作就需要較長時間,而采用類似圖2中B的實現(xiàn)方式,則可以節(jié)省一次甚至多次的端口操作。
屏蔽調(diào)試輸出:在代碼中嵌入調(diào)試輸出代碼是一種普遍采用的調(diào)試方法,這些代碼往往在定型的版本中也不刪除,它們的執(zhí)行或者部分執(zhí)行也要消耗時間,較好的解決辦法是采用IF_DEBUG類似的宏定義,在不需要調(diào)試的場合#undef調(diào)試輸出。
監(jiān)測接收機在測量時主要用到本振、微波通道、射頻、中頻、信號采集等幾大部分,參數(shù)分解和硬件端口設置也主要集中在這幾個模塊。監(jiān)測接收機的本振包括3個主要的環(huán)路,這些環(huán)路由大量檢波、鑒相、反饋和積分等動態(tài)電路單元組建而成,它們在參數(shù)設置過程中達到穩(wěn)態(tài)鎖定的時間都比較長,特別是YTO環(huán)路,而在此過程中,系統(tǒng)不能設置其他的硬件端口,只能延時等待。此時僅本振設置(其中延時占絕大部分)就需要支出40-50ms的時間,是導致設置時間延長的最大因素!因此如果能夠可以設置一種算法,可以有效縮短本振環(huán)路的設置時間,則整個測量設置時間就可以大大縮短,對于這個問題,我們經(jīng)嘗試后采用了如下的三種方法。
串行設置轉(zhuǎn)換為并行設置:本振控制通常的做法是多個環(huán)路逐次完成鎖定,這樣所有的延時都被串行累加(如圖3中第一部分所示);而實際上每個環(huán)路都是由設置過程、延時過程、鎖定判斷過程組成的,由于幾個環(huán)路的鎖定時間不同,通過合理安排各個環(huán)路的各個過程環(huán)節(jié)的執(zhí)行順序,可以實現(xiàn)多個環(huán)路鎖定過程(電路穩(wěn)定時間)的并行處理,采取所有環(huán)路設置→延時→小數(shù)環(huán)檢測→取樣環(huán)檢測→YTO閉環(huán)→YTO鎖定延時→YTO環(huán)檢測的方法,這樣就節(jié)省了至少一個環(huán)路的鎖定過程時間。(如圖3中第二部分所示)。
圖3 本振控制算法優(yōu)化示意圖
增加YTO環(huán)路鎖定誤差電壓檢測和補償算法:在YTO環(huán)路中,鎖相誤差電壓是影響環(huán)路鎖定的關鍵環(huán)節(jié),誤差電壓反饋給振蕩器驅(qū)動電路作為振蕩器驅(qū)動的微調(diào),而一旦誤差電壓穩(wěn)定后,振蕩器就能夠鎖定;因此如果能夠使得誤差電壓快速趨0穩(wěn)定,環(huán)路鎖定的時間必定大大縮短。為此我們設計了環(huán)路振蕩器的誤差電壓歸零算法,在本振閉環(huán)后,通過對誤差電壓的監(jiān)測,將其數(shù)值按照換算關系直接補償給振蕩器的主調(diào)諧器(包括粗調(diào)和細調(diào)),實現(xiàn)在誤差電壓近似零的情況下實現(xiàn)鎖定,并獲得此時附加給主調(diào)諧器的補償量,當本振以同樣的狀態(tài)進行后續(xù)的掃描過程時,在進行本振預置時就將補償量植入,這樣YTO主環(huán)路從設置到最終的鎖定時間就可以大大縮短。(如圖3中第二部分所示)。
更改延時的實現(xiàn)方式:為實現(xiàn)YTO環(huán)路的鎖定延時,我們最初采用的是很多次硬件端口操作的延時方法,實際上這種方法占用了大量的CPU時間,而采用vxWorks提供的延時,雖然精度較低,但此時仍然能夠滿足我們的要求,而且在延時時軌跡處理和刷新任務可以獲得執(zhí)行時間,這樣更能提高CPU的時間利用率,也能夠提高整個過程的運行效率。
通過以上的3種方法,本振的穩(wěn)態(tài)鎖定時間從50ms左右可以直接壓縮到10-15ms。
監(jiān)測接收機的中頻部分提供整機各種分辨率帶寬選擇,提供可以上下浮動的增益或者衰減,而且精度都非常高,與此對應,中頻部分電路復雜度很高,控制參數(shù)較多,且大部分都是12位的DAC數(shù)據(jù),此外還有各種增益和帶寬轉(zhuǎn)換誤差補償數(shù)據(jù)。為了保證中頻部分的精度,對所有這些參數(shù)都設計了復雜的校準算法,在溫度變化超過一定范圍后自動調(diào)用中頻校準程序,實現(xiàn)所有中頻參數(shù)的校準。
校準的結果是獲得DAC數(shù)值(也可以認為是電壓)和相關中頻電路參數(shù)的一一映射關系,這些映射關系表示著DAC輸出電壓值和相關參數(shù)特性的曲線,如各級LC濾波器中心頻率/DAC電壓曲線、帶寬/DAC電壓曲線、增益/電壓曲線、對數(shù)保真度補償曲線等等;部分參數(shù)由于關聯(lián)性較強,只能形成多元的映射關系,在數(shù)據(jù)構成形式形成多維的校準補償參數(shù)組,如晶體濾波器的中心、帶寬和對稱度和前置放大器的關系,一個參數(shù)的改變會引起該級濾波器所有特性發(fā)生漂移。同時由于DAC取值范圍廣(0-4095),所有這些曲線/曲面的數(shù)據(jù)量非常龐大,也正是由于這個原因,在設計之初,校準程序直接把校準結果數(shù)據(jù)保存在文件當中,在中頻模塊參數(shù)設置時,從文件中讀出,采用查表映射的方法,逐一完成各電路單元功能設置。顯然,文件的讀取速度受存儲介質(zhì)性能和文件系統(tǒng)效率的影響太大。使用WindView進行執(zhí)行效能評測發(fā)現(xiàn),中頻部分參數(shù)設置是除本振外耗時最長的,經(jīng)過深入的實驗驗證,超長耗時就是由于文件訪問產(chǎn)生的。為降低設置過程的耗時,必須將校準數(shù)據(jù)裝載到內(nèi)存當中,并為每個參數(shù)建立查找表和相關的快速搜索算法,如線性查找表和二叉樹搜索算法等。在VxWorks平臺下,由于頻繁的上下文切換原因,采用局部變量存放大量的數(shù)據(jù)不是很好的做法, 因此所有的這些查找表都需要直接以全局變量的形式定義,在儀器的整個運行過程中一直有效。通過大量的存儲空間換取文件操作的耗時,配合高效的查找算法,中頻設置耗時高的問題得以解決。
通過上述的優(yōu)化設計,使得模塊設置的時間大大縮短,最長不到15ms即可以完成設置工作。但如果顯示刷新任務的時間不進行優(yōu)化,它所占用的時間比例仍然非常巨大。
通過對刷新過程利用WindView進行分析,發(fā)現(xiàn)刷新任務的主要耗時在3條軌跡的刷新上。軌跡的刷新采用的是先擦除上次掃描結果然后刷新當前掃描結果的方式,還需要根據(jù)軌跡坐標判斷是否重繪網(wǎng)格線,整個過程如圖4中流程A所示。之所以采用這種刷新算法,是因為我們所有的繪圖函數(shù)都是直接采用UGL下提供的諸如LineTo之類的接口函數(shù),在軟件執(zhí)行流中直接操作圖形設備,只有這樣才能有效避免刷新過程帶來的閃爍,也就是說從刷新算法過程本身無法實現(xiàn)優(yōu)化。
圖4 顯示刷新流程優(yōu)化算法
VxWorks下的WindML庫針對某些型號的顯示控制器支持雙緩沖刷新模式,它的基本原理如下:圖形設備對應兩個顯示內(nèi)存映像,其中一個內(nèi)存映像映射到物理圖形設備,而正在執(zhí)行的刷新操作的對象是圖形設備的另外一個內(nèi)存映像,操作結束后,使用切換功能將被操作的映像映射到圖形設備,而解除映射的映像可以接收刷新操作,雙緩沖模式有兩個優(yōu)點,對內(nèi)存操作的速度比直接操作圖形緩沖區(qū)快,同時雙緩沖操作可以最大程度地避免閃爍。因此,我們把原來直接操作圖形設備的流程改為雙緩沖操作,流程簡化為圖4流程B所示,并且確實改善了刷新速度(降低到不足30ms)。
通過各種優(yōu)化手段,關鍵序列中的耗時大大降低,例如在80ms的定時刷新率下,刷新耗時約占350ms,采用本章第一節(jié)所用的測量狀態(tài),在沒有狀態(tài)變更的情況下,掃描一次的時間耗費不到35ms,在1秒鐘之內(nèi),掃描次數(shù)可達20次左右。優(yōu)化前后的WindView截圖如圖5和圖6所示。
圖5 優(yōu)化前250ms內(nèi)完成1次刷新,在1秒鐘內(nèi)僅有4-5次完全完成
圖6 優(yōu)化后,在250ms內(nèi)完成5次掃描
本文從實時性的角度出發(fā),分析了高性能監(jiān)測接收機在指標體系約束下對其控制軟件的實時性需求,根據(jù)這些需求選擇合適的軟硬件控制平臺,分析監(jiān)測接收機所要處理的各種事件,重點進行其處理流程和多任務體系框架的設計實現(xiàn),并根據(jù)指標要求和實驗結果進行了關鍵實時序列的優(yōu)化設計。
本文研究內(nèi)容完成后,首先在監(jiān)測接收機控制體系上取得突破,掌握了具有較高實時性的控制軟件多任務框架設計方法,滿足應用領域越來越高的測試需求,使得能夠使監(jiān)測接收機相關實時性、測試速度的性能指標有很大提高;其次通過實際的工程實踐和系統(tǒng)分析,探索出提高監(jiān)測接收機實時性和多任務調(diào)度效率的技術措施,為類似項目提供一些參照和可行的設計方法。