《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于DSP28335的超聲報(bào)靶器軟件程序優(yōu)化設(shè)計(jì)
基于DSP28335的超聲報(bào)靶器軟件程序優(yōu)化設(shè)計(jì)
2017年微型機(jī)與應(yīng)用第9期
管文輝,蘇永亮
總參謀部第六十研究所, 江蘇 南京 210016
摘要: 針對(duì)DSP具有浮點(diǎn)運(yùn)算單元,運(yùn)算能力強(qiáng)的特點(diǎn),提出了一種將復(fù)雜的報(bào)靶算法移植到DSP中進(jìn)行計(jì)算的軟件設(shè)計(jì)方法,并在此過程中通過移植μCOSII操作系統(tǒng),對(duì)任務(wù)間進(jìn)行合理調(diào)度。優(yōu)化報(bào)靶算法等措施有效提高了多靶標(biāo)同時(shí)報(bào)靶的實(shí)時(shí)性和可靠性。
Abstract:
Key words :

  管文輝,蘇永亮

 ?。倕⒅\部第六十研究所, 江蘇 南京 210016)

  摘要:針對(duì)DSP具有浮點(diǎn)運(yùn)算單元,運(yùn)算能力強(qiáng)的特點(diǎn),提出了一種將復(fù)雜的報(bào)靶算法移植到DSP中進(jìn)行計(jì)算的軟件設(shè)計(jì)方法,并在此過程中通過移植μCOSII操作系統(tǒng),對(duì)任務(wù)間進(jìn)行合理調(diào)度。優(yōu)化報(bào)靶算法等措施有效提高了多靶標(biāo)同時(shí)報(bào)靶的實(shí)時(shí)性和可靠性。

  關(guān)鍵詞DSP28335;μCOS-II移植;超聲報(bào)靶;程序優(yōu)化

  中圖分類號(hào):TP311.1文獻(xiàn)標(biāo)識(shí)碼:ADOI: 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.

0引言

  目前針對(duì)大口徑直瞄火炮射擊進(jìn)行報(bào)靶的設(shè)備主要采用開放式激波報(bào)靶技術(shù)和光幕報(bào)靶技術(shù)。激波報(bào)靶技術(shù)由于其布設(shè)簡便、野外適應(yīng)性強(qiáng)、報(bào)靶精度較高的特點(diǎn)目前已在不少部隊(duì)和基地中推廣使用。但由于開放式激波報(bào)靶算法較為復(fù)雜,目前常用的做法是將傳感器采集的時(shí)差數(shù)據(jù)通過單片機(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ì)算,并判斷命中效果。

1硬件平臺(tái)設(shè)計(jì)

  以往的靶標(biāo)中多采用ARM處理器或單片機(jī)將FPGA采集的時(shí)差數(shù)據(jù)打包上傳,經(jīng)過上位機(jī)計(jì)算命中位置后再將命中數(shù)據(jù)下發(fā)到靶標(biāo)端的方法。在開放式激波檢靶算法中通過幾何法推導(dǎo)了激波到達(dá)時(shí)間與彈丸速度、水平入射角、高低入射角、著靶位置等待求量的約束關(guān)系,然后將激波傳遞時(shí)間表示為包含待求量的顯式方程,最后通過最小二乘法求解著靶參數(shù)。由于算法中存在有浮點(diǎn)數(shù)的運(yùn)算,有必要在新的設(shè)計(jì)中選擇具有浮點(diǎn)運(yùn)算單元的DSP來代替原來的處理器,這里選擇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)過FPGA采集各路信號(hào)的時(shí)差后將該數(shù)據(jù)經(jīng)串口送至DSP28335。同時(shí)系統(tǒng)配合外圍電路還要完成與無線電臺(tái)的無線通信、靶標(biāo)起倒控制、指示燈狀態(tài)指示、命中效果觸發(fā)等任務(wù)。系統(tǒng)硬件平臺(tái)框圖如圖1所示。

001.jpg

