国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

嵌入式系統(tǒng)匯編指令教學(xué)探討

2014-04-26 06:30張?zhí)m芳紀(jì)娟娟
中國(guó)校外教育(下旬) 2014年2期
關(guān)鍵詞:程序代碼斷點(diǎn)寄存器

張?zhí)m芳 紀(jì)娟娟

具有強(qiáng)大功能的嵌入式系統(tǒng),目前已作為電信、微電子等專業(yè)的專業(yè)課程,也是相關(guān)專業(yè)學(xué)生就業(yè)的一個(gè)良好方向。如何讓學(xué)生快速掌握嵌入式系統(tǒng)匯編指令,能夠進(jìn)行簡(jiǎn)單的程序設(shè)計(jì),為學(xué)生的就業(yè)打下良好基礎(chǔ),是本門課程亟待解決的問題。本文利用ADS開發(fā)環(huán)境對(duì)嵌入式匯編指令的學(xué)習(xí)進(jìn)行了探討,為《嵌入式系統(tǒng)》教學(xué)提供參考。

嵌入式系統(tǒng)ADS匯編指令具有系統(tǒng)內(nèi)核小、專用性強(qiáng)、系統(tǒng)精簡(jiǎn)、實(shí)時(shí)性高等特性的嵌入式系統(tǒng),目前已在許多領(lǐng)域中掀起了嵌入式系統(tǒng)應(yīng)用的熱潮。為了適應(yīng)社會(huì)人才的需要以及解決本專業(yè)學(xué)生的就業(yè)工作問題,給本院電子信息科學(xué)與技術(shù)專業(yè)的學(xué)生課設(shè)了嵌入式課程。

嵌入式作為以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟硬件可裁剪,適應(yīng)應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗等嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng),對(duì)硬件和軟件的要求都相當(dāng)高。學(xué)生可以通過開發(fā)板、實(shí)驗(yàn)箱等了解開發(fā)系統(tǒng)的處理器及相關(guān)設(shè)備,學(xué)生普遍反映匯編語(yǔ)言下的底層文件、初始化文件、控制命令都看不懂。因此,掌握匯編指令是嵌入式系統(tǒng)學(xué)習(xí)的難點(diǎn),為了解決該問題,本文借助嵌入式開發(fā)集成環(huán)境ADS對(duì)如何快速掌握嵌入式匯編指令進(jìn)行了探討和嘗試。

一、嵌入式系統(tǒng)開發(fā)過程

(一)ADS簡(jiǎn)介

ADS及ARM Developer Suite的縮寫,是Metrowerks公司在1993年開發(fā) ARM處理器下最主要的開發(fā)工具。ADS是全套的實(shí)時(shí)開發(fā)軟件工具,編譯器生成的代碼密度和執(zhí)行速度都較優(yōu)異。

ADS對(duì)匯編、C/C++、java均有很好的支持,是目前最成熟的ARM開發(fā)工具。ADS有ARM擴(kuò)展調(diào)試器(AXD,ARM Extended Debugger)、ARM 符號(hào)調(diào)試器(ARMSD,ARM Symbolic Debugger)、與老版本兼容的Windows或Unix下的ARM調(diào)試工具(ADW/ADU,Application Debugger Windows/Unix)等三種調(diào)試器。

AXD不僅擁有低版本ARM調(diào)試器的所有功能,還新添了圖形用戶界面,更方便的視窗管理數(shù)據(jù)顯示,格式化和編輯以及全套的命令行界面。該產(chǎn)品還包括Real Monitor(可以在前臺(tái)調(diào)試的同時(shí)斷點(diǎn)續(xù)存并且在不中斷應(yīng)用的情況下讀寫內(nèi)存跟蹤調(diào)試工具)。

(二)ADS工程開發(fā)過程

ADS工程開發(fā)和前期課程學(xué)習(xí)的單片機(jī)開發(fā)環(huán)境KEIL有很多地方是類似的,但是它的位置又復(fù)雜了一些。ADS工程開發(fā)過程主要分為以下三個(gè)過程:

1.建立工程

(1)在建立工程時(shí)有7個(gè)選項(xiàng),如圖1所示。ARM處理器有32位ARM和16位Thumb兩種工作狀態(tài),一般工作在32位狀態(tài)下,因此一般選擇第一項(xiàng),ARM Executable Image是ARM的通用模板,選中它即可生成ARM的執(zhí)行文件。

