引言
MAXQ平臺(tái)得到了世界一流工具的支持,例如IAR專(zhuān)為MAXQ系列提供的“嵌入式工作臺(tái)” (Embedded Workbench)。本應(yīng)用筆記說(shuō)明如何建立、構(gòu)建和調(diào)試面向MAXQ平臺(tái)、以C語(yǔ)言編寫(xiě)的應(yīng)用程序。本文還將演示MAXQ2000的某些特性,MAXQ2000是MAXQ系列的第一款微控制器。本應(yīng)用采用專(zhuān)用于MAXQ平臺(tái)的1.12B版IAR編譯器編寫(xiě)。這些指令在后續(xù)版本的產(chǎn)品中仍會(huì)保留。這些指令可以在MAXQ2000評(píng)估板上執(zhí)行。
設(shè)置MAXQ2000評(píng)估板
在開(kāi)始編寫(xiě)代碼前,首先連接MAXQ2000評(píng)估板。該評(píng)估板應(yīng)含有3塊電路板,其中一個(gè)帶有小型LCD屏。最大的那個(gè)電路板(圖1中連接了LCD子板的)就是MAXQ2000評(píng)估板。我們將在本文后面討論它的特性。將LCD板連接至MAXQ2000評(píng)估板上標(biāo)有J3的端子。圖1. 連接有LCD板的MAXQ2000評(píng)估板
剩下的一塊電路板是JTAG板。MAXQ2000裝載器和調(diào)試引擎采用JTAG協(xié)議通信。由于很難找到通用的、用于個(gè)人計(jì)算機(jī)的商品化JTAG適配器,Dallas Semiconductor提供了一個(gè)串行至JTAG轉(zhuǎn)換板。評(píng)估板還包括了一個(gè)小型連接器。如圖2所示,使用該連接器來(lái)連接MAXQ2000評(píng)估板和JTAG板。通過(guò)電纜將MAXQ2000評(píng)估板上標(biāo)有J4的端子和JTAG電路板上標(biāo)有P2的端子連接在一起。注意,連接電纜的紅邊應(yīng)在兩個(gè)板子上的引腳“1”和“2”一側(cè)。
圖2. MAXQ2000評(píng)估板與JTAG板連接
MAXQ2000評(píng)估板上有3個(gè)跳線(xiàn)。跳線(xiàn)JU1、JU2和JU3上的引腳1和2應(yīng)跳接在一起。此外,確保晶體放置在Y1上(靠近板上的微處理器)。本應(yīng)用筆記的演示程序默認(rèn)晶振頻率為13.5MHz。JTAG板也含有3個(gè)跳線(xiàn)。跳線(xiàn)應(yīng)放置在端子JH1、JH2和JH3上。
本裝置要求5V ±5%/300mA的電源,插孔中心為正極。將電源插入JTAG板上的電源插孔J2。
最后,需要將PC串口連接至JTAG板。采用一個(gè)標(biāo)準(zhǔn)9針直通串行電纜,將計(jì)算機(jī)的一個(gè)串口與JTAG板的串口相連(注意:不要連接至MAXQ2000評(píng)估板的串口,具體參見(jiàn)圖3的正確連接方式)。
圖3. 連接至JTAG板的串行電纜的正確位置
現(xiàn)在,我們就可以利用IAR工具開(kāi)始工作了。
IAR編譯器使用入門(mén): Hello World
IAR提供了一個(gè)為MAXQ平臺(tái)設(shè)計(jì)、限定代碼尺寸的評(píng)估版編譯器,它們?cè)贛AXQ2000評(píng)估板附帶的CD上。此外,也可以從http://www.iar.com下載。按照說(shuō)明來(lái)安裝、選擇默認(rèn)的安裝位置和選項(xiàng)。注意,IAR Embedded Workbench產(chǎn)品僅適用于Windows?平臺(tái)。按照以下步驟從開(kāi)始菜單啟動(dòng)IAR Embedded Workbench:IAR Systems IAR Embedded Workbench for MAXQ IAR Embedded Workbench?,F(xiàn)在,我們就在MAXQ2000評(píng)估板上創(chuàng)建一個(gè)簡(jiǎn)單的應(yīng)用。
建立一個(gè)新的工作區(qū)。在FILE菜單下,選擇NEW。將出現(xiàn)一個(gè)對(duì)話(huà)框,顯示"Source/Text"和"Workspace"選項(xiàng)。選擇WORKSPACE,單擊OK。出現(xiàn)一個(gè)文件對(duì)話(huà)框,詢(xún)問(wèn)新工作區(qū)的名稱(chēng)。確定保存新工作區(qū)的位置后,輸入工作區(qū)名稱(chēng)。對(duì)于本項(xiàng)目,我們稱(chēng)其為"helloworld"。輸入工作區(qū)名稱(chēng)后,單擊SAVE。
一旦打開(kāi)工作區(qū)后,則需要建立一個(gè)項(xiàng)目。在PROJECT菜單下,選擇CREATE NEW PROJECT。將彈出另一個(gè)文件對(duì)話(huà)框。確定在下拉框"Tool Chain"中選擇MAXQ。輸入項(xiàng)目名稱(chēng),單擊CREATE按鈕。此項(xiàng)目名定為"helloproject"。
現(xiàn)在項(xiàng)目建立完畢,我們還需要對(duì)其進(jìn)行配置,以便用于MAXQ2000評(píng)估板。在項(xiàng)目管理窗口中,右鍵單擊標(biāo)有"helloproject - Debug"的一行,單擊OPTIONS項(xiàng)(圖4)。大部分默認(rèn)選項(xiàng)是恰當(dāng)?shù)模切枰薷牟糠衷O(shè)置。