2系統(tǒng)任務(wù)規(guī)劃及μCOS-II移植

  根據(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ì)量,縮短開發(fā)周期和拓展DSP應(yīng)用范圍有著重要的意義。

  μCOS-II作為一個(gè)源代碼公開的多任務(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ì)來說比較容易。移植工作包括以下幾個(gè)方面內(nèi)容:(1)了解所采用的系統(tǒng)核心;(2)編寫移植代碼;(3)測試移植代碼。這里主要闡述編寫移植代碼過程中的幾個(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)的宏定義, 定義堆棧增長方向宏定義。OS_CPU_C.C文件中需要編寫簡單的C函數(shù),其中1個(gè)是任務(wù)堆棧初始化函數(shù),另外9個(gè)是系統(tǒng)對(duì)外的接口函數(shù),這9個(gè)函數(shù)必須聲明,但是并不一定要包含任何代碼。OS_CPU_A.ASM文件里主要寫了幾個(gè)與硬件相關(guān)的代碼,包含任務(wù)的切換和中斷入口函數(shù)。其中任務(wù)的切換需要用匯編語言自行編寫一個(gè)函數(shù)_OSCtxSw來實(shí)現(xiàn)。在編寫這些文件時(shí)需要注意以下幾個(gè)方面:

  (1) 聲明數(shù)據(jù)類型。μCOS-II考慮到通用性, 在內(nèi)核中使用了自定義數(shù)據(jù)類型, 此類型與編譯器無關(guān), 這就要求移植時(shí)必須定義微處理器的數(shù)據(jù)類型與μCOSII的數(shù)據(jù)類型相一致, 保證移植后的μCOSII在DSP28335平臺(tái)上順利運(yùn)行, 在移植中應(yīng)將其聲明為CCS編譯器可識(shí)別的類型。

 ?。?)中斷宏定義。μCOS-II在內(nèi)核中通過禁止中斷來保護(hù)臨界區(qū),因此需要在C語言中插入禁止和允許中斷的匯編代碼,DSP里用SETC INTM來屏蔽中斷,用CLRC INTM來使能中斷[3]。所以移植代碼定義了下面兩條宏定義:

  #define OS_ ENTER_CRITICAL0 asm (“SETC INTM”)

  #define OS_ EXIT_ CRITICAL0 asm (“CLRC INTM”)

 ?。?)設(shè)置棧的增長方向。μCOSII需要知道堆棧的底端地址在哪里,所以需要指明堆棧的增長方向。絕大多數(shù)微處理器和微控制器的堆棧是從上往下遞減的, 但是也有某些處理器使用的是相反的方式。DSP28335 的堆棧方向是從下往上增長的,所以:#define OS_STK_GROWTH 0;

  通過對(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ù)。

002.jpg

  軟件整體結(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é)合靶型判斷是否命中,測得彈速是否超速及串口數(shù)據(jù)回復(fù),優(yōu)先級(jí)9;任務(wù)3負(fù)責(zé)電機(jī)起靶、倒靶控制及指示燈控制。首先中斷負(fù)責(zé)進(jìn)行串口數(shù)據(jù)接收并根據(jù)協(xié)議拆包解析,之后通過郵箱MboxSem觸發(fā)Task0或Task3,在Task0中通過函數(shù)CSenslocCal()初始化相關(guān)參數(shù),之后通過getparam()采集時(shí)差、溫度、風(fēng)速、角度等信息,通過caculate()函數(shù)進(jìn)行相關(guān)計(jì)算即可完成報(bào)靶數(shù)據(jù)處理。