(2)對(duì)于Debug Setting的ARM linker是工程設(shè)置的重點(diǎn), 在output欄中設(shè)定程序的代碼段地址,以及數(shù)據(jù)使用的地址。圖2中的RO Base欄中填寫程序代碼存放的起始地址,RW Base欄中填寫程序數(shù)據(jù)存放的起始地址。在Layout欄中,如圖3,在Place at beginning of image框內(nèi),需要填寫項(xiàng)目的入口程序的目標(biāo)文件名,如,整個(gè)工程項(xiàng)目的入口程序是44binit.s,那么應(yīng)在Object/Symbol處填寫其目標(biāo)文件名44binit.o,在Section處填寫程序入口的起始段標(biāo)號(hào)。它的作用是通知編譯器,整個(gè)項(xiàng)目的開始運(yùn)行,是從該段開始的。

2.編譯和鏈接工程

將編輯好的程序代碼進(jìn)行保存添加到工程中去,點(diǎn)擊make即可實(shí)現(xiàn)整個(gè)工程的編譯鏈接,若編譯成功,會(huì)出現(xiàn)編譯錯(cuò)誤為0的報(bào)告,接下來就可對(duì)工程進(jìn)行仿真調(diào)試。

3.仿真調(diào)試

點(diǎn)擊debug,IDE環(huán)境就會(huì)啟動(dòng)AXD調(diào)試軟件。如果沒啟動(dòng)就要對(duì)其目標(biāo)進(jìn)行設(shè)定,如圖4所示,在軟件仿真時(shí)選擇ARMULATOR。

二、如何快速掌握匯編指令

匯編語(yǔ)言是學(xué)生學(xué)習(xí)多門課程的難點(diǎn),而對(duì)于一些I/O、底層文件等又必須要用匯編,實(shí)際中幾乎每個(gè)工程都要用匯編的,因此匯編語(yǔ)言的掌握是嵌入式開發(fā)的關(guān)鍵。雖然學(xué)生在前期《微機(jī)原理》《單片機(jī)》《DSP》等課程中已學(xué)習(xí)了匯編語(yǔ)言,大家知道,每一種處理器它所用的匯編語(yǔ)言是不同的,也就是說,對(duì)于《嵌入式系統(tǒng)》課程又要重新學(xué)習(xí)匯編語(yǔ)言,嵌入式有100條指令,實(shí)際應(yīng)用中又與條件碼一起用,因此嵌入式匯編語(yǔ)言相比前幾門課程難度更大。

(一)利用前期基礎(chǔ)來學(xué)習(xí)指令

前期基礎(chǔ)主要包括2個(gè),一個(gè)是要把學(xué)生的英語(yǔ)調(diào)動(dòng)起來,二是利用前期專業(yè)課程的指令。

1.利用英語(yǔ)單詞熟記條件碼

由于條件碼較多,學(xué)生經(jīng)常混淆,當(dāng)與指令一起時(shí)更不知什么意思了。因此,在教學(xué)中經(jīng)常引導(dǎo)學(xué)生用英語(yǔ)單詞的方法來記條件碼。如EQ和NE條件碼,在教學(xué)中會(huì)問學(xué)生“相等,等于”的英語(yǔ)怎么譯,即“equal”,那么EQ就是“equal”的縮寫,即是“相等,等于”條件的判定,對(duì)應(yīng)著程序狀態(tài)寄存器CPSR中的“Z=1”的標(biāo)志。同理,NE就是“not equal”,不相等,不等于條件的判定,對(duì)應(yīng)著 “Z=1”的標(biāo)志。

2.利用英語(yǔ)詞匯熟記指令

指令與條件碼有些近似,大部分都是某些詞匯的縮寫。把握住此規(guī)律,指令的掌握也就沒那么難了。如ARM中用的比較多的存儲(chǔ)器和寄存器之間傳送數(shù)據(jù)的LDR和STR指令。LDR是“Load Register”的縮寫,即加載寄存器,將某存儲(chǔ)器單元中的內(nèi)容裝載到某寄存器中去。STR是“Store Register”的縮寫,即存儲(chǔ)寄存器,將某寄存器中的內(nèi)容存儲(chǔ)到某存儲(chǔ)器單元中去。通過實(shí)際教學(xué)發(fā)現(xiàn),把握此規(guī)律的學(xué)生指令明顯掌握的較為牢靠。endprint

3.把前期課程學(xué)習(xí)的匯編指令搬出來