圖4. 在項(xiàng)目上單擊右鍵
在項(xiàng)目選項(xiàng)中,選擇CATEGORY下的XLINK,然后選擇"Include"標(biāo)簽。在對(duì)話(huà)框的最下面,選中標(biāo)有"Override Default"的框,然后單擊下面編輯行右側(cè)的小按鈕(標(biāo)著"...")。將出現(xiàn)文件選擇對(duì)話(huà)框。選擇文件"lnkmaxq200x.xcl"1,單擊OPEN。應(yīng)出現(xiàn)如圖5所示的項(xiàng)目選項(xiàng)對(duì)話(huà)框。

圖5. 為MAXQ2000設(shè)置正確的鏈接器選項(xiàng)
現(xiàn)在,選擇CATEGORY下面的C-SPY DEBUGGER。在標(biāo)有"Driver"的下拉框下,選擇JTAG。這就告訴IAR Embedded Workbench在真實(shí)硬件(而不是在軟件仿真器)上調(diào)試應(yīng)用程序。同時(shí),確定"Device Description File"所選的是'$TOOLKIT_DIR$\Config\maxq200x.ddf'。圖6所示為該對(duì)話(huà)框窗口的正確配置。

圖6. MAXQ2000工作時(shí)的調(diào)試器選項(xiàng)
所需的最后一個(gè)項(xiàng)目選項(xiàng)在條目JTAG中,它是CATEGORY列表下的C-SPY DEBUGGER子條目。在標(biāo)有"COM Port:"的編輯框中,輸入將與MAXQ2000評(píng)估板進(jìn)行通信的PC COM端口。通常為COM1或者COM2,許多帶有USB串口適配器的用戶(hù)將使用COM4或者序號(hào)更高的端口。
現(xiàn)在,已經(jīng)正確的配置了IAR工具,使其能夠與MAXQ2000評(píng)估板一起工作。單擊項(xiàng)目選項(xiàng)窗口中的OK按鈕。下一步,將需要為項(xiàng)目建立源代碼。首先,開(kāi)始一個(gè)能夠觸發(fā)LED的簡(jiǎn)單的HelloWorld型應(yīng)用程序。
單擊工具條上的新文件按鈕(工具條最左側(cè)的空白頁(yè)),或者選擇FILE菜單下的NEW。選擇SOURCE/TEXT,單擊OK按鈕。標(biāo)有"Untitled1"的新窗口將出現(xiàn)。在新窗口中輸入以下代碼:
#include單擊Save按鈕(工具條上的磁盤(pán)圖標(biāo)),或者從菜單上選擇FILESAVE,保存文件。在出現(xiàn)的文件對(duì)話(huà)框中,輸入"demo.c"作為文件名稱(chēng),單擊save。注意,文件"demo.c"并不出現(xiàn)在項(xiàng)目窗口中。在能夠構(gòu)建該項(xiàng)目之前,需要為該項(xiàng)目加入源文件。右鍵單擊項(xiàng)目窗口中的"helloproject - Debug"行,選擇菜單中的"Add Files..."。當(dāng)文件對(duì)話(huà)框出現(xiàn)后,選擇文件"demo.c",單擊OPEN?,F(xiàn)在,已經(jīng)加入源文件,可以進(jìn)行構(gòu)建了。void main() { unsigned int counter1; unsigned int counter2; PD0 = 0xff; while (1) { for (counter1 = 0; counter1 < 0xffff; counter1++) { for (counter2 = 0; counter2 < 0x10; counter2++) { } } PO0 = PO0 ^ 0xff; } }
在PROJECT菜單下,選擇選項(xiàng)REBUILD ALL。屏幕下方的消息窗口中將輸出大量數(shù)據(jù),其結(jié)尾是:
Total number of errors: 0 Total number of warnings: 0如果出現(xiàn)任何錯(cuò)誤或者警告信息,請(qǐng)確定輸入代碼是否正確,是否按照項(xiàng)目設(shè)置說(shuō)明進(jìn)行操作。此處常出現(xiàn)的警告信息是"last line of file ends without a new line"。如果出現(xiàn)該錯(cuò)誤,則找到源代碼的最后一行,多次敲擊ENTER,在最后的右括號(hào)('})之后,建立幾個(gè)新行。
成功構(gòu)建項(xiàng)目后,準(zhǔn)備運(yùn)行。確定JTAG板和MAXQ2000板已經(jīng)按照本文第一部分所述已經(jīng)連接并上電。同樣,對(duì)于第一次演示,需要打開(kāi)能使LED段點(diǎn)亮的一個(gè)開(kāi)關(guān)。找到標(biāo)有SW6的開(kāi)關(guān),將第8個(gè)開(kāi)關(guān)打到on (上部)位置。運(yùn)行本項(xiàng)目,選擇PROJECT菜單,然后選擇DEBUG選項(xiàng)。將出現(xiàn)一個(gè)窗口通知應(yīng)用程序正在下載。
點(diǎn)擊執(zhí)行代碼第一行的第一個(gè)斷點(diǎn)"PD0 = 0xff;",啟動(dòng)項(xiàng)目。我們將在以后研究IAR Embedded Workbench的調(diào)試選項(xiàng)?,F(xiàn)在,只需點(diǎn)擊工具條的GO按鈕(三個(gè)藍(lán)色箭頭),或者選擇DEBUG菜單下的GO。將看到大部分LED以每秒一次的頻率閃爍。
我們已經(jīng)采用IAR Embedded Workbench編譯、下載、運(yùn)行了首個(gè)為MAXQ2000評(píng)估板編寫(xiě)的應(yīng)用。下一步,該實(shí)例程序?qū)⒆兊脧?fù)雜一些。然后,將討論MAXQ2000評(píng)估板的一些特性,以及IAR Embedded Workbench的某些調(diào)試特性。
一個(gè)簡(jiǎn)單應(yīng)用:在LCD上顯示一個(gè)計(jì)數(shù)器
現(xiàn)在已經(jīng)成功觸發(fā)了LED,下一步繼續(xù)處理更加復(fù)雜的LCD應(yīng)用程序。MAXQ2000微控制器具有一個(gè)集成的132段LCD控制器,以及一個(gè)片內(nèi)電阻分壓器用于對(duì)比度控制。它還可以直接對(duì)LCD屏供電。MAXQ2000評(píng)估板帶有一個(gè)簡(jiǎn)單的靜態(tài)LCD屏,其上有4個(gè)數(shù)字和一些簡(jiǎn)單的標(biāo)點(diǎn)符號(hào)(一對(duì)冒號(hào)和點(diǎn)號(hào),參見(jiàn)圖7)。對(duì)于初次使用者,我們將編寫(xiě)一個(gè)能夠在LCD上實(shí)現(xiàn)計(jì)數(shù)器的應(yīng)用程序。然后,深入討論控制LCD的代碼,演示更復(fù)雜的實(shí)例。按照前面所述的步驟,建立一個(gè)新的工作區(qū)和項(xiàng)目(注意,需要為該新項(xiàng)目重新輸入所有的XLINK、C-SPY和JTAG選項(xiàng))。 為該工作區(qū)起名為L(zhǎng)CDDemo,項(xiàng)目名為SimpleLCD。下載該實(shí)例的源代碼。將文件lcdcounter.c放在剛剛建立的LCDDemo項(xiàng)目目錄下。在IAR項(xiàng)目窗口中,右鍵單擊標(biāo)有"SimpleLCD - Debug"的一行,選擇"Add Files..."。選擇剛剛加入的文件lcdcounter.c,然后單擊OPEN。
在運(yùn)行項(xiàng)目前,我們來(lái)查看一些比較重要的代碼段。首先,下拉至文件底部的void main()一行,此處是應(yīng)用程序的起始點(diǎn)。您將看到對(duì)LCD的初始化(函數(shù)initLCD),然后進(jìn)入無(wú)限循環(huán)while (1)。主循環(huán)調(diào)用的函數(shù)在LCD屏幕上顯示一個(gè)數(shù)字。每執(zhí)行一次循環(huán),數(shù)值計(jì)數(shù)增1,如果超過(guò)LCD能夠顯示的最大值19999,則重新計(jì)數(shù)。
現(xiàn)在繼續(xù)運(yùn)行程序。單擊DEBUG按鈕(工具條的最右側(cè)),或者選擇菜單中的PROJECT DEBUG。注意,IAR Embedded Workbench在將應(yīng)用程序裝入到評(píng)估板之前,自動(dòng)進(jìn)行構(gòu)建。我們將看到IAR顯示變?yōu)檎{(diào)試模式,在void main()代碼的第一行停止運(yùn)行。點(diǎn)擊GO按鈕(三個(gè)藍(lán)色箭頭),查看顯示屏,它應(yīng)快速向上計(jì)數(shù)。如果觀(guān)察的時(shí)間足夠長(zhǎng),接近20000時(shí),顯示將從頭開(kāi)始。
現(xiàn)在可以展示MAXQ2000評(píng)估板上非常有用的一個(gè)特性――RESET按鈕。評(píng)估板左下側(cè)是標(biāo)有SW2和RESET的開(kāi)關(guān)。按下按鍵,觀(guān)察LCD屏幕,它將立刻從0開(kāi)始顯示。該按鈕連接在微控制器的復(fù)位引腳上――如果需要重新啟動(dòng)應(yīng)用程序,則按該按鈕。
MAXQ2000評(píng)估板特性
現(xiàn)在已經(jīng)建立了使用MAXQ2000評(píng)估板LCD子板的應(yīng)用程序,讓我們仔細(xì)研究一下評(píng)估板的各個(gè)部分。我們不在此處涉及到評(píng)估板的所有器件,在評(píng)估板附帶的CD中的MAXQ2000評(píng)估板原理圖和"MAXQ2000 Evaluate Kit Getting Started Guide"中有更詳細(xì)的信息。LCD子板
現(xiàn)在,LCD板已經(jīng)能夠運(yùn)轉(zhuǎn)。顯示段和公共極信號(hào)的產(chǎn)生受控于MAXQ微控制器的幾個(gè)寄存器。LCD子板的連接方式簡(jiǎn)化了對(duì)于LCD屏的操作,向4個(gè)顯示位置中的任何一個(gè)寫(xiě)入數(shù)碼非常容易。由于每個(gè)7段LCD數(shù)字的映射相同,因此,在代碼中包括了下表,以幫助寫(xiě)入正確的LCD寄存器數(shù)值:#define LCD_PATTERN_0 0x03F #define LCD_PATTERN_1 0x006 #define LCD_PATTERN_2 0x05B #define LCD_PATTERN_3 0x04F #define LCD_PATTERN_4 0x066 #define LCD_PATTERN_5 0x06D #define LCD_PATTERN_6 0x07D #define LCD_PATTERN_7 0x007 #define LCD_PATTERN_8 0x07F #define LCD_PATTERN_9 0x067 int PATTERNS[] = { LCD_PATTERN_0, LCD_PATTERN_1, LCD_PATTERN_2, LCD_PATTERN_3, LCD_PATTERN_4, LCD_PATTERN_5, LCD_PATTERN_6, LCD_PATTERN_7, LCD_PATTERN_8, LCD_PATTERN_9 }; int getLCDDigit(int digit) { return PATTERNS[digit]; }利用getLCDDigit函數(shù),可由以下代碼向控制器屏寫(xiě)入數(shù)值:
/* write the value 612 to the LCD screen */ LCD2 = getLCDDigit(6); LCD1 = getLCDDigit(1); LCD0 = getLCDDigit(2);該LCD板還可以顯示小數(shù)點(diǎn)和冒號(hào),適用于時(shí)鐘、溫度顯示以及任何其他簡(jiǎn)單的數(shù)字顯示等。圖7是LCD子板各段的完整顯示以及用于控制各段LCD顯示的寄存器位。

圖7. LCD段至MAXQ2000寄存器位的映射
按鍵
MAXQ2000評(píng)估板上有三個(gè)按鍵,兩個(gè)連接至外部中斷,一個(gè)連接至微控制器的復(fù)位信號(hào)。復(fù)位按鈕用于重新運(yùn)行應(yīng)用程序,如同前面演示的LCD計(jì)數(shù)器所示。經(jīng)開(kāi)關(guān)使能后,其他兩個(gè)按鍵可連接至外部中斷。每個(gè)按鍵可連接至一對(duì)外部中斷。按鍵1在評(píng)估板上標(biāo)記為SW4,可連接至端口5引腳2 (外部中斷#10)或者端口5引腳3 (外部中斷#11)。按鍵2在評(píng)估板上標(biāo)記為SW5,可連接至端口7引腳0 (外部中斷#14)或者端口7引腳1 (外部中斷#15)。下表說(shuō)明了用于將按鍵連接至外部中斷引腳的開(kāi)關(guān)的使用。
Switch (set to ON) | Connect push button | To port pin... | External Interrupt # |
SW6, switch 2 | Push Button 1 (SW4) | Port 5 Pin 2 | 10 |
SW6, switch 3 | Push Button 1 (SW4) | Port 5 Pin 3 | 11 |
SW6, switch 4 | Push Button 2 (SW5) | Port 7 Pin 0 | 14 |
SW6, switch 5 | Push Button 2 (SW5) | Port 7 Pin 1 | 15 |
注意,這些引腳還有其他功能,這就是為什么要對(duì)按鍵連接到哪個(gè)部中斷進(jìn)行選擇的原因。例如,端口7引腳0和1用于UART 0串口發(fā)送和接收。如果將按鍵連接至這些引腳之一,則不利于使用UART 0的功能。請(qǐng)注意,MAXQ2000含有兩個(gè)UART,因此,決定如何配置MAXQ2000評(píng)估板時(shí),可以有多個(gè)選擇。
串行連接器
MAXQ2000評(píng)估板含有一個(gè)9針連接器和一個(gè)RS-232電平轉(zhuǎn)換器。因此,可以采用一條標(biāo)準(zhǔn)的直通串行電纜連接評(píng)估板和PC。這與連接串口至JTAG板的串行電纜相同。為能夠通過(guò)該串口讀取到達(dá)數(shù)據(jù),SW1上的3號(hào)開(kāi)關(guān)必須置于ON的位置。注意,如果P7.1被用于外部中斷(如果SW6.5置于ON),將產(chǎn)生沖突。要在該串口寫(xiě)數(shù)據(jù),SW1上的第7個(gè)開(kāi)關(guān)必須置于ON的位置。同樣,如果P7.0被用于外部中斷(如果SW6.4置于ON),也將產(chǎn)生沖突。
LED面板
在簡(jiǎn)單的HelloWorld式應(yīng)用程序中我們已經(jīng)使用了LED面板,現(xiàn)在仔細(xì)觀(guān)察一下面板的實(shí)際顯示。圖8顯示了LED面板的每個(gè)亮條和與其相關(guān)的輸出引腳。
圖8. LED至MAXQ2000寄存器位的映射
為能夠向I/O端口寫(xiě)入數(shù)值,首先需要將端口0引腳方向設(shè)置為輸出。每個(gè)引腳具有一個(gè)獨(dú)立的輸入/輸出方向控制。在第一個(gè)應(yīng)用程序中,由以下代碼來(lái)設(shè)置端口0所有的引腳為輸出:
PD0 = 0xff;當(dāng)適當(dāng)?shù)腎/O端口設(shè)置為輸出后,PO0寄存器相應(yīng)位設(shè)置為1時(shí),該引腳對(duì)應(yīng)的LED被點(diǎn)亮。注意,組合開(kāi)關(guān)SW6上的8號(hào)開(kāi)關(guān)必須置于ON的位置,才能對(duì)LED陣列供電。
MAX1407
MAXQ2000評(píng)估板帶有一個(gè)MAX1407,它含有一個(gè)4通道16位模數(shù)轉(zhuǎn)換器,以及兩個(gè)10位數(shù)模轉(zhuǎn)換器。MAXQ2000通過(guò)其片內(nèi)SPI?主機(jī)與之通信。這樣,MAX1407就成為連接MAXQ2000與外部真實(shí)世界信號(hào)的理想橋梁。網(wǎng)上2有一個(gè)使用熱敏電阻以及MAXQ2000評(píng)估板來(lái)實(shí)時(shí)顯示當(dāng)前溫度的實(shí)例程序。請(qǐng)查看該實(shí)例程序的源代碼,了解運(yùn)行該程序所需的硬件連接和配置。參見(jiàn): MAX1407快速瀏覽數(shù)據(jù)資料
使用IAR編譯器來(lái)調(diào)試應(yīng)用程序
現(xiàn)在,轉(zhuǎn)向一個(gè)新的應(yīng)用程序,通過(guò)它我們來(lái)熟悉一下IAR調(diào)試工具。同前面一樣,建立一個(gè)新的工作區(qū)和項(xiàng)目,將工作區(qū)命名為"lcdtime",項(xiàng)目名為"rtc_demo"。從本應(yīng)用筆記的下載源3添加源代碼文件lcd_trc.c。構(gòu)建該程序,點(diǎn)擊DEBUG按鈕將其裝入到MAXQ2000評(píng)估板。該程序?qū)嶋H是前面編寫(xiě)的LCD計(jì)數(shù)器程序的擴(kuò)展。開(kāi)始運(yùn)行后,其LCD顯示與以前相似,快速顯示計(jì)數(shù)遞增。但是,按下SW4按鍵,程序?qū)@示實(shí)時(shí)時(shí)鐘的當(dāng)前值。這看起來(lái)實(shí)用性較差,因?yàn)闀r(shí)間顯示幾乎都不正確。按下SW5按鈕幾次后,將看到分鐘遞增。如果同樣需要增加小時(shí),不停的按該按鈕將使人疲倦。在這種情況下,可以按住SW5按鈕,然后按下SW4按鈕來(lái)增加小時(shí)。如果再次單獨(dú)按下SW4按鈕,將切換回計(jì)數(shù)器顯示。
點(diǎn)擊GO按鈕(三個(gè)藍(lán)色箭頭),繼續(xù)運(yùn)行程序。反復(fù)操作幾次,熟悉該程序。一旦掌握該程序后,我們將利用它來(lái)介紹一些IAR調(diào)試工具。
IAR調(diào)試:暫停一個(gè)應(yīng)用程序
程序正在運(yùn)行時(shí),按下工具條左側(cè)的紅色手形按鈕,或者選擇DEBUG菜單下的BREAK,這將使處理器停止運(yùn)行,IAR將顯示你在應(yīng)用程序中的當(dāng)前位置。程序暫停后,可以有幾種選擇。如果將鼠標(biāo)放在調(diào)試工具條的其他按鈕(帶有藍(lán)色箭頭)上,保持一段時(shí)間,將彈出提示窗口,顯示該按鈕的功能。較為常用的一些按鈕為:
- Step Over: 走過(guò)下一指令。如果下一指令是函數(shù)調(diào)用,按下此按鈕將不會(huì)進(jìn)入該函數(shù)。
- Step Int 走入下一指令。如果下一指令是函數(shù)調(diào)用,按下該按鈕將進(jìn)入被調(diào)用的函數(shù)。
- Run to Cursor: 運(yùn)行程序至光標(biāo)所在代碼的位置。這要比使用斷點(diǎn)功能來(lái)運(yùn)行至代碼的特定位置方便一些。
- G 使程序正常運(yùn)行。按下pause按鈕或者到達(dá)斷點(diǎn)后,程序停止運(yùn)行。
IAR調(diào)試:斷點(diǎn)
斷點(diǎn)功能使我們?cè)诔绦蜻\(yùn)行到特定位置后,能夠停止程序運(yùn)行。下面以實(shí)例說(shuō)明。如果程序仍在運(yùn)行,先停止它。找到代碼中的函數(shù)pushButtonInterrupt,找到下面一行:IF (EIF1 & 0x04)右鍵單擊此行,從彈出菜單中選擇選項(xiàng)TOGGLE BREAKPOINT (不是選項(xiàng)'Toggle Bookmark'!)。該行左側(cè)空白位置將出現(xiàn)一個(gè)紅色的'X'?,F(xiàn)在,再次點(diǎn)擊DEBUG按鈕,按下GO按鈕,運(yùn)行程序。將看到LCD計(jì)數(shù)器運(yùn)行。
按下SW5按鍵,計(jì)數(shù)器程序似乎停止了。如果回過(guò)頭來(lái)注意一下IAR Embedded Workbench,將看到程序已經(jīng)停止運(yùn)行,加入斷點(diǎn)的一行被高亮顯示,如圖9所示。