3程序優(yōu)化設(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ù)都有自己的堆??臻g,任務(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()來檢測每個(gè)任務(wù)已經(jīng)使用的堆??臻g和剩余的堆棧空間來確定堆棧的大小。

003.jpg

  初次運(yùn)行時(shí)出現(xiàn)了無法allocate.text段的報(bào)錯(cuò)提示,這表示程序段代碼和常量占用內(nèi)存過多,需要對(duì)其分配進(jìn)行重新定義。通常片內(nèi)RAM地址分配如圖3所示,其中RAML段為0x008000~0x00B000,RAMH段為0x00C000~0x00F000。通過調(diào)整RAML和RAMH的分配空間定義來滿足程序要求。這里重新定義RAML段為0x008000~0x00C000,RAMH段為0x00D000~0x00F000。

  在進(jìn)行報(bào)靶數(shù)據(jù)的計(jì)算時(shí)有時(shí)會(huì)遇到RAM內(nèi)部空間不足導(dǎo)致數(shù)據(jù)溢出,最終造成無法計(jì)算的問題。通過以下兩種方法來解決:(1)如果數(shù)據(jù)為.const類型,定義在Flash中;(2)利用外擴(kuò)SRAM,具體方法是在CMD文件中定義一段數(shù)據(jù)空間,之后將較大的數(shù)組編譯到CMD中定義的段中,并在外擴(kuò)SRAM的函數(shù)中予以說明。

  3.2程序及算法優(yōu)化

  根據(jù)算法模型求解方程組X=[SxSyVbαβτ]T,獲得彈丸命中位置、著靶速度及入射角度。由于解算方程組是一組復(fù)雜的非線性方程組,沒有解析解,必須通過GaussNewton等迭代方法進(jìn)行求解[4]。這里取一定的初始迭代值,根據(jù)解非線性方程的最小二乘廣義逆法進(jìn)行迭代,得到最終結(jié)果。算法中對(duì)于初始迭代值的選取有一定的要求,若初始值選取相差真實(shí)值太大,則會(huì)出現(xiàn)無窮大解,因此實(shí)際求解中采用區(qū)間搜尋的方法進(jìn)行迭代計(jì)算[5]。將算法編寫成C代碼,劃分為125個(gè)區(qū)間,而在實(shí)際計(jì)算中,一般在得到正確結(jié)果即退出搜索程序,若125個(gè)區(qū)間全部迭代完成,仍然沒有結(jié)果,則解算不出。

  為了計(jì)算的快捷和報(bào)靶的可靠,得到時(shí)差數(shù)據(jù)后DSP先按照協(xié)議打包將該組數(shù)據(jù)上傳給上位機(jī),然后再自行進(jìn)行計(jì)算。由于報(bào)靶算法的核心是解非線性方程組,解算需要通過多次迭代進(jìn)行,且即使是多次迭代也會(huì)存在非線性方程組無解的可能性。故此運(yùn)算過程在時(shí)間和結(jié)果上存在一定的不確定性。在規(guī)定時(shí)間內(nèi)DSP得出計(jì)算結(jié)果,則存儲(chǔ)結(jié)果并進(jìn)入命中判斷任務(wù),如在規(guī)定時(shí)間內(nèi)沒有算出結(jié)果,則由上位機(jī)發(fā)送結(jié)果給靶標(biāo),明確告知該發(fā)數(shù)據(jù)是否命中,后續(xù)無需繼續(xù)進(jìn)入判斷命中任務(wù)。如都沒有計(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í)隨即開始啟動(dòng)定時(shí)任務(wù),在規(guī)定的時(shí)間內(nèi)DSP得出方程解則通過I/O口對(duì)定時(shí)器復(fù)位;如沒有在規(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ì)來進(jìn)行的。由于PC內(nèi)存容量大,所以計(jì)算起來并不耗時(shí)。但是將此算法放置在DSP中進(jìn)行計(jì)算則要占用大量內(nèi)存資源,且需要耗費(fèi)較長時(shí)間。特別是當(dāng)步戰(zhàn)車等裝甲車輛采用較小口徑速射炮進(jìn)行射擊時(shí),往往會(huì)造成程序的反應(yīng)過慢,影響部隊(duì)訓(xùn)練。這里提出一種新的快捷算法。根據(jù)目前裝甲部隊(duì)訓(xùn)練大綱中的主要靶型分析,基本形狀都是凸多邊形。故本設(shè)計(jì)中具體采用射線法,實(shí)現(xiàn)思想為:由點(diǎn)P向X軸正方向發(fā)射一條射線,穿過多邊形線段上的次數(shù)為奇數(shù)則在多邊形內(nèi),為偶數(shù)則在多邊形外。其中圖形是由按逆時(shí)針方向排列的各個(gè)頂點(diǎn)來表示的,值得注意的是最后要再將第一個(gè)點(diǎn)表示一次。如圖5所示對(duì)于正面坦克靶型P1為命中彈點(diǎn),P2為未命中彈點(diǎn)。通過此算法DSP能夠快速地判斷出彈著點(diǎn)是否命中了靶型。

 

004.jpg

  

005.jpg

4結(jié)論

  本設(shè)計(jì)通過在DSP28335平臺(tái)上移植μCOSII操作系統(tǒng),對(duì)平臺(tái)的軟硬件設(shè)置進(jìn)行優(yōu)化配置,通過對(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é)果的功能。通過實(shí)際應(yīng)用對(duì)比,靶標(biāo)系統(tǒng)通信網(wǎng)絡(luò)的數(shù)據(jù)量降低了約30%,系統(tǒng)報(bào)靶功能的實(shí)時(shí)性和穩(wěn)定性得到了明顯提高。

  參考文獻(xià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.

 ?。?] 陳果,馮靜.ucos系統(tǒng)及其消息隊(duì)列詳析[J].電子元器件應(yīng)用,2011(3):3842.

 ?。?] 許川佩,王偉,戴葵,等.實(shí)時(shí)多任務(wù)系統(tǒng)uc/osII在DSP上的移植[J].微計(jì)算機(jī)信息,2007,23(35):64-66.

 ?。?] 蔣東東. 基于被動(dòng)聲定位的大靶面彈著點(diǎn)坐標(biāo)測量方法研究[D].南京:南京理工大學(xué),2011.

 ?。?] 樊長虹,杜立,管文輝,等.風(fēng)速對(duì)聲點(diǎn)陣立靶系統(tǒng)建模及算法的影響研究[J].應(yīng)用聲學(xué),2015,34(5):21-24.


此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。