2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩48頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、<p><b>  摘 要</b></p><p>  本論文選自《皮衛(wèi)星星載計(jì)算機(jī)設(shè)計(jì)》課題,主要針對(duì)皮衛(wèi)星星載計(jì)算機(jī)的軟件調(diào)試系統(tǒng)進(jìn)行研究。軟件系統(tǒng)作為皮衛(wèi)星星載計(jì)算機(jī)的靈魂,是皮衛(wèi)星星載計(jì)算機(jī)正常運(yùn)行的關(guān)鍵。本項(xiàng)目具有較高的工程意義和應(yīng)用價(jià)值。在工程上,是利用現(xiàn)有開源代碼和免費(fèi)工具的一種全新的嘗試;在應(yīng)用上,是一套完整的皮衛(wèi)星星載計(jì)算機(jī)軟件調(diào)試系統(tǒng)。論文針對(duì)皮衛(wèi)星星載計(jì)算機(jī)軟

2、件調(diào)試系統(tǒng),做了以下工作:</p><p>  從遠(yuǎn)程調(diào)試的過程入手,層次分析了軟件調(diào)試系統(tǒng)的原理;</p><p>  解釋了軟件調(diào)試系統(tǒng)的層次結(jié)構(gòu),并根據(jù)層次結(jié)構(gòu),制訂出軟件調(diào)試系統(tǒng)的設(shè)計(jì)方案,分析各個(gè)設(shè)計(jì)分案的利弊;</p><p>  根據(jù)選擇的設(shè)計(jì)方案,給出軟件調(diào)試系統(tǒng)各個(gè)模塊的詳細(xì)設(shè)計(jì),并指出各個(gè)模塊各個(gè)功能的實(shí)現(xiàn)要點(diǎn);</p><p

3、>  對(duì)軟件的基本功能和部分性能做了測(cè)試,給出了測(cè)試方法和測(cè)試結(jié)果。</p><p><b>  本文的創(chuàng)新點(diǎn)在于:</b></p><p>  嘗試突破集成化開發(fā)環(huán)境(IDE)的束縛,訂制一套全新的工具集合;</p><p>  完全使用免費(fèi)軟件和開源代碼,并嘗試開源。</p><p>  通過以上工作,明確了皮

4、衛(wèi)星星載計(jì)算機(jī)軟件調(diào)試系統(tǒng)的組成、原理和實(shí)現(xiàn)方法,為接下來皮衛(wèi)星星載計(jì)算機(jī)軟件系統(tǒng)的構(gòu)建打下了基礎(chǔ)。</p><p>  關(guān)鍵詞:皮衛(wèi)星,軟件調(diào)試系統(tǒng),工具集合,開源</p><p><b>  ABSTRACT</b></p><p>  This thesis which is selected from national 863 proj

5、ects "Pico-satellite onboard computer design" mainly research on Pico-satellite onboard computer software debugging system. As the soul of Pico-satellite onboard computer, Software system is the key of Pico-sat

6、ellite onboard computer’s normal running. The project has a high engineering significance and application value. In engineering, it is a new attempt to build a toolchain fully with open source code and free tools. In app

7、lication, it is a </p><p>  1) Software debugging system principles are analyzed from the start of remote debug process,</p><p>  2) Explain the hierarchical structure of the software debugging

8、system, formulate a design scheme for software debugging system according to the hierarchy and analyze the pros and cons of each design divisional,</p><p>  3) According to the selected design, it is given t

9、hat detailed design of each module in software debugging system and pointed out that the implementation point of the various functions of each module,</p><p>  4) Do the test on the basic functions and some

10、properties of the software and give the test method and test results.</p><p>  Innovations of this paper are:</p><p>  1) Try to break through the bondage of integrated development environment (

11、IDE) and tailored a new set of tools.</p><p>  2) Use free tools and open source code completely, and try to open source.</p><p>  Through the above work, it has been clear about components, pri

12、nciples and implementation methods of Pico-satellite onboard computer software debugging system, and the foundation for the next Pico-satellite onboard computer software system is built.</p><p>  KEY WORDS:P

13、ico-satellite, software debugging system, toolchain, open source</p><p><b>  目 錄</b></p><p><b>  第一章 緒論5</b></p><p><b>  1.1引言5</b></p>

14、<p>  1.2 國內(nèi)外微小衛(wèi)星發(fā)展概況5</p><p>  1.3 皮衛(wèi)星星載計(jì)算機(jī)軟件發(fā)展概況7</p><p>  1.4 本論文的內(nèi)容和意義7</p><p>  1.4.1 本論文的目的7</p><p>  1.4.2 本論文的意義和創(chuàng)新點(diǎn)7</p><p>  1.4.3 論文的

15、章節(jié)安排8</p><p>  第二章 OBC軟件聯(lián)機(jī)調(diào)試原理9</p><p>  2.1 OBC軟件調(diào)試過程9</p><p>  2.1.1 OBC軟件的生成過程9</p><p>  2.1.2 OBC軟件的調(diào)試過程9</p><p>  2.2 OBC軟件調(diào)試系統(tǒng)結(jié)構(gòu)9</p>&l

16、t;p>  2.1.1 傳統(tǒng)OBC軟件調(diào)試系統(tǒng)結(jié)構(gòu)9</p><p><b>  2.3 小結(jié)11</b></p><p>  第三章 OBC軟件調(diào)試系統(tǒng)結(jié)構(gòu)設(shè)計(jì)12</p><p>  3.1 設(shè)計(jì)方案描述12</p><p>  3.1.1 基于驅(qū)動(dòng)的設(shè)計(jì)方案12</p><p&g

17、t;  3.1.2 基于調(diào)試代理的設(shè)計(jì)方案12</p><p>  3.1.3 基于調(diào)試器的設(shè)計(jì)方案13</p><p>  3.2 設(shè)計(jì)方案對(duì)比13</p><p>  3.3 軟件的需求分析14</p><p>  3.3.1 面向群體14</p><p>  3.3.2 設(shè)計(jì)原則14</p>

18、;<p>  3.3.3 主要功能需求分析14</p><p>  3.3.4 次要功能需求分析15</p><p>  3.4 軟件的概要設(shè)計(jì)15</p><p>  3.4.1 軟件開發(fā)模式的選擇15</p><p>  3.4.2 軟件的層次與功能劃分15</p><p>  3.4.3

19、軟件模塊的內(nèi)部調(diào)用結(jié)構(gòu)16</p><p><b>  3.5 小結(jié)17</b></p><p>  第四章 OBC軟件調(diào)試系統(tǒng)的詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)18</p><p>  4.1 HandleManager模塊18</p><p>  4.1.1 HandleManager詳細(xì)設(shè)計(jì)19</p>&l

20、t;p>  4.1.2 進(jìn)程創(chuàng)建和輸入輸出重定位實(shí)現(xiàn)19</p><p>  4.1.3 進(jìn)程狀態(tài)的查詢20</p><p>  4.1.4 非阻塞管道通信實(shí)現(xiàn)20</p><p>  4.2 MessageManager模塊21</p><p>  4.2.1 MessageManager詳細(xì)設(shè)計(jì)21</p>

21、<p>  4.2.2 消息管理實(shí)現(xiàn)21</p><p>  4.2.3 功能封裝實(shí)現(xiàn)22</p><p>  4.3 OBC板測(cè)試模塊23</p><p>  4.3.1 OBC板測(cè)試詳細(xì)設(shè)計(jì)23</p><p>  4.3.2 固件燒寫實(shí)現(xiàn)23</p><p>  4.3.3 寄存器刷新實(shí)現(xiàn)2

22、4</p><p>  4.3.4 運(yùn)行/中斷實(shí)現(xiàn)26</p><p>  4.3.5 斷點(diǎn)管理實(shí)現(xiàn)26</p><p>  4.3.6 變量查詢實(shí)現(xiàn)27</p><p>  4.3.7 命令行實(shí)現(xiàn)27</p><p>  4.3.8 腳本功能區(qū)實(shí)現(xiàn)27</p><p>  4.4 串