圖9. 在IAR Embedded Workbench中達(dá)到斷點(diǎn)
調(diào)試應(yīng)用程序時(shí),斷點(diǎn)是非常有用的工具。開(kāi)發(fā)人員通常希望了解代碼是否按要求執(zhí)行,或未被執(zhí)行。例如,如果按鍵中斷例程沒(méi)有正常工作,我們將會(huì)考慮兩種可能—1) 按鍵中斷例程代碼不正確,因此,得不到預(yù)期結(jié)果,2) 按鍵中斷代碼根本就沒(méi)有執(zhí)行。采用斷點(diǎn)后,可以知道第2種情況是否發(fā)生,幫助我們決定應(yīng)在哪方面花時(shí)間調(diào)試。
IAR調(diào)試:局部變量
程序還停止在斷點(diǎn)上時(shí),打開(kāi)LOCALS窗口(如果還沒(méi)有打開(kāi))。可通過(guò)選擇VIEW菜單下的LOCALS選項(xiàng)來(lái)打開(kāi)窗口。如果還停止在前面所設(shè)置的斷點(diǎn)行上,則locals窗口應(yīng)如下所示:
圖10. IAR Embedded Workbench的局部變量窗口
注意到有兩個(gè)條目:temp和time。temp變量用于顯示PI7寄存器的數(shù)值。注意另一條目time的表達(dá)。這意味著該變量不在當(dāng)前視野之內(nèi)――它或者沒(méi)有賦值,或者其數(shù)值不會(huì)再被函數(shù)使用。
LOCALS窗口顯示了應(yīng)用中止處所在函數(shù)中所聲明且使用的變量。這是了解程序當(dāng)前狀態(tài)的強(qiáng)有力工具――可以檢查變量中不正確的數(shù)值,還可以根據(jù)變量值判斷程序下一步的去向。
LOCALS窗口的功能不僅這些――在程序執(zhí)行期間,還可以修改變量值。單擊temp值(可能是1),輸入一個(gè)新的整數(shù)值,則修改了運(yùn)行程序的狀態(tài)。這可以幫助開(kāi)發(fā)人員查看其程序?qū)Σ煌斎氲姆磻?yīng),而不必重新構(gòu)建和裝載程序。
IAR調(diào)試:Watch窗口
程序暫停時(shí),打開(kāi)WATCH窗口(VIEW WATCH)。在expression下,輸入pbcount。WATCH窗口中應(yīng)出現(xiàn)數(shù)值1 (除非按下了其他鍵,使程序再次運(yùn)行)。Watch窗口使我們能夠隨意輸入任意表達(dá)式,并顯示該表達(dá)式的計(jì)算數(shù)值。在本例中,我們輸入了一個(gè)全局變量名,它告訴我們按鍵中斷代碼被執(zhí)行了幾次。Watch窗口的作用還不僅如此――在WATCH窗口中,再次單擊pbcount,輸入pbcount ^ 0x05。IAR Embedded Workbench將計(jì)算該表達(dá)式(pbcount值與5異或),顯示結(jié)果為(4)。
圖11. IAR Embedded Workbench中表達(dá)式的Watch窗口
IAR調(diào)試:Call Stack
打開(kāi)call Stack (VIEW CALL STACK)。Call Stack顯示代碼執(zhí)行到當(dāng)前位置已調(diào)用過(guò)的函數(shù)。此時(shí),由于正在響應(yīng)一個(gè)中斷,只顯示pushButtonInterrupt() (以及一些調(diào)試信息)。單步調(diào)試該程序,查看該窗口的反應(yīng)。向下找到標(biāo)有中斷15的代碼段下面的showTime()行??梢园聪耂TEP OVER幾次,或者右鍵單擊該行,選擇RUN TO CURSOR。此時(shí),showTime()行被高亮顯示。按下STEP INTO按鈕,將看到showTime()函數(shù)的第一行代碼被高亮顯示。再次查看Call Stack――現(xiàn)在,showTime()函數(shù)顯示在第一行,其后是pushButtonInterrupt()。由于這是一個(gè)堆棧,現(xiàn)在執(zhí)行的函數(shù)被首先列出,其后是調(diào)用該函數(shù)的函數(shù),再后是更上一層的調(diào)用函數(shù),等等。
圖12. IAR Embedded Workbench中的Call stack窗口
IAR調(diào)試:Memory窗口
IAR Embedded Workbench允許我們察看正在執(zhí)行應(yīng)用程序的器件的內(nèi)部存儲(chǔ)器。選擇VIEW MEMORY來(lái)查看Memory窗口。窗口首次打開(kāi)時(shí),可能會(huì)顯示代碼段的存儲(chǔ)器內(nèi)容。單擊下拉框,你會(huì)看到用于顯示的存儲(chǔ)器類(lèi)型選項(xiàng)。選擇Data選項(xiàng)來(lái)查看MAXQ2000片內(nèi)RAM的內(nèi)容。
圖13. IAR Embedded Workbench顯示的Memory內(nèi)容
與LOCALS窗口相似,我們也可以直接在這里修改RAM的數(shù)值。加亮某個(gè)位置,輸入你所希望的新16進(jìn)制數(shù)值。與LOCALS窗口一樣,這是個(gè)非常有用的工具,便于開(kāi)發(fā)人員修改程序狀態(tài)而無(wú)須重新構(gòu)建和裝入應(yīng)用程序。
IAR調(diào)試:Register窗口
Register窗口(VIEW REGISTER)與Memory窗口相似。該窗口顯示MAXQ2000的寄存器映射。出現(xiàn)的第一個(gè)寄存器是MAXQ平臺(tái)的核心寄存器,例如累加器、數(shù)據(jù)指針和循環(huán)計(jì)數(shù)器等。單擊下拉框,可以看到其他幾個(gè)選項(xiàng)。例如,如果選擇Port I/O寄存器,你就可以看到并編輯與MAXQ2000輸入/輸出端口相關(guān)的所有寄存器。
圖14. IAR Embedded Workbench顯示的Register內(nèi)容
開(kāi)發(fā)支援
對(duì)于MAXQ平臺(tái)的開(kāi)發(fā)者,我們提供了多種資源予以支持。其中之一是由Dallas Semiconductor開(kāi)發(fā)人員管理的在線(xiàn)論壇,解答用戶(hù)提交的問(wèn)題,同時(shí)也是開(kāi)發(fā)人員發(fā)布消息的窗口,提供最新的工具信息和相關(guān)的其他問(wèn)題。請(qǐng)?jiān)L問(wèn)主頁(yè),進(jìn)行注冊(cè),登錄您的賬號(hào):Dallas Semiconductor討論組 (English only)對(duì)于不適合在公開(kāi)論壇提出的問(wèn)題,請(qǐng)通過(guò)Maxim支持中心聯(lián)系我們。
對(duì)于綜合新聞和信息,以及如何開(kāi)始使用MAXQ2000、MAXQ平臺(tái)和MAXQ未來(lái)器件的信息,請(qǐng)?jiān)L問(wèn)MAXQ主頁(yè)。
常見(jiàn)問(wèn)題及其解決
開(kāi)始使用一款新器件時(shí),初次建立通信總會(huì)遇到一些問(wèn)題。確定是否全部按照本文檔第一部分的說(shuō)明來(lái)進(jìn)行操作可解決大部分問(wèn)題(例如,電路板連接和項(xiàng)目配置)。以下是常見(jiàn)問(wèn)題及其解決方式:問(wèn)題 | 可能的解決方式 |
點(diǎn)擊調(diào)試時(shí),IAR根本不出現(xiàn)任何提示,但是MAXQ2000硬件沒(méi)有反應(yīng)。 | 確定已經(jīng)選擇了C-SPY Debugger項(xiàng)目選項(xiàng)下的JTAG驅(qū)動(dòng)器。 |
出現(xiàn)損壞的*.d66文件的錯(cuò)誤提示。 | 確定在XLINK Include選項(xiàng)下,已經(jīng)選擇了以lnkmaxq200x.xcl文件覆蓋默認(rèn)的XCL文件。 |
每一步都配置正確了,但是按下DEBUG按鈕后,無(wú)法裝入程序。 | 確定沒(méi)有其他軟件在使用你選用的COM口。一般而言,PDA軟件在計(jì)算機(jī)啟動(dòng)時(shí),占用串口??梢赃x擇一個(gè)不同的COM口,或者關(guān)掉PDA軟件。 |
IAR試圖開(kāi)始裝入程序,但一直不能成功。所有的電纜連接和配置都正確。 | 嘗試重新啟動(dòng)IAR Embedded Workbench。 |
對(duì)于上述這些以及其他有關(guān)MAXQ2000程序裝載的問(wèn)題,打開(kāi)屏幕下方消息窗口中的TOOL OUTPUT標(biāo)簽,將有助于問(wèn)題的解決。此處列出的消息可能會(huì)給你提供一些有關(guān)為何裝載失敗的線(xiàn)索。
評(píng)論