雖然嵌入式系統(tǒng)和前期課程學(xué)習(xí)的匯編指令不太相同,但有一部分指令是相通的。

如“MOV”傳送指令,算術(shù)運(yùn)算中的加、減“ADD、SUB”,邏輯運(yùn)算中的與“AND”等功能基本相同,而且指令的書寫是完全相同的,但是參加運(yùn)算的數(shù)據(jù)、寄存器等是不一樣的,它們基本對(duì)應(yīng)著32位字的狀態(tài)下的。

(二)從簡(jiǎn)單入手,激發(fā)學(xué)生興趣

雖然跟學(xué)生說了多種熟記指令的方法,但是當(dāng)多條指令放在一起,即使是一段很簡(jiǎn)單的程序代碼,學(xué)生依然很難理解讀出程序的功能。這時(shí),就要充分利用實(shí)驗(yàn)來加強(qiáng)鍛煉學(xué)生的程序讀寫能力。首先要讓學(xué)生多抄、多讀程序,然后在要求學(xué)生從簡(jiǎn)單的程序設(shè)計(jì)開始。即從抄程序中學(xué)匯編,從簡(jiǎn)單中寫匯編。那么能否一開始就能讀懂一些簡(jiǎn)單的程序代碼,直接關(guān)系到學(xué)生對(duì)本門課程的興趣,因此,如何引導(dǎo)學(xué)生快速入門很關(guān)鍵,而ADS的多種調(diào)試功能可以為快速入門提供便捷之道。

例1:請(qǐng)讀出下面程序代碼的功能

本程序只有8行代碼,讓學(xué)生第一感覺就很簡(jiǎn)單。但是本程序卻包含了很多信息。首先給學(xué)生逐行分析每條指令,分給出一些提示。

(1)匯編程序的基本格式,以AREA聲明某代碼段的開始,以END結(jié)束;

(2)第②行ENTRY是程序入口標(biāo)識(shí),是所有匯編指令必須有的偽指令;

(3)第③行CODE聲明32為指令,因此建立工程時(shí)選擇第一項(xiàng),如圖1所示;

(4)第④行START是程序段的標(biāo)號(hào),書寫時(shí)必須頂格,否則是編譯不過去的,第四行和第五行的MOV指令在前期課程中已學(xué)過的;

(5)第六行中ADDS,ADD指令學(xué)生也已學(xué)過,加了S是帶有條件碼更新的意思,而此時(shí)和ADD功能是一樣的;

(6)第⑥行B是跳轉(zhuǎn)指令,即跳轉(zhuǎn)到標(biāo)號(hào)START處繼續(xù)運(yùn)行。

然后讓學(xué)生建立工程和文件,并把該程序代碼輸入進(jìn)去,進(jìn)行編譯調(diào)試,先讓學(xué)生自己解決編譯調(diào)試的問題。學(xué)生主要會(huì)出現(xiàn)以下問題:

(1)編譯時(shí)出現(xiàn)錯(cuò)誤很緊張,不知怎么辦,上來就叫老師;

(2)學(xué)生運(yùn)行時(shí)結(jié)果一直不出來或者結(jié)果不一樣;

(3)具體功能不會(huì)表達(dá)。

可用以下方法來解決:

(1)對(duì)編譯錯(cuò)誤的同學(xué)進(jìn)行引導(dǎo),當(dāng)出現(xiàn)錯(cuò)誤時(shí),光標(biāo)會(huì)出現(xiàn)在源代碼的對(duì)應(yīng)行,到該行中去查看代碼找出錯(cuò)誤。

(2)提問結(jié)果為什么不一樣,程序的運(yùn)行過程是什么,關(guān)鍵是斷點(diǎn)的設(shè)置,即要在本程序的第7行設(shè)置斷點(diǎn)。本程序的運(yùn)行是一個(gè)死循環(huán)。

(3)讓學(xué)生們以單步運(yùn)行的方式,運(yùn)行程序,同時(shí)打開寄存器組,查看對(duì)應(yīng)寄存器的值。

當(dāng)以單步運(yùn)行時(shí),學(xué)生可看到,R0=0x0000000F,R1=0x00000008,之后R0變?yōu)?x00000017,如圖5所示。