23、口測(cè)試模塊28</p><p>  4.4.1 串口模塊詳細(xì)設(shè)計(jì)28</p><p>  4.4.2 可用串口的掃描與管理28</p><p>  4.4.3 串口的發(fā)送/接收的管理29</p><p>  4.4.4 串口發(fā)送/接收16進(jìn)制數(shù)據(jù)30</p><p>  4.5 主界面模塊31</p&

24、gt;<p>  4.6 腳本編輯模塊31</p><p>  4.7 批量編譯模塊31</p><p>  4.8 消息顯示模塊31</p><p><b>  4.9 小結(jié)31</b></p><p>  第五章 OBC軟件調(diào)試系統(tǒng)軟件測(cè)試33</p><p>  5.

25、1 軟件測(cè)試項(xiàng)目設(shè)計(jì)33</p><p>  5.1.1 軟件功能檢查33</p><p>  5.1.2 軟件性能測(cè)試34</p><p>  5.2 軟件測(cè)試結(jié)果34</p><p>  5.2.1 功能測(cè)試結(jié)果34</p><p>  5.2.2 性能測(cè)試結(jié)果35</p><p&g

26、t;<b>  5.3 小結(jié)35</b></p><p>  第六章 總結(jié)與展望36</p><p>  6.1 本文總結(jié)36</p><p>  6.2 工作展望36</p><p><b>  參考文獻(xiàn)37</b></p><p><b>  致 謝

27、38</b></p><p><b>  畢業(yè)設(shè)計(jì)小結(jié)39</b></p><p><b>  附 錄40</b></p><p>  附錄一:OBC演示軟件User Guide40</p><p><b>  第一章 緒論</b></p>&

28、lt;p><b>  1.1引言</b></p><p>  皮衛(wèi)星(Picosatellite)是以微機(jī)電系統(tǒng)(MEMS)技術(shù)和由數(shù)個(gè)MEMS組成的專用集成微型儀器(ASIM)為基礎(chǔ)的一種全新概念的衛(wèi)星[8]。皮衛(wèi)星主要通過分散的星座式結(jié)構(gòu)實(shí)現(xiàn)衛(wèi)星組網(wǎng)工作,可以完成許多任務(wù),其中包括空間大范圍的制圖和地面戰(zhàn)場(chǎng)增兵等[2]。皮衛(wèi)星的特點(diǎn)是單顆衛(wèi)星體積小,功能單一,但多顆衛(wèi)星組成星座后可

29、以實(shí)現(xiàn)并超越一顆大型衛(wèi)星的功能[3]。</p><p>  皮衛(wèi)星以其成本低,開發(fā)周期短為特點(diǎn),受到了通信、對(duì)地遙感、行星際探測(cè)、科學(xué)研究和技術(shù)試驗(yàn)等諸多方面的青睞。制造一顆大衛(wèi)星的成本在10-20億元人民幣左右,需要花費(fèi)至少2年時(shí)間,制造一顆微小衛(wèi)星也需要幾億元;但制造一顆皮衛(wèi)星,成本僅為幾百萬元人民幣,時(shí)間僅需要幾個(gè)月[4]。與以往的大衛(wèi)星相比,皮衛(wèi)星具有很多優(yōu)勢(shì),如皮衛(wèi)星重量輕、體積小,再加上批量生產(chǎn),生產(chǎn)

30、成本低;可以用小型火箭發(fā)射,或作為大型火箭的輔助載荷發(fā)射,發(fā)射成本低;能從戰(zhàn)斗機(jī)(如F-22或F-15)甚至氣球上發(fā)射,或利用地(水)面火炮發(fā)射,可以滿足快速反應(yīng)的需求[17]。</p><p>  1.2 國內(nèi)外微小衛(wèi)星發(fā)展概況</p><p>  鑒于皮衛(wèi)星體積小、重量輕、研制周期短、成本低、發(fā)射方式靈活等諸多優(yōu)點(diǎn),在軍事上有較大的應(yīng)用潛力。20世紀(jì)80年代中期以來受到越來越多國家的重

31、視。美國已發(fā)射重量在幾百千克以下的多種小衛(wèi)星和重量不足10千克的試驗(yàn)型納衛(wèi)星和皮衛(wèi)星;英國、瑞典也在2000年發(fā)射了納衛(wèi)星;法國、印度、阿根廷、智利、巴西、韓國、泰國、巴基斯坦等國已經(jīng)有了自己的小衛(wèi)星。此外,印度尼西亞、馬來西亞、菲律賓等國以及中國臺(tái)灣地區(qū)正在與航天大國合作研制小衛(wèi)星或微衛(wèi)星[5][6]。</p><p>  早在本世紀(jì)初,中科院就根據(jù)國家未來星地通信技術(shù)發(fā)展需求,提出要自主研制中國首顆重量100

32、公斤以下的低軌道數(shù)據(jù)通信小衛(wèi)星及其通信系統(tǒng)。2003年10月21日,中科院知識(shí)創(chuàng)新重大項(xiàng)目“創(chuàng)新一號(hào)”存儲(chǔ)轉(zhuǎn)發(fā)通信小衛(wèi)星成功發(fā)射入軌,這是中國自主研制的第一顆100公斤以下的低軌道數(shù)據(jù)通信小衛(wèi)星及其通信系統(tǒng)。2003年10月21日,中科院知識(shí)創(chuàng)新重大項(xiàng)目“創(chuàng)新一號(hào)”存儲(chǔ)轉(zhuǎn)發(fā)通信小衛(wèi)星成功發(fā)射入軌,這是中國自主研制的第一顆100公斤以下的微小衛(wèi)星,也是中國第一代低軌道數(shù)據(jù)通信小衛(wèi)星,對(duì)中國微小衛(wèi)星的研究發(fā)展起到了重要作用,中國發(fā)展微小衛(wèi)星

33、事業(yè)的新局面也從此打開。</p><p>  中國還有許多大學(xué)、公司與參與研發(fā)微小衛(wèi)星,如:清華大學(xué)、中國航天機(jī)電集團(tuán)公司共同研制的“清華航天一號(hào)”微小衛(wèi)星,中國衛(wèi)星與深圳航天科技創(chuàng)新研究院、哈爾濱工業(yè)大學(xué)國家大學(xué)科技園有限公司共同設(shè)立的航天東方紅海特公司研制的“試驗(yàn)一號(hào)”和“試驗(yàn)三號(hào)”衛(wèi)星,浙江大學(xué)的“皮星一號(hào)A”以及南京航空航天大學(xué)推出的“天巡一號(hào)”微小衛(wèi)星等。</p><p>  其

34、中內(nèi)國外有代表性的案例有:</p><p>  2000年1月26日,由美國斯坦福大學(xué)研制的OPAL微小衛(wèi)星發(fā)射成功。它是一種用于皮型衛(wèi)星在軌發(fā)射的航天器,主要是進(jìn)行皮型衛(wèi)星發(fā)射試驗(yàn)。OPAL上一共搭載了6顆皮型衛(wèi)星,它們是由宇航公司為國防高級(jí)研究項(xiàng)目局研制的兩顆皮型衛(wèi)星,美國圣塔克萊拉大學(xué)的學(xué)生研制的3顆“阿蒂米斯”皮型衛(wèi)星,以及一顆由無線電業(yè)余愛好者研制的StenSat皮型衛(wèi)星。[7]這六顆衛(wèi)星分別于2000

35、年2月6日和2000年2月11日從OPAL上成功發(fā)射到了預(yù)定軌道。然而只有宇航公司的兩顆皮衛(wèi)星傳回了數(shù)據(jù),其他的四顆都沒有傳回任何信息。</p><p>  2003年6月30日,俄羅斯發(fā)射場(chǎng)用l枚火箭發(fā)射了6顆皮衛(wèi)星,其中包括來自加拿大多倫多大學(xué)的Canx.I、丹麥奧爾堡大學(xué)的AAtJ Cube Sat、丹麥技術(shù)大學(xué)的DTUSat、Quake Finder公司的Quake Sat、日本東京工業(yè)大學(xué)的CUTE.I

