<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 可重定目標的嵌入式集成開(kāi)發(fā)平臺設計

可重定目標的嵌入式集成開(kāi)發(fā)平臺設計

作者: 時(shí)間:2017-06-04 來(lái)源:網(wǎng)絡(luò ) 收藏

引 言

本文引用地址:http://dyxdggzs.com/article/201706/348549.htm

應用軟件的開(kāi)發(fā)與通用計算機軟件開(kāi)發(fā)不同,由于受資源約束,軟件開(kāi)發(fā)一般需要在專(zhuān)門(mén)的開(kāi)發(fā)平臺上進(jìn)行交叉開(kāi)發(fā)(cross developing)。同時(shí),由于系統的開(kāi)發(fā)及嵌入式軟件的調試也非常復雜,因而迫切需要強有力的平臺(Integrated Development En-vironment,IDE)作為支持,以保證程序執行的實(shí)時(shí)性、可靠性,保障軟件質(zhì)量,并縮短開(kāi)發(fā)時(shí)間。因而,對系統開(kāi)發(fā)平臺和開(kāi)發(fā)環(huán)境的研究近年來(lái)備受重視,出現了比較著(zhù)名的嵌入式開(kāi)發(fā)軟件,如ImageCraft公司的IC-CAVR、Freescale公司的CodeWarrior等。當前,在我國高等院校及嵌入式系統產(chǎn)品的研發(fā)企業(yè)中,絕大多數都使用國外的嵌入式系統平臺。原因很簡(jiǎn)單:絕大多數是進(jìn)口的,國外平臺功能完善、穩定。另外,由于嵌入式系統集成開(kāi)發(fā)平臺具有芯片相關(guān)性,這就為我國研制嵌入式系統集成開(kāi)發(fā)平臺增加了難度。因此,開(kāi)發(fā)具有自主知識產(chǎn)權的嵌入式系統集成開(kāi)發(fā)平臺是一件很有意義且具有挑戰性的工作。從2001年開(kāi)始,蘇州大學(xué)在Motorola M68HC08系列上嘗試開(kāi)展這一工作,并開(kāi)發(fā)了MT-HC08/S08型嵌入式集成開(kāi)發(fā)平臺,命名為“MT-IDE For Motorola HC08/S08”。為了克服開(kāi)發(fā)平臺適用范圍的局限性,通過(guò)實(shí)驗確定,開(kāi)發(fā)平臺模塊可分為“與芯片無(wú)關(guān)”和“與芯片有關(guān)”兩大部分,這樣就可徹底地分割開(kāi)來(lái),實(shí)現可重定目標。因而,在先前研究的基礎上又成功研發(fā)了可重定目標的集成開(kāi)發(fā)平臺(SdIDE),且已成功應用于Freescale HC08/S08/S12、M*Core、C*Core、ColdFire及ARM等系列MCU芯片。本文主要介紹這項成果,并對開(kāi)發(fā)平臺的可重定性和通用性的關(guān)鍵技術(shù)給出必要的闡述。

1 設計思路

考慮到GNU Tools是開(kāi)源軟件,且完全覆蓋編譯開(kāi)發(fā)工具(如gcc等)、調試工具(如gdb)等)和軟件工程工具(如make等),可有效地開(kāi)發(fā)嵌入式系統。因而,選擇GNU Tools作為IDE的交叉開(kāi)發(fā)工具,會(huì )有較好的推廣前景。在設計過(guò)程中,重點(diǎn)考慮以下三個(gè)方面。

1.1 編程調試器方案的確定

在早期的MCU開(kāi)發(fā)中,程序固化于EPROM中,擦除時(shí)間較長(cháng),操作繁瑣,程序調試困難。為解決此問(wèn)題,仿真器技術(shù)得以較快發(fā)展,用軟件來(lái)模擬目標系統中MCU的運行情況,但是使用仿真器往往把目標硬件與軟件獨立開(kāi)來(lái),難以實(shí)現100%的硬件模擬。

片內Flash 儲器的使用,使得嵌入式系統的開(kāi)發(fā)可以不再使用仿真器,而是直接調試目標系統。Flash存儲器雖然有寫(xiě)入、擦除次數、壽命方面的限制,但一般都可以達到10萬(wàn)次以上,故開(kāi)發(fā)過(guò)程中不必顧及Flash的壽命問(wèn)題。目前單片機內Flash都是可以在線(xiàn)編程的,即在線(xiàn)寫(xiě)入、擦除,在線(xiàn)調試程序。由此可見(jiàn),如今嵌入式系統的開(kāi)發(fā)可以徹底脫離仿真器方式。所以,本文設計的編程調試器是充分利用Flash存儲器特點(diǎn),直接面向目標系統的編程調試方式(如BKGD模式)。

