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