36、、日本東京大學(xué)的CubeSat XI.IV。</p><p>  2005年10月27日,俄羅斯發(fā)射場(chǎng)再次發(fā)射3顆皮衛(wèi)星,分別為日本東京大學(xué)的CubeSat XI.V、挪威空間中心的NCUBE2、德國維爾茲堡大學(xué)的UWEI。2000年1月28日,由清華大學(xué)與英國薩瑞大學(xué)合作研制的“清華1號(hào)”小衛(wèi)星成功發(fā)射,它主要用于環(huán)境和災(zāi)害監(jiān)測(cè)、民用特種通信及科普教育等方面。2003年10月21日, “創(chuàng)新一號(hào)”小衛(wèi)星成功發(fā)射

37、.它是由中科院上海小衛(wèi)星工程部研制,質(zhì)量小于100kg,用于交通運(yùn)輸、環(huán)境保護(hù)、防汛抗旱等信息傳遞。</p><p>  2004年4月18日,“試驗(yàn)衛(wèi)星一號(hào)”和“納星一號(hào)”升空?!霸囼?yàn)衛(wèi)星一號(hào)”是中國第一顆傳輸型立體測(cè)繪小衛(wèi)星,重204kg。“納星一號(hào)”是用于高新技術(shù)探索試驗(yàn)的納衛(wèi)星,質(zhì)量小于25kg,體積約為0.04m,是當(dāng)時(shí)世界上在軌飛行最小的“輪控三軸穩(wěn)定衛(wèi)星”,也是中國第一顆質(zhì)量小于30kg的納衛(wèi)星,以

38、及國內(nèi)第一顆具備軟件上載能力的衛(wèi)星。</p><p>  2004年11月18日,“試驗(yàn)衛(wèi)星二號(hào)”升空。該衛(wèi)星是科學(xué)試驗(yàn)小衛(wèi)星,質(zhì)量為300kg,采用新型CAST.2000小衛(wèi)星平臺(tái),整星技術(shù)特點(diǎn)達(dá)30多項(xiàng)打開了小衛(wèi)星應(yīng)用的新局面。[9]</p><p>  瑞典空間物理研究所( ISF) 研制的納衛(wèi)星 Munin。它的重量只有5kg ,整體尺寸為 20×20×25cm

39、。從設(shè)計(jì)到發(fā)射Munin只用了一年半的時(shí)間,充分體現(xiàn)了微小衛(wèi)星的特點(diǎn)。[5]星載計(jì)算機(jī)用的是DSP(TMS320C50),與之配套使用的有16KB程序RAM,2MB數(shù)據(jù)RAM,64KB EPROM和32KB EEPROM。</p><p>  加拿大多倫多大學(xué)基于“立方星”實(shí)施的CanX計(jì)劃的第一顆皮型衛(wèi)星——CanX-1。CanX計(jì)劃旨在開發(fā)、試驗(yàn)低成本空間技術(shù),并通過低功耗微型器件來完成航天飛行任務(wù)。CanX

40、-1的星載計(jì)算機(jī)使用的是ARM系列微處理器。[7]</p><p>  “天巡一號(hào)”微小衛(wèi)星是南京航空航天大學(xué)自行研制的一顆對(duì)地成像科學(xué)試驗(yàn)衛(wèi)星。于2011年11月9日成功發(fā)射入軌,至2012年3月14日,“天巡一號(hào)”在軌正常運(yùn)行近百天。在此期間,它經(jīng)受了2次太陽風(fēng)暴,安全抵御了1次單粒子事件。衛(wèi)星平臺(tái)工作穩(wěn)定,有效載荷工作正常,整星狀態(tài)良好,功能達(dá)到了設(shè)計(jì)指標(biāo)?!疤煅惨惶?hào)”是國內(nèi)首次采用VxWorks作為平臺(tái)操

41、作系統(tǒng),并成功在軌驗(yàn)證的衛(wèi)星。[8]</p><p>  1.3 皮衛(wèi)星星載計(jì)算機(jī)軟件發(fā)展概況</p><p>  皮衛(wèi)星星載計(jì)算機(jī)(OBC,Onboard Computer)因其低功耗,低成本,開發(fā)周期短等需求特點(diǎn),多使用嵌入式計(jì)算機(jī)系統(tǒng)。典型的低功耗嵌入式系統(tǒng)有:</p><p>  以MCU為核心的嵌入式系統(tǒng),如:早期的IntelMCS51系列,ATMEL的A

42、Txmega系列,Ti的Msp430系列,ARM系列等;</p><p>  以DSP為核心的嵌入式系統(tǒng),如:TI的TMS320C2000/C5000系列等;</p><p>  以非通用SOC芯片為核心的的嵌入式系統(tǒng)。</p><p>  然而其嵌入式系統(tǒng)的軟件絕大多數(shù)使用硬件廠商直接提供的通用非定制的IDE進(jìn)行開發(fā)。如Msp430,ARM等使用的IAR Embe

43、dded Workbench IDE。</p><p>  使用這些硬件廠商提供的IDE進(jìn)行開發(fā),雖然可以使初學(xué)者快速入門,快速找到想要的工具,但是,這不利于工具的整合,不利于深入理解軟硬件的組成、結(jié)構(gòu)和原理。另外,這些工具也是需要付費(fèi)使用的,版權(quán)問題也是一個(gè)很重要的方面。</p><p>  然而,軟件作為計(jì)算機(jī)系統(tǒng)的靈魂,軟件系統(tǒng)的完備性和易用性對(duì)于整個(gè)計(jì)算機(jī)系統(tǒng)來說,是至關(guān)重要的。為

44、此,亟待開發(fā)一套開源的、可定制的OBC嵌入式系統(tǒng)軟件的開發(fā)、調(diào)試和測(cè)試環(huán)境。</p><p>  1.4 本論文的內(nèi)容和意義</p><p>  1.4.1 本論文的目的</p><p>  本論文就典型低功耗星載計(jì)算機(jī)系統(tǒng)核心——Msp430系列芯片為例,詳細(xì)介紹了星載計(jì)算機(jī)系統(tǒng)調(diào)試、測(cè)試的基本原理。</p><p>  并從原理入手,介紹

45、軟件調(diào)試系統(tǒng)的組成、設(shè)計(jì)方案和選擇、開發(fā)過程以及維護(hù)過程。其中各個(gè)設(shè)計(jì)方案及其選擇和軟件系統(tǒng)的開發(fā)技術(shù)要點(diǎn)是本論文的重心。</p><p>  1.4.2 本論文的意義和創(chuàng)新點(diǎn)</p><p>  鑒于在星載計(jì)算機(jī)軟件方面沒有方便的、合適的軟件系統(tǒng),也沒有一個(gè)開放的、易用的平臺(tái)/工具庫來完成星載計(jì)算機(jī)軟件的編寫、調(diào)試,以及后續(xù)的測(cè)試、演示等工作,本論文旨在做出這樣一次有價(jià)值的嘗試,作為后續(xù)

46、的此方向探究的參考。</p><p>  本論文的創(chuàng)新點(diǎn)在于:本文本身就是一次全新的嘗試,嘗試拋棄本身的軟件開發(fā)的IDE,利用現(xiàn)有的開放的工具來完成IDE具有的功能,并嘗試整合更多的更人性化的新功能;另外,本論文所討論軟件所有的運(yùn)行/開發(fā)所需軟件都是開源或者免費(fèi)許可的,這給開源軟件的發(fā)展起到了一個(gè)倡導(dǎo)作用,并且,該軟件也將是免費(fèi)許可的。</p><p>  1.4.3 論文的章節(jié)安排<

47、;/p><p>  為提供整個(gè)軟件調(diào)試系統(tǒng)的開發(fā)經(jīng)驗(yàn),根據(jù)本論文的研究內(nèi)容,本論文將從以下六個(gè)章節(jié)進(jìn)行討論:</p><p>  第一章介紹了皮衛(wèi)星的發(fā)展現(xiàn)狀,皮衛(wèi)星星載計(jì)算機(jī)軟件的發(fā)展現(xiàn)狀,以及現(xiàn)存IDE存在的缺陷等問題。</p><p>  第二章討論了OBC軟件的聯(lián)機(jī)調(diào)試原理,現(xiàn)有IDE軟件的體系結(jié)構(gòu),新構(gòu)建的調(diào)試系統(tǒng)的體系結(jié)構(gòu)。</p><p

