管文輝,蘇永亮
(總參謀部第六十研究所, 江蘇 南京 210016)
基于DSP28335的超聲報(bào)靶器軟件程序優(yōu)化設(shè)計(jì)
管文輝,蘇永亮
(總參謀部第六十研究所, 江蘇 南京 210016)
針對(duì)DSP具有浮點(diǎn)運(yùn)算單元,運(yùn)算能力強(qiáng)的特點(diǎn),提出了一種將復(fù)雜的報(bào)靶算法移植到DSP中進(jìn)行計(jì)算的軟件設(shè)計(jì)方法,并在此過(guò)程中通過(guò)移植μCOS-II操作系統(tǒng),對(duì)任務(wù)間進(jìn)行合理調(diào)度。優(yōu)化報(bào)靶算法等措施有效提高了多靶標(biāo)同時(shí)報(bào)靶的實(shí)時(shí)性和可靠性。
DSP28335;μCOS-II移植;超聲報(bào)靶;程序優(yōu)化
目前針對(duì)大口徑直瞄火炮射擊進(jìn)行報(bào)靶的設(shè)備主要采用開(kāi)放式激波報(bào)靶技術(shù)和光幕報(bào)靶技術(shù)。激波報(bào)靶技術(shù)由于其布設(shè)簡(jiǎn)便、野外適應(yīng)性強(qiáng)、報(bào)靶精度較高的特點(diǎn)目前已在不少部隊(duì)和基地中推廣使用。但由于開(kāi)放式激波報(bào)靶算法較為復(fù)雜,目前常用的做法是將傳感器采集的時(shí)差數(shù)據(jù)通過(guò)單片機(jī)及通信鏈路上傳至上位機(jī)進(jìn)行計(jì)算,計(jì)算完成后再對(duì)照實(shí)際使用的靶型確認(rèn)命中位置與效果,最終再將命中結(jié)果反饋給靶標(biāo)終端。當(dāng)多臺(tái)靶標(biāo)組成的靶標(biāo)系統(tǒng)同時(shí)進(jìn)行射擊訓(xùn)練時(shí),短時(shí)間內(nèi)會(huì)產(chǎn)生大量時(shí)差數(shù)據(jù)需要上傳與計(jì)算。而靶標(biāo)系統(tǒng)中的主控計(jì)算機(jī)同時(shí)還負(fù)責(zé)控制靶標(biāo)的功能,此時(shí)容易造成主控計(jì)算機(jī)端負(fù)荷迅速增大,還易導(dǎo)致報(bào)靶時(shí)間延遲甚至報(bào)靶數(shù)據(jù)丟失的風(fēng)險(xiǎn)。為了提高激波報(bào)靶的實(shí)時(shí)性和可靠性,需要將算法下移,在靶標(biāo)終端中完成計(jì)算,并判斷命中效果。
以往的靶標(biāo)中多采用ARM處理器或單片機(jī)將FPGA采集的時(shí)差數(shù)據(jù)打包上傳,經(jīng)過(guò)上位機(jī)計(jì)算命中位置后再將命中數(shù)據(jù)下發(fā)到靶標(biāo)端的方法。在開(kāi)放式激波檢靶算法中通過(guò)幾何法推導(dǎo)了激波到達(dá)時(shí)間與彈丸速度、水平入射角、高低入射角、著靶位置等待求量的約束關(guān)系,然后將激波傳遞時(shí)間表示為包含待求量的顯式方程,最后通過(guò)最小二乘法求解著靶參數(shù)。由于算法中存在有浮點(diǎn)數(shù)的運(yùn)算,有必要在新的設(shè)計(jì)中選擇具有浮點(diǎn)運(yùn)算單元的DSP來(lái)代替原來(lái)的處理器,這里選擇TI公司的TMS320F28335芯片,它釆用高性能靜態(tài)CMOS技術(shù),具有150 MHz 的高速處理能力,具備32位浮點(diǎn)運(yùn)算單元,6個(gè)DMA 通道支持ADC、McBSP 和EMIF,片內(nèi)集成有34 K×16 bit的RAM和256 K×16 bit的Flash,程序在Flash中直接運(yùn)行時(shí)代碼執(zhí)行性能大致為90~100 MIPS[1]。報(bào)靶電路中激波采集部分電路將采集到的時(shí)差信號(hào)送到FPGA,經(jīng)過(guò)FPGA采集各路信號(hào)的時(shí)差后將該數(shù)據(jù)經(jīng)串口送至DSP28335。同時(shí)系統(tǒng)配合外圍電路還要完成與無(wú)線電臺(tái)的無(wú)線通信、靶標(biāo)起倒控制、指示燈狀態(tài)指示、命中效果觸發(fā)等任務(wù)。系統(tǒng)硬件平臺(tái)框圖如圖1所示。
根據(jù)軟件整體結(jié)構(gòu)的特點(diǎn),在本設(shè)計(jì)應(yīng)用中既需要進(jìn)行較復(fù)雜的浮點(diǎn)運(yùn)算,又需要對(duì)多個(gè)控制對(duì)象進(jìn)行統(tǒng)籌控制。單一的DSP芯片運(yùn)行前后臺(tái)操作系統(tǒng)可以進(jìn)行復(fù)雜的浮點(diǎn)運(yùn)算但很難同時(shí)兼顧多個(gè)任務(wù)間的統(tǒng)籌調(diào)度。而如果使用ARM+DSP的方式進(jìn)行配合處理,產(chǎn)品的成本和系統(tǒng)的復(fù)雜程度都將大大提高。因此將μCOS-II移植到DSP等高性能處理器上對(duì)于提高產(chǎn)品的質(zhì)量,縮短開(kāi)發(fā)周期和拓展DSP應(yīng)用范圍有著重要的意義。
圖1 電氣原理框圖
μCOS-II作為一個(gè)源代碼公開(kāi)的多任務(wù)實(shí)時(shí)操作系統(tǒng),最多可支持63個(gè)任務(wù),其內(nèi)核為占先式,支持信號(hào)量、郵箱、消息隊(duì)列等多種進(jìn)程間通信機(jī)制。同時(shí)用戶可以根據(jù)需求對(duì)內(nèi)核中的功能模塊裁剪。由于在μCOS-Ⅱ設(shè)計(jì)時(shí)就已經(jīng)充分考慮了可移植性,所以它的移植相對(duì)來(lái)說(shuō)比較容易。移植工作包括以下幾個(gè)方面內(nèi)容:(1)了解所采用的系統(tǒng)核心;(2)編寫(xiě)移植代碼;(3)測(cè)試移植代碼。這里主要闡述編寫(xiě)移植代碼過(guò)程中的幾個(gè)關(guān)鍵文件,即OS_CPU.H、OS_CPU_C.C以及OS_CPU_A.ASM這三個(gè)文件[2]。
其中OS_CPU.H文件,其主要作用是聲明與硬件相關(guān)的數(shù)據(jù)類型,定義與中斷有關(guān)的宏定義, 定義堆棧增長(zhǎng)方向宏定義。OS_CPU_C.C文件中需要編寫(xiě)簡(jiǎn)單的C函數(shù),其中1個(gè)是任務(wù)堆棧初始化函數(shù),另外9個(gè)是系統(tǒng)對(duì)外的接口函數(shù),這9個(gè)函數(shù)必須聲明,但是并不一定要包含任何代碼。OS_CPU_A.ASM文件里主要寫(xiě)了幾個(gè)與硬件相關(guān)的代碼,包含任務(wù)的切換和中斷入口函數(shù)。其中任務(wù)的切換需要用匯編語(yǔ)言自行編寫(xiě)一個(gè)函數(shù)_OSCtxSw來(lái)實(shí)現(xiàn)。在編寫(xiě)這些文件時(shí)需要注意以下幾個(gè)方面:
(1) 聲明數(shù)據(jù)類型。μCOS-II考慮到通用性, 在內(nèi)核中使用了自定義數(shù)據(jù)類型, 此類型與編譯器無(wú)關(guān), 這就要求移植時(shí)必須定義微處理器的數(shù)據(jù)類型與μCOS-II的數(shù)據(jù)類型相一致, 保證移植后的μCOS-II在DSP28335平臺(tái)上順利運(yùn)行, 在移植中應(yīng)將其聲明為CCS編譯器可識(shí)別的類型。
(2)中斷宏定義。μCOS-II在內(nèi)核中通過(guò)禁止中斷來(lái)保護(hù)臨界區(qū),因此需要在C語(yǔ)言中插入禁止和允許中斷的匯編代碼,DSP里用SETC INTM來(lái)屏蔽中斷,用CLRC INTM來(lái)使能中斷[3]。所以移植代碼定義了下面兩條宏定義:
#define OS_ ENTER_CRITICAL0 asm (“SETC INTM”)
#define OS_ EXIT_ CRITICAL0 asm (“CLRC INTM”)
(3)設(shè)置棧的增長(zhǎng)方向。μCOS-II需要知道堆棧的底端地址在哪里,所以需要指明堆棧的增長(zhǎng)方向。絕大多數(shù)微處理器和微控制器的堆棧是從上往下遞減的, 但是也有某些處理器使用的是相反的方式。DSP28335 的堆棧方向是從下往上增長(zhǎng)的,所以:#define OS_STK_GROWTH 0;
通過(guò)對(duì)應(yīng)用功能的需求分析,歸納出幾個(gè)主要的功能任務(wù)模塊:(1)與上位機(jī)的通信數(shù)據(jù)交互任務(wù),在該任務(wù)中需要根據(jù)協(xié)議解析起靶、倒靶、復(fù)位等控制命令,還需要將本機(jī)的起倒、位置、是否命中、電池電量等狀態(tài)信息匯總打包回傳;(2)報(bào)靶數(shù)據(jù)處理任務(wù),該任務(wù)主要負(fù)責(zé)收集時(shí)差數(shù)據(jù)并通知其他任務(wù)進(jìn)行上傳或計(jì)算,同時(shí)還負(fù)責(zé)監(jiān)控?cái)?shù)據(jù)計(jì)算任務(wù);(3)報(bào)靶數(shù)據(jù)計(jì)算任務(wù),該任務(wù)主要負(fù)責(zé)報(bào)靶數(shù)據(jù)的方程組解算;(4)靶型命中計(jì)算,主要負(fù)責(zé)根據(jù)Flash中存儲(chǔ)的幾種靶型判斷命中坐標(biāo)是否落在靶面上;(5)電機(jī)控制和指示燈控制等配屬任務(wù)。
軟件整體結(jié)構(gòu)如圖2所示。一共分為4個(gè)任務(wù),任務(wù)0負(fù)責(zé)報(bào)靶時(shí)差數(shù)據(jù)采集,優(yōu)先級(jí)7;任務(wù)1負(fù)責(zé)時(shí)差數(shù)據(jù)計(jì)算,優(yōu)先級(jí)8;任務(wù)2對(duì)計(jì)算結(jié)果結(jié)合靶型判斷是否命中,測(cè)得彈速是否超速及串口數(shù)據(jù)回復(fù),優(yōu)先級(jí)9;任務(wù)3負(fù)責(zé)電機(jī)起靶、倒靶控制及指示燈控制。首先中斷負(fù)責(zé)進(jìn)行串口數(shù)據(jù)接收并根據(jù)協(xié)議拆包解析,之后通過(guò)郵箱MboxSem觸發(fā)Task0或Task3,在Task0中通過(guò)函數(shù)CSenslocCal()初始化相關(guān)參數(shù),之后通過(guò)getparam()采集時(shí)差、溫度、風(fēng)速、角度等信息,通過(guò)caculate()函數(shù)進(jìn)行相關(guān)計(jì)算即可完成報(bào)靶數(shù)據(jù)處理。
3.1 設(shè)置優(yōu)化
由于報(bào)靶算法涉及到32位浮點(diǎn)數(shù)運(yùn)算,為保證實(shí)時(shí)性必須對(duì)程序進(jìn)行優(yōu)化設(shè)計(jì)。首先是任務(wù)堆棧的分配。堆棧用于任務(wù)切換和影響中斷時(shí)保存CPU寄存器中的內(nèi)容及其他任務(wù)私有數(shù)據(jù)。每個(gè)任務(wù)都有自己的堆棧空間,任務(wù)堆棧的容量是由應(yīng)用程序指定的,堆棧大小必需要考慮用戶的任務(wù)所調(diào)用的函數(shù)嵌套情況,分配的局部變量的數(shù)目,以及可能的中斷服務(wù)程序嵌套的堆棧需求,另外必須能存儲(chǔ)所有的CPU寄存器。DSP28335包含32K×16 bit的RAM,分成8塊4 KB大小的區(qū)域,本設(shè)計(jì)中一共需要5個(gè)任務(wù),初步設(shè)定每個(gè)任務(wù)堆棧大小為512 B,在后續(xù)任務(wù)中堆棧大小可以由兩種方案確定:
(1)先將堆棧設(shè)置為最大,再逐步減小,直到程序不能正常運(yùn)行,此時(shí)為所創(chuàng)建任務(wù)的實(shí)際所需堆棧大小。
(2)利用μCOS-II自帶的堆棧檢查函數(shù)OSTaskStkChk()來(lái)檢測(cè)每個(gè)任務(wù)已經(jīng)使用的堆??臻g和剩余的堆??臻g來(lái)確定堆棧的大小。
初次運(yùn)行時(shí)出現(xiàn)了無(wú)法allocate.text段的報(bào)錯(cuò)提示,這表示程序段代碼和常量占用內(nèi)存過(guò)多,需要對(duì)其分配進(jìn)行重新定義。通常片內(nèi)RAM地址分配如圖3所示,其中在進(jìn)行報(bào)靶數(shù)據(jù)的計(jì)算時(shí)有時(shí)會(huì)遇到RAM內(nèi)部空間不足導(dǎo)致數(shù)據(jù)溢出,最終造成無(wú)法計(jì)算的問(wèn)題。通過(guò)以下兩種方法來(lái)解決:(1)如果數(shù)據(jù)為.const類型,定義在Flash中;(2)利用外擴(kuò)SRAM,具體方法是在CMD文件中定義一段數(shù)據(jù)空間,之后將較大的數(shù)組編譯到CMD中定義的段中,并在外擴(kuò)SRAM的函數(shù)中予以說(shuō)明。
圖2 控制軟件整體結(jié)構(gòu)圖
圖3 片內(nèi)RAM地址分配
RAML段為0x008000~0x00B000,RAMH段為0x00C000~0x00F000。通過(guò)調(diào)整RAML和RAMH的分配空間定義來(lái)滿足程序要求。這里重新定義RAML段為0x008000~0x00C000,RAMH段為0x00D000~0x00F000。
3.2 程序及算法優(yōu)化
根據(jù)算法模型求解方程組X=[SxSyVbαβτ]T,獲得彈丸命中位置、著靶速度及入射角度。由于解算方程組是一組復(fù)雜的非線性方程組,沒(méi)有解析解,必須通過(guò)Gauss-Newton等迭代方法進(jìn)行求解[4]。這里取一定的初始迭代值,根據(jù)解非線性方程的最小二乘廣義逆法進(jìn)行迭代,得到最終結(jié)果。算法中對(duì)于初始迭代值的選取有一定的要求,若初始值選取相差真實(shí)值太大,則會(huì)出現(xiàn)無(wú)窮大解,因此實(shí)際求解中采用區(qū)間搜尋的方法進(jìn)行迭代計(jì)算[5]。將算法編寫(xiě)成C代碼,劃分為125個(gè)區(qū)間,而在實(shí)際計(jì)算中,一般在得到正確結(jié)果即退出搜索程序,若125個(gè)區(qū)間全部迭代完成,仍然沒(méi)有結(jié)果,則解算不出。
為了計(jì)算的快捷和報(bào)靶的可靠,得到時(shí)差數(shù)據(jù)后DSP先按照協(xié)議打包將該組數(shù)據(jù)上傳給上位機(jī),然后再自行進(jìn)行計(jì)算。由于報(bào)靶算法的核心是解非線性方程組,解算需要通過(guò)多次迭代進(jìn)行,且即使是多次迭代也會(huì)存在非線性方程組無(wú)解的可能性。故此運(yùn)算過(guò)程在時(shí)間和結(jié)果上存在一定的不確定性。在規(guī)定時(shí)間內(nèi)DSP得出計(jì)算結(jié)果,則存儲(chǔ)結(jié)果并進(jìn)入命中判斷任務(wù),如在規(guī)定時(shí)間內(nèi)沒(méi)有算出結(jié)果,則由上位機(jī)發(fā)送結(jié)果給靶標(biāo),明確告知該發(fā)數(shù)據(jù)是否命中,后續(xù)無(wú)需繼續(xù)進(jìn)入判斷命中任務(wù)。如都沒(méi)有計(jì)算出結(jié)果,為防止DSP計(jì)算顯式方程時(shí)對(duì)于極個(gè)別數(shù)據(jù)陷入死循環(huán),除了設(shè)置必要的軟件看門狗以外還需要設(shè)計(jì)外部強(qiáng)制復(fù)位程序。當(dāng)FPGA將時(shí)差數(shù)據(jù)交予DSP進(jìn)行解算時(shí)隨即開(kāi)始啟動(dòng)定時(shí)任務(wù),在規(guī)定的時(shí)間內(nèi)DSP得出方程解則通過(guò)I/O口對(duì)定時(shí)器復(fù)位;如沒(méi)有在規(guī)定的時(shí)間內(nèi)得出方程解,則FPGA對(duì)DSP進(jìn)行強(qiáng)制復(fù)位。數(shù)據(jù)處理程序流程圖如圖4所示。
完成報(bào)靶時(shí)差數(shù)據(jù)的解算后還需要針對(duì)特定的靶型數(shù)據(jù)判定彈著點(diǎn)是否命中靶標(biāo)。在上位機(jī)進(jìn)行計(jì)算時(shí)是按照每個(gè)像素的坐標(biāo)逐個(gè)比對(duì)來(lái)進(jìn)行的。由于PC內(nèi)存容量大,所以計(jì)算起來(lái)并不耗時(shí)。但是將此算法放置在DSP中進(jìn)行計(jì)算則要占用大量?jī)?nèi)存資源,且需要耗費(fèi)較長(zhǎng)時(shí)間。特別是當(dāng)步戰(zhàn)車等裝甲車輛采用較小口徑速射炮進(jìn)行射擊時(shí),往往會(huì)造成程序的反應(yīng)過(guò)慢,影響部隊(duì)訓(xùn)練。這里提出一種新的快捷算法。根據(jù)目前裝甲部隊(duì)訓(xùn)練大綱中的主要靶型分析,基本形狀都是凸多邊形。故本設(shè)計(jì)中具體采用射線法,實(shí)現(xiàn)思想為:由點(diǎn)P向X軸正方向發(fā)射一條射線,穿過(guò)多邊形線段上的次數(shù)為奇數(shù)則在多邊形內(nèi),為偶數(shù)則在多邊形外。其中圖形是由按逆時(shí)針?lè)较蚺?/p>
圖4 數(shù)據(jù)處理程序流程圖
列的各個(gè)頂點(diǎn)來(lái)表示的,值得注意的是最后要再將第一個(gè)點(diǎn)表示一次。如圖5所示對(duì)于正面坦克靶型P1為命中彈點(diǎn),P2為未命中彈點(diǎn)。通過(guò)此算法DSP能夠快速地判斷出彈著點(diǎn)是否命中了靶型。
圖5 命中判定算法示意圖
本設(shè)計(jì)通過(guò)在DSP28335平臺(tái)上移植μCOS-II操作系統(tǒng),對(duì)平臺(tái)的軟硬件設(shè)置進(jìn)行優(yōu)化配置,通過(guò)對(duì)多個(gè)任務(wù)間的調(diào)度和監(jiān)控、優(yōu)化報(bào)靶算法等多種措施實(shí)現(xiàn)了報(bào)靶算法的下移和程序的優(yōu)化設(shè)計(jì),使得靶標(biāo)具備了自主計(jì)算彈著點(diǎn)、自主判斷命中結(jié)果的功能。通過(guò)實(shí)際應(yīng)用對(duì)比,靶標(biāo)系統(tǒng)通信網(wǎng)絡(luò)的數(shù)據(jù)量降低了約30%,系統(tǒng)報(bào)靶功能的實(shí)時(shí)性和穩(wěn)定性得到了明顯提高。
[1] Texas Instruments. TMS28335 digital signal ctontrollers data manual[EB/OL].(2016-03-09)[2016-12-01].http://www-s.ti.com/sc/tchlit,2007.
[2] 陳果,馮靜.ucos系統(tǒng)及其消息隊(duì)列詳析[J].電子元器件應(yīng)用,2011(3):38-42.
[3] 許川佩,王偉,戴葵,等.實(shí)時(shí)多任務(wù)系統(tǒng)uc/os-II在DSP上的移植[J].微計(jì)算機(jī)信息,2007,23(35):64-66.
[4] 蔣東東. 基于被動(dòng)聲定位的大靶面彈著點(diǎn)坐標(biāo)測(cè)量方法研究[D].南京:南京理工大學(xué),2011.
[5] 樊長(zhǎng)虹,杜立,管文輝,等.風(fēng)速對(duì)聲點(diǎn)陣立靶系統(tǒng)建模及算法的影響研究[J].應(yīng)用聲學(xué),2015,34(5):21-24.
The optimization design of the software program of ultrasonic scoring target based on DSP28335
Guan Wenhui, Su Yongliang
(The 60th Research Institute of General Staff Dept of PLA, Nanjing 210016,China)
Aiming at the characteristics that DSP has FPU and strong computational capability,a kind of software design method that transplant a complex target scoring algorithm into DSP is presented in this paper. In this process, the μCOS-II operating system is transplanted to realize a proper scheduling between tasks. The optimized target scoring algorithm has been used in the target scoring process in order to improve the reliability and the reaction speed of the system.
DSP28335; transplant μCOS-Ⅱ system; shock wave target scoring; optimization program
TP311.1
A
10.19358/j.issn.1674- 7720.2017.09.025
管文輝,蘇永亮.基于DSP28335的超聲報(bào)靶器軟件程序優(yōu)化設(shè)計(jì)[J].微型機(jī)與應(yīng)用,2017,36(9):85-87,91.
2016-12-12)
管文輝(1981-),男,碩士,工程師,主要研究方向:智能控制、弱信號(hào)檢測(cè)。
蘇永亮(1987-),男,碩士,工程師,主要研究方向:傳感器信號(hào)處理技術(shù)。