1.2 開(kāi)發(fā)平臺的通用性

一般嵌入式集成開(kāi)發(fā)平臺都與具體的單片機相關(guān),很多集成開(kāi)發(fā)平臺只能針對一種MCU芯片,移植起來(lái)非常不方便。本文在開(kāi)發(fā)平臺的通用性上做了較深入研究,使其便于移植。在硬件相關(guān)部分盡可能對GNU Tools開(kāi)發(fā)工具所支持的系列MCU通用,與MCU有相關(guān)性的參數由PC機方的IDE軟件處理,使IDE與MCU相對獨立??紤]到許多筆記本電腦沒(méi)有串行口,編程調試器與PC機的接口采用USB,以提高適用性。本文給出嵌入式系統集成開(kāi)發(fā)平臺SdIDE,把系列MCU的下載與調試接口設計在一塊評估板上,可以適用于多種MCU型號,對新型號也給出了加入方法。

1.3 開(kāi)發(fā)平臺的可移植性

嵌入式開(kāi)發(fā)平臺一般針對某一廠(chǎng)商生產(chǎn)的MCU,或針對某一系列MCU。但其中運行于PC方的IDE在工程管理、編輯功能上具有公用性,編譯設置、下載與調試等功能雖然與硬件相關(guān),但可以通過(guò)調用參數數據庫的方式,用軟件的方法避免其直接與硬件打交道,提高IDE的可移植性。一種嵌入式開(kāi)發(fā)平臺可以盡可能地做到對某一系列MCU通用,但很難做到適用所有的MCU。因而,沒(méi)計一個(gè)可以方便移植到其他系列MCU平臺上的IDE是很有意義的。本文在IDE可移植性方面做了大量的研究工作,并成功地將其移植到Freescale HC08/S08/S12系列微控制器、M*Core核的MMC2107微控制器、C*Core核的CCM3118微控制器、ColdFire核的MCF5271微控制器和ARM核的AT91RM9200微控制器上。

2 SdIDE集成開(kāi)發(fā)平臺的軟件功能設計

可重定目標集成開(kāi)發(fā)平臺SdIDE是一個(gè)高度集成的標準的Win32界面,包含編輯器、編譯匯編鏈接器、調試器、工程管理、Flash在線(xiàn)編程及程序下載等交叉工具,采用Visual C++MFC編寫(xiě)。該集成開(kāi)發(fā)平臺包含工程管理、編輯、編譯、鏈接、程序下載與調試等功能,為了使其具有可重定目標的特性,因而在其功能模塊上將其劃分為公共模塊和私有模塊兩大部分。下面具體介紹各個(gè)模塊的功能及其軟件設計思想。

2.1 SdIDE公共模塊

這里公共模塊是指與編譯器和目標MCU無(wú)關(guān)的模塊,實(shí)現工程管理與編輯功能。設計時(shí),一定要把它們與整個(gè)系統切割開(kāi)來(lái),便于移植。

2.1.1 源文件編輯模塊

提供源文件編輯,支持剪切、復制、查找、替換,完全支持中文和語(yǔ)法高亮顯示(Syntax Highlight)。此部分主要的技術(shù)難點(diǎn)是語(yǔ)法高亮顯示,以及如何解決半個(gè)漢字問(wèn)題。使用MFC的RichEdit控件可以解決此問(wèn)題,但沒(méi)有語(yǔ)法高亮功能。作者在RichEdit的基礎上編寫(xiě)了語(yǔ)法高亮類(lèi),使用效果較好。

2.1.2 工程管理

在SdIDE集成開(kāi)發(fā)平臺中,工程是一個(gè)非常重要的概念,它是用戶(hù)組織一個(gè)應用的所有源文件、設置編譯鏈接選項、生成調試信息文件和最終目標文件的一個(gè)基本結構;提供對源文件、庫文件以及其他輸入文件的管理,并含有編譯與鏈接等設置。

2.2 SdIDE私有模塊

私有模塊是指與編譯器和目標MCU相關(guān)的模塊,實(shí)現編譯、鏈接、程序下載與調試等功能。為了滿(mǎn)足可移植性,采用數據耦合的方式設計。

2.2.1 交叉編譯模塊

包括C/C++編譯器、匯編器、鏈接器、目標文件格式轉換工具等。編譯模塊根據選用的MCU型號調用GNU移植過(guò)來(lái)的m68hcll、m68k、arm、mcore或ccore等編譯器,編譯成功后生成標準的Motorola S-record文件或Bin文件等。匯編器將匯編語(yǔ)言程序轉換為可重定位目標代碼(如Elf格式,執行時(shí)鏈接文件格式),易于定位和鏈接。鏈接器根據鏈接定位信息,將可重定位的目標模塊鏈接成一個(gè)單一的、絕對定位的目標程序,鏈接后的目標程序可以包含調試信息。