48、>  第三章討論了構(gòu)建調(diào)試系統(tǒng)可能的幾種方案及其特點(diǎn),以及各個(gè)方案之間的對(duì)比和選擇。</p><p>  第四章介紹了OBC軟件調(diào)試系統(tǒng)的用戶人群,軟件要求,開發(fā)原則,概要設(shè)計(jì),模塊劃分等軟件開發(fā)初期的準(zhǔn)備工作。</p><p>  第五章詳細(xì)介紹了軟件各個(gè)模塊的詳細(xì)設(shè)計(jì)和開發(fā)要點(diǎn)。充分發(fā)揮在第四章中提出的設(shè)計(jì)原則。</p><p>  第六章是本文的總結(jié)和對(duì)

49、以后工作的展望。</p><p>  第二章 OBC軟件聯(lián)機(jī)調(diào)試原理</p><p>  OBC軟件的聯(lián)機(jī)調(diào)試是OBC軟件開發(fā)的重要環(huán)節(jié),也是在整個(gè)軟件的開發(fā)過程中最復(fù)雜,涉及設(shè)備最多的環(huán)節(jié)。如果需要進(jìn)行OBC設(shè)備的測(cè)試、演示等工作,聯(lián)機(jī)調(diào)試環(huán)節(jié)更是至關(guān)重要的。</p><p>  2.1 OBC軟件調(diào)試過程</p><p>  2.1.1

50、OBC軟件的生成過程</p><p>  如圖2.1所示,OBC軟件的生成過程如下,OBC軟件利用宿主機(jī)進(jìn)行編寫,并在宿主計(jì)算機(jī)(以下簡稱主機(jī))上進(jìn)行編譯和鏈接,并利用JTAG等接口將編譯好的程序下載到目標(biāo)計(jì)算機(jī)上,然后進(jìn)行聯(lián)機(jī)調(diào)試。</p><p>  圖2.1 OBC軟件的生成過程</p><p>  2.1.2 OBC軟件的調(diào)試過程</p>&l

51、t;p>  在完成軟件的下載后,主機(jī)會(huì)通過JTAG控制器進(jìn)行軟件的調(diào)試工作。如圖2.2所示,首先,主機(jī)會(huì)在JTAG控制器相應(yīng)的端口(通常是COM接口)初始化調(diào)試代理進(jìn)程,從而加載JTAG通信需要的驅(qū)動(dòng),并嘗試連接目標(biāo)計(jì)算機(jī),完成Reset等初始化操作。隨后,主機(jī)啟動(dòng)前臺(tái)調(diào)試器進(jìn)程,通過與調(diào)試代理進(jìn)程通信,可完成眾多的調(diào)試任務(wù)。</p><p>  圖2.2 調(diào)試所需的進(jìn)程</p><p&

52、gt;  2.2 OBC軟件調(diào)試系統(tǒng)結(jié)構(gòu)</p><p>  2.1.1 傳統(tǒng)OBC軟件調(diào)試系統(tǒng)結(jié)構(gòu)</p><p>  IAR等IDE將代碼的文本編輯器、工程管理、配置管理、編譯器、鏈接器、代碼燒寫模塊、調(diào)試器等工具全部整合到一起,成為一個(gè)封閉的不可重新組織和構(gòu)造的模塊。</p><p>  圖2.3 傳統(tǒng)IDE調(diào)試系統(tǒng)結(jié)構(gòu)</p><p>

53、;  2.2.2 利用開源工具的軟件調(diào)試系統(tǒng)結(jié)構(gòu)</p><p>  利用Gcc,Gdb等開源工具,可拋棄原有的IDE高度整合的工具集,完全使用用戶需要的,可以定制的軟件調(diào)試系統(tǒng),從而構(gòu)建新的軟件調(diào)試系統(tǒng)結(jié)構(gòu)。</p><p>  如圖2.4所示,調(diào)試系統(tǒng)被分為調(diào)試器前端,調(diào)試器,調(diào)試代理和調(diào)試端口驅(qū)動(dòng)四個(gè)部分。其中調(diào)試器為整個(gè)軟件調(diào)試系統(tǒng)的核心。調(diào)試接口驅(qū)動(dòng)完成系統(tǒng)進(jìn)程與JTAG控制器等

54、調(diào)試端口的通信工作。調(diào)試代理將目標(biāo)計(jì)算機(jī)進(jìn)行一次封裝,從而將目標(biāo)計(jì)算機(jī)封裝成調(diào)試客戶端(調(diào)試器)可以連接的遠(yuǎn)程主機(jī)。調(diào)試器完成了整個(gè)調(diào)試工作中的主要部分,如加載調(diào)試程序,執(zhí)行/中斷程序,斷點(diǎn)管理,變量管理等。調(diào)試器前端則是調(diào)試器的一個(gè)友好封裝,將調(diào)試器的信息以GUI的方式呈現(xiàn)給用戶,從而使整個(gè)調(diào)試系統(tǒng)顯得易用。</p><p>  圖2.4 利用現(xiàn)有工具組成的調(diào)試系統(tǒng)結(jié)構(gòu)</p><p>

55、<b>  2.3 小結(jié)</b></p><p>  IAR等IDE將全部工具整合起來,做成一個(gè)閉源的工具集合。這種整合對(duì)于很多入門用戶來說是方便的。所有需要的工具都會(huì)在一個(gè)窗口中找到,一次安裝即可解決所有問題。但是對(duì)于想要改進(jìn)或者定制工具的進(jìn)階用戶來說,這反而是一個(gè)很大的麻煩。所有的組件之間耦合性極強(qiáng),幾乎不可能替換掉其中的一個(gè)或者幾個(gè)用起來不方便的模塊,也不可能在這之上進(jìn)行新的工具整合。

56、</p><p>  所以需要打破原有的工具集高度耦合的僵局,利用新的開源的工具重新進(jìn)行組合,使用戶可以自行替換/修改其中的模塊,使得工具集更方便,更人性化。</p><p>  第三章 OBC軟件調(diào)試系統(tǒng)結(jié)構(gòu)設(shè)計(jì)</p><p>  3.1 設(shè)計(jì)方案描述</p><p>  參考圖2.4的軟件系統(tǒng)結(jié)構(gòu),除驅(qū)動(dòng)不需要重新開發(fā),也很難重新開發(fā)以

57、外,其他三個(gè)層次都是可以重新構(gòu)建、整合的。重構(gòu)調(diào)試代理及以上的兩層,為基于驅(qū)動(dòng)的方案;重構(gòu)調(diào)試器和調(diào)試前端,為基于調(diào)試代理的設(shè)計(jì)方案;只制作調(diào)試前端,將工具進(jìn)行整合,為基于調(diào)試器的設(shè)計(jì)方案。下面三個(gè)小節(jié),會(huì)針對(duì)這三個(gè)開發(fā)方案進(jìn)行討論。</p><p>  3.1.1 基于驅(qū)動(dòng)的設(shè)計(jì)方案</p><p>  如果從調(diào)試代理開始構(gòu)建,軟件的最終運(yùn)行效果是最好的,開發(fā)的限制也是最少的。圖3.1是

58、方案模塊的結(jié)構(gòu)圖。</p><p>  圖3.1 基于驅(qū)動(dòng)的設(shè)計(jì)方案模塊結(jié)構(gòu)圖</p><p>  因?yàn)槌ハ到y(tǒng)載入的驅(qū)動(dòng)外,其他部分全部是自行構(gòu)建的,所以這樣的開發(fā)成本和可能帶來的風(fēng)險(xiǎn)也是最大的。與驅(qū)動(dòng)相關(guān)的代碼幾乎沒有文檔,這樣開發(fā)起來會(huì)舉步維艱。另外如果從驅(qū)動(dòng)之上開始構(gòu)建,會(huì)大大增加軟件系統(tǒng)的耦合度,并且使得開發(fā)的部分與現(xiàn)有部分重疊較大,此方案在設(shè)計(jì)初期被舍棄。</p>

