1 引言 Freescale(其前身為Motorola半導體部)公司推出的系列MCU,具有單一電源供電、支持在線(xiàn)編程的內部Flash。在線(xiàn)寫(xiě)入、讀出穩定,為研制新型嵌入式應用開(kāi)發(fā)工具提供了技術(shù)基礎。Freescale公司的MCU應用非常廣泛,銷(xiāo)量已多年名列前茅,其中HC08系列MCU,功耗低、運用靈活.占銷(xiāo)量中的重要部分。開(kāi)發(fā)廉價(jià)且實(shí)用的Freescale HC08系列MCU的編程調試開(kāi)發(fā)工具對該系列MCU在我國的推廣應用具有重要價(jià)值。目前市面上能支持HC08的集成開(kāi)發(fā)環(huán)境(IDE).除了CodeWarrior,雖對HC08系列MCU都支持。但系統龐大,功能復雜。價(jià)格貴,另外一些高校如清華、復旦等,只能支持某幾款芯片,對于有200多款的HC08 MCU,較大局限,使用不便,不利于應用開(kāi)發(fā),更不便于教學(xué)實(shí)踐。 本實(shí)驗室從1999年開(kāi)始研制集成開(kāi)發(fā)環(huán)境.在分析了各種嵌入式系統集成開(kāi)發(fā)系統后.推出了一種新型的HC08MCU通用型的集成開(kāi)發(fā)環(huán)境.每年不斷進(jìn)行改進(jìn)升級.現已基本成型。本IDE具有結構清晰、操作簡(jiǎn)潔的特點(diǎn).集成了程序編輯、編譯、下載、聯(lián)機調試、硬件評估等功能,有較好的實(shí)用前景。在闡述本IDE的設計基礎上,本文簡(jiǎn)要分析了IDE的Pc方軟件主要技術(shù)要點(diǎn)和簡(jiǎn)單介紹了本IDE配套的硬件系統的基本結構。 2 設計思路與技術(shù)優(yōu)勢 對HC08系列MCU。進(jìn)行深入的研究。經(jīng)過(guò)長(cháng)期的實(shí)踐與探索,研制了新型的嵌入式應用系統的集成開(kāi)發(fā)環(huán)境。軟件分兩大部分:PC方軟件和MCU方軟件,配套硬件分三大部分:PC機、寫(xiě)入器(也稱(chēng)調試器或編程器)和實(shí)驗箱(或評估板或嵌入式產(chǎn)品)。 1) IDE主要設計思路是: (1)PC方軟件提供程序管理、編輯、編譯、下載、聯(lián)機調試等功能,源程序經(jīng)過(guò)編輯和編譯成S19目標文件后.通過(guò)USB接口與寫(xiě)入器中的MCU(稱(chēng)主控MCU)方軟件通信.將該目標文件發(fā)給主控MCU,然后寫(xiě)人器又與實(shí)驗箱MCU(稱(chēng)目標MCU)芯片串行通信,將該目標文件寫(xiě)入目標MCU芯片的FIash中。成功后可以試運行。檢驗目標MCU中的程序能否正常運行.否則聯(lián)機調試該程序。 (2)HC08系列MCU間資源差異較大,進(jìn)入監控的支撐電路有差別,為了設計適用于不同MCU的通用IDE,解決這些問(wèn)題是關(guān)鍵,具體方法參考文獻,即MCU間資源差異的問(wèn)題是通過(guò)PC機中的數據庫保存其差異而得到解決。進(jìn)入監控的支撐電路問(wèn)題是通過(guò)在PC機和目標MCU間加一個(gè)主控MCU而得到解決從而為實(shí)現通用的IDE奠定基礎。 (3)作為以MC908GP32(舊稱(chēng)MC68HC908GP32)MCU為藍本進(jìn)行“單片機原理與嵌入式應用”教學(xué)的實(shí)驗箱配套軟件,實(shí)驗箱提供了基本實(shí)驗所需的接線(xiàn)端口.還提供了擴展實(shí)驗的接線(xiàn)排孔。運用本開(kāi)發(fā)環(huán)境根據實(shí)驗項目開(kāi)發(fā)軟件要求.可完成所有基于MC908GP32 MCU的接口實(shí)驗。對于Freescale該系列其他MCU?赏ㄟ^(guò)置換核心板(MCU與其支撐電路構成的),而達到更換HC08 MCU的目的,便于進(jìn)行其他MCU的實(shí)驗。 2) 本開(kāi)發(fā)環(huán)境與傳統的仿真器相比具有如下技術(shù)優(yōu)勢: (1)傳統仿真器的“仿真系統”一般是使用軟件仿真的技術(shù),在宿主機上通過(guò)軟件的方式實(shí)現目標機的功能。這種方式雖可以模擬大部分目標機的功能。但是這種方式并非是真正的目標系統.往往在此基礎上開(kāi)發(fā)出來(lái)的程序.一旦移到目標系統上運行.卻會(huì )出現一些在仿真軟件中無(wú)法遇到的問(wèn)題。而本開(kāi)發(fā)環(huán)境是基于硬件之上的,對目標系統可以達到完美的模擬,即在本開(kāi)發(fā)環(huán)境上開(kāi)發(fā)出來(lái)的程序在移到目標系統上時(shí),由于硬件基礎相同.因此不會(huì )發(fā)生任何兼容性問(wèn)題。 (2)與傳統仿真器相比,提供的調試功能為在線(xiàn)調試方式,操作界面為Windows界面,操作猶如調試純軟件,方法簡(jiǎn)潔。 3 集成開(kāi)發(fā)環(huán)境的設計 為方便開(kāi)發(fā)和調試嵌入式系統,設計了基于C編譯的HC08 MCU集成開(kāi)發(fā)環(huán)境.軟件總體分兩大部分:PC方軟件與MCU方軟件.PC方軟件可分為脫機編輯編譯和聯(lián)機下載調試兩部分。MCU方軟件設計請參考文獻。 PC方軟件采用標準的Win32界面.利用Visual C++MFC編寫(xiě).主界面設計如圖1所示,其中左邊為工程管理窗口,右邊為代碼編輯窗口.下面為編譯輸出及調試窗口。 ![]() 圖1 集成開(kāi)發(fā)環(huán)境主界面 本IDE的主要設計功能和技術(shù)特點(diǎn)如下: (1)標準的Win32視窗界面,充分體現Windows平臺的特性。具有安裝方便、操作簡(jiǎn)潔等特點(diǎn)。并配置內容豐富的幫助系統,幫助用戶(hù)快速入門(mén),學(xué)習HC08 MCU的編程方法。 (2)工程管理。工程管理分別對c文件和頭文件兩種源文件進(jìn)行管理.對匯編也支持.在主界面上以文件樹(shù)的形式呈現。工程屬性根據編程要求而設置,通過(guò)“編譯設置”對話(huà)框進(jìn)行,它包括MCU類(lèi)型、Flash區程序的起始地址、RAM起始地址和終止地址、堆棧起始地址等設置。工程管理的主要功能是管理源程序文件和生成編譯器所需的文件。在保存T程的同時(shí)后臺生成了該工程的make file文件(包含編譯選項和工程屬性)、src文件(包含工程中使用到的文件和資源)。 (3)下載程序。下載程序是將生成的目標機器碼寫(xiě)入目標MCU中的.包括通信模塊和S19文件分析模塊兩部分。通信模塊負責實(shí)現PC機與主控MCU的USB通信。發(fā)送命令、參數和程序代碼等,和主控MCU一起對目標MCU完成相應的擦除、寫(xiě)入和調試等操作功能。S19文件分析模塊負責先對S19文件進(jìn)行分析和打包.將文件的內容轉換成便于傳輸的格式,并判斷文件中程序的起始地址、頁(yè)數以及是否越界等.然后進(jìn)行發(fā)送通信。 (4)調試器以及寄存器查看器和內存變量查看器。寫(xiě)入器也兼有調試功能.所以也稱(chēng)調試器。調試的功能設計是參照通用IDE的調試方法而設計的,進(jìn)入調試模式(即監控模式),可以單步調試或斷點(diǎn)調試。調試時(shí)可以通過(guò)寄存器查看器和內存變量查看器觀(guān)察目標MCU運行的當前值,以便發(fā)現程序問(wèn)題所在.實(shí)現在線(xiàn)調試功能。 4 技術(shù)設計要點(diǎn) 在系統的開(kāi)發(fā)設計過(guò)程中,遇到許多的問(wèn)題。下面把主要問(wèn)題的一些處理方法作簡(jiǎn)要分析說(shuō)明,供大家借鑒。限于篇幅.HC08系列MCU的調試器通用性設計具體見(jiàn)文獻。 4.1中文和語(yǔ)法高亮的實(shí)現 語(yǔ)法高亮在集成開(kāi)發(fā)系統的代碼編寫(xiě)過(guò)程中是主要的問(wèn)題之一。已有的一些控件雖然語(yǔ)法高亮功能比較全,但是對中文支持不是很好.最突出的就是半個(gè)漢字問(wèn)題(在選擇和刪除字符的時(shí)候漢字當兩個(gè)字符處理,一次只能刪除半個(gè),會(huì )出現亂碼)。使用MFC的RichEdit控件雖可以解決中文問(wèn)題,但又沒(méi)有語(yǔ)法高亮的功能,為此,就以RichEdit為基類(lèi)編寫(xiě)了語(yǔ)法高亮類(lèi),才解決語(yǔ)法高亮和中文的顯示問(wèn)題。其主要編程的思路是:通過(guò)捕獲用戶(hù)鍵盤(pán)輸入的事件.判斷用戶(hù)輸入的單詞是否為c語(yǔ)言中的關(guān)鍵字.如果是,則改變其顏色。 4.2 GNU編譯器的整合 本系統使用的是由GNU移植的HC08編譯器,該軟件不僅是開(kāi)源、免費的。而且執行效率高,功能強,對c代碼具有優(yōu)化的功能。但是唯一的問(wèn)題是。該編譯器是Win32控制臺程序,輸出的編譯信息都是在不同控制臺下的.不易整合在一個(gè)IDE中。更甚的是編譯器的輸出信息都是非標準的輸出流,無(wú)法使用ShellExecute函數捕獲,也無(wú)法輸出到管道文件中。為了解決該問(wèn)題參考了一些國內外的資料,受此啟發(fā)。采用CreateThread的方法,也就是創(chuàng )建子線(xiàn)程的辦法,通過(guò)線(xiàn)程的管道,將編譯輸出信息捕獲.并顯示在窗口中。同時(shí)在此基礎上也實(shí)現了從編譯錯誤信息跳轉到源代碼的功能。 4.3 PC機與寫(xiě)入器的USB通信設計 寫(xiě)入器和PC機建立USB通信除了MCU與PC的通信程序設計外.PC方必須要有相應的驅動(dòng)程序。本設計使用的USB開(kāi)發(fā)包USBIO_EL是由德國Thesycon Systemsoftware&Consulting GmbH公司提供的免費軟件,該開(kāi)發(fā)包提供的功能是限制版本的USB驅動(dòng)程序usbio_el.sys和USB動(dòng)態(tài)鏈接庫usbiocom.dll文件。usbio_el.sys 的限制部分為:廠(chǎng)商ID只能為0x0C70.僅支持一個(gè)中斷IN端點(diǎn)和中斷OUT端點(diǎn),支持的端點(diǎn)緩沖區大小最大為8字節。而本設計寫(xiě)入器中使用的MC68HC908JB8芯片的USB模塊恰好滿(mǎn)足限制版本的條件,故可使用該驅動(dòng)程序;usbiocom.dll可以直接加載至程序中,使用其中的類(lèi);表1為本設計中所用到的該庫中的類(lèi)及函數的說(shuō)明?梢哉{用這些類(lèi)及其函數實(shí)現建立連接、發(fā)送數據和接收數據的程序功能,從而實(shí)現指令的通信以及程序代碼的傳輸。 表1本設計中使用到的USB庫的類(lèi)及函數說(shuō)明 ![]() 4.4 C語(yǔ)言程序調試功能的設計 調試功能實(shí)現對匯編和c語(yǔ)言的源碼級在線(xiàn)調試。兩者實(shí)現過(guò)程大體相似,但C語(yǔ)言調試的實(shí)現相對復雜。在此只針對C程序進(jìn)行說(shuō)明。 匯編程序和C程序在編譯后都會(huì )產(chǎn)生調試信息文件(后綴名為.dbg)。dbg文件包含有相應的信息以供調試時(shí)使用。該文件詳細記錄了調試所需要的行號與存儲地址等信息.包括文件首地址、函數的首末地址、每行源代碼的行號和首地址、局部變量以及全局變量的名稱(chēng)地址類(lèi)型等,如圖2所示。對C語(yǔ)言程序的調試主要是基于對該調試信息文件的調用和判斷。調試動(dòng)作的設計首先是“設置斷點(diǎn)”,接著(zhù)點(diǎn)擊“開(kāi)始調試”,進(jìn)入調試模式.然后選擇“單步步入(Step Into)”、“單步步過(guò)(Step Over)”或“執行”至下一斷點(diǎn)處等調試操作根據程序運行或變量的值判斷調試。 下面分別闡述設計思路。 (1)設置斷點(diǎn) 如在文件main.c中選擇所需中斷的一代碼行.假設選擇第33行,點(diǎn)擊菜單“調試”一>“設置斷點(diǎn)”,則在調試文件.dbg文件中找到“FILE main.c"行下的“LINE 33 8096”(如圖2的雙下劃線(xiàn)), 該LINE后的33(十進(jìn)制)等于當前設置斷點(diǎn)的行號33,然后提取該“LINE”行中的8096(十六進(jìn)制.本語(yǔ)句的首地址),作為當前的斷點(diǎn)地址。則在界面上顯示當前所選擇斷點(diǎn)的代碼行呈紅色高亮顯示。否則所選擇的不是代碼行。 ![]() 圖2 dbg文件結構 (2)開(kāi)始調試 設置斷點(diǎn)后。點(diǎn)擊菜單“調試" -> “開(kāi)始調試”,程序運行至斷點(diǎn)地址處.產(chǎn)生斷點(diǎn)中斷.則返回目標MCU運行的有關(guān)信息至PC機,在IDE界面中當前斷點(diǎn)行呈藍色高亮顯示,在寄存器跟蹤窗口和變量跟蹤窗口中顯示目標MCU中相應的值。接著(zhù)選擇不同的調試操作繼續進(jìn)行.如“單步步入”("單步步過(guò)"或“執行”至下一斷點(diǎn)的設計思路與之類(lèi)似)。 (3)單步步入 “單步步入”即從當前斷點(diǎn)處按程序執行的流程一條一條語(yǔ)句的運行調試。設計調試的方法是.從程序“開(kāi)始調試”運行至斷點(diǎn)起,點(diǎn)擊“單步步入”,程序先計算下一個(gè)斷點(diǎn)地址。從斷點(diǎn)開(kāi)始.MCU的斷點(diǎn)模塊自動(dòng)將當前斷點(diǎn)地址加1.作為下一個(gè)斷點(diǎn)地址.但C語(yǔ)言一條語(yǔ)句編譯后往往不止一條匯編語(yǔ)句,可能幾十條.甚至幾百條.如此計算.則加1還不是下一條C語(yǔ)句的首地址。這時(shí)須將返回的PC寄存器值繼續加1。直至下一條C語(yǔ)句首地址.即PC寄存器里的值等于下一條C語(yǔ)句對應的首地址,這樣一次“單步步人”完成。若需繼續執行,則再點(diǎn)擊“單步步入”命令。 5 實(shí)驗硬件系統 為了配合本IDE,根據HC08系列MCU電氣特征、功能,設計了一個(gè)通用的實(shí)驗硬件系統,方便了實(shí)驗教學(xué),方便了嵌入式系統的開(kāi)發(fā)和測試。 實(shí)驗硬件系統的實(shí)物結構如圖3所示。 ![]() 圖3 HC08嵌入式實(shí)驗硬件系統 硬件系統主要由以下幾部分構成:①MC908GP32和支撐電路構成核心板(更換MCU只要更換該板即可)。本系統為其提供的支撐電路主要由5v電源、晶振電路和PLL電路構成。其中晶振電路采用了一個(gè)32.768KHz的晶振為MCU提供振蕩信號,PLL電路是主要由電容和濾波網(wǎng)絡(luò )構成的負反饋環(huán)路,使頻率穩定地提高至2.4576MHz。②串行通信(SCI)電路。早期的電平轉換集成電路由MC1488、MC1489構成.但需另配12V供電,使接線(xiàn)繁瑣。本系統采用目前較多用的MAX232將MCU的TTL電平轉換為標準的RS-232電平,它僅需共用5V供電實(shí)現電平轉換。③外圍接口和元件。為了給用戶(hù)提供足夠的接口,充分考慮不同用戶(hù)和開(kāi)發(fā)者的需要.本系統提供2個(gè)標準9芯串口、LCD接口、鍵盤(pán)接口、8組指示燈和開(kāi)關(guān)、電位器、蜂鳴器、模擬量接口、繼電器以及各種通信口等,不僅滿(mǎn)足MCU的教學(xué),也滿(mǎn)足MCU開(kāi)發(fā)評估及測試的需要。④IC插線(xiàn)和擴展槽。本系統還具有一定的可擴展性,通過(guò)提供的Ic插線(xiàn)和擴展槽,用戶(hù)可自行擴展其它的IC和設備。 6 結束語(yǔ) 以上所闡述的Freescale HC08 MCU集成開(kāi)發(fā)環(huán)境設計思路.以及技術(shù)要點(diǎn).對于開(kāi)發(fā)者,具有一定的啟發(fā)和借鑒作用。本系統的推出.有力地解決了國內開(kāi)發(fā)Freescale HC08嵌入式應用系統主要依賴(lài)國外開(kāi)發(fā)平臺的現狀。經(jīng)過(guò)幾年的研制和推廣應用.配合Freescale公司的大學(xué)計劃已經(jīng)獲得較好的應用效果。 本文作者創(chuàng )新點(diǎn): (1)編譯器的整合以及中文和語(yǔ)法高亮的實(shí)現解決一個(gè)WindOWS平臺中難實(shí)現的問(wèn)題; (2)充分利用免費開(kāi)發(fā)包實(shí)現了PC方USB的驅動(dòng); (3)調試文件的利用解決了MCU方程序調試的問(wèn)題。 作者:曹金華,劉曉升,王宜懷 來(lái)源:《微計算機信息》(嵌入式與SOC)2009年第9-2期 |