可以給學(xué)生一些提示,15+8=?這個(gè)答案對(duì)不對(duì)呢?0x是什么意思呢,是不是16進(jìn)制數(shù)的表示,將0x00000017轉(zhuǎn)換為10進(jìn)制是不是23,而15+8=23。因此結(jié)果是對(duì)的,此程序的功能就是計(jì)算15+8=?

如果采用斷點(diǎn)的方法,來全速運(yùn)行該程序能否得到正確結(jié)果?這個(gè)斷點(diǎn)應(yīng)該設(shè)在哪里?讓學(xué)生自己思考嘗試。最后對(duì)于沒掌握調(diào)試方法,依然不明白程序的同學(xué)逐個(gè)給予解答。

三、結(jié)論

匯編語(yǔ)言本身零碎的東西特別多,對(duì)于學(xué)生提出的問題必須耐心及時(shí)的引導(dǎo),采用最簡(jiǎn)單的方法讓學(xué)生快速掌握匯編指令以進(jìn)行簡(jiǎn)單程序的設(shè)計(jì)是嵌入式系統(tǒng)教學(xué)的基本要求。在本課程實(shí)踐教學(xué)中,通過多種方式的引導(dǎo),雖然學(xué)生在本課程中花的時(shí)間較少,對(duì)于簡(jiǎn)單程序設(shè)計(jì)都感覺不難,對(duì)本門課程的興趣也很高。有一部分同學(xué)自己買了開發(fā)板,自己在寢室進(jìn)行深入學(xué)習(xí),課堂上與大家一起探討在學(xué)習(xí)調(diào)試中遇到的問題。

參考文獻(xiàn):

[1]何加銘.嵌入式32位微處理器系統(tǒng)設(shè)計(jì)與應(yīng)用[M].北京:電子工業(yè)出版社,2006.

[2]張義磊,丁濤,安吉宇.三星S3C2410在嵌入式工業(yè)控制系統(tǒng)中的應(yīng)用[J].長(zhǎng)春理工大學(xué)學(xué)報(bào),2004.

[3]魏洪興,胡亮,曲學(xué)樓.嵌入式系統(tǒng)設(shè)計(jì)與實(shí)例開發(fā)實(shí)驗(yàn)教材Ⅱ——基于ARM9處理器與Lmux操作系統(tǒng)[M].北京:清華大學(xué)出版社,2005.

[4]劉全金,江建生.談《通信原理》課程的“口訣式”教學(xué)[J].安慶師范學(xué)院學(xué)報(bào)(自然科學(xué)版),2011,17(3):103-105.endprint

3.把前期課程學(xué)習(xí)的匯編指令搬出來

雖然嵌入式系統(tǒng)和前期課程學(xué)習(xí)的匯編指令不太相同,但有一部分指令是相通的。

如“MOV”傳送指令,算術(shù)運(yùn)算中的加、減“ADD、SUB”,邏輯運(yùn)算中的與“AND”等功能基本相同,而且指令的書寫是完全相同的,但是參加運(yùn)算的數(shù)據(jù)、寄存器等是不一樣的,它們基本對(duì)應(yīng)著32位字的狀態(tài)下的。

(二)從簡(jiǎn)單入手,激發(fā)學(xué)生興趣

雖然跟學(xué)生說了多種熟記指令的方法,但是當(dāng)多條指令放在一起,即使是一段很簡(jiǎn)單的程序代碼,學(xué)生依然很難理解讀出程序的功能。這時(shí),就要充分利用實(shí)驗(yàn)來加強(qiáng)鍛煉學(xué)生的程序讀寫能力。首先要讓學(xué)生多抄、多讀程序,然后在要求學(xué)生從簡(jiǎn)單的程序設(shè)計(jì)開始。即從抄程序中學(xué)匯編,從簡(jiǎn)單中寫匯編。那么能否一開始就能讀懂一些簡(jiǎn)單的程序代碼,直接關(guān)系到學(xué)生對(duì)本門課程的興趣,因此,如何引導(dǎo)學(xué)生快速入門很關(guān)鍵,而ADS的多種調(diào)試功能可以為快速入門提供便捷之道。

例1:請(qǐng)讀出下面程序代碼的功能

本程序只有8行代碼,讓學(xué)生第一感覺就很簡(jiǎn)單。但是本程序卻包含了很多信息。首先給學(xué)生逐行分析每條指令,分給出一些提示。

(1)匯編程序的基本格式,以AREA聲明某代碼段的開始,以END結(jié)束;

(2)第②行ENTRY是程序入口標(biāo)識(shí),是所有匯編指令必須有的偽指令;