59、<p>  3.1.2 基于調(diào)試代理的設(shè)計(jì)方案</p><p>  將調(diào)試前臺(tái)與調(diào)試器整合在一起是個(gè)可以深入的方案。在開發(fā)的初期,曾嘗試將調(diào)試器與調(diào)試前臺(tái)整合在一起。因?yàn)檫@樣可以在保證軟件耦合度較低的情況下,最大化地提高軟件系統(tǒng)的運(yùn)行效果。</p><p>  但是,盡管有調(diào)試器的源代碼,重新構(gòu)建一個(gè)包含調(diào)試器程序的新程序也是一個(gè)非常浩瀚的工程,不是在短時(shí)間內(nèi)能夠完成的事情,該

60、方案在做了簡單的嘗試以后,被放棄。</p><p>  3.1.3 基于調(diào)試器的設(shè)計(jì)方案</p><p>  圖3.2是只有調(diào)試器前端的方案。此方案較為簡便地實(shí)現(xiàn)了用戶需要進(jìn)行有好的調(diào)試這一功能任務(wù)。</p><p>  圖3.2 基于調(diào)試器的設(shè)計(jì)方案模塊結(jié)構(gòu)圖</p><p>  如果只制作一個(gè)調(diào)試器的前端,則工作量會(huì)大大減小,可以單人完成

61、。這使得開發(fā)的成本和最后的結(jié)果都可以接受。最后軟件的耦合度也是最小的,只需要簡單的修改就可以更換其他平臺(tái)的調(diào)試器。這是相對(duì)來說一個(gè)比較好的方案。</p><p>  3.2 設(shè)計(jì)方案對(duì)比</p><p>  表3.1將從代碼量,文檔豐富程度,工具耦合度,功能限制等幾個(gè)方面進(jìn)行三個(gè)方案的對(duì)比。</p><p>  表3.1 設(shè)計(jì)方案對(duì)比</p><

62、p>  從上表可以得出,對(duì)于本次設(shè)計(jì)方案的選擇來說,基于調(diào)試器的設(shè)計(jì)代碼量適中,參考文檔較為豐富,工具的耦合度也是最低的,雖有部分功能限制,但是此方案更為易行,更適合這次的畢業(yè)設(shè)計(jì)。這個(gè)選擇是一個(gè)折衷的選擇,只是對(duì)于此次開發(fā)來說的,對(duì)于其他的需求可以參照此次討論的內(nèi)容,選擇在其他層面的設(shè)計(jì)方案。</p><p>  3.3 軟件的需求分析</p><p>  OBC軟件調(diào)試系統(tǒng)有它自

63、己獨(dú)特的用戶群體和設(shè)計(jì)需求。本小節(jié)將從用戶群體入手,詳細(xì)討論OBC軟件應(yīng)該具有的主要和次要功能,以及軟件應(yīng)該遵從的設(shè)計(jì)原則。</p><p>  3.3.1 面向群體</p><p>  本軟件面向的用戶是OBC軟件的設(shè)計(jì)人員以及OBC相關(guān)的工作人員。這一類用戶大多具有較強(qiáng)的專業(yè)知識(shí),較好的編程習(xí)慣,較為廣泛的知識(shí)層面。在對(duì)軟件自動(dòng)化、智能化要求程度較高的情況下,對(duì)軟件的可定制、可演示的要

64、求也很高。這大大增加了程序的人性化設(shè)計(jì)要求。</p><p>  3.3.2 設(shè)計(jì)原則</p><p>  本軟件最基本的設(shè)計(jì)原則是人性化。本著“Don’t let user think”的設(shè)計(jì)原則來設(shè)計(jì)軟件,使用戶能夠自由、方便的使用軟件,而不去顧及軟件下層的實(shí)現(xiàn)細(xì)節(jié)。</p><p>  另外,本軟件還有一個(gè)與人性化幾乎背道而馳的設(shè)計(jì)原則:個(gè)性化。軟件的絕大多數(shù)

65、參數(shù)都是可定制可重設(shè)的,并且軟件盡最大可能開放底層模塊的端口來完成用戶的多元化需求。盡可能的使用用戶可以定制的,可以方便修改的模塊來實(shí)現(xiàn)功能,是本軟件的另外一個(gè)重要的設(shè)計(jì)原則。</p><p>  3.3.3 主要功能需求分析</p><p>  需求階段的工作是否到位是整個(gè)系統(tǒng)開發(fā)的關(guān)鍵,在需求階段有很多方式可以幫助自己完成工作,例如與客戶暢所欲言,跟隨客戶參與業(yè)務(wù)過程等等。</p

66、><p>  通過與用戶群體進(jìn)行大量的交流和討論,總結(jié)出軟件的主要功能有以下幾個(gè)方面:</p><p>  OBC軟件的調(diào)試部分:</p><p><b>  實(shí)現(xiàn)固件的下載;</b></p><p>  實(shí)現(xiàn)寄存器值的顯示;</p><p>  實(shí)現(xiàn)程序斷點(diǎn)的管理;</p><p

67、>  實(shí)現(xiàn)程序變量值的查詢;</p><p>  實(shí)現(xiàn)目標(biāo)板簡單測(cè)試功能。</p><p>  OBC板的串口通信部分:</p><p>  實(shí)現(xiàn)端口的打開/關(guān)閉;</p><p>  實(shí)現(xiàn)可用端口的自動(dòng)掃描;</p><p>  實(shí)現(xiàn)端口的字符串收發(fā);</p><p>  實(shí)現(xiàn)端口的十六

68、進(jìn)制收發(fā);</p><p>  實(shí)現(xiàn)保存收發(fā)結(jié)果到文件。</p><p>  3.3.4 次要功能需求分析</p><p>  在完成主要功能的同時(shí)還需要完成一些方便用戶使用的小工具。</p><p><b>  設(shè)置對(duì)話框:</b></p><p>  設(shè)置目標(biāo)MCU型號(hào);</p>

69、<p><b>  設(shè)置調(diào)試方式;</b></p><p><b>  設(shè)置調(diào)試端口;</b></p><p>  設(shè)置是否使用硬件斷點(diǎn)。</p><p><b>  腳本編輯工具:</b></p><p><b>  設(shè)置固件位置;</b>&

70、lt;/p><p><b>  設(shè)置斷點(diǎn);</b></p><p><b>  設(shè)置關(guān)鍵寄存器。</b></p><p><b>  批量編譯工具:</b></p><p>  自動(dòng)掃描文件夾內(nèi)的源文件;</p><p>  自動(dòng)命名編譯后的文件為源文件名。

71、</p><p>  顯示進(jìn)程的運(yùn)行信息:</p><p>  顯示后臺(tái)調(diào)試代理的消息;</p><p><b>  顯示調(diào)試器的消息。</b></p><p>  3.4 軟件的概要設(shè)計(jì)</p><p>  明確軟件的需求之后,需要進(jìn)行軟件的概要設(shè)計(jì)。概要設(shè)計(jì)將一個(gè)復(fù)雜系統(tǒng)按功能進(jìn)行模塊劃分、建

72、立模塊的層次結(jié)構(gòu)及調(diào)用關(guān)系、確定模塊間的接口及人機(jī)界面等。</p><p>  3.4.1 軟件開發(fā)模式的選擇</p><p>  在明確的軟件需求下,可以使用自上而下的瀑布式開發(fā)模型,嚴(yán)格遵循預(yù)先計(jì)劃的需求、分析、設(shè)計(jì)、編碼、測(cè)試的步驟順序進(jìn)行,準(zhǔn)確達(dá)到預(yù)期結(jié)果。</p><p>  3.4.2 軟件的層次與功能劃分</p><p>  根

