田海燕
(中國兵器工業第五八研究所智能檢測事業部,四川 綿陽 621000)
CodeWarrior系列集成開發環境是Metrowerks公司所設計的軟件開發工具,專用于嵌入式微控制器的調試開發。在商用嵌入式軟件開發工具的使用率方面,該開發工具排名第一。它結合了尖端的調試技術和建議健全的開發環境,把C/C++源級別的調試和對嵌入式應用的開發帶上了新的臺階。
在本設計中,所用到的開發工具為ARM公司開發的結合了CodeWarrior和AXD的GUI開發環境,專為ARM設計開發的專用版 CodeWarrior for ARM Develop Suite v 1.2,簡稱為ADS1.2。其圖形用戶界面直觀,功能強大,并且支持源代碼/匯編語言混合調試,易于使用。
ADS由ARM實時庫,命令行開發工具,實用程序,GUI開發環境(AXD和CodeWarrior)和支持軟件組成。用戶可以輕松地使用這些部件編寫和調試自己的程序。
LPC2478是恩智浦(原飛利浦)公司開發的一款基于ARM7TDMI-S內核的微控制器。其帶有JTAG口作為實時調試接口,可以執行32位的ARM指令,運行頻率為72 MHz,帶有512 kB片內flash編程存儲器[1]。
本文要討論的硬件平臺為一塊基于LPC2478微控制器開發的實驗板,其主要功能為通過UART口,實現微控制器和外部的光電轉換器的通信。最小系統電路原理圖如圖1所示。

圖1 LPC2478 JTAG口電路原理
與以往的開發系統不同,ADS 1.2不必外加昂貴的仿真器連接微控制處理器管腳上的信號,而是通過帶有小型EasyJTAG-H轉接頭的JTAG電纜直接與微控制處理器的JTAG調試口連接,JTAG調試電纜一端連在計算機的并口,一端與微控制器的JTAG口相連,如圖2所示。調試所需的工裝設備僅為一根帶有EasyJTAG-H轉接頭的JTAG調試電纜,將仿真功能嵌入到芯片內部,省掉了高價的仿真器,大大簡化了調試設備,節省了開發費用。
JTAG調試用到了 TCK、TMS、TDI、TDO和 TRST這幾個腳。實時調試接口JTAG口的電路圖如圖3所示。

圖2 H-JTAG連接示意圖

圖3 LPC2478 JTAG口電路原理
利用ADS1.2開發軟件的目的就是將調試環境下的嵌入式應用程序轉移到最終獨立運行的LPC2478微控制器中去,這章就詳細介紹具體調試過程。
使用EasyJTAG-H下載程序時,需要首先對EasyJTAG-H轉接頭配套的軟件進行配置[2],如圖4,圖5所示。

圖4 H-JTAG主窗口

圖5 選擇片內FLASH
調用 CodeWarrior for ARM Develop Suite v 1.2,進入 ADS 1.2的程序編寫與編譯的GUI環境,如圖6所示。

圖6 CodeWarrio編譯GUI環境
在CodeWarrior for ARM Develop Suite v 1.2環境中,點擊Debug,進入AXD調試下載環境。可在觀察窗口監測所關心的變量值,如圖7所示。

圖7 AXD調試GUI環境
1)工程名別用中文名路徑,必須全為英文的。
2)如果工程路徑改變,編譯不會通過,需點擊Project下的Remove Object Code,然后在重新編譯下就OK了。
3)JTAG 的nRST、TDI、TMS、RTCK 等引腳注意要接上下拉電阻,以確保JTAG在上電時有一個穩定的初始狀態。
4)當在非GPIO模式下操作IOnDIR時,會出現JTAG調試中無法暫停的情況,并且AXD會彈出以下信息的窗口并被迫關閉:“RDI Severe Error 00602:Can’t halt target and make it enter DEBUG state.”當出現這種情況后,需要重新上電,然后重新打開H-JTAG軟件和AXD等。
5)在AXD調試環境中,在ROM中設置的斷點數僅限2個,且單步運行時內部還要占用斷點。進行下一步調試時,需清除上一步的斷點。

在ADS 1.2開發環境下,在實際調試中,多次遇到全局變量的初值被莫名篡改的情況。如以下情況:則發送的數據完全正確。在MAIN文件中定義的全局變量,隨時可能在其他子函數中被篡改,可見,ADS 1.2對全局變量的定義和賦值要求非常苛刻。在此,根據調試經驗提出了幾方面的解決方案。
如圖8所示,直接將全局變量定義到指定地址上,不過定義時要避開系統的保留地址。此方法可以完全解決ADS 1.2中全局變量的初始化定義問題,只是對于初值不定,需要在主程序中手動賦初值。

圖8 將全局變量定義到指定地址上
Volatile主要用在變量會異步改變的時候,尤其是CPU外設寄存器的定義中,中斷和主循環都會用到的全局變量等,但據調試實踐,用此方法不能完全解決全局變量的值被篡改的問題。
Const限定了一個變量不能被改變,一定程度上提高了變量的穩定性和安全性。尤其是在定義顯示屏的字庫數組變量時,一定要在定義前加Const申明數組為常量,能保證顯示數據部會出錯。如圖9所示。

圖9 將常量數據定義為Const類型
本文介紹了利用ADS 1.2對周立功的ARM微控制器LPC2478進行調試開發的過程,探討了開發過程中的經驗,并給出了在ADS 1.2中解決全局變量被篡改賦值的方法。經過具體實踐,該調試過程已成功運用于試驗開發板的調試,是很可貴的調試總結及經驗。
[1]Metrowerks.CodeWarrior IDE User Guide[Z].2008.
[2]周立功.ARM嵌入式系統應用技術筆記-基于LPC2400[M].廣州:廣州致遠電子有限公司,2008.
[3]楊帆,程雯,夏亦冰,等.多傳感器信息融合測控體系在溫室測控中的應用研究[J].武漢理工大學學報,2011(9):157-159.