(3)第③行CODE聲明32為指令,因此建立工程時(shí)選擇第一項(xiàng),如圖1所示;

(4)第④行START是程序段的標(biāo)號(hào),書寫時(shí)必須頂格,否則是編譯不過去的,第四行和第五行的MOV指令在前期課程中已學(xué)過的;

(5)第六行中ADDS,ADD指令學(xué)生也已學(xué)過,加了S是帶有條件碼更新的意思,而此時(shí)和ADD功能是一樣的;

(6)第⑥行B是跳轉(zhuǎn)指令,即跳轉(zhuǎn)到標(biāo)號(hào)START處繼續(xù)運(yùn)行。

然后讓學(xué)生建立工程和文件,并把該程序代碼輸入進(jìn)去,進(jìn)行編譯調(diào)試,先讓學(xué)生自己解決編譯調(diào)試的問題。學(xué)生主要會(huì)出現(xiàn)以下問題:

(1)編譯時(shí)出現(xiàn)錯(cuò)誤很緊張,不知怎么辦,上來就叫老師;

(2)學(xué)生運(yùn)行時(shí)結(jié)果一直不出來或者結(jié)果不一樣;

(3)具體功能不會(huì)表達(dá)。

可用以下方法來解決:

(1)對(duì)編譯錯(cuò)誤的同學(xué)進(jìn)行引導(dǎo),當(dāng)出現(xiàn)錯(cuò)誤時(shí),光標(biāo)會(huì)出現(xiàn)在源代碼的對(duì)應(yīng)行,到該行中去查看代碼找出錯(cuò)誤。

(2)提問結(jié)果為什么不一樣,程序的運(yùn)行過程是什么,關(guān)鍵是斷點(diǎn)的設(shè)置,即要在本程序的第7行設(shè)置斷點(diǎn)。本程序的運(yùn)行是一個(gè)死循環(huán)。

(3)讓學(xué)生們以單步運(yùn)行的方式,運(yùn)行程序,同時(shí)打開寄存器組,查看對(duì)應(yīng)寄存器的值。

當(dāng)以單步運(yùn)行時(shí),學(xué)生可看到,R0=0x0000000F,R1=0x00000008,之后R0變?yōu)?x00000017,如圖5所示。

可以給學(xué)生一些提示,15+8=?這個(gè)答案對(duì)不對(duì)呢?0x是什么意思呢,是不是16進(jìn)制數(shù)的表示,將0x00000017轉(zhuǎn)換為10進(jìn)制是不是23,而15+8=23。因此結(jié)果是對(duì)的,此程序的功能就是計(jì)算15+8=?

如果采用斷點(diǎn)的方法,來全速運(yùn)行該程序能否得到正確結(jié)果?這個(gè)斷點(diǎn)應(yīng)該設(shè)在哪里?讓學(xué)生自己思考嘗試。最后對(duì)于沒掌握調(diào)試方法,依然不明白程序的同學(xué)逐個(gè)給予解答。

三、結(jié)論

匯編語(yǔ)言本身零碎的東西特別多,對(duì)于學(xué)生提出的問題必須耐心及時(shí)的引導(dǎo),采用最簡(jiǎn)單的方法讓學(xué)生快速掌握匯編指令以進(jìn)行簡(jiǎn)單程序的設(shè)計(jì)是嵌入式系統(tǒng)教學(xué)的基本要求。在本課程實(shí)踐教學(xué)中,通過多種方式的引導(dǎo),雖然學(xué)生在本課程中花的時(shí)間較少,對(duì)于簡(jiǎn)單程序設(shè)計(jì)都感覺不難,對(duì)本門課程的興趣也很高。有一部分同學(xué)自己買了開發(fā)板,自己在寢室進(jìn)行深入學(xué)習(xí),課堂上與大家一起探討在學(xué)習(xí)調(diào)試中遇到的問題。

參考文獻(xiàn):

[1]何加銘.嵌入式32位微處理器系統(tǒng)設(shè)計(jì)與應(yīng)用[M].北京:電子工業(yè)出版社,2006.

[2]張義磊,丁濤,安吉宇.三星S3C2410在嵌入式工業(yè)控制系統(tǒng)中的應(yīng)用[J].長(zhǎng)春理工大學(xué)學(xué)報(bào),2004.

