當前位置:才華齋>設計>環境設計>

淺析環境設計的要點

環境設計 閱讀(2.31W)

一套方便、穩定、適用範圍較廣的嵌入式整合開發環境肯定要有較好的可擴充性和可移植性,因而研製可重定目標IDE的難點在於軟體架構的可重定性設計。下面是YJBYS小編整理的環境設計的要點相關知識,希望對你有幫助!

淺析環境設計的要點

  可重定目標的軟體設計

SdIDE在軟體上的可重定性設計思路體現在如下兩個方面。

(1)SdIDE模組的可重定性設計

為了使該開發環境適用於多種MCU型號,在模組設計和編譯器設計方面做了深入的研究,因為這兩方面是SdIDE具有可重定性的關鍵點。首先,在模組 設計方面分為與MCU有關的部分(相關模組)和與MCU無關的部分(獨立模組),獨立模組主要包括編輯、編譯出錯處理、makefile檔案編寫,工程管理、函式及全域性變數列表,介面設計等;相關模組主要包括程式下載模組,這些模組也可以通過軟體的方法使其對某一系列MCU通用。

(2)程式設計器的可重定性設計

程式設計器主要是實現程式下載功能,程式設計器的通用一般只針對某一系列或某一晶片而言的,不可能做到完全通用。例如對FreescaleHCS12系列芯 片,都有BKGD引腳,因而可以用BDM方式下載;C*CORE和M*CORE系列晶片由串列埠通過監控的方式下載;ARM和COLDFIRE系列晶片通過 JTAG下載。下面以FreescaleHCS12系列晶片的程式下載模組設計為例,來說明程式設計器的可重定性設計。

程式設計器可重定性設計的關鍵技術在於如何處理HCS12系列MCU的Flash引數。要對不同晶片的Flash引數進行深入理解、比較和總結之 後,才能對程式下載模組進行設計。找出這些晶片有差異的Flash引數後,將其放在資料庫中,以便下載程式時,從該資料庫中讀取相關引數。設計好引數資料 庫之後,PC方下載介面可以根據所選擇的晶片型號從配置檔案和資料庫中獲取相應晶片的擦寫操作所需的引數值。表1給出了HCS12系列MCU中的幾款晶片 的引數,這些引數針對不同的MCU,其值可能不同。

使用者資料起始地址:將一頁使用者資料寫入相應空白晶片之前,要先將這一頁資料通過BDM頭寫入到RAM區,然後執行寫入程式,實現資料從RAM區寫入 到ROM區。但由於不同晶片的RAM區大小和起始地址有可能不同,把一頁使用者資料寫入到RAM區時,其起始地址也會有所不同,所以將其設定為可變引數,使 用時,從資料庫中讀取。

標誌位首地址:該引數是RAM區的一個地址,用於存放擦寫成功或出錯的標誌資訊,佔兩個位元組。每寫完一頁面使用者資料之後,PC方可從該地址處讀出一個字的內容,判斷Flash寫入操作是否成功,只有成功後,才寫下一頁使用者資料。

寫入檔案路徑和擦除檔案路徑:由於每個晶片的Flash引數和空間不盡相同,因而每種晶片的擦除和寫入子程式也會有差異,因而,PC方要根據當前所 選的MCU型號以及當前是擦除還是寫入操作來決定呼叫哪個MCU的寫入程式程式碼檔案(*Write.s19)或擦除程式程式碼檔案 (*Erase.s19),以實現寫入或擦除操作。

  SdIDE軟體架構的可重定性設計

本文設計的可重定目標整合開發環境SdIDE包含工程管理、編輯、編譯、連結、程式下載等功能,啟動的主介面如圖1所示。為了使SdIDE的軟體架構具有可重定目標的特性,因而在功能模組上將其劃分為公共模組和相關模組。下面簡要闡述這些模組的功能及其軟體架構的設計思想。

1SdIDE獨立模組

SdIDE獨立模組是指與編譯器和目標MCU無關的模組,主要是完成工程管理與編輯功能。

(1)編輯模組

該模組可以實現對原始檔編輯,使用MFC介面庫進行二次開發,支援剪下、複製、所有工程中查詢、替換等常用功能,同時作者也在該環境中實現了完全支 持中文和語法高亮顯示(SyntaxHighlight)功能,此部分主要的技術難點在於語法高亮顯示和解決半個漢字問題。使用MFC的RichEdit 控制元件可以解決半個漢字此問題,但無法解決語法高亮功能,因而,筆者在RichEdit的基礎上重新編寫了語法高亮類,在實際測試中效果較好。

(2)工程模組

在SdIDE整合開發環境中,檔案的組織和呼叫都以工程的方式來進行操作。工程是一個非常重要的概念,它是使用者組織一個應用的所有原始檔、設定編譯 連結選項、生成除錯資訊檔案和最終的目標檔案的一個基本結構。提供對原始檔、庫檔案及其他輸入檔案的管理,並含有編譯與連結等設定。

