<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          ARM問(wèn)答

          作者: 時(shí)間:2016-11-21 來(lái)源:網(wǎng)絡(luò) 收藏
          第1章 體系結(jié)構(gòu)

          第1問(wèn):
          Q:請(qǐng)問(wèn)在初始化CPU堆棧的時(shí)候一開(kāi)始在執(zhí)行mov r0, LR這句指令時(shí)處理器是什么模式
          A:復(fù)位后的模式,即管理模式.

          本文引用地址:http://www.ex-cimer.com/article/201611/319511.htm


          第2問(wèn):
          Q:請(qǐng)教:MOV中的8位圖立即數(shù),是怎么一回事 0xF0000001是怎么來(lái)的
          A:是循環(huán)右移,就是一個(gè)0—255 之間的數(shù)左移或右移偶數(shù)位的來(lái)的,也就是這個(gè)數(shù)除以4
          一直除, 直到在0-255的范圍內(nèi)它是整數(shù)就說(shuō)明是可以的!
          A:8位數(shù)(0-255)循環(huán)左移或循環(huán)右移偶數(shù)位得到的,F0000001既是0x1F循環(huán)右移4位,
          符合規(guī)范,所以是正確的.這樣做是因?yàn)橹噶铋L(zhǎng)度的限制,不可能把32位立即數(shù)放在
          32位的指令中.移位偶數(shù)也是這個(gè)原因.可以看一看ARM體系結(jié)構(gòu)(ADS自帶的英文文
          檔)的相關(guān)部分.


          第3問(wèn):
          Q:請(qǐng)教:《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》2.2.1節(jié)關(guān)于第2個(gè)操作數(shù)的描述中有這么一段:
          #inmed_8r常數(shù)表達(dá)式.該常數(shù)必須對(duì)應(yīng)8位位圖,即常熟是由一個(gè)8位的常數(shù)循環(huán)移
          位偶數(shù)位得到.
          合法常量:0x3FC,0,0xF0000000,200,0xF0000001.
          非法常量:0x1FE,511,0xFFFF,0x1010,0xF0000010.
          常數(shù)表達(dá)式應(yīng)用舉例:
          ...
          ...
          LDR R0,[R1],#-4 ;讀取 R1 地址上的存儲(chǔ)器單元內(nèi)容,且 R1 = R1-4

          針對(duì)這一段,我的疑問(wèn):
          1. 即常數(shù)是由一個(gè)8位的常數(shù)循環(huán)移位偶數(shù)位得到,這句話如何理解
          2. 該常數(shù)必須對(duì)應(yīng)8位位圖,既然是8位位圖,那么取值為0-255,怎么0x3FC這種超
          出255的數(shù)是合法常量呢
          3. 所舉例子中,合法常量和非法常量是怎么區(qū)分的 如0x3FC合法,而0x1FE卻非法
          0xF0000000,0xF0000001都合法,而0xF0000010又變成了非法
          4. 對(duì)于匯編語(yǔ)句 LDR R0,[R1],#-4,是先將R1的值減4結(jié)果存入R1,然后讀取R1所
          指單元的 值到R0,還是先讀取R1到R0,然后再將R1減4結(jié)果存入R1
          A:提示,任何常數(shù)都可用底數(shù)*2的n次冪 來(lái)表示.
          1. ARM結(jié)構(gòu)中,只有8bits用來(lái)表示底數(shù),因此底數(shù)必須是8位位圖.
          2. 8位位圖循環(huán)之后得到常數(shù),并非只能是8位.
          3. 0xF0000010底數(shù)是9位,不能表示.
          4. LDR R0, [R1], #-4 是后索引,即先讀,再減.
          可以看一看ARM體系結(jié)構(gòu)對(duì)相關(guān)尋址方式的說(shuō)明.


          3

          第4問(wèn):
          Q:在程序移植的過(guò)程中,什么代碼段處于什么樣的模式,這可真是一個(gè)困擾人的大難題,
          有沒(méi)有一種標(biāo)志或辦法能夠識(shí)別"代碼段處于什么樣的模式"
          A:讀取 CPSR ,任何時(shí)候都是可以讀.


          第5問(wèn):
          Q:為什么保護(hù)現(xiàn)場(chǎng)時(shí),總是保護(hù) R0-R3,R12,為什么不保護(hù)R4-R11
          A:請(qǐng)看一看"ARM-thumb過(guò)程調(diào)用標(biāo)準(zhǔn)"這個(gè)文檔.


          第6問(wèn):
          Q:請(qǐng)問(wèn) mov R1,#0x00003DD0 錯(cuò)誤:out of the range of operation是怎么回事情
          我就是想IODIR=0x00003dd0,匯編就是
          LDR R0,=IODIR
          MOV R1,#0x00003dd0
          STR R1,[R0]
          編譯時(shí)候說(shuō)是超出操作范圍
          A:使用ldr,mov的操作數(shù)為8位位圖數(shù).


          第7問(wèn):
          Q:"在ARM7TDMI(-S)處理器內(nèi)部有37個(gè)用戶可見(jiàn)的寄存器:"
          問(wèn)題:"用戶可見(jiàn)"應(yīng)該怎樣理解 這37個(gè)寄存器是否是37個(gè)不同的物理寄存器,
          例如R8與R8_fiq應(yīng)該是兩個(gè)不同的物理寄存器吧
          A:用戶可見(jiàn)是指用戶可以通過(guò)程序操作的.R8與R8_fiq是兩個(gè)不同的寄存器.


          第8問(wèn):
          Q:USR模式,SVC模式,IRQ模式分別有哪些限制
          A:對(duì)于外設(shè)操作限制與芯片設(shè)計(jì)有關(guān).USR模式不能設(shè)置CPSR寄存器.
          用戶模式下無(wú)SPSR寄存器,代碼可以為ARM,Thumb.


          第9問(wèn):
          Q:請(qǐng)問(wèn)"在初始化堆棧時(shí)就決定了工作模式"是什么意思 如何決定工作模式的
          A:設(shè)置CPSR寄存器.


          第10問(wèn):
          Q:請(qǐng)問(wèn):ARM匯編程序設(shè)計(jì)中所謂的"文字池"作何理解
          A:可以理解為常量數(shù)組,文字池中保存的是常量,這些常量可以是正常的常量,也可以是
          地址.

          4


          第11問(wèn):
          Q:為什么在中斷向量表中不直接LDR PC,"異常地址".而是使用一個(gè)標(biāo)號(hào),然有再在后面
          使用DCD定義這個(gè)標(biāo)號(hào)
          A:因?yàn)長(zhǎng)DR指令只能跳到當(dāng)前PC 4kB范圍內(nèi),而B(niǎo)指令能跳轉(zhuǎn)到32MB范圍,而現(xiàn)在這樣
          在LDR PC, "xxxx"這條指令不遠(yuǎn)處用"xxxx"DCD定義一個(gè)字,而這個(gè)字里面存放最終異
          常服務(wù)程序的地址,這樣可以實(shí)現(xiàn)4GB全范圍跳轉(zhuǎn).
          Q:LDR 不是可以全空間跳轉(zhuǎn)的嗎 《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》程序清單5.3.
          A:LDR偽指令通過(guò)設(shè)置指令緩沖池才能實(shí)現(xiàn)全范圍跳轉(zhuǎn),而LDR指令則只能實(shí)現(xiàn)4KB范圍
          跳轉(zhuǎn).


          第12問(wèn):
          Q:ARM7TDMI-S和ARM7TDMI有何區(qū)別
          A:ARM7TDMI-S是ARM7TDMI的可綜合(synthesizable)版本(軟核).
          對(duì)應(yīng)用工程師來(lái)說(shuō),除非芯片生產(chǎn)廠商對(duì)ARM7TDMI-S進(jìn)行了裁減,
          否則ARM7TDMI-S與ARM7TDMI沒(méi)有太大的區(qū)別,其編程模型與ARM7TDMI一致.


          第13問(wèn):
          Q:DCD偽指令的疑惑.
          "StackUsr DCD UsrStackSpace + (USR_STACK_LEGTH - 1) * 4"
          這句話是什么意思 DCD后面的程序標(biāo)號(hào)或數(shù)字表達(dá)式是何意
          A:它的內(nèi)容是初始化遞減堆棧的最高地址,看《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》2.3.2節(jié).

          5

          第2章 編譯器與語(yǔ)言
          第14問(wèn):
          Q:00254: Unimplemented RDI message是什么錯(cuò)誤提示 我的設(shè)置連接都正常,是不是
          芯片燒了
          A:是JTAG的問(wèn)題.可以先使用ISP操作試試就知道了,如果能ISP,說(shuō)明LPC2104沒(méi)有損
          壞,還能正常運(yùn)行程序.


          第15問(wèn):
          Q:請(qǐng)教:我在調(diào)試程序的時(shí)候在AXD中出現(xiàn)這樣的提示信息:
          RDI Warning 00159:could not open specified device port.
          我是根據(jù)配套教程的步驟設(shè)置的.
          A:請(qǐng)按照光盤(pán)easyarm_drivereadme.txt安裝驅(qū)動(dòng)程序.


          第16問(wèn):
          Q:我用實(shí)驗(yàn)程序運(yùn)行經(jīng)常出現(xiàn)下列信息! 程序不能下載到目標(biāo)板.
          Warnning! interrupt vectors data is not correct!
          Program you downloaded can not run freely!
          A:1.仿真器配置一定要正確,即"EasyARM Configuration"設(shè)置窗口中的"FLASH"項(xiàng)中選擇
          "Erase Flash when need";
          2.向量表累加和要為0;
          3.可以先在RAM調(diào)試一個(gè)程序(運(yùn)行),然后STOP,再使用File->Load Image...加載要
          下載到FLASH的調(diào)試文件.


          第17問(wèn):
          Q:在ADS中是否可以進(jìn)行軟件調(diào)試基于UCOS-II的程序
          A:ADS軟件調(diào)試只能調(diào)試ARM的內(nèi)核,不能調(diào)試外設(shè).但是取消 PLL 鎖定檢測(cè)后,
          可以調(diào)試任務(wù)切換,最終到空閑任務(wù)上.開(kāi)始移植時(shí)軟件仿真是最好的工具.


          第18問(wèn):
          Q:ARMulate軟件是干什么的 2104不是用EasyJTAG.dll來(lái)仿真嗎
          A:軟件仿真只能仿真 ARM 核.


          第19問(wèn):
          Q:有關(guān)LPC2106.INC的問(wèn)題.我無(wú)法在project引用lpc2106.inc文件,只能引用lpc2106.h
          文件, 這是什么原因 且當(dāng)我的主程序用匯編編寫(xiě)時(shí),不能引用lpc2106.h,用
          lpc2106.inc則無(wú)法加入project,請(qǐng)問(wèn)匯編器應(yīng)如何設(shè)置
          A:不用加2106.inc只要該文件在你的工程文件夾中,就可以直接在匯編程序的開(kāi)始處加
          6

          "include 2106.inc".
          注意:該文件是匯編文件定義的頭文件,定義內(nèi)部寄存器.


          第20問(wèn):
          Q:入口點(diǎn)是什么意思我在使用LPC2106上移植UCOS-II,每次MAKE時(shí)總是提示我
          Image does not have an entry point,可是我是把光盤(pán)的vetctors.s 復(fù)制過(guò)來(lái)的,
          而且仔細(xì)看了看,已經(jīng)聲明了ENTERY,這是怎么回事
          A:需要在ADS中設(shè)置入口.


          第21問(wèn):
          Q:請(qǐng)教:如何定義不被初始化變量
          A:讓編譯器不知道有這個(gè)內(nèi)存地址即可.
          A:如用分散加載文件分配RAM故意預(yù)留一部分RAM不分配,用它來(lái)存您不需要初始化的東
          西.或者不調(diào)用編譯器提供的啟動(dòng)代碼,不過(guò)這樣可能編程會(huì)麻煩一些.


          第22問(wèn):
          Q:我直接通過(guò)JTAG口下載EasyArm板帶的Ext1_test程序到ARM中,出現(xiàn)中斷向量的告警:
          interrupt vector is not correct arm is not running freely.
          果然復(fù)位后芯片不能運(yùn)行.但是我用串口下載后芯片能正常工作,中斷也行的.
          并且我用JTAG仿真的話,芯片能正常工作,中斷也行的,唯獨(dú)JTAG口下載不行.
          不知道是什么原因
          A:仿真器配置中要設(shè)置Erase Flash when need.也可以這樣試試:
          1.可以先打開(kāi)一個(gè)工程在RAM中調(diào)試運(yùn)行;
          2.stop程序;
          3.使用File->Load Image…重新加載Ext1_test生成的*.axf文件.
          Q:仿真器配置中我是設(shè)置了Erase Flash when need,但照你說(shuō)的話,那不是在RAM下調(diào)
          試嗎
          在RAM下調(diào)試我是可以的,但是下載后出現(xiàn)interrupt vector data is not correct.
          我又看了幾篇文章,是不是跟中斷向量表的累加和不為零有關(guān)系啊
          A:是的,是向量表的累加和不為零.
          因?yàn)槿绻肐SP下載能運(yùn)行,說(shuō)明向量表的累加和已為零,而用JTAG下載不能運(yùn)行的情
          況可能是 沒(méi)有正常下載代碼.先在RAM中調(diào)試,目的是為了后面正確下載程序到
          FLASH.


          第23問(wèn):
          Q:用Scatter怎樣將某個(gè)函數(shù)或文件定位在Flash的某個(gè)位置
          A:參考 ID=1009

          7

          第24問(wèn):
          Q:我在仿真時(shí)遇到這樣的提示:
          Error, Flash is protected by user configation!
          怎么寫(xiě)到flash里面呢
          A:看配套《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》附錄一.


          第25問(wèn):
          Q:我在移植實(shí)驗(yàn)中想到了兩個(gè)問(wèn)題,如下:
          1.Debug和Release以及DebugRel有什么不同,為什么在作2104移植實(shí)驗(yàn)時(shí),要用
          Release
          2.在Release中為什么要將RW Base設(shè)置為0x40000040 我將其設(shè)置為0x40003000,
          為什么不能工作
          A:都只是一個(gè)問(wèn)題,內(nèi)存空間的使用,因?yàn)榕躉S要比較大的內(nèi)存空間,所以要騰出點(diǎn)地方.


          第26問(wèn):
          Q:請(qǐng)問(wèn)沒(méi)有MMU的ARM芯片是否支持使用malloc()函數(shù)動(dòng)態(tài)分配內(nèi)存
          A:是否支持malloc()函數(shù)與芯片沒(méi)有多大關(guān)系,主要與編譯器有關(guān).
          Q:再問(wèn):如果沒(méi)有操作系統(tǒng)支持呢
          A:也支持.


          第27問(wèn):
          Q:在I2C實(shí)驗(yàn)程序中,我想查看數(shù)據(jù)緩沖區(qū)DataBuf的值,怎么查看
          A:watch窗口或鼠標(biāo)停留在要查看的變量名上.
          Q:我查詢的是寫(xiě)入DataBuf緩沖區(qū)的值,鼠標(biāo)在上面根本就不會(huì)出現(xiàn)他的值,即使在watch
          中加入,
          結(jié)果也是"name not found".
          A:變量被優(yōu)化,調(diào)試時(shí)可以把該變量定義全局變量查看.


          第28問(wèn):
          Q:仿真軟件和2104開(kāi)發(fā)板連接不上
          DBE Warning 00041:
          !An unspecified Debug Toolbox call failed
          電源和開(kāi)發(fā)板都連好,錯(cuò)誤和沒(méi)接開(kāi)發(fā)板一樣,驅(qū)動(dòng)也安裝了,安裝時(shí)按確定鍵時(shí),軟
          件很長(zhǎng)時(shí)間才有如上反應(yīng),請(qǐng)幫忙
          A:1.并口是否正常
          2.在其它操作系統(tǒng)(如98)下或其它臺(tái)式PC下試試.


          第29問(wèn):
          Q:如何生成32位hex文件
          8

          我在Release Setting->ARM fromELF->Output Format中設(shè)置為Intel 32bit HEX,可
          是好像沒(méi)有生成hex文件
          A:試試這種方法:
          Target-->Target Setting-->Post Link中選擇"ARM fromELF"加上你上面設(shè)的應(yīng)該不
          成問(wèn)題.


          第30問(wèn):
          Q:請(qǐng)問(wèn)關(guān)于settings中r0 base rw base的意思
          A:ro:read only,rw:read and write.


          第31問(wèn):
          Q:編譯成功后的信息第一行,code,R0 data,RW data,ZI data,debug分別代表什么
          A:R0 只讀段,即程序代碼空間;
          RW 可讀/寫(xiě)段,即數(shù)據(jù)變量空間;
          ZI 清零變量段,即需要清零初始化的數(shù)據(jù)變量空間.


          第32問(wèn):
          Q:如何在ADS里面看任務(wù)執(zhí)行的一些情況 比如堆棧.
          A:多任務(wù)環(huán)境下的堆棧,內(nèi)存等信息需要調(diào)試軟件的支持才可以實(shí)現(xiàn).
          ucos下有一個(gè)統(tǒng)計(jì)功能的模塊可以間接實(shí)現(xiàn)部分功能.


          第33問(wèn):
          Q:請(qǐng)問(wèn)向flash燒數(shù)據(jù)時(shí)出現(xiàn):exceeds flash limitation 請(qǐng)予賜教!
          A:要寫(xiě)入的flash地址超過(guò)了范圍.如果不是代碼太大的問(wèn)題,可以檢查scf文件是否正
          確.


          第34問(wèn):
          Q:在LPC2214之類(lèi)的芯片中如何實(shí)現(xiàn)數(shù)組的絕對(duì)地址定位,比如51的_at_的用法.
          A:*((char*)0x40000300)類(lèi)似訪問(wèn)
          Q:謝謝,但這樣做就無(wú)須定義數(shù)組變量,訪問(wèn)也不便,還有高招嗎
          A:可以使用分散加載.


          第35問(wèn):
          Q:請(qǐng)問(wèn) ADS編譯錯(cuò)誤"L6221E:Execution region ER_RO overlays with Execution region
          ER_ZI" 該如何解決
          A:請(qǐng)用我們網(wǎng)站上的工程模板試一試,最大的可能是因?yàn)槟愕腞ELEASE或者DEBUG選項(xiàng)里
          面沒(méi)有正確設(shè)置,按照參考《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》上面的設(shè)置,是不會(huì)有這個(gè)問(wèn)
          題的.
          9

          第36問(wèn):
          Q:請(qǐng)教一下:將程序?qū)懭雈lash,再用從JTAG方式調(diào)試寫(xiě)入之后再?gòu)?fù)位程序沒(méi)什么反映.
          看了很多以前的帖子,說(shuō)memmap寄存器要為1,我用的是一個(gè)很簡(jiǎn)單的控制led的例子,
          改動(dòng)了參數(shù)之后寫(xiě)入flash的.在這個(gè)程序的vectors中找不到關(guān)于memmap寄存器操作
          的部分啊,這是怎么回事,該怎么辦呢
          A:《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》上附錄有"常見(jiàn)問(wèn)題",列舉了幾點(diǎn)程序?qū)懙紽LASH不能運(yùn)
          行的原因. memmap操作可以在target.c中的TargetResetInit()函數(shù)內(nèi)添加.


          第37問(wèn):
          Q:HEX文件.EASY2100配套《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》上講:把項(xiàng)目編譯成HEX文件,
          我不會(huì)呀,咋辦
          A:Target-〉target settings設(shè)置Post-linker并且設(shè)置Linker-〉fromELF.
          Q:再問(wèn):我用的是光盤(pán)里的例子,打開(kāi)工程項(xiàng)目里是DebugInARM.DebugInFlash.
          RelInFlash.不是《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》上的DebugRel呀,我都照《ARM微控制
          器基礎(chǔ)與實(shí)戰(zhàn)》上設(shè)置的,可用ISP下載,提示無(wú)法找到HEX文件.
          A:光盤(pán)上的例子是用專用工程模板建立,已經(jīng)設(shè)置好參數(shù),與默認(rèn)模板不同.


          第38問(wèn):
          Q:EasyARM2100開(kāi)發(fā)板如何通過(guò)JTAG接口下載到Flash
          我在用EasyARM2100開(kāi)發(fā)板時(shí)JTAG接口不能進(jìn)行Flash中的調(diào)試(DebugInFlash),但
          是可以在RAM中調(diào)試(DebugInRAM),且通過(guò)ISP編程可以寫(xiě)入Flash.
          通過(guò)JTAG接口進(jìn)行DebugInFlash調(diào)試時(shí),總是出現(xiàn)如下提示:
          Flash Sector 0 write failed!
          Warnning interrupt vectors data is not correct!
          Program you downloaded can not run freely!
          請(qǐng)問(wèn)是什么原因 我該如何辦
          A:仿真器設(shè)置選項(xiàng)有一個(gè)允許擦除FLASH的選項(xiàng),選擇它.


          第39問(wèn):
          Q:我發(fā)現(xiàn)程序在RAM調(diào)試時(shí)(RO=0X40000000) OK,但是JTAG下載到FLASH(RO=0X00000000),
          顯示如下:
          The session file c:Documents and Settingsjandefault-1-2-0-0.ses
          could not be loaded.
          A:這是ADS自身的問(wèn)題,請(qǐng)不要通過(guò)IDE運(yùn)行AXD,而是通過(guò)開(kāi)始菜單運(yùn)行,然后Load調(diào)
          試文件調(diào)試.


          第40問(wèn):
          Q:我有幾個(gè)問(wèn)題想問(wèn)問(wèn)大家.
          10

          調(diào)試主機(jī)負(fù)責(zé)對(duì)ARM源程序進(jìn)行編譯鏈接,最好用什么樣的高級(jí)語(yǔ)言對(duì)ARM源程序進(jìn)行
          編譯鏈接 使用調(diào)試程序(如AXD)進(jìn)行JTAG調(diào)試,AXD是什么調(diào)試程序,是否是類(lèi)
          似什么軟件之類(lèi)的 到哪能下載AXD的調(diào)試程序呢 怎么樣進(jìn)行AXD程序進(jìn)行JTAG調(diào)

          如何通過(guò)JTAG仿真器發(fā)送到目標(biāo)機(jī)上呢
          對(duì)于單片機(jī)的調(diào)試,都用到了什么軟件
          都個(gè)有什么作用呢
          A:可以使用 ADS1.2,Keil C也支持.AXD是ADS的一個(gè)組件.
          您可以在本公司網(wǎng)站下載 EasyARM2100開(kāi)發(fā)套件快速入門(mén)看一看.


          第41問(wèn):
          Q:EasyARM2100AXD調(diào)試時(shí)出錯(cuò),故障現(xiàn)象:
          按照光盤(pán)上的方法設(shè)置好ADS1.2后打開(kāi)光盤(pán)上的expamplesgpiocLedDisp的工程文
          件(從光盤(pán)上拷貝到硬盤(pán),已去處只讀屬性).
          編譯通過(guò)后,按Debug按鍵運(yùn)行調(diào)試,進(jìn)入AXD.按Go按鍵,EasyARM沒(méi)有反應(yīng).再按
          Stop按鍵.
          AXD彈出兩個(gè)確認(rèn)框窗口:
          "No disassembly could be read at the requested address".
          如果進(jìn)入AXD直接按Step按鍵,也是會(huì)彈出同樣的兩個(gè)確認(rèn)框.
          軟件是光盤(pán)上的,沒(méi)有經(jīng)過(guò)任何改動(dòng).光盤(pán)上的程序試過(guò)4,5個(gè)都是這種情況.
          AXD的設(shè)置是按照光盤(pán)上的說(shuō)明設(shè)置的.
          EasyARM上的JP8 是斷開(kāi)的.ADS在出現(xiàn)這種問(wèn)題后重新安裝過(guò),故障依舊.
          出現(xiàn)這個(gè)問(wèn)題前,可以調(diào)試.只是單步的時(shí)候感覺(jué)比較慢.差不多1-2秒鐘才能單步一
          次.
          A:原因找到了,是芯片被加密了,無(wú)法寫(xiě)入新的程序,用FLASH ISP清除后解決.
          加密后JTAG完全不能控制芯片,否則可能被解密.


          第42問(wèn):
          Q:我板上的lpc2214開(kāi)始可以在線編程,只搞了兩三次可以把文件寫(xiě)進(jìn)去.但我發(fā)現(xiàn)P0.14
          未置低電平時(shí)也進(jìn)入ISP模式,燒入的文件原來(lái)可以ISP下載到2014開(kāi)發(fā)板中運(yùn)行的.
          最后只能讀芯片的一些ID,載文件都不能進(jìn)行.以下是對(duì)整片ERASE時(shí),對(duì)串口的捕獲,
          命令返回是19.
          Synchronized
          Synchronized
          OK
          11059
          OK
          U 23130
          0
          P 0 14
          0
          E 0 14
          11

          19 configure tar... -> ARMUL , 只能仿真ARM核外設(shè)不能仿真.


          第48問(wèn):
          Q:為什么盤(pán)中的工程會(huì)出錯(cuò)啊
          A:文件的只讀屬性去掉了嗎


          第49問(wèn):
          Q:您在2104的《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》中提到ucos與應(yīng)用代碼分開(kāi)編譯,在分開(kāi)編
          譯調(diào)試成功之后,最后要將代碼統(tǒng)一固化到芯片中.在最后一步需要注意什么 統(tǒng)一編
          譯時(shí)感覺(jué)要改動(dòng)很多東西,有沒(méi)有什么最簡(jiǎn)單的辦法 能否詳細(xì)介紹一下方法 多謝!
          A:使用我們的工程模板,可在本公司網(wǎng)站下載.其實(shí)不分開(kāi)編譯也可調(diào)試.

          的EasyARM2104開(kāi)發(fā)套件快速入門(mén)和LPC210...


          第50問(wèn):
          Q:請(qǐng)問(wèn),我的2104板子,通過(guò)EasyJTAG仿真時(shí),在AXD上沒(méi)有文件,而且出現(xiàn)這樣
          "Error, Flash is protected by user configation!"
          的提示,這是怎么回事啊 在AXD應(yīng)該打開(kāi)什么類(lèi)型的文件啊 謝謝啦!!!!
          A:在仿真器的配置窗口設(shè)置仿真器允許擦除FALSH.
          AXD->Options->configure target->configure->erase……


          13

          第51問(wèn):
          Q:關(guān)于arm匯編語(yǔ)言跳轉(zhuǎn)指令的特殊用法.有如下兩條跳轉(zhuǎn)指令:
          beq lablef
          beq lableb
          其中l(wèi)able為某段程序的標(biāo)號(hào),beq lablef 表示向前跳轉(zhuǎn)到與當(dāng)前指令最接近的標(biāo)號(hào)
          lable處執(zhí)行,而beq lableb表示向后跳轉(zhuǎn)到與當(dāng)前指令最接近的標(biāo)號(hào)lable處執(zhí)行.
          在arm匯編中有定義這樣的用法嗎
          A:沒(méi)有.


          第52問(wèn):
          Q:我將一段程序從flash從復(fù)制到了RAM中,但是因?yàn)榛旌暇幊讨胁荒苤苯酉騊C寄存器中
          賦值來(lái)實(shí)行跳轉(zhuǎn),這樣我該如何跳轉(zhuǎn)到這個(gè)RAM中的地址呢
          A:用函數(shù)指針.可參考IAP例子.


          第53問(wèn):
          Q:我想詳細(xì)的了解一下ADS開(kāi)發(fā)工具中的stack.s ,heap.s和startup.s中代碼的含義,
          各位高手推薦本書(shū)或給解釋一下
          A:開(kāi)發(fā)套件用戶指南的第3.1.3節(jié)有說(shuō)明.
          stack.s定義了系統(tǒng)模式堆棧的起始地址.
          heap.s為初始化庫(kù)函數(shù)的堆,是按ADS的編譯器要求編寫(xiě)的.
          startup.s向量表及初始化代碼,是根據(jù)CPU來(lái)編寫(xiě)的.


          第54問(wèn):
          Q:我不知道所選擇的C文件到底是用ARM還是THUMB編譯的,請(qǐng)大俠指點(diǎn)!
          A:看配套《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》7.1,7.2,7.3節(jié).


          第55問(wèn):
          Q:我重新建立了一個(gè)工程,沒(méi)有用模板,TEST.C程序在編譯的時(shí)候提示OS_EVENT沒(méi)有申
          明,但是我看了代碼,TEST.C中包含了CONFIG_EX.H,而congif_ex.h中又包含了
          include_ex.h, include_ex.h,這兩個(gè)頭文件又包 含了ucos_ii.h,而OS_EVENT是在
          ucos_ii.h中申明的,不知道為什么會(huì)出現(xiàn)這種錯(cuò)誤,能不能給我一個(gè)比較合理的目錄
          結(jié)構(gòu)
          A:請(qǐng)參考我們光盤(pán)的目錄結(jié)構(gòu).最好使用我們的工程模板.


          第56問(wèn):
          Q:請(qǐng)問(wèn),我現(xiàn)在做2114的產(chǎn)品開(kāi)發(fā).出現(xiàn)以下問(wèn)題,特向您請(qǐng)教! 問(wèn)題:
          我們開(kāi)發(fā)的產(chǎn)品要采樣,采用周期固定.于是我們采用timer0進(jìn)行時(shí)鐘觸發(fā),利用觸發(fā)
          中斷程序 每隔10毫秒采樣一次并顯示波形.這都能很好的進(jìn)行.但是在中斷程序里
          面對(duì)幾個(gè)全局變量賦值, 跳出中斷后卻不能使用該全局變量.很是頭疼!請(qǐng)賜教!!
          14

          框架如下:
          uint8 a; //全局變量
          void __irq funtimer0()
          {
          ...
          a=0; //在中斷函數(shù)里面對(duì)全局變量賦值
          ...
          }

          void fun1()
          {
          uint8 i;
          i=0;
          .......
          i=a; // 出錯(cuò)位置,在調(diào)試過(guò)程中運(yùn)行到當(dāng)前位置,鼠標(biāo)移動(dòng)到變量a上
          // 顯示數(shù)值是0,但是不能傳給i,i的值不會(huì)隨該命令改變.
          ......
          }

          因此,我在中斷函數(shù)中采集到的數(shù)據(jù)放到全局?jǐn)?shù)組中.采集完成關(guān)中斷后在用戶模式下
          的程序中來(lái)處理該數(shù)組,但是該數(shù)組中的數(shù)據(jù)也不能使用!全局?jǐn)?shù)組變量占1000個(gè)字節(jié),
          IRQ堆棧長(zhǎng)度是256.
          A:全局變量用volatile聲明.


          第57問(wèn):
          Q:在AXD里打開(kāi)Debuger Internals,在Variable Name里為什么沒(méi)有PINSEL2,ADDR,ADCR
          等寄存器 要在哪里設(shè)置
          A:有些片內(nèi)外設(shè)寄存器是不能讀出,《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》上的P33頁(yè)有說(shuō)明及處理
          方法(在Memory窗口寫(xiě)入相應(yīng)寄存器地址).


          第58問(wèn):
          Q:請(qǐng)問(wèn)不連easyArm板可不可以直接軟件調(diào)試程序
          我是指如果想直接調(diào)軟件部分,能不能在ads或axd里直接調(diào)試
          A:這和板子沒(méi)關(guān)系啊,你直接選ARMulate不就行了,注意把等待PLL配置完那條語(yǔ)句屏蔽
          就可以啦!


          第59問(wèn):
          Q:AXD里面出現(xiàn) "RDI Warning 00159: Could not open specified device port"
          誰(shuí)能告訴我這個(gè)是問(wèn)題啊我一直搞不懂啊,全部是按照《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》第4
          章上配的圖做的啊,但是就是不能仿真啊.
          A:請(qǐng)先按照光盤(pán)的easyarm_drivereadme.txt安裝驅(qū)動(dòng)程序.
          15

          第60問(wèn):
          Q:1.在《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》的2.6.3節(jié)有說(shuō)到"浮點(diǎn)數(shù)寄存器(F0-F7...)",2104
          是否具有這些寄存器
          2.如果EasyArm不支持浮點(diǎn)運(yùn)算,而我的程序需要用到浮點(diǎn)運(yùn)算,請(qǐng)問(wèn)可以實(shí)現(xiàn)嗎
          A:1.沒(méi)有.
          2.用C就可以用浮點(diǎn)運(yùn)算.


          第61問(wèn):
          Q:EASYARM2104的例子程序怎么都是調(diào)用C寫(xiě)的程序,匯編那個(gè)怎么沒(méi)用的啊
          A:按如下步驟進(jìn)行處理:
          1.在項(xiàng)目管理窗口中刪除原來(lái)的所有文件;
          2.在項(xiàng)目管理窗口中增加匯編文件*.S;
          3.編譯鏈接,調(diào)試.


          第62問(wèn):
          Q:請(qǐng)問(wèn)版主:在AXD調(diào)試軟件中,我單步運(yùn)行到一定時(shí)候,我想讓自己編的軟件從復(fù)位處
          重新運(yùn)行, 在AXD軟件中,EXECUTE欄目中有單步,連續(xù),運(yùn)行到光標(biāo)處等功能,但
          無(wú)復(fù)位功能,如果要實(shí)現(xiàn)此功能,如何操作
          A:我也沒(méi)有發(fā)現(xiàn),目前只能用重新裝載的操作實(shí)現(xiàn).


          第63問(wèn):
          Q:在AXD調(diào)試中,通過(guò)從jtag接口,連接上lpc2106,出現(xiàn)如下信息:
          TKSimulator for ADS, V1.2, 2003/08
          Software Supplied by: ZLGMCU
          ARM7TDMI-S, Little Endian

          在從file|load imgage...文件,出現(xiàn)兩種情況:
          1.正常,完全能調(diào)試;
          2.出現(xiàn)問(wèn)題,如下:
          RDI Warning 00254: Unimplemented RDI message
          請(qǐng)問(wèn),這是錯(cuò)在哪里 如何解決 謝謝!
          A:可能是電源或其他接插件接觸不良引起.


          第64問(wèn):
          Q:請(qǐng)教幾個(gè)問(wèn)題:
          1.移植中底層接口里的__swi關(guān)鍵字在SDT中能用嗎
          2.為什么在勘誤文檔中時(shí)鐘節(jié)拍服務(wù)子程序里去掉了開(kāi)中斷及關(guān)中斷的宏
          3.時(shí)鐘節(jié)拍中斷的優(yōu)先級(jí)應(yīng)該設(shè)為最高嗎
          16

          A:1.不知,請(qǐng)自己看一看軟件自帶文檔.
          2.因?yàn)橹袛喾?wù)程序中肯定是關(guān)中斷的.
          3.不必.


          第65問(wèn):
          Q:arm匯編中的中括號(hào)是什么意思 比如下面的例子中括號(hào)是什么作用呀
          [ PLLONSTART
          ldr r0,=PLLCON
          ldr r1,=((0xe8<<12)+(0x4<<4)+0x2)
          str r1,[r0]
          ]
          A:等效于:
          IF PLLONSTART
          ldr r0,=PLLCON
          ldr r1,=((0xe8<<12)+(0x4<上電->啟動(dòng)AXD.現(xiàn)象:數(shù)碼管能
          顯示不斷變化的數(shù)字0--F,但是AXD的連接失敗,提示"DBE Warning 00041: ....".
          重復(fù)試了幾遍,現(xiàn)象相同.
          請(qǐng)教原因以及對(duì)策.
          A:剛才把我機(jī)器的Win2K系統(tǒng)的用戶屬性從"PowerUser"修改為"Administrator"就沒(méi)
          問(wèn)題了.可能是ADS/AXD安裝的時(shí)候用了Administrator權(quán)限,在"PowerUser"下工作
          有問(wèn)題吧.
          如果哪位老兄有類(lèi)似問(wèn)題,不妨試一下這個(gè)方法.


          第67問(wèn):
          Q:在Init.s中有這樣一段:
          Reset
          BL InitStack ;初始化堆棧
          BL TargetResetInit ;目標(biāo)板基本初始化
          B __main ;跳轉(zhuǎn)到c語(yǔ)言入口
          誰(shuí)知道__main()函數(shù)的具體內(nèi)容
          假如我不需要調(diào)用庫(kù)函數(shù)的話,是否可以改為B main
          A:看調(diào)試是匯編代碼里有__main(),組成成分與一些鏈接選項(xiàng)有關(guān).
          可以.但是全局變量初始化不了.

          17


          第68問(wèn):
          Q:我在C中嵌入這樣一條語(yǔ)句
          __asm
          {
          MRS R4,CPSR;
          STMFD SP!,{R4};
          ORR R4,R4,0x80;
          MSR CPSR_cxsf,R4
          }
          會(huì)出新報(bào)錯(cuò)"illegal write to sp"版主和各位大俠有什么辦法解決阿
          A:嵌入?yún)R編不能使用SP.


          第69問(wèn):
          Q:請(qǐng)問(wèn) ADS如下的編譯錯(cuò)誤是什么意思
          L6221E:Execution region ER_RO overlays with Execution region ER_ZI
          A:程序段內(nèi)存分配可能有問(wèn)題,RO(只讀),ZI(0初始化)


          第70問(wèn):
          Q:在axd中有沒(méi)有運(yùn)行程序的時(shí)間計(jì)算器 keil中就有那樣的東西.
          A:有的,不過(guò)不是時(shí)間而是執(zhí)行周期,可以換算成時(shí)間.在debugger internals中,具體
          可以參考幫助文檔.


          第71問(wèn):
          Q:我最初的init.s中沒(méi)有加入heap的分配和__user_initial_stackheap函數(shù),結(jié)果程序
          跳到SWI中死循環(huán).我把他們加入后就好了.或者不加入他們,把B __main改為B main
          也可以.請(qǐng)問(wèn)何解 另外,就算目標(biāo)板會(huì)陷入死循環(huán),但是用軟件仿真卻可以正常運(yùn)
          行.何解
          A:堆的位置沒(méi)有分配到有效的RAM中.


          第72問(wèn):
          Q:在ARM匯編語(yǔ)言中,對(duì)立即數(shù)的有要求,我記得原來(lái)沒(méi)有這樣一說(shuō)了.現(xiàn)在反而糊涂了,
          用立即數(shù)時(shí)候,很小心很忌諱,不回象51下隨心所欲的使用了,有對(duì)立即數(shù)熟悉的朋友
          站出來(lái)給大家釋疑.
          A:如使用"非法數(shù)據(jù)可以使用lrd送到寄存器"的方法.
          首先在存儲(chǔ)器中定義一個(gè)常量,再ldr進(jìn)去,編譯器是這樣弄的.可以看下面語(yǔ)句反匯
          編的區(qū)別;
          int z=0x101;
          int z=0Xff;

          18


          第73問(wèn):
          Q:請(qǐng)教各位:我在AXD中單步運(yùn)行一段程序后,想回到程序的開(kāi)始重新運(yùn)行,除了重新加
          載,
          還有其他方法或按鍵
          A:你的程序有多大 程序在Flash運(yùn)行點(diǎn)擊Reload Current Image也不需要1秒吧~
          或在代碼窗口Set PC=0


          第74問(wèn):
          Q:在《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》程序清單6.22的376頁(yè)的OSIntCtxSW_1中:
          LDR R4, [R6]
          ADD SP, R4, #68
          LDR LR, [SP, #-8]
          MSR CPSR_c, #(NoInt | SVC32Mode)
          MOV SP, R4

          LDMFD SP!, {R4,R5}
          LDR R3, =OsEnterSum
          STR R4, [R3]
          MSR SPSR_cxsf, R5
          LDMFD SP!, {R0-R12, LR, PC }^

          請(qǐng)問(wèn)高手:LDMFD SP!, {R0-R12, LR, PC }^是不是恢復(fù)新任務(wù)工作寄存器和工作模式,
          LR寄存器一并得到恢復(fù),那么ADD指令后面的 LDR LR, [SP, #-8] 指令是不是可
          以去掉
          A:兩者恢復(fù)的是兩個(gè)不同處理器模式的LR.


          第75問(wèn):
          Q:既然option頁(yè)中的Image entry Point填入的是調(diào)試入口地址,那么在實(shí)際的程序運(yùn)行
          當(dāng)中它是不會(huì) 覆蓋代碼中的ENTRY入口聲明的,對(duì)嗎 僅僅是為了調(diào)試的方便.
          A:Image entry Point優(yōu)先.其實(shí)代碼中的ENTRY是為了確保代碼不被優(yōu)化掉.


          第76問(wèn):
          Q:我想使用標(biāo)準(zhǔn)C語(yǔ)言的庫(kù)函數(shù),比如memset 在string.h中有定義,可是我直接包含
          #include , 但是編譯沒(méi)錯(cuò)誤,運(yùn)行確有錯(cuò)誤,應(yīng)當(dāng)怎么設(shè)置
          A:請(qǐng)使用最新的工程模板


          第77問(wèn):
          Q:軟件中斷是不是必須由SWI指令觸發(fā)
          A:可以直接用你定義成軟中斷的函數(shù)名啊.比如:
          19

          __SWI(0x12) void myswi(void); // 聲明函數(shù)

          __asm // 調(diào)用方式1
          {
          swi 0x12
          }

          myswi(); // 調(diào)用方式2


          第78問(wèn):
          Q:《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》程序清單6.9的程序是在哪里被調(diào)用的
          _user_initial_stackheap
          LDR r0,=bottom_of_heap
          MOV pc,lr
          A:__main.千萬(wàn)別刪喲, 否則出大事的.


          第79問(wèn):
          Q:"LDR R0, =PINSEL0" 中"="是什么意思這語(yǔ)句是取地址還是取地址中的內(nèi)容呢
          A:這是LDR偽指令,可用來(lái)加載32位立即數(shù)或地址,LDR R0,=PINSEL0是將PINSEL0的地
          址加載到R0中.


          第80問(wèn):
          Q:我不明白"SWI 0"和"SWI 0X123456"這兩條指令中的0和0X123456中有何用.
          有沒(méi)有應(yīng)用SWI的具體例子讓我看看
          A:那是特定的中斷入口地址,見(jiàn)ADS_DeveloperGuide_D.pdf下的swi.


          第81問(wèn):
          Q:SWI的功能表嗎
          A:SWI的功能表由swi異常服務(wù)程序決定.很多時(shí)候由編程者自己決定.


          第82問(wèn):
          Q:請(qǐng)問(wèn):我在實(shí)驗(yàn)?zāi)脑a進(jìn)行ucos移植時(shí)用的是例1,但是在按照?qǐng)D7.17設(shè)置處理
          器的仿真器模式時(shí)enable comms channel view 和semihostin項(xiàng)為不可激活狀態(tài).為
          什么,能否給一點(diǎn)提示
          A:在一些仿真器上使能了它們會(huì)影響swi異常處理程序.


          第83問(wèn):
          Q:請(qǐng)問(wèn)"Unimplemented RDI message"這個(gè)出錯(cuò)提示是什么意思啊
          20

          還有,有的時(shí)候當(dāng)我用axd load一個(gè).axf文件時(shí),常常loading的沒(méi)完沒(méi)了,這是怎
          么回事啊
          A:Unimplemented RDI message:為命令操作失敗,需要重新連接.
          下載不結(jié)束為出現(xiàn)不正?,F(xiàn)象,請(qǐng)重新連接并下載.如果每次都出現(xiàn)該現(xiàn)象請(qǐng)聯(lián)系我們
          的技術(shù)支持.


          第84問(wèn):
          Q:各位高手好,我是ARM初學(xué)者我在程序調(diào)試中"LDR PC,[PC,R2]"命令執(zhí)行后PC為什么
          =0x0000000c, 在這條命令執(zhí)行前PC+R2地址上的值是0x0000000c嗎
          A:要使用軟件仿真.0x0000000C是預(yù)取中止了.


          Q:請(qǐng)問(wèn):ARM7在初始化CPU堆棧時(shí),寄存器CPSR和CPSR_c有什么關(guān)系 CPSR_c是在那里
          定義的
          A:這是MSR指令的語(yǔ)法,"_"后部分指定CPSR的域,請(qǐng)參考《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》
          上關(guān)于這條指令的說(shuō)明.


          第85問(wèn):
          Q:軟中斷SWI作底層接口的問(wèn)題.以下函數(shù)為啥要通過(guò)軟中斷調(diào)用,可以直接調(diào)用嗎
          OS_TASK_SW(),
          _OSStartHighTdy(),
          OS_ENTER_CRITICAL),
          OS_EXIT_CRITICAL(),
          A:在用戶模式或Thumb狀態(tài)不能直接調(diào)用.


          第86問(wèn):
          Q:ARM的一條指令是32bit長(zhǎng), 但有時(shí)一個(gè)立即數(shù)也是32bit, 這是如何解釋的
          A:指令中使用的立即數(shù)需要時(shí)8位數(shù)移位獲得,并非所有數(shù)都可以.


          第87問(wèn):
          Q:請(qǐng)教:全局變量的值在復(fù)位(不斷電)后會(huì)不會(huì)自動(dòng)清零 (用光盤(pán)自帶的啟動(dòng)代碼)
          A:在C語(yǔ)言中一般會(huì)會(huì)初始化0或用戶指定的值,但這不是硬件自動(dòng)的.


          第88問(wèn):
          Q:the setting files for *.mcp is locked!是什么問(wèn)題
          A:文件屬性只讀.


          第89問(wèn):
          21

          Q:請(qǐng)問(wèn),關(guān)于printf() 在ads中怎么用不了 謝謝!
          A:請(qǐng)用我們我們網(wǎng)站上下載2104的工程模板,它解決了這個(gè)問(wèn)題.
          即使這樣,也不能真正使用prinf.您還需要自己編寫(xiě)一些底層函數(shù)才能使用,詳細(xì)參
          考ads自帶的ADS_CompilerGuide_D.pdf.


          第90問(wèn):
          Q:swi的功能號(hào)是如何來(lái)的 它和LR寄存器的值是何關(guān)系
          如《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》程序清單6.13
          LDREQ R0,[LR,#-4] ;BICEQ R0,R0,0xff000000
          A:LDREQ R0,[LR,#-4] ;用來(lái)讀SWI的代碼
          BICEQ R0,R0,0xff000000 ;是ARM 方式進(jìn)入,取低24bit


          第91問(wèn):
          Q:請(qǐng)問(wèn)在TargetInit()中函數(shù)開(kāi)始會(huì)執(zhí)行srand((INT32U)TargetInit),它是做什么用的
          A:ex1用它來(lái)產(chǎn)生隨機(jī)數(shù)種子的.

          Q:請(qǐng)問(wèn):我建立的工程中,所有源文件與2104附帶的光盤(pán)例子源文件相同,編譯鏈接也一
          切正常, 可就是不能到板子上跑!
          提示錯(cuò)誤是:向量中斷有錯(cuò)誤,無(wú)法自由運(yùn)行!!
          這是怎么回事 相同的源文件,加在你的工程里,正常;加到我的工程中就出錯(cuò)!
          我創(chuàng)建的是ARM可執(zhí)行映象.
          A:vector.s你自己的嗎 如果是要計(jì)算向量去的累加和了.


          第92問(wèn):
          Q:請(qǐng)問(wèn):vectors.s中"DCD 0xb9205f80" 的0xb9205f80在實(shí)際運(yùn)用中需要改動(dòng)嗎
          A:不需要更改,除非改動(dòng)了向量表中的指令代碼.


          第93問(wèn):
          Q:請(qǐng)問(wèn),為什么queue數(shù)據(jù)隊(duì)列,《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》上給畫(huà)成了環(huán)形
          A:因?yàn)轭^跟尾的指針指向一個(gè)地址,隊(duì)列邏輯上是環(huán)狀的.


          第94問(wèn):
          Q:有沒(méi)有人成功的把一個(gè)數(shù)據(jù)定義到程序空間里 各種方法我都試了,是不是有什么編譯
          開(kāi)關(guān)
          A:使用const修飾,定義變量時(shí)帶初始化值,要定義為全局的變量.


          第95問(wèn):
          Q:ads里沒(méi)有CODE關(guān)鍵詞,怎樣使定義的字符串?dāng)?shù)組不占用RAM空間
          22

          A:const unsigned char string[]


          第96問(wèn):
          Q:在例程中TIME_test中的TIMEOUT當(dāng)寫(xiě)入時(shí)提示:
          Warnning! interrupt vectors data is not correct!
          Program you downloaded can not run freely!
          我不知怎樣改設(shè)置,哪位提醒一下
          A:中斷向量表的校驗(yàn)和不為0,用AXD看0地址的數(shù)據(jù)(32位方式),自己加一下.注意把
          高于32位的部分去掉.


          第97問(wèn):
          Q:請(qǐng)教各位:我做TIMEOUT實(shí)驗(yàn)(2104板),Make通過(guò),Debug時(shí)出現(xiàn)了如下錯(cuò)誤提示:
          Warnning! interrupt vectors data is not correct!
          Program you downloaded can not run freely!
          設(shè)置Link:ARM Link
          r0 base:0x00000000
          rw base:0x40003000
          image entry point:0x00000000 其它的沒(méi)變!!
          而我使用ISP完全可以下載而且可以運(yùn)行!這可以說(shuō)是設(shè)置問(wèn)題,但是我實(shí)在找不到!
          怎么辦
          A:請(qǐng)看一看配套《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》附錄1,ISP軟件可能對(duì)它進(jìn)行了處理,而JTAG
          沒(méi)有特殊處理


          第98問(wèn):
          Q:*(volatile unsigned int *)是什么意思 例如*(volatile unsigned int *)addr具體
          是什么意思
          A:分開(kāi)來(lái)看,(volatile unsigned int *)就是定義一個(gè)可變的無(wú)符號(hào)整形指針,前面的那
          個(gè)*就是取起內(nèi)容.


          第99問(wèn):
          Q:如何理解#define VICIRQStatus (*((volatile unsigned long *) 0xFFFFF000))
          A:宏定義,參考C語(yǔ)言的書(shū)籍.
          (volatile unsigned long *) 0xFFFFF000 將0xFFFFF000強(qiáng)行轉(zhuǎn)換為指針,然后 *(指
          針) 即可對(duì)此地址進(jìn)行訪問(wèn).


          第100問(wèn):
          Q:在異常處理向量表的設(shè)置中,為什么不直接將異常向量的入口地址寫(xiě)入PC中呢,為什么
          非要用什么DCD這些偽指令,到底有什么用啊
          A:為了保證任何時(shí)候其累加和為零,不然改一次程序就要計(jì)算一次.



          關(guān)鍵詞: ARM問(wèn)

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();