73、據(jù)軟件的功能和需求,如圖3.1所示,軟件的模塊可以分為三個(gè)層次。</p><p>  首先是第一層,進(jìn)程/線程管理模塊。這個(gè)模塊負(fù)責(zé)實(shí)現(xiàn)進(jìn)程/線程的創(chuàng)建,銷毀,通信等工作。</p><p>  在此之上是第二層,進(jìn)程間消息的處理,消息管理模塊。這個(gè)模塊負(fù)責(zé)將上層的數(shù)據(jù)進(jìn)行封裝,發(fā)送到底層進(jìn)程,同時(shí)將底層進(jìn)程得到的數(shù)據(jù)進(jìn)行處理,反饋給上層進(jìn)程。</p><p>  第

74、三層為該軟件的交互層。該層面上面有用戶可以看到的各個(gè)窗口。根據(jù)軟件的主要功能,需要構(gòu)建軟件的調(diào)試窗口和軟件的串口工具窗口。另外,其他次要功能的窗口也在這個(gè)層面。</p><p>  圖3.3 軟件層次劃分</p><p>  3.4.3 軟件模塊的內(nèi)部調(diào)用結(jié)構(gòu)</p><p>  圖3.4 軟件模塊劃分與調(diào)用關(guān)系</p><p>  如圖3.

75、4所示。進(jìn)程/線程管理模塊負(fù)責(zé)創(chuàng)建、銷毀進(jìn)程/線程,并且為消息管理模塊提供進(jìn)程/線程的輸入輸出。</p><p>  消息管理模塊將底層進(jìn)程/線程管理模塊進(jìn)程/線程的輸入輸出進(jìn)行處理,封裝成為各個(gè)功能的例程(routine)。</p><p>  軟件前臺(tái)GUI窗口調(diào)用底層消息管理封裝好的各種例程完成各種功能。</p><p><b>  3.5 小結(jié)&l

76、t;/b></p><p>  本次畢業(yè)設(shè)計(jì)使用了最為簡單,構(gòu)建最為方便的設(shè)計(jì)方案,通過簡單的工具整合達(dá)成本次畢業(yè)設(shè)計(jì)的設(shè)計(jì)要求。雖說這是一次折衷的考慮,但是在調(diào)試器前臺(tái)的開發(fā)中遇到的各種困難以及想到的各種便于用戶使用、便于OBC軟件調(diào)試的各項(xiàng)功能是非常值得參考和借鑒的。</p><p>  本章詳細(xì)介紹了軟件的需求分析,用戶人群,開發(fā)原則等開發(fā)初期的準(zhǔn)備工作,提出了軟件整體的框架結(jié)

77、構(gòu)和模塊功能劃分,為后面軟件的詳細(xì)設(shè)計(jì)打下了堅(jiān)實(shí)的基礎(chǔ),是軟件開發(fā)中直接影響到軟件最后開發(fā)結(jié)果的關(guān)鍵步驟。</p><p>  第四章 OBC軟件調(diào)試系統(tǒng)的詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)</p><p>  本章將詳細(xì)介紹整個(gè)OBC軟件調(diào)試系統(tǒng)的實(shí)現(xiàn)過程,并將部分模塊的實(shí)現(xiàn)以偽代碼的方式展現(xiàn)出來。本章將講述以下幾個(gè)模塊的詳細(xì)設(shè)計(jì)及實(shí)現(xiàn)要點(diǎn):</p><p>  HandleMana

78、ger模塊——進(jìn)程線程的管理模塊;</p><p>  MessageManager模塊——消息管理和監(jiān)視模塊;</p><p>  主機(jī)板測(cè)試模塊——主要的測(cè)試功能模塊;</p><p>  串口通信模塊——串口的發(fā)送接收,功能設(shè)置模塊;</p><p>  主界面模塊——呈現(xiàn)測(cè)試功能和顯示狀態(tài)的模塊;</p><p&g

79、t;  批量編譯模塊——進(jìn)行源代碼的批量編譯的小工具;</p><p>  腳本編輯模塊——進(jìn)行腳本編輯的小工具;</p><p>  消息顯示模塊——呈現(xiàn)后臺(tái)調(diào)試代理消息的模塊。</p><p>  4.1 HandleManager模塊</p><p>  圖4.1 HandleManager詳細(xì)設(shè)計(jì)</p><p&g

80、t;  4.1.1 HandleManager詳細(xì)設(shè)計(jì)</p><p>  HandleManager模塊的主要功能是完成進(jìn)程和線程的創(chuàng)建,銷毀,以及為上層模塊提供封裝好的輸入輸出。</p><p>  此模塊需要實(shí)現(xiàn)的功能函數(shù)有以下幾點(diǎn):</p><p>  創(chuàng)建調(diào)試器(調(diào)試代理)進(jìn)程;</p><p>  查詢調(diào)試器(調(diào)試代理)進(jìn)程狀態(tài);

81、</p><p>  銷毀調(diào)試器(調(diào)試代理)進(jìn)程;</p><p>  創(chuàng)建調(diào)試器(調(diào)試代理)消息獲取線程;</p><p>  停止調(diào)試器(調(diào)試代理)消息獲取線程;</p><p>  向調(diào)試器進(jìn)程發(fā)送消息。</p><p>  4.1.2 進(jìn)程創(chuàng)建和輸入輸出重定位實(shí)現(xiàn)</p><p>  首

82、先是進(jìn)程的創(chuàng)建實(shí)現(xiàn)。在Windows中,為支持POSIX(Portable Operating System Interface)標(biāo)準(zhǔn),Win_API將CreateProcess函數(shù)宏定義為CreateProcessW函數(shù)。該函數(shù)的聲明如下。</p><p>  BOOL CreateProcess</p><p><b>  (</b></p><

83、;p>  LPCTSTR lpApplicationName,//應(yīng)用程序的名稱</p><p>  LPTSTR lpCommandLine,//執(zhí)行的命令行命令</p><p>  LPSECURITY_ATTRIBUTES lpProcessAttributes,//進(jìn)程安全標(biāo)示</p><p>  LPSECURITY_AT

84、TRIBUTES lpThreadAttributes,//線程安全標(biāo)示</p><p>  BOOL bInheritHandles,//是否繼承句柄</p><p>  DWORD dwCreationFlags,//創(chuàng)建的標(biāo)志位</p><p>  LPVOID lpEnvironment,//環(huán)境變量</

85、p><p>  LPCTSTR lpCurrentDirectory,//執(zhí)行的目錄</p><p>  LPSTARTUPINFO lpStartupInfo,//啟動(dòng)時(shí)的信息</p><p>  LPPROCESS_INFORMATION lpProcessInformation //進(jìn)程信息的返回值</p><p>

86、<b>  );</b></p><p>  雖說這個(gè)函數(shù)有十個(gè)參數(shù),但是這里只需要設(shè)置命令行命令,需要繼承句柄(HANDLE),創(chuàng)建標(biāo)志位,啟動(dòng)信息和進(jìn)程信息返回值就可以了。進(jìn)程管理需要實(shí)現(xiàn)進(jìn)程的創(chuàng)建、銷毀的同時(shí),還需要將進(jìn)程的輸入、輸出重定位到新的位置。</p><p>  將命令行命令設(shè)置為調(diào)試器或者調(diào)試代理的執(zhí)行文件路徑;設(shè)置為可以繼承句柄,用來提供進(jìn)程通信支

87、持;設(shè)置創(chuàng)建標(biāo)志位為不顯示窗口,并且設(shè)置為重置輸入輸出流;在啟動(dòng)信息(STARTUPINFO)結(jié)構(gòu)體中指出新的輸入輸出流的句柄;傳入一個(gè)空的PROCESS_INFORMATION結(jié)構(gòu)體的指針,可以獲取新進(jìn)程的進(jìn)程句柄和PID。</p><p>  輸入輸出流是通過管道進(jìn)行重定位的。管道(Pipe)可以分為匿名管道和命名管道兩種。通常來說,在一個(gè)進(jìn)程中調(diào)用其他進(jìn)程,匿名管道就足夠了。</p><