2.2.2 程序下載模塊

在PC方編寫(xiě)下載界面,通過(guò)設定MCU的環(huán)境變量及公用參數,分析S格式文件后通過(guò)TBDML寫(xiě)入頭,把數據下載到空白芯片。

2.2.3 調 試

與過(guò)去的仿真方式不同,本開(kāi)發(fā)環(huán)境的調試是通過(guò)BDM頭直接對MCU中的程序進(jìn)行調試。BDM頭除實(shí)現Flash寫(xiě)入、擦除功能外,還可以在應用程序運行時(shí),動(dòng)態(tài)地獲取CPU、存儲器等瞬態(tài)信息。BDM調試工具與單片機的通信通過(guò)雙向的BKGD引腳實(shí)現。調試模式有兩種:?jiǎn)尾秸{試和斷點(diǎn)調試。

3 SdIDE可重定目標的技術(shù)要點(diǎn)

3.1 GCC編譯器的基本特點(diǎn)及其調用的方法

該開(kāi)發(fā)環(huán)境使用的是由GNU移植的GCC編譯器。GCC是由美國自由軟件基金(FSF)開(kāi)發(fā)和維護的軟件,它是一個(gè)跨平臺的C語(yǔ)言編譯器,完全兼容ANSIC,支持目前大多數CPU體系,具有開(kāi)放的開(kāi)發(fā)模式,且性能優(yōu)異。SdIDE通過(guò)建立子進(jìn)程的方式調用該編譯器,具體方法如下:把GCC所支持的所有編譯器目錄放在該開(kāi)發(fā)環(huán)境的安裝目錄下,采用線(xiàn)程管道的方法來(lái)捕獲由“make.exe-f”命令對makefile腳本文件(是針對GCC編譯器支持的所有MCU而編寫(xiě)的較通用的腳本文件)進(jìn)行編譯的輸出信息流,并顯示在SdIDE的信息輸出窗口中。如果捕獲的編譯輸出信息出現任何錯誤,包括源文件語(yǔ)法錯誤和其他錯誤,則編譯、鏈接操作立刻終止,并在輸出窗的Build子窗口中提示錯誤。若是語(yǔ)法錯誤,則用戶(hù)可以通過(guò)雙擊錯誤提示行來(lái)定位引起錯誤的源文件行,并且用語(yǔ)法高亮顯示。

3.2 更換編譯器的設計

為了實(shí)現SdIDE可重定目標的特性,最主要的是要安排好如何編寫(xiě)較通用的makefile腳本文件,這樣SdIDE開(kāi)發(fā)環(huán)境可根據所選定的MCU型號來(lái)調用一個(gè)新的編譯器工具集。因而,在makefile中所有使用編譯器名的地方都用同一個(gè)變量來(lái)代替。更換編譯器時(shí),只需修改變量定義的地方,其他所有引用這個(gè)變量的地方不用改變。makefile是編程人員和make之間的接口,本設計通過(guò)寫(xiě)makefile文件來(lái)說(shuō)明各模塊的依賴(lài)關(guān)系。makefile文件要嚴格按其書(shū)寫(xiě)規則來(lái)編寫(xiě),其中的內容大致可分成宏定義區和基于依賴(lài)關(guān)系的指令區兩大部分。宏定義區主要是定義一些變量,可以在makefile的任何地方被引用;在建立makefile之后,就可以使用make命令來(lái)完成所需的編譯工作。

在SdIDE開(kāi)發(fā)環(huán)境中更換編譯器的軟件設計思路如下:

① 把GCC支持的編譯器目錄全部放在開(kāi)發(fā)環(huán)境的安裝目錄下,以便程序調用。

② 把Cygwin.dll復制SYSTEM32目錄下。為了在Windows平臺上構建GNU工具鏈,需要安裝Cygwin。Cygwin是一個(gè)基于DLL的Unix仿真層(位于Win32之上)。它提供了Unix風(fēng)格的環(huán)境,包括Bashe外殼和GNU工具,這樣就可以建立交叉編譯器工具。

③ 在選定目標平臺(即目標芯片)后,程序自動(dòng)確定所需要調用的編譯器,把編譯器名賦給一個(gè)全局變量——CompilerName。

④ 更換makefile腳本文件中的編譯器名。主要是將makefile腳本文件中用到編譯器名的地方全部用變量來(lái)替換,即在makefile文件的宏定義區定義一個(gè)變量,如COMPILERPREFIX=CompilerName。在makefile文件中用到編譯器名的地方用$(COMPILERPREFIX)替代即可,其他地方基本上可以不變。

3.3 更換編譯參數

若需要編譯命令定義一組編譯參數選項,且這組編譯參數選項會(huì )被多個(gè)規則(或編譯器命令)引用,那么可把這組參數選項賦值給一個(gè)變量,把這個(gè)變量放在所有引用它的地方。當需要改變參數選項時(shí),只需要在變量賦值的地方改變一下。變量可在makefile文件的宏定義區定義,定義變量的方法與3.2小節相同。

4 編程調試器的設計方案

4.1 程序下載

SdIDE提供系列MCU的程序下載與調試,系列MCU通過(guò)串行接口、BDM或監控模式進(jìn)行程序下載與調試。

程序下載部分的功能,在該集成開(kāi)發(fā)平臺中也是根據所選的MCU型號不同,決定調用不同的程序下載模塊來(lái)實(shí)現。例如:若對AT91RM9200T和MCF5271微控制器進(jìn)行程序下載,則使用JTAG頭下載,因而調用其相應的下載模塊程序。下面以Freescale S08/S12系列微控制器的下載為例,闡述BDM方式下載。該方式對FreescaleS08/S12系列MCU都是可行的,它們都有BKGD引腳,支持背景調試和程序下載。

下載程序的功能包括S19文件分析模塊以及Flash存儲器的擦除和寫(xiě)入模塊;但采用BDM頭下載時(shí)還要包括TBDML通信模塊,該模塊負責通過(guò)USB接口將PC方的S-record機器碼寫(xiě)入到空白的Flash存儲器的指定區域。S19文件分析模塊則負責對S-record標準的S19文件進(jìn)行分析,將文件的內容轉換成方便傳輸的格式,以及判斷文件中程序的起始地址、頁(yè)數、是否越界等。下載程序先將Flash擦寫(xiě)程序數據和用戶(hù)程序數據寫(xiě)入RAM的指定區域,當一頁(yè)的用戶(hù)程序數據寫(xiě)入到事先分配的RAM區后,則可通過(guò)調用tbdml動(dòng)態(tài)鏈接庫函數來(lái)實(shí)現擦除和寫(xiě)入操作。BDM頭下載程序的工作流程如圖1所示。

4.2 程序調試

程序調試是IDE的重要功能之一,也是開(kāi)發(fā)嵌入式集成開(kāi)發(fā)平臺的難點(diǎn)之一。下面簡(jiǎn)要介紹本開(kāi)發(fā)系統所實(shí)現的調試功能。

斷點(diǎn)設置:在調試狀態(tài)下,用戶(hù)可以使程序的執行停留在設置了斷點(diǎn)的代碼行上,系統提供各寄存器的值、程序中定義的變量值以及Flash中相應地址的值等信息。設置了斷點(diǎn)的代碼行將以紅色高亮顯示。

斷點(diǎn)調試:設置斷點(diǎn)后,用戶(hù)可進(jìn)入斷點(diǎn)調試模式。在斷點(diǎn)調試模式下,當前即將執行的代碼行將以紅色高亮顯示,如圖2所示。同時(shí)在SdIDF集成開(kāi)發(fā)平臺的右側會(huì )出現3個(gè)用于調試的信息窗口:Register窗口中顯示的是各寄存器的當前值(各寄存器的值會(huì )自動(dòng)顯示);Watch窗口中顯示的是變量的值(在變量地址中輸入變量名,例如I1,按回車(chē)即可);Memory窗口中顯示的是存儲器中的內容(在地址中輸入Flash地址,例如0x8000,按回車(chē)即可),如圖3所示。在斷點(diǎn)調試狀態(tài)下,系統提供相關(guān)的命令:設置斷點(diǎn)、清除斷點(diǎn)、退出調試、單步步人、單步步過(guò)和執行。

結 語(yǔ)

一個(gè)可重定目標的嵌入式集成開(kāi)發(fā)平臺研制的難點(diǎn)在于IDE的可重定性和編程調試器的實(shí)現。針對GCC編譯器所支持的系列MCU,本文介紹的開(kāi)發(fā)環(huán)境實(shí)現了IDE可重定目標、編程調試器,形成了目前較通用的嵌入式集成開(kāi)發(fā)平臺SdIDE,且擴展性較好,價(jià)格低廉,已經(jīng)被國內許多高等院校和一批中小企業(yè)所采用,并已投入批量生產(chǎn)。但是,完善、升級以及對新型芯片的適應還需進(jìn)一步工作。在我國目前的情況下,開(kāi)發(fā)具有自主知識產(chǎn)權的嵌入式集成開(kāi)發(fā)平臺是一項意義重大、艱難且漫長(cháng)的工作,希望本文可以起到借鑒和拋磚引玉的作用。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>