[3]魏洪興,胡亮,曲學(xué)樓.嵌入式系統(tǒng)設(shè)計(jì)與實(shí)例開發(fā)實(shí)驗(yàn)教材Ⅱ——基于ARM9處理器與Lmux操作系統(tǒng)[M].北京:清華大學(xué)出版社,2005.

[4]劉全金,江建生.談《通信原理》課程的“口訣式”教學(xué)[J].安慶師范學(xué)院學(xué)報(bào)(自然科學(xué)版),2011,17(3):103-105.endprint

3.把前期課程學(xué)習(xí)的匯編指令搬出來

雖然嵌入式系統(tǒng)和前期課程學(xué)習(xí)的匯編指令不太相同,但有一部分指令是相通的。

如“MOV”傳送指令,算術(shù)運(yùn)算中的加、減“ADD、SUB”,邏輯運(yùn)算中的與“AND”等功能基本相同,而且指令的書寫是完全相同的,但是參加運(yùn)算的數(shù)據(jù)、寄存器等是不一樣的,它們基本對(duì)應(yīng)著32位字的狀態(tài)下的。

(二)從簡(jiǎn)單入手,激發(fā)學(xué)生興趣

雖然跟學(xué)生說了多種熟記指令的方法,但是當(dāng)多條指令放在一起,即使是一段很簡(jiǎn)單的程序代碼,學(xué)生依然很難理解讀出程序的功能。這時(shí),就要充分利用實(shí)驗(yàn)來加強(qiáng)鍛煉學(xué)生的程序讀寫能力。首先要讓學(xué)生多抄、多讀程序,然后在要求學(xué)生從簡(jiǎn)單的程序設(shè)計(jì)開始。即從抄程序中學(xué)匯編,從簡(jiǎn)單中寫匯編。那么能否一開始就能讀懂一些簡(jiǎn)單的程序代碼,直接關(guān)系到學(xué)生對(duì)本門課程的興趣,因此,如何引導(dǎo)學(xué)生快速入門很關(guān)鍵,而ADS的多種調(diào)試功能可以為快速入門提供便捷之道。

例1:請(qǐng)讀出下面程序代碼的功能

本程序只有8行代碼,讓學(xué)生第一感覺就很簡(jiǎn)單。但是本程序卻包含了很多信息。首先給學(xué)生逐行分析每條指令,分給出一些提示。

(1)匯編程序的基本格式,以AREA聲明某代碼段的開始,以END結(jié)束;

(2)第②行ENTRY是程序入口標(biāo)識(shí),是所有匯編指令必須有的偽指令;

(3)第③行CODE聲明32為指令,因此建立工程時(shí)選擇第一項(xiàng),如圖1所示;

(4)第④行START是程序段的標(biāo)號(hào),書寫時(shí)必須頂格,否則是編譯不過去的,第四行和第五行的MOV指令在前期課程中已學(xué)過的;

(5)第六行中ADDS,ADD指令學(xué)生也已學(xué)過,加了S是帶有條件碼更新的意思,而此時(shí)和ADD功能是一樣的;

(6)第⑥行B是跳轉(zhuǎn)指令,即跳轉(zhuǎn)到標(biāo)號(hào)START處繼續(xù)運(yùn)行。

然后讓學(xué)生建立工程和文件,并把該程序代碼輸入進(jìn)去,進(jìn)行編譯調(diào)試,先讓學(xué)生自己解決編譯調(diào)試的問題。學(xué)生主要會(huì)出現(xiàn)以下問題:

(1)編譯時(shí)出現(xiàn)錯(cuò)誤很緊張,不知怎么辦,上來就叫老師;

(2)學(xué)生運(yùn)行時(shí)結(jié)果一直不出來或者結(jié)果不一樣;

(3)具體功能不會(huì)表達(dá)。

可用以下方法來解決:

(1)對(duì)編譯錯(cuò)誤的同學(xué)進(jìn)行引導(dǎo),當(dāng)出現(xiàn)錯(cuò)誤時(shí),光標(biāo)會(huì)出現(xiàn)在源代碼的對(duì)應(yīng)行,到該行中去查看代碼找出錯(cuò)誤。

(2)提問結(jié)果為什么不一樣,程序的運(yùn)行過程是什么,關(guān)鍵是斷點(diǎn)的設(shè)置,即要在本程序的第7行設(shè)置斷點(diǎn)。本程序的運(yùn)行是一個(gè)死循環(huán)。