2SdIDE的相關模組

SdIDE相關模組是指與編譯器和目標MCU相關的模組,完成編譯、連結、程式下載等功能。為了滿足可移植性,採用資料偶合的方式設計。

(1)交叉編譯模組

包括C/C++編譯器、彙編器、連結器、目標檔案格式轉換工具等。編譯模組可根據選用的MCU型號呼叫GNU移植過來的m68hc11、m68k、 arm、mcore或ccore等編譯器,原始檔編譯成功後,在相應的工程目錄下生成標準的MotorolaS-record檔案或Bin檔案等;連結器 根據連結定位資訊,將可重定位的目標模組連結成一個單一的、絕對定位的目標程式,連結後的目標程式中包含可裁剪的除錯資訊。

(2)程式下載模組

程式下載模組包括PC方模組和MCU方模組。PC方模組主要是負責獲取MCU的環境變數及公用引數,分析重組S格式檔案,最後通過呼叫TBDML動 態連結庫函式把擦寫程式和使用者程式寫入RAM區,然後再執行存放於RAM區的擦除和寫入程式實現程式下載操作。MCU方模組主要是編寫不同微處理器的 Flash的擦除和寫入程式,存放在工程模板目錄中,供PC方下載資料時呼叫。

  SdIDE編譯模組的可重定性設計

SdIDE開發環境使用的是由GNU移植的GCC編譯器,GCC是由美國自由軟體基金(FSF)開發和維護的軟體,它是一個跨環境的C語言編譯器。 GCC所支援的所有編譯器目錄都放在SdIDE開發環境的安裝目錄下,SdIDE根據所選定的MCU型號,決定呼叫相應的編譯器工具集。

1更換編譯器的設計

如何編寫較通用的makefile指令碼檔案是實現SdIDE可重定目標特性的關鍵點。makefile是程式設計人員和make之間的介面,本設計中各 模組的依賴關係主要體現在編寫的makefile檔案中,makefile檔案中的程式碼內容設計成巨集定義區和基於依賴關係的`指令區兩大部分。前者主要是定 義一些全域性變數,可以在makefile的任何地方被引用。為了增加可移植性,與編譯器有關的路徑和編譯器名都用一個全域性變數來定義,這樣,在更換編譯器 時,只需要把GCC支援的編譯器目錄全部放在開發環境的安裝目錄下,以便程式呼叫,同時把當前所需的編譯器名賦給全域性變數 CompilerName,makefile指令碼檔案中的編譯器名就可用巨集$(Compiler-Name)來編寫。

2更換編譯引數的設計

若編譯命令需要定義一組編譯引數,且這組編譯引數會被多個規則(或編譯器命令)引用,那麼可把這組引數賦值給一個變數,把這個變數放在所有引用它的地方。當需要改變引數時,只需要在變數賦值的地方改變一下就可以了。變數可在makefile檔案的巨集定義區定義。

程式設計器的可重定性設計

程式設計器主要是完成系列MCU的程式下載功能,程式設計器的可重定性體現在根據所選的MCU型號不同,決定呼叫不同的程式下載模組。例如對 AT91RM9200T和MCF5271微控制器進行程式下載,則使用JTAG頭,因而要呼叫JTAG下載模組。下面以FreescaleHCS12系列 微控制器的下載為例,來闡述BDM方式下載,該方式對HCS12系列MCU都是可行的,它們都有BKGD引腳,支援BDM下載。

1程式設計器PC方軟體設計

程式設計器的PC方軟體功能包括S19檔案分析模組和Flash儲存器的擦除和寫入模組。但採用BDM頭下載時還要包括TBDML通訊模組,該模組負責 通過USB介面將PC方的S-record機器碼寫入到空白的Flash儲存器的指定區域。S19檔案分析模組則負責對S-Record標準的S19檔案 進行分析,將檔案的內容轉換成方便傳輸的格式,以及判斷檔案中的程式的起始地址、頁數、是否越界等。下載程式先將Flash擦寫程式資料和使用者程式資料寫 入到RAM的指定區域,當一頁的使用者程式資料寫入到事先分配的RAM區後,則可通過呼叫tbdml動態連結庫函式來實現擦除和寫入操作。BDM頭下載程式 的工作流程如圖2所示。

2程式設計器MCU方軟體設計

程式設計器的MCU方的軟體功能主要包括Flash的擦除和寫入程式。由於在Flash的擦除和寫入過程中,Flash是不能讀的,故擦除和寫入 Flash的程式要放在RAM中,擦除操作時,首先初始化相應Flash暫存器,然後呼叫整體擦除子程式開始對Flash進行整體擦除。寫入操作時,首先 初始化相應Flash暫存器,然後讀取RAM區相應地址處的一頁使用者資料包,即分別讀出PPAGE暫存器的分頁值、起始地址、一次寫入的資料字個數,最後 呼叫塊寫入子程式開始寫入資料。Flash擦除/寫入子程式流程圖如圖3所示。