88、p>  創(chuàng)建匿名管道的Win_API為:</p><p>  BOOL CreatePipe (</p><p>  PHANDLE hReadPipe, // 指向讀句柄的指針</p><p>  PHANDLE hWritePipe,// 指向?qū)懢浔闹羔?lt;/p><p>  LPSECURITY_ATT

89、RIBUTES lpPipeAttributes, // 指向安全屬性的指針</p><p>  DWORD nSize // 管道大小</p><p><b>  );</b></p><p>  傳入兩個(gè)句柄接收管道的兩端即可完成管道的創(chuàng)建。當(dāng)然,匿名管道是單向的,如果要重定位一個(gè)進(jìn)程的輸入和輸出流,則需要?jiǎng)?chuàng)建兩個(gè)匿名管道。</p&

90、gt;<p>  在兩個(gè)管道創(chuàng)建完成后(暫命名管道A、管道B),將管道A的輸出句柄填入進(jìn)程啟動(dòng)信息的輸入端,管道B的輸入句柄填入進(jìn)程啟動(dòng)信息的輸出端,然后啟動(dòng)進(jìn)程。此時(shí)就可以關(guān)閉當(dāng)前進(jìn)程對(duì)上面兩個(gè)句柄的控制權(quán)了。</p><p>  到此為止,完成了進(jìn)程的創(chuàng)建和輸入輸出的重定位。執(zhí)行的結(jié)果是一個(gè)進(jìn)程的句柄,一個(gè)輸入句柄和一個(gè)輸出句柄。</p><p>  4.1.3 進(jìn)程狀態(tài)

91、的查詢</p><p>  前臺(tái)進(jìn)程需要了解后臺(tái)進(jìn)程是否退出,退出是否正常。為此,需要不斷查詢后臺(tái)進(jìn)程的狀態(tài)。進(jìn)程的狀態(tài)查詢可以通過獲取進(jìn)程的返回值(ExitCode)來反映。獲取進(jìn)程返回值的函數(shù)聲明如下:</p><p>  BOOL WINAPI GetExitCodeProcess (</p><p>  __in   HANDLE hPr

92、ocess,//進(jìn)程的句柄</p><p>  __out  LPDWORD lpExitCode//接收進(jìn)程返回值的DWORD</p><p><b>  );</b></p><p>  如果獲取到的進(jìn)程返回值為STILL_ACTIVE,則表示進(jìn)程還在運(yùn)行中;若為0則為正常退出;若為其他值,表示進(jìn)程可能發(fā)生

93、某些錯(cuò)誤??墒褂肎etLastError()來查詢錯(cuò)誤信息的代碼。</p><p>  4.1.4 非阻塞管道通信實(shí)現(xiàn)</p><p>  在讀取匿名管道的ReadPipe端時(shí),會(huì)出現(xiàn)阻塞讀的情況,使得整個(gè)進(jìn)程阻塞,前臺(tái)GUI失去響應(yīng)。然而,這在與用戶交互較多的程序中是不允許的。</p><p>  所以需要使用非阻塞方法來完成匿名管道的讀取。Win_API提供了異

94、步讀取的Read(),但是這個(gè)Read函數(shù)的完成時(shí)間是不可預(yù)知的,因此不能完成像本程序中要求的那樣一直查詢管道的ReadPipe端,一旦有數(shù)據(jù)流出,立即顯示到前臺(tái)界面。為解決這個(gè)問題,試過很多方法,但都不是很好,最后這個(gè)問題是這樣解決的:</p><p>  首先,這個(gè)方法需要一個(gè)線程,兩個(gè)緩沖區(qū)以及兩個(gè)事件標(biāo)記(Event)。線程負(fù)責(zé)執(zhí)行以下循環(huán):</p><p>  選中一個(gè)緩沖區(qū),等

95、待該緩沖區(qū)取消標(biāo)記</p><p>  執(zhí)行Read,阻塞線程</p><p>  當(dāng)Read返回時(shí),將讀到的內(nèi)容放到當(dāng)前緩沖區(qū),并標(biāo)記該緩沖區(qū)對(duì)應(yīng)的事件</p><p>  選中另外一個(gè)緩沖區(qū),等待該緩沖區(qū)取消標(biāo)記,并循環(huán)下去</p><p>  如此以來,消息就被讀到了兩個(gè)緩沖區(qū)之一中,以供主線程讀取。接下來介紹主線程如何讀取緩沖區(qū)中的數(shù)

96、據(jù)。</p><p>  查詢兩個(gè)事件標(biāo)記是否被標(biāo)記;</p><p>  若都未被標(biāo)記,則表示緩沖區(qū)無信息,返回Null;</p><p>  若有緩沖區(qū)被標(biāo)記則將緩沖區(qū)中的數(shù)據(jù)取出,并取消緩沖區(qū)的標(biāo)記。</p><p>  這樣就實(shí)現(xiàn)了管道的非阻塞讀取。</p><p>  4.2 MessageManager模塊

97、</p><p>  4.2.1 MessageManager詳細(xì)設(shè)計(jì)</p><p>  MessageManager模塊是整個(gè)程序中最核心、功能最多的模塊。該模塊負(fù)責(zé)對(duì)HandleManager得到的消息進(jìn)行封裝和解析(Pack and Unpack),并且封裝某些上層的功能到函數(shù)中,以供上層模塊進(jìn)行調(diào)用。</p><p>  此部分中具體的功能封裝實(shí)現(xiàn)不會(huì)體現(xiàn)

98、在這一部分中。該部分只會(huì)講述封裝和解封的方式。具體的功能封裝實(shí)現(xiàn)將會(huì)在下一小節(jié)的具體模塊中討論。</p><p>  4.2.2 消息管理實(shí)現(xiàn)</p><p>  消息管理是通過消息監(jiān)視線程來完成的。在上一小節(jié)中提到過,調(diào)用HandleManager的非阻塞讀取函數(shù)可以獲取消息,并且會(huì)立即返回。在MessageManager中需要一個(gè)單獨(dú)的線程來監(jiān)視底層進(jìn)程的運(yùn)行狀態(tài),并更新進(jìn)程的消息。線

99、程執(zhí)行的任務(wù)如下:</p><p>  調(diào)用HandleManager的相關(guān)函數(shù)獲取進(jìn)程的狀態(tài);</p><p>  若進(jìn)程仍在執(zhí)行,則嘗試獲取進(jìn)程消息;</p><p>  若成功獲取消息,則反饋前臺(tái)GUI,顯示信息;</p><p>  若無消息獲取,則Sleep一定的值,重新進(jìn)行循環(huán);</p><p>  若進(jìn)程

100、已經(jīng)被終止,則反饋前臺(tái)GUI,做出警告。</p><p>  通過消息監(jiān)視線程,可實(shí)現(xiàn)后臺(tái)進(jìn)程消息的自動(dòng)刷新,自動(dòng)呈現(xiàn)給前臺(tái)GUI,自動(dòng)監(jiān)視后臺(tái)進(jìn)程的運(yùn)行狀態(tài)。</p><p>  于此同時(shí),很多功能的實(shí)現(xiàn)也是通過消息監(jiān)視線程攔截處理有關(guān)消息來完成的,如斷點(diǎn)的相應(yīng)。</p><p>  圖4.2 MessageManager詳細(xì)設(shè)計(jì)</p><p

101、>  4.2.3 功能封裝實(shí)現(xiàn)</p><p>  前臺(tái)GUI會(huì)呈現(xiàn)很多功能窗口,和很多功能按鈕。若將這些功能寫入前臺(tái)GUI,會(huì)產(chǎn)生較大的模塊耦合,功能之間,也會(huì)產(chǎn)生較大的冗余。所以,需要將這些功能封裝起來,形成一個(gè)一個(gè)的例程,執(zhí)行這些例程即可完成前臺(tái)GUI需要完成的功能。</p><p>  下面以程序的初始化為例演示功能封裝的實(shí)現(xiàn)過程。</p><p> 

102、 調(diào)試系統(tǒng)的初始化有一下幾個(gè)關(guān)鍵過程:</p><p>  啟動(dòng)主進(jìn)程,完成界面的初始化;</p><p>  創(chuàng)建MessageManager和HandleManager實(shí)例;</p><p>  調(diào)用MessageManager的Init()例程;</p><p>  Init()例程會(huì)調(diào)用HandleManager的相關(guān)函數(shù),完成調(diào)試代

103、理進(jìn)程的創(chuàng)建,并且,HandleManager的進(jìn)程創(chuàng)建函數(shù)會(huì)創(chuàng)建調(diào)試代理進(jìn)程的非阻塞刷新線程;</p><p>  隨后,Init()例程會(huì)創(chuàng)建調(diào)試代理進(jìn)程的消息監(jiān)視線程,完成消息的傳遞;</p><p>  并且,Init()例程會(huì)等待攔截調(diào)試代理進(jìn)程初始化成功的消息;</p><p>  通過檢查進(jìn)程的創(chuàng)建狀態(tài)和攔截調(diào)試代理進(jìn)程的初始化消息,判斷整個(gè)調(diào)試系統(tǒng)是

104、否初始化正常,并最終呈現(xiàn)在主界面;</p><p>  此時(shí)Init例程完成,退出。</p><p>  前臺(tái)GUI只需要?jiǎng)?chuàng)建MessageManager和HandleManager模塊,然后調(diào)用MessageManager模塊的Init()即可完成整個(gè)過程,完全不需要參與其中的底層消息傳遞執(zhí)行過程,這就是功能封裝的作用。</p><p>  4.3 OBC板測(cè)試模

105、塊</p><p>  此模塊是該調(diào)試系統(tǒng)的主要GUI模塊,包含了調(diào)試系統(tǒng)有關(guān)調(diào)試的主要功能。該模塊構(gòu)建在MessageManager和MainWindow之上,是整個(gè)調(diào)試系統(tǒng)中控件和響應(yīng)最多的GUI窗口。</p><p>  4.3.1 OBC板測(cè)試詳細(xì)設(shè)計(jì)</p><p>  OBC板測(cè)試模塊需要完成程序的調(diào)試工作。在界面上進(jìn)行功能分區(qū),劃分不同的功能區(qū),完成不

106、同的調(diào)試工作。</p><p>  圖4.3為該模塊GUI的設(shè)計(jì)。整個(gè)窗口被劃分為三個(gè)區(qū)域。最左側(cè)是測(cè)試腳本區(qū)域,用來給用戶實(shí)現(xiàn)不同的測(cè)試腳本,具體的測(cè)試腳本的實(shí)現(xiàn)方法,在下面的章節(jié)會(huì)詳細(xì)討論。中間頂部為固件燒寫區(qū)域,用于選擇指定的固件文件,完成固件燒寫功能。寄存器刷新查詢的區(qū)域放在了窗口的中下方。右側(cè)為可擴(kuò)展面板,上面設(shè)置調(diào)試工具箱和命令行。調(diào)試工具箱包括斷點(diǎn)的管理,變量值查詢,調(diào)試對(duì)象的運(yùn)行中斷功能。<

107、/p><p>  圖4.3 OBC板測(cè)試窗口功能分區(qū)</p><p>  4.3.2 固件燒寫實(shí)現(xiàn)</p><p>  固件燒寫功能是通過執(zhí)行一系列的調(diào)試器命令實(shí)現(xiàn)的。具體的流程如下:</p><p>  前臺(tái)GUI通過彈出對(duì)話框,使用戶選擇文件(ELF文件),獲取文件的路徑;</p><p>  處理文件的路徑,調(diào)用Me

108、ssageManager的BurnELF例程;</p><p>  MessageManager的BurnELF例程會(huì)通過HandleManager封裝的RunCMD函數(shù)向調(diào)試器發(fā)送一系列指令,并監(jiān)視其運(yùn)行結(jié)果。這些指令包括:</p><p>  清空芯片F(xiàn)lash;</p><p><b>  下載ELF固件;</b></p>

109、<p>  設(shè)置ELF固件為當(dāng)前調(diào)試程序;</p><p>  設(shè)置調(diào)試器的源文件搜索路徑。</p><p>  MessageManager在檢查運(yùn)行結(jié)果成功后,會(huì)結(jié)束BurnELF例程。</p><p>  4.3.3 寄存器刷新實(shí)現(xiàn)</p><p>  Msp430系列處理器有若干的型號(hào),各種各樣的寄存器,這個(gè)功能的實(shí)現(xiàn)頗為周

110、折。</p><p>  首先是單個(gè)寄存器的查詢問題。調(diào)試器是不支持直接訪問寄存器名稱的,因?yàn)檎{(diào)試器也不清楚到底寄存器的地址在哪里。所以,就需要其他方式來訪問寄存器。既然調(diào)試器不能獲取寄存器地址,那么是否可以直接通過調(diào)試前臺(tái)給出寄存器的地址?答案是肯定的。</p><p>  在調(diào)試器的工具包中給出了Msp430的全部BSP(Board Support Package,板級(jí)支持包),在每個(gè)

111、BSP的內(nèi)部給出了該型號(hào)MCU的全部寄存器地址。這些地址是以XML的格式存放的。使用開源的TinyXML2工具包即可方便的讀出XML文件中的信息。得到寄存器的地址后,可使用調(diào)試器命令print ( * ( ( unsigned char * ) Address ) ),獲取指定地址的值。</p><p>  隨后,又出現(xiàn)了新的問題。刷新一個(gè)寄存器的值時(shí),會(huì)因?yàn)檎{(diào)試前臺(tái)與調(diào)試器之間的通信延遲,大約需要200ms才能

112、完成獲取到上次語句的執(zhí)行結(jié)果,若使用語句一條一條的刷新,幾百個(gè)寄存器的刷新需要大約兩分鐘才能完成。這是不可以接受的等待時(shí)間。</p><p>  解決這個(gè)問題的方法是重新設(shè)計(jì)了一個(gè)分組刷新的機(jī)制。這個(gè)刷新方法會(huì)執(zhí)行以下循環(huán):</p><p>  向調(diào)試器的輸入緩沖區(qū)一次性發(fā)送接下來的50個(gè)查詢指令,若指令全部發(fā)送完成,則跳過這個(gè)階段;</p><p><b&g

113、t;  等待100ms;</b></p><p>  查詢調(diào)試器輸出緩沖區(qū),盡可能多的掃描查詢結(jié)果,并計(jì)數(shù);</p><p>  循環(huán),直到掃描到所有查詢指令的結(jié)果。</p><p>  這個(gè)方法較好的避免了長時(shí)間的等待問題。使得查詢工作能夠像流水線一樣工作。最后的結(jié)果是每200個(gè)寄存器大概需要1s的時(shí)間,大大縮短了查詢的時(shí)間間隔。</p>

114、<p>  但是,對(duì)于用戶來說,2~3s的程序未響應(yīng)也是不可接受的,會(huì)大大影響用戶體驗(yàn)。所以,寄存器的刷新又通過刷新線程來完成。與此同時(shí),寄存器的刷新可能會(huì)失敗,可能會(huì)出現(xiàn)調(diào)試器通信問題,遺漏某個(gè)查詢結(jié)果,而這樣會(huì)導(dǎo)致查詢線程持續(xù)阻塞,進(jìn)入死循環(huán)。為了解決可能出現(xiàn)的查詢失敗,又加入了查詢線程的監(jiān)視線程來完成超時(shí)后自動(dòng)終止查詢線程的功能。保障的程序的穩(wěn)定性。</p><p>  另外,為方便用戶使用,加

115、入了興趣寄存器分組的功能。用戶手動(dòng)修改IntReg.xml文件內(nèi)容即可完成對(duì)指定型號(hào)的寄存器的功能分組。</p><p>  綜上所述,寄存器的查詢實(shí)現(xiàn)了如下的過程:</p><p>  圖4.4 界面刷新前的初始化</p><p>  圖4.5 寄存器刷新過程</p><p>  在測(cè)試界面初始化時(shí),讀取在設(shè)置項(xiàng)中設(shè)置的指定MCU型號(hào)的BS

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論