(3)讓學(xué)生們以單步運(yùn)行的方式,運(yùn)行程序,同時(shí)打開寄存器組,查看對(duì)應(yīng)寄存器的值。

當(dāng)以單步運(yùn)行時(shí),學(xué)生可看到,R0=0x0000000F,R1=0x00000008,之后R0變?yōu)?x00000017,如圖5所示。

可以給學(xué)生一些提示,15+8=?這個(gè)答案對(duì)不對(duì)呢?0x是什么意思呢,是不是16進(jìn)制數(shù)的表示,將0x00000017轉(zhuǎn)換為10進(jìn)制是不是23,而15+8=23。因此結(jié)果是對(duì)的,此程序的功能就是計(jì)算15+8=?

如果采用斷點(diǎn)的方法,來全速運(yùn)行該程序能否得到正確結(jié)果?這個(gè)斷點(diǎn)應(yīng)該設(shè)在哪里?讓學(xué)生自己思考嘗試。最后對(duì)于沒掌握調(diào)試方法,依然不明白程序的同學(xué)逐個(gè)給予解答。

三、結(jié)論

匯編語(yǔ)言本身零碎的東西特別多,對(duì)于學(xué)生提出的問題必須耐心及時(shí)的引導(dǎo),采用最簡(jiǎn)單的方法讓學(xué)生快速掌握匯編指令以進(jìn)行簡(jiǎn)單程序的設(shè)計(jì)是嵌入式系統(tǒng)教學(xué)的基本要求。在本課程實(shí)踐教學(xué)中,通過多種方式的引導(dǎo),雖然學(xué)生在本課程中花的時(shí)間較少,對(duì)于簡(jiǎn)單程序設(shè)計(jì)都感覺不難,對(duì)本門課程的興趣也很高。有一部分同學(xué)自己買了開發(fā)板,自己在寢室進(jìn)行深入學(xué)習(xí),課堂上與大家一起探討在學(xué)習(xí)調(diào)試中遇到的問題。

參考文獻(xiàn):

[1]何加銘.嵌入式32位微處理器系統(tǒng)設(shè)計(jì)與應(yīng)用[M].北京:電子工業(yè)出版社,2006.

[2]張義磊,丁濤,安吉宇.三星S3C2410在嵌入式工業(yè)控制系統(tǒng)中的應(yīng)用[J].長(zhǎng)春理工大學(xué)學(xué)報(bào),2004.

[3]魏洪興,胡亮,曲學(xué)樓.嵌入式系統(tǒng)設(shè)計(jì)與實(shí)例開發(fā)實(shí)驗(yàn)教材Ⅱ——基于ARM9處理器與Lmux操作系統(tǒng)[M].北京:清華大學(xué)出版社,2005.

[4]劉全金,江建生.談《通信原理》課程的“口訣式”教學(xué)[J].安慶師范學(xué)院學(xué)報(bào)(自然科學(xué)版),2011,17(3):103-105.endprint

猜你喜歡
程序代碼斷點(diǎn)寄存器
新工科背景下Matlab對(duì)高等數(shù)學(xué)課堂教學(xué)輔助作用的探討
Lite寄存器模型的設(shè)計(jì)與實(shí)現(xiàn)
一類無限可能問題的解法
計(jì)算機(jī)網(wǎng)絡(luò)信息安全未來發(fā)展趨勢(shì)
分簇結(jié)構(gòu)向量寄存器分配策略研究*
主導(dǎo)電回路發(fā)生斷點(diǎn)故障判斷方法探討
高速數(shù)模轉(zhuǎn)換器AD9779/AD9788的應(yīng)用
TKScope仿真調(diào)試Cortex-M3內(nèi)核的高級(jí)手段
基于屬性重要性的貪心算法的改進(jìn)算法
一種可重構(gòu)線性反饋移位寄存器設(shè)計(jì)
咸丰县| 新民市| 宜君县| 射阳县| 永和县| 松阳县| 凌源市| 兴化市| 三河市| 亚东县| 徐州市| 白沙| 衡阳市| 山东| 吉林市| 昭平县| 开远市| 太谷县| 会同县| 恭城| 藁城市| 巴林左旗| 太仓市| 四平市| 克什克腾旗| 山东| 特克斯县| 红桥区| 尉犁县| 尖扎县| 怀集县| 新民市| 建水县| 奉贤区| 南华县| 绥滨县| 淳化县| 南丹县| 芦山县| 谢通门县| 涡阳县|