

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第 5 問:ARM經(jīng)典300問第 1 章 體系結(jié)構(gòu)第 1 問:Q:請問在初始化 CPU 堆棧的時候一開始在執(zhí)行 movrO, LR 這句指令時處理器是什么模式 A:復(fù)位后的模式,即管理模式.第 2 問:Q:請教:MOV中的8位圖立即數(shù),是怎么一回事 OxFOOOOOOl是怎么來的A:是循環(huán)右移,就是一個 O255之間的數(shù)左移或右移偶數(shù)位的來的 ,也就是這個數(shù)除以 4 一直除 , 直到 在 O -255 的范圍內(nèi)它是整數(shù)就說明是可以的 !A:8 位數(shù)(O-255)循環(huán)左移或循環(huán)右移偶數(shù)位得到的,F(xiàn)OOOOOO1 既是 Ox1 F 循環(huán)右移 4 位, 符合規(guī)范,所以是正確的 .這樣做是因為指令長度
2、的限制,不可能把 32 位立即數(shù)放在 32 位的指令中.移位偶數(shù)也是這個原因.可以看一看 ARM 體系結(jié)構(gòu)(ADS 自帶的英文文 檔)的相關(guān)部分.第 3 問:Q:請教:ARM 微控制器基礎(chǔ)與實戰(zhàn)2.2.1 節(jié)關(guān)于第 2 個操作數(shù)的描述中有這么一段 # inmed_8r 常數(shù)表達式 .該常數(shù)必須對應(yīng) 8 位位圖,即常熟是由一個 8 位的常數(shù)循環(huán)移 位偶數(shù)位得到 .合法常量:0 x3 FC,O, OxFOOOOOOO ,200,0 xF0000001 . 非法常量 :Ox1FE,511,OxFFFF,Ox1O1O,OxFOOOOO1O.常數(shù)表達式應(yīng)用舉例 :LDR R0,R1,#-4 ;讀取 R1
3、 地址上的存儲器單元內(nèi)容,且 R1 = R1-4針對這一段 , 我的疑問 :1.即常數(shù)是由一個 8 位的常數(shù)循環(huán)移位偶數(shù)位得到 ,這句話如何理解2.該常數(shù)必須對應(yīng) 8 位位圖,既然是 8 位位圖,那么取值為 0-255,怎么 0 x3 FC 這種 超 出 255 的數(shù)是合法常量呢3.所舉例子中 ,合法常量和非法常量是怎么區(qū)分的如 Ox3FC 合法,而 Ox1FE 卻非法OxFOOOOOOO,OxFOOOOOO1 都合法,而 OxFOOOOO1O 又變成了非法4.對于匯編語句LDR R0,R1,#-4,是先將 R1 的值減 4 結(jié)果存入 R1,然后讀取 R1所 指單元的值到 R0,還是先讀取 R
4、1 到 R0,然后再將 R1 減 4 結(jié)果存入 R1A:提示,任何常數(shù)都可用底數(shù)*2 的 n 次幕 來表示.1. ARM 結(jié)構(gòu)中 ,只有 8bits 用來表示底數(shù) ,因此底數(shù)必須是 8 位位圖 .2.8 位位圖循環(huán)之后得到常數(shù) ,并非只能是 8 位.3.OxFOOOOO1O 底數(shù)是 9 位,不能表示.4.LDRRO,R1,#-4 是后索引,即先讀,再減.可以看一看 ARM 體系結(jié)構(gòu)對相關(guān)尋址方式的說明 .3第 4 問:Q 在程序移植的過程中,什么代碼段處于什么樣的模式,這可真是一個困擾人的大 難題, 有沒有一種標(biāo)志或辦法能夠識別 代碼段處于什么樣的模式 A:讀取 CPSR,任何時候都是可以讀.
5、第 12 問:Q:為什么保護現(xiàn)場時,總是保護 R0-R3,R12,為什么不保護 R4-R11A:請看一看ARM-thumb 過程調(diào)用標(biāo)準這個文檔.第 6 問:Q:請問 mov R1 ,#0 x00003 DD0 錯誤:out of the range of operation 是怎么回事情我就是想 IODIR= 0 x00003dd0 ,匯編就是LDR R0,= IODIRMOV R1,#0 x00003dd0STR R1,R0編譯時候說是超出操作范圍A:使用 ldr,mov 的操作數(shù)為 8 位位圖數(shù).第 7 問:Q:在 ARM7TDMI(-S)處理器內(nèi)部有 37 個用戶可見的寄存器:問題:用
6、戶可見 應(yīng)該怎樣理解 這 37 個寄存器是否是 37 個不同的物理寄存器 , 例如 R8 與R8_fiq 應(yīng)該是兩個不同的物理寄存器吧A:用戶可見是指用戶可以通過程序操作的.R8 與 R8_fiq 是兩個不同的寄存器.第 8 問:Q:USR 模式,SVC 模式,I RQ 模式分別有哪些限制 A:對于外設(shè)操作限制與 芯片設(shè)計有關(guān) .USR 模式不能設(shè)置 CPSR 寄存器. 用戶模式下無 SPSR 寄 存器,代碼可以為 ARM,Thumb.第 9 問:Q:請問在初始化堆棧時就決定了工作模式是什么意思如何決定工作模式的 A: 設(shè)置 CPSR 寄存器 .第 10 問:Q: 請問 :ARM 匯編程序設(shè)計
7、中所謂的 文字池 作何理解A:可以理解為常量數(shù)組,文字池中保存的是常量,這些常量可以是正常的常量,也可以是地 址.第 11 問:Q:為什么在中斷向量表中不直接 LDR PC,異常地址.而是使用一個標(biāo)號,然有再在后面 使用 DCD 定義這個標(biāo)號A:因為 LDR指令只能跳到當(dāng)前 PC4kB范圍內(nèi),而 B指令能跳轉(zhuǎn)到 32MB范圍,而現(xiàn)在這 樣在 LDRPC, xxxx這條指令不遠處用xxxxDCD 定義一個字,而這個字里面存放最終異 常服務(wù)程序的地址 ,這樣可以實現(xiàn) 4GB全范圍跳轉(zhuǎn) .Q:LDR 不是可以全空間跳轉(zhuǎn)的嗎ARM 微控制器基礎(chǔ)與實戰(zhàn)程序清單 5.3.A:LDR 偽指令通過設(shè)置指令緩沖
8、池才能實現(xiàn)全范圍跳轉(zhuǎn) ,而 LDR 指令則只能實現(xiàn) 4KB 范圍 跳轉(zhuǎn).第 19 問:Q:ARM7TDMI-S 和 ARM7T DMI 有何區(qū)別A:ARM7TDMI-S 是 ARM7TDMI 的可綜合(synthesizable)版本(軟核).對應(yīng)用工程師來說,除非芯片生產(chǎn)廠商對 ARM7TDMI-S 進行了裁減,否則 ARM7TDMI-S 與 ARM7TDMI 沒有太大的區(qū)別 ,其編程模型與 ARM7TDMI 一致.第 13 問 :Q:DCD 偽指令的疑惑 .StackUsr DCD UsrStackSpace + (USR_STACK_LEGTH - 1) * 4 這句話是什么意思 DCD
9、 后面的程序標(biāo)號或數(shù)字表達式是何意A:它的內(nèi)容是初始化遞減堆棧的最高地址,看ARM 微控制器基礎(chǔ)與實戰(zhàn)2.3.2 節(jié).5第 2 章 編譯器與語言第 14 問:Q: 00254 : Unimplemented RDI message 是什么錯誤提示 我的設(shè)置連接都正常,是不是 芯片燒了A:是 JTAG 的問題.可以先使用 ISP 操作試試就知道了,如果能 ISP 說明 LPC2104 沒有 損 壞,還能正常運行程序 .第 15 問:Q:請教:我在調(diào)試程序的時候在 AXD 中出現(xiàn)這樣的提示信息:RDI Warning 00159: could not open specified device p
10、ort.我是根據(jù)配套教程的步驟設(shè)置的 .A: 請按照光盤 easyarm_drive readme. txt 安裝驅(qū)動程序 .第 16 問:Q:我用實驗程序運行經(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項中選擇 Erase Flashwhen need;2 .向量表累加和要為 0;3.可以先在 RAM 調(diào)試一個程序(運行),
11、然后 STOP 再使用 File-Load Image.加載要 下載到 FLASH的調(diào)試文件 .第 17 問:Q:在 ADS 中是否可以進行軟件調(diào)試基于 UCOSII 的程序A:ADS 軟件調(diào)試只能調(diào)試 ARM 的內(nèi)核,不能調(diào)試外設(shè).但是取消 PLL 鎖定檢測后,可以調(diào)試任務(wù)切換,最終到空閑任務(wù)上 .開始移植時軟件仿真是最好的工具 .第 18 問:Q:ARMulate 軟件是干什么的 2104 不是用 EasyJTAG.dll 來仿真嗎 A:軟件仿真只能仿真 ARM 核.Q:有關(guān) LPC2106 .INC 的問題.我無法在 project 弓|用 lpc2106.i nc 文件,只能引用 lp
12、c2106.h文件,這是什么原因且當(dāng)我的主程序用匯編編寫時,不能引用 lpc2106.h,用lpc2106.inc 則無法加入 project,請問匯編器應(yīng)如何設(shè)置A:不用加 2106.inc 只要該文件在你的工程文件夾中,就可以直接在匯編程序的開始處加6include 2106.inc.注意:該文件是匯編文件定義的頭文件 ,定義內(nèi)部寄存器.第 20 問 :Q:入口點是什么意思我在使用 LPC2106 上移植 UCOSII,每次 MAKE 時總是提示我Image does not have an entry point,可是我是把光盤的 vetctors.s 復(fù)制過來的,而且 仔細看了看,已經(jīng)
13、聲明了 ENTERY 這是怎么回事A:需要在 ADS 中設(shè)置入口 .第 21 問 :Q:請教:如何定義不被初始化變量A: 讓編譯器不知道有這個內(nèi)存地址即可 .A:如用分散加載文件分配 RAM 故意預(yù)留一部分 RAM 不分配,用它來存您不需要初始化的東 西.或者不調(diào)用編譯器提供的啟動代碼 ,不過這樣可能編程會麻煩一些 .第 22 問 :Q:我直接通過 JTAG 口下載Easy Arm板帶的Ext1_test程序到ARM中,出現(xiàn)中斷向量的告警 interrupt vectoris not correct arm isnot running free l y. 果然復(fù)位后芯片不能運行.但是我用串口下
14、載后芯片能正常工作,中斷也行的.并且我用 JTAG 仿真的話,芯片能正常工作 ,中斷也行的 ,唯獨 JTAG 口下載不行. 不知道是什么原因A:仿真器配置中要設(shè)置 Erase Flash when need.也可以這樣試試:1. 可以先打開一個工程在 RAM 中調(diào)試運行;2.stop 程序;3.使用 File-Load Image重新加載 Ext1_test 生成的*.axf 文件.Q:仿真器配置中我是 設(shè)置了 EraseFlash whenneed,但照你說的話,那不是在 RAM 下調(diào) 試嗎在 RAM 下調(diào)試我是可以的 ,但是下載后出現(xiàn) interruptvector data isnot
15、correct.我又看了幾篇文章,是不是跟中斷向量表的累加和不為零有關(guān)系啊A:是的,是向量表的累加和不為零 .因為如果用 ISP 下載能運行,說明向量表的累加和已為零,而用 JTAG 下載不能運行的情 況可能是 沒有正常下載代碼 .先在 RAM 中調(diào)試,目的是為了后面正確下載程序到FLASH.第 23 問 :Q:用 Scatter 怎樣將某個函數(shù)或文件定位在 Flash 的某個位置A:參考 http:/ ID= 10097第 24 問:Q:我在仿真時遇到這樣的提示:Error, Flash is pr ot ected by user configation! 怎么寫到 fla sh 里面呢A
16、:看配套ARM 微控制器基礎(chǔ)與實戰(zhàn)附錄一第 25 問 : Q: 我在移植實驗中想到了兩個問題,如下:1.Debug 和 Release 以及 Debug Rel 有什么不同 ,為什么在作 2104 移植實驗時 ,要用 Release2.在 Release 中為什么要將 RW Base 設(shè)置為 0 x40000040 我將其設(shè)置為 0 x40003000 , 為什么不能工作A:都只是一個問題,內(nèi)存空間的使用,因為跑 OS 要比較大的內(nèi)存空間,所以要騰出點地方.第 26 問 :Q:請問沒有 MMU 的 ARM 芯片是否支持使用 malloc()函數(shù)動態(tài)分配內(nèi)存A:是否支持 malloc()函數(shù)與芯
17、片沒有多大關(guān)系,主要與編譯器有關(guān).Q:再問:如果沒有操作系統(tǒng)支持呢A:也支持.第 27 問 :Q:在 I2C 實驗程序中,我想查看數(shù)據(jù)緩沖區(qū) DataBuf 的值,怎么查看A:watch 窗口或鼠標(biāo)停留在要查看的變量名上 .Q:我查詢的是寫入 DataBuf 緩沖區(qū)的值,鼠標(biāo)在上面根本就不會出現(xiàn)他的值,即使在 watch 中加入,結(jié)果也是 name not found. A :變量被優(yōu)化,調(diào)試時可以把該 變量定義為全局變量查看 .第 28 問 :Q: 仿真軟件和 2104 開發(fā)板連接不上DBE Warning 00041 :!AnunspecifiedDebug Toolbox call fa
18、iled 電源和開發(fā)板都連好,錯誤和沒接開發(fā)板一 樣,驅(qū)動也安裝了,安裝時按確定鍵時,軟 件很長時間才有如上反應(yīng),請幫忙A:1. 并口是否正常2 .在其它操作系統(tǒng) (如 98)下或其它臺式 PC 下試試.第 29 問 :Q:如何生成 32 位 hex 文件8我在 Release Sett i ng- ARM from ELF- Out put Form at 中設(shè)置為 In tel 32b it HEX,可 是好像沒有生成hex 文件A: 試試這種方法 :Targ et- Target Setting- Post Link 中選擇ARM from ELF加上你上面設(shè)的應(yīng)該不成問題.第 30 問
19、 :Q:請問關(guān)于 settings 中 r0 base rw base 的意思A:ro:read only, rw: read and write.第 31 問 :Q:編譯成功后的信息第一行,code,RO data,RW data,ZI data,debug 分別代表什么 A:R0 只讀段,即程序代碼空間 ;RW 可讀/寫段 ,即數(shù)據(jù)變量空間 ;ZI 清零變量段 ,即需要清零初始化的數(shù)據(jù)變量空間 .第 32 問 :Q:如何在 ADS 里面看任務(wù)執(zhí)行的一些情況 比如堆棧.A:多任務(wù)環(huán)境 下的堆棧,內(nèi)存等信息需要調(diào)試軟件的支持才可以實現(xiàn).ucos 下有一個 統(tǒng)計功能的模塊可以間接實現(xiàn)部分功能 .
20、第 33 問 :Q:請問向 flash 燒數(shù)據(jù)時出現(xiàn):exceeds flash limitation 請予賜教!A:要寫入的 flash 地址超過了范圍.如果不是代碼太大的問題,可以檢查 scf 文件是否正 確.第 34 問 :Q:在 LPC2214 之類的芯片中如何實現(xiàn)數(shù)組的絕對地址定位,比如 51 的_at_的用法.A:*(char*)Ox4OOOO3OO )類似訪問 Q: 謝謝,但這樣做就無須定義數(shù)組變量 ,訪問也不便 , 還有高招嗎A:可以使用分散加載.第 35 問 :Q:請問 ADS 編譯錯誤L6221 E:Execution region ER_RO overlays with
21、Execution region ER_ZI 該如何解決A:請用我們網(wǎng)站上的工程模板試一試,最大的可能是因為你的 RELEASE 或者 DEBUG 選項里 面沒有正確設(shè)置 ,按照參考 ARM 微控制器基礎(chǔ)與實戰(zhàn)上面的設(shè)置 ,是不會有這個問 題的 .9第 36 問 :Q:請教一下:將程序?qū)懭?flash,再用從 JTAG 方式調(diào)試寫入之后再復(fù)位程序沒什么反映.看 了很多以前的帖子 ,說 memmap 寄存器要為 1,我用的是一個很簡單的控制 led 的例子, 改 動了參數(shù)之后寫入 flash 的.在這個程序的 vectors 中找不到關(guān)于 memmap 寄存器操作 的部分啊 ,這是怎么回事 ,該
22、怎么辦呢A:ARM 微控制器基礎(chǔ)與實戰(zhàn)上附錄有 常見問題,列舉了幾點程序?qū)懙?FLASH 不能運 行的原因.memmap 操作可以在 target.c 中的 TargetResetI nit()函數(shù)內(nèi)添加.第 37 問 :Q:HEX 文件.EASY2100 配套ARM 微控制器基礎(chǔ)與實戰(zhàn)上講:把項目編譯成 HEX 文件,我不會呀 ,咋辦A:Target-target sett ings 設(shè)置 Post-linker 并且設(shè)置 Linker-fromELF. Q:再問:我用的是光盤里的例子,打開工程項目里是 Debugl nARM.DebuglnFash. Rell nFash.不是ARM 微控
23、制器基礎(chǔ)與實戰(zhàn)上的 Debug Rel 呀,我都照ARM 微控制 器基礎(chǔ)與實戰(zhàn)上設(shè)置 的,可用 ISP 下載,提示無法找到HEX 文件.A:光盤上的例子是用專用工程模板建立,已經(jīng) 設(shè)置好參數(shù),與默認模板不同 .第 38 問 :Q: EasyARM2100 開發(fā)板如何通過 JTAG 接口下載到 Flash我在用 EasyARM2100 開發(fā)板時 JTAG 接口不能進行 Flash 中的調(diào)試(Debug InFlash),但 是可以在 RAM中調(diào)試(Debug In RAM),且通過 ISP 編程可以寫入 Flash.通過 JTAG 接口進行 DebugI nFlash 調(diào)試時 ,總是出現(xiàn)如下提示
24、 :Flash Sector 0 write failed!Warnning interrupt v ect ors data is not correct!Program you downloaded can not run freely! 請問是什么原因我該如何辦 A:仿真器設(shè)置選項有一個允許擦除 FLASH 的選項,選擇它.第 39 問 :Q:我發(fā)現(xiàn)程序在 RAM 調(diào)試時(R0= 0X40000000) 0K,但是 JTAG 下載到 FLASH( RO= 0X00000000 ), 顯示如下 :The session file c: Documentsand Settings jan d
25、efault-1 -2-0-0.ses could not be loaded.A:這是 ADS 自身的問題,請不要通過 IDE 運行 AXD,而是通過開始菜單運行 然后 Load 調(diào) 試文件調(diào)試 .第 40 問:Q:我有幾個問題想問問大家 .10調(diào)試主機負責(zé)對 ARM 源程序進行編譯鏈接 ,最好用什么樣的高級語言對 ARM 源程序進行 編譯鏈接 使用調(diào)試程序(如 AXD)進行 JTAG 調(diào)試,AXD 是什么調(diào)試程序,是否是類似什么 軟件之類的 到哪能下載 AXD 的調(diào)試程序呢 怎么樣進行 AXD 程序進行 JTAG 調(diào) 試如何通過 JTAG 仿真器發(fā)送到目標(biāo)機上呢 對于單片機的調(diào)試 ,都用到
26、了什么軟件 都 個有什么作用呢A:可以使用 ADS1.2,Keil C 也支持.AXD 是 ADS 的一個組件. 您可以在本公司網(wǎng)站下載 EasyARM2100 開發(fā)套件快速入門看一看 .第 41 問 :Q:EasyARM2100AXD 調(diào)試時出錯 ,故障現(xiàn)象:按照光盤上的方法設(shè)置好 ADS1.2 后打開光盤上的 expamples gpioc LedDisp 的工程文 件(從光盤上拷貝到硬盤 ,已去處只讀屬性 ).編譯通過后,按 Debug 按鍵運行調(diào)試,進入 AXD.按 Go 按鍵,EasyARM 沒有反應(yīng).再按 Stop 按鍵.AXD 彈出兩個確認框窗口 :No disassembly
27、could be readat the requested address.如果進入 AXD 直接按 Step 按鍵,也是會彈出同樣的兩個確認框 . 軟件是光盤 上的,沒有經(jīng)過任何改動 .光盤上的程序試過 4,5 個都是這種情況 .AXD 的設(shè)置13是按照光盤上的說明設(shè)置的 .EasyARM 上的 JP8 是斷開的 .ADS 在出現(xiàn)這種問題后重新安裝過 ,故障依舊 . 出現(xiàn)這 個問題前,可以調(diào)試 .只是單步的時候感覺比較慢 .差不多 1-2 秒鐘才能單步一 次.A:原因找到了,是芯片被加密了,無法寫入新的程序,用 FLASH ISP 清除后解決.加密后 JTAG 完全不能控制芯片 ,否則可能被
28、解密 .第 42 問 :Q:我板上的 Ipc2214 開始可以在線編程,只搞了兩三次可以把文件寫進去.但我發(fā)現(xiàn) P0.14 未置低電平時也進入 ISP 模式,燒入的文件原來可以 ISP 下載到 2014 開發(fā)板中運行的 . 最 后只能讀芯片的一些 ID,載文件都不能進行.以下是對整片 ERASE 時,對串口的捕獲,命令返 回是 19.Syn chr on izedSyn chr on izedOK11059OKU 231300P0 140E0 141119configuretar. - ARMUL, 只能仿真 ARM 核外設(shè)不能仿真 .第 48 問:Q:為什么盤中的工程會出錯啊A:文件的只讀屬
29、性去掉了嗎第 49 問 :Q:您在 2104 的ARM 微控制器基礎(chǔ)與實戰(zhàn)中提到 ucos 與應(yīng)用代碼分開編譯,在分開編 譯調(diào)試成功之后 ,最后要將代碼統(tǒng)一固化到芯片中 .在最后一步需要注意什么 統(tǒng)一編 譯時感 覺要改動很多東西,有沒有什么最簡單的辦法 能否詳細介紹一下方法 多謝! A:使用我們的 工程模板,可在本公司網(wǎng)站下載 .其實不分開編譯也可調(diào)試 .http:/ www. zI EasyARM2104 開發(fā)套件快速入門和 LPC210.第 50 問 :Q:請問,我的 2104 板子,通過 EasyJTAG 仿真時,在 AXD 上沒有文件,而且出現(xiàn)這樣Error,F(xiàn)Iash is prot
30、ected by user configation!的提示 ,這是怎么回事啊 在 AXD 應(yīng)該打開什么類型的文件啊 謝謝啦 !A:在仿真器的配置窗口設(shè)置仿真器允許擦除FALSH.AXD- Opti ons-conf igure target-con figure-erase.第 51 問 :Q:關(guān)于 arm 匯編語言跳轉(zhuǎn)指令的特殊用法.有如下兩條跳轉(zhuǎn)指令 beq lab lef beq lab leb其中 lable 為某段程序的標(biāo)號 ,beq lablef 表示向前跳轉(zhuǎn)到與當(dāng)前指令最接近的標(biāo)號 lable 處執(zhí)行 ,而 beqlableb 表示向后跳轉(zhuǎn)到與當(dāng)前指令最接近的標(biāo)號 lable 處
31、執(zhí)行 . 在 arm 匯編中有定義這樣的用法嗎A:沒有.第 52 問 :Q:我將一段程序從 flash 從復(fù)制到了 RAM 中,但是因為混合編程中不能直接向 PC 寄存器中賦值來實行跳轉(zhuǎn) ,這樣我該如何跳轉(zhuǎn)到這個 RAM 中的地址呢A: 用函數(shù)指針 .可參考 IAP 例子.第 53 問 :Q:我想詳細的了解一下 ADS 開發(fā)工具中的 stack.s ,heap.s 和 startups 中代碼的含義, 各位高手推薦本書或給解釋一下A:開發(fā)套件用戶指南的第 3.1.3 節(jié)有說明.stack.s 定義了系統(tǒng)模式堆棧的起始地址 .heap.s 為初始化庫函數(shù)的堆 , 是按 ADS 的編譯器要求編寫的
32、 . startup.s 向量表及初始化代碼 ,是根據(jù) CPU來編寫的 .第 54 問 :Q: 我不知道所選擇的 C 文件到底是用 ARM 還是 THUMB 編譯的 ,請大俠指點 !A:看配套ARM 微控制器基礎(chǔ)與實戰(zhàn)7.1,7.2,73 節(jié).第 55 問 :Q:我重新建立了一個工程,沒有用模板,TEST. C 程序在編譯的時候提示 OS_EVENT 沒有申明,但是我看了代碼,TESTC 中包含了 CONFIG_EX.H,而 congif_ex.h 中又包含了include_ex.h, include_exh,這兩個頭文件又包 含了 ucos_ii.h,而 OS_EVENT 是在ucos_ii
33、.h 中申明的,不知道為什么會出現(xiàn)這種錯誤 ,能不能給我一個比較合理的目錄結(jié)構(gòu)A:請參考我們光盤的目錄結(jié)構(gòu).最好使用我們的工程模板.第 56 問 :Q:請問,我現(xiàn)在做 2114 的產(chǎn)品開發(fā).出現(xiàn)以下問題,特向您請教!問題:我們開發(fā)的產(chǎn) 品要采樣,采用周期固定.于是我們采用 timer0 進行時鐘觸發(fā),利用觸發(fā) 中斷程序 每 隔 10 毫秒采樣一次并顯示波形 .這都能很好的進行 .但是在中斷程序里 面對幾個全局 變量賦值, 跳出中斷后卻不能使用該全局變量 .很是頭疼!請賜教!14框架如下 :u int 8 a ; / 全局變量void _irq funtimer0()a=0; / 在中斷函數(shù)里面
34、對全局變量賦值void fun1 ()uint 8 i;i= 0;i= a; / 出錯位置,在調(diào)試過程中運行到當(dāng)前位置 ,鼠標(biāo)移動到變量 a 上 / 顯示數(shù)值是 0, 但是不能傳給 i,i 的值不會隨該命令改變 .因此 ,我在中斷函數(shù)中采集到的數(shù)據(jù)放到全局數(shù)組中.采集完成關(guān)中斷后在用戶模式下的程序中來處理該數(shù)組 ,但是該數(shù)組中的數(shù)據(jù)也不能使用 !全局數(shù)組變量占 1000 個字節(jié), IRQ 堆 棧長度是 256.A:全局變量用 volatile 聲明.第 57 問 :Q:在 AXD 里打開 Debuger I nternals,在 Variable Name 里為什么沒有 P NSEL2,ADD
35、R,ADCR 等寄存器 要在哪里設(shè)置A:有些片內(nèi)外設(shè)寄存器是不能讀出,ARM 微控制器基礎(chǔ)與實戰(zhàn) 上的 P33 頁有說明及處理 方法 (在 Memory窗口寫入相應(yīng)寄存器地址 ).第 58 問 :Q:請問不連 easyArm 板可不可以直接軟件調(diào)試程序 我是指如果想直接調(diào)軟件部分,能不能 在 ads 或 axd里直接調(diào)試 A:這和板子沒關(guān)系啊,你直接選 ARMulate 不就行了 ,注意把等 待 PLL 配置完那條語句屏蔽 就可以啦 !第 59 問 :Q:AXD 里面出現(xiàn) RDI Warning 00159: Could not open specified deviceport 誰能告訴我
36、這個是問題啊我一直搞不懂啊,全部是按照 ARM 微控制器基礎(chǔ)與實戰(zhàn)第 4 章上配的圖做 的啊,但是就是不能仿真啊 .A:請先按照光盤的 easyarm_d rive readme.txt 安裝驅(qū)動程序.15第 60 問 :Q:1.在ARM 微控制器基礎(chǔ)與實戰(zhàn)的 2.6.3 節(jié)有說到浮點數(shù)寄存器(F0-F7.) ,2104 是否具有這些寄存器2.如果 EasyArm 不支持浮點運算 ,而我的程序需要用到浮點運算 ,請問可以實現(xiàn)嗎A:1. 沒有.2.用 C 就可以用浮點運算 .第 61 問 :Q:EASYARM2104 的例子程序怎么都是調(diào)用 C 寫的程序,匯編那個怎么沒用的啊A: 按如下步驟進行
37、處理 :1.在項目管理窗口中刪除原來的所有文件2.在項目管理窗口中增加匯編文件 * .S;3.編譯鏈接 ,調(diào)試 .第 62 問 :Q:請問版主:在 AXD 調(diào)試軟件中,我單步運行到一定時候,我想讓自己編的軟件從復(fù)位處 重新運行,在AXD 軟件中EXECUTE 欄目中有單步,連續(xù),運行到光標(biāo)處等功能,但 無復(fù) 位功能,如果要實現(xiàn)此功能,如何操作 A:我也沒有發(fā)現(xiàn),目前只能用重新裝載的操作實現(xiàn).第 63 問:Q:在 AXD 調(diào)試中,通過從 jtag 接口,連接上 lpc2106,出現(xiàn)如下信息TKSimulator for ADS, V1.2, 2003/08Software Supplied by
38、: ZLGMCUARM7T DMI- S, Little Endian在從 file|load imgage.文件,出現(xiàn)兩種情況 :1 .正常 ,完全能調(diào)試 ;2.出現(xiàn)問題,如下:RDI Warning 00254: UnimplementedRDI message請問,這是錯在哪里 如何解決 謝謝!A:可能是電源 或其他接插件接觸不良引起 .第 64 問:Q:請教幾個問題:1. 移植中底層接口里的 _swi 關(guān)鍵字在 SDT 中能用嗎2.為什么在勘誤文檔中時鐘節(jié)拍服務(wù)子程序里去掉了開中斷及關(guān)中斷的宏3.時鐘節(jié)拍中斷的優(yōu)先級應(yīng)該設(shè)為最高嗎16A:1. 不知,請自己看一看軟件自帶文檔 .2.因為
39、中斷服務(wù)程序中肯定是關(guān)中斷的 .3 . 不必 .第 65 問 :Q:arm 匯編中的中括號是什么意思 比如下面的例子中括號是什么作用呀 PLLONSTARTldr r0,= PLLCONldr r1,=(0 xe8 12)+(0 x4 4)+0 x2)str r1, r0 A: 等效于:IF PLLONSTARTldr r0,= PLLCONIdr r1,= (0 xe8 12) + (0 x4 啟動 AXD.現(xiàn)象:數(shù)碼管能顯示不斷變化的數(shù)字 0-F 但是 AXD 的連接失敗,提示DBEWarning 00041:. 重復(fù)試了幾遍 ,現(xiàn)象相同 .請教原因以及對策 .A:剛才把我機器的 Win2
40、K 系統(tǒng)的用戶屬性從FOwerUser修改為Administrator就沒 問題了 .可能是ADS/AXD 安裝的時候用了 Administrator 權(quán)限,在PowerUser下工作 有問題吧.如果哪位老兄有類似問題 ,不妨試一下這個方法 .第 67 問 :Q:在 I nit.s 中有這樣一段:ResetBL I nitStack ;初始化堆棧BL TargetResetI nit ;目標(biāo)板基本初始化B _m ain ; 跳轉(zhuǎn)到 c 語言入口 誰知道m(xù)ai n ()函數(shù)的具體內(nèi)容假如我不需要調(diào)用庫函數(shù)的話,是否可以改為 Bmain A:看調(diào)試是匯編 代碼里有_main(),組成成分與一些鏈接
41、選項有關(guān).可以.但是全局變 量初始化不了 .17第 68 問 :Q:我在 C 中嵌入這樣一條語句_asmMRS R4,CPSR;STMFD SP!, R4;ORR R4,R4,0 x80;MSR CPSR_cxsf,R4會出新報錯illegal write to sp版主和各位大俠有什么辦法解決阿A: 嵌入?yún)R編不能使用 SP.第 69 問 :Q:請問 ADS 如下的編譯錯誤是什么意思L6221E:Executi on region ER_RO overlays with Execution region ER_ZI A:程序段內(nèi)存分配可能有問題,RO(只讀),ZI(0 初始化)第 70 問 :
42、Q:在 axd 中有沒有運行程序的時間計算器 keil 中就有那樣的東西.A有的,不過不是 時間而是執(zhí)行周期 ,可以換算成時間 .在 debugger internals 中,具體 可以參考幫助文檔第 71 問 :Q:我最初的 init.s 中沒有加入 heap 的分配和_user_initial_stackheap 函數(shù),結(jié)果程序 跳到 SWI 中死循環(huán) .我把他們加入后就好了 .或者不加入他們 ,把 B _main 改為 B main 也可以 .請問何解 另外 ,就算目標(biāo)板會陷入死循環(huán) ,但是用軟件仿真卻可以正常運 行.何解A:堆的位置沒有分配到有效的RAM 中.第 72 問 :Q:在 A
43、RM 匯編語言中,對立即數(shù)的有要求,我記得原來沒有這樣一說了 .現(xiàn)在反而糊涂了,用立即數(shù)時候 ,很小心很忌諱 ,不回象 51 下隨心所欲的使用了 ,有對立即數(shù)熟悉的朋友 站出 來給大家釋疑 .A:如使用非法數(shù)據(jù)可以使用 Ird 送到寄存器的方法.首先在存儲器中定義一個常量,再 ldr 進去,編譯器是這樣弄的 .可以看下面語句反匯 編的區(qū)別 ;int z= 0 x101 ;int z= 0Xff ;18第 73 問 :Q:請教各位:我在 AXD 中單步運行一段程序后,想回到程序的開始重新運行,除了重新加 載,還有其他方法或按鍵A: 你的程序有多大 程序在 FIash 運行點擊 ReIoad Cu
44、rrent Image 也不需要 1 秒吧 或在代碼窗口 Set PC=0第 74 問 :0:在ARM 微控制器基礎(chǔ)與實戰(zhàn)程序清單 6.22 的 376 頁的 OS ntCtxSW_1 中:LDR R4, R6ADD SP,R4,# 68LDR LR,SP,# -8MSRCPSR_c,#(NoInt| SVC32Mode)MOV SP,R4LDMFD SP!,R4,R5LDR R3,=OsEnterSumSTR R4, R3MSR SPSR_cxsf,R5LDMFD SP!, R0-R12, LR PCA請問高手:LDMFD SP, R0-R12, LR, PCA是不是恢復(fù)新任務(wù)工作寄存器和工
45、作模式,LR 寄存器一并得到恢復(fù) ,那么 ADD 指令后面的 LDRLR, SP, #-8 指令是不是可 以去掉 A:兩者恢復(fù)的是兩個不同處理器模式的LR.第 75 問 :Q:既然 option 頁中的 I mage entry Point 填入的是調(diào)試入口地址,那么在實際的程序運行 當(dāng)中它是不會覆蓋代碼中的 ENTRY 入口聲明的,對嗎僅僅是為了調(diào)試的方便.A:Image entry Point 優(yōu)先.其實代碼中的 ENTRY 是為了確保代碼不被優(yōu)化掉 .第 76 問 :Q:我想使用標(biāo)準 C 語言的庫函數(shù),比如 mem set 在 string.h 中有定義,可是我直接包含# incIude
46、 , 但是編譯沒錯誤 ,運行確有錯誤 ,應(yīng)當(dāng)怎么設(shè)置A:請使用最新的工程模板第 77 問 :Q: 軟件中斷是不是必須由 SWI 指令觸發(fā)A:可以直接用你定義成軟中斷的函數(shù)名啊.比如:19_SWI (0 x12 ) void myswi(void); / 聲明函數(shù)_asm / 調(diào)用方式 1swi 0 x12myswi (); / 調(diào)用方式 2第 78 問:Q:ARM 微控制器基礎(chǔ)與實戰(zhàn)程序清單 6.9 的程序是在哪里被調(diào)用的_user_initial_st ackheapLDR r0,= bott om_ of_heapMOV pc,lr20A:_main.千萬別刪喲,否則出大事的.第 79 問
47、:Q:LDR R0, = PI NSEL0 中= 是什么意思 這語句是取地址還是取地址中的內(nèi)容呢A:這是 LDR 偽指令,可用來加載 32 位立即數(shù)或地址,LDR R0,= PNSELO 是將 PI NSEL0 的 地 址加載到R0 中.第 80 問 :Q:我不明白SWIO和SWI 0X123456這兩條指令中的 0 禾口 0X123456 中有何用.有沒有應(yīng)用 SWI 的具體例子讓我看看A:那是特定的中斷入口地址,見 ADS_DeveloperGuide_D.pdf 下的 swi.第 81 問 :Q:SWI 的功能表嗎A:SWI 的功能表由 swi 異常服務(wù)程序決定 .很多時候由編程者自己決
48、定第 82 問 :Q:請問:我在實驗?zāi)脑a進行 ucos 移植時用的是例 1,但是在按照圖 7.17 設(shè)置處 理 器的仿真器模式時enable comms channel view 和 semihost in 項為不可激活狀態(tài) . 為 什么,能否給一點提示A:在一些仿真器上使能了它們會影響swi 異常處理程序.第 83 問 :Q:請問Unimplemented RDI message這個出錯提示是什么意思啊還有,有的時候當(dāng)我用 axd load 個.axf 文件時,常常 loading 的沒完沒了,這是怎 么回事啊A:Unimplemented RDI message:為命令操作失敗,需要
49、重新連接.下載不結(jié)束為出現(xiàn)不正 ?,F(xiàn)象,請重新連接并下載 .如果每次都出現(xiàn)該現(xiàn)象請聯(lián)系我們 的技術(shù)支持 .第 84 問 :Q:各位高手好,我是 ARM 初學(xué)者我在程序調(diào)試中LDRPC,PCR2命令執(zhí)行后 PC 為什么= 0 x0000000 c, 在這條命令執(zhí)行前 PC+R2 地址上的值是 0 x0000000 c 嗎A:要使用軟件仿真.0 x0000000 C 是預(yù)取中止了 .Q:請問:ARM7 在初始化 CPU 堆棧時,寄存器 CPSR 和 CPSR_c 有什么關(guān)系 CPSR_c 是在那 里 定義的A:這是 MSR 指令的語法,_后部分指定 CPSR 的域,請參考ARM 微控制器基礎(chǔ)與實戰(zhàn)
50、 上關(guān)于這條指令的說明 .第 85 問 :Q:軟中斷 SWI 作底層接口的問題.以下函數(shù)為啥要通過軟中斷調(diào)用,可以直接調(diào)用嗎OS_ TASK_SW() ,_OSStartHighTdy(),OS_ ENTER_ CR I TI CAL) ,OS_ EXI T_ CR I T I CA L() ,A: 在用戶模式或 Thumb 狀態(tài)不能直接調(diào)用 .第 86 問 :Q:ARM 的一條指令是 32b it 長, 但有時一個立即數(shù)也是 32bit, 這是如何解釋的A:指令中使用的立即數(shù)需要時 8 位數(shù)移位獲得,并非所有數(shù)都可以.第 87 問 :Q:請教:全局變量的值在復(fù)位(不斷電)后會不會自動清零(用
51、光盤自帶的啟動代碼)A:在 C 語言中一般會會初始化 0 或用戶指定的值,但這不是硬件自動的 .第 88 問 :Q:the sett i ng files for* .mcp is locked!是什么問題A: 文件屬性只讀 .第 89 問 :21Q:請問,關(guān)于 printf()在 ads 中怎么用不了謝謝! A:請用我們我們網(wǎng)站上下載 2104 的工程模板 ,它解決了這個問題 .即使這樣,也不能真正使用 prinf.您還需要自己編寫一些底層函數(shù)才能使用,詳細參 考 ads 自帶的ADS_CompilerGuide_D.pdf.第 90 問 :Q:swi 的功能號是如何來的 它和 LR 寄存器
52、的值是何關(guān) 系 如 ARM 微控制器基礎(chǔ)與實戰(zhàn)程序清單 6.13LDREQ R0,LR,#-4 ;BI CEQ R0,R0,0 xff000000A:LDREQ R0,LR,# -4 ; 用來讀 SWI 的代碼BICEQ R0,R0,0 xff000000 ;是 ARM 方式進入 ,取低 24bit第 91 問 :Q:請問在 Targetlnit()中函數(shù)開始會執(zhí)行 srand(l NT32 U)Targetlnit),它是做什么用的A: ex1 用它來產(chǎn)生隨機數(shù)種子的 .Q:請問:我建立的工程中,所有源文件與 2104 附帶的光盤例子源文件相同,編譯鏈接也一 切正常 , 可就是不能到板子上跑
53、 !提示錯誤是:向量中斷有錯誤 ,無法自由運行 !這是怎么回事 相同的源文件 ,加在你的工程里 ,正常;加到我的工程中就出錯 ! 我創(chuàng)建的是 ARM 可執(zhí)行映象 .A:vector.s 你自己的嗎 如果是要計算向量去的累加和了 .第 92 問:Q:請問:vectors.s 中DCD 0 xb9205 f80 的 0 xb9205f80 在實際運用中需要改動嗎A:不需要更改,除非改動了向量表中的指令代碼.第 93 問 :Q:請問,為什么 queue 數(shù)據(jù)隊列,ARM 微控制器基礎(chǔ)與實戰(zhàn)上給畫成了環(huán)形A:因為頭跟尾的指針指向一個地址,隊列邏輯上是環(huán)狀的.第 94 問 :Q:有沒有人成功的把一個數(shù)據(jù)
54、定義到程序空間里各種方法我都試了,是不是有什么編譯開關(guān)A:使用 con st 修飾,定義變量時帶初始化值,要定義為全局的變量.第 95 問 :Q:ads 里沒有 CODE 關(guān)鍵詞,怎樣使定義的字符串?dāng)?shù)組不占用 RAM 空間22A:const unsigned charstring第 96 問 :Q:在例程中 TI ME_test 中的 TI MEOUT 當(dāng)寫入時提示:Warnning! interrupt vectors data is not correct!Program you downloaded can not run freely!我不知怎樣改設(shè)置,哪位提醒一下A:中斷向量表的校驗
55、和不為 0,用 AXD 看 0 地址的數(shù)據(jù)(32 位方式),自己加一下.注意把 高于 32 位的部分去掉 .第 97 問 :Q:請教各位:我做 TIMEOUT 實驗(2104 板),Make 通過,Debug 時出現(xiàn)了如下錯誤提示: War nn ing! interr uptvect or s data is not corr ect!Program you downloaded can not r un freely!設(shè)置 Link: ARM Linkr0 base: 0 x00000000rw base: 0 x40003000image entry point :0 x00000000
56、 其它的沒變 !而我使用 ISP 完全可以下載而且可以運行 !這可以說是設(shè)置問題 ,但是我實在找不到 !怎么辦A:請看一看配套ARM 微控制器基礎(chǔ)與實戰(zhàn)附錄 1,ISP 軟件可能對它進行了處理,而 JTAG 沒有特殊處理第 98 問 :Q:* (volatile un signed int * )是什么意思例如* (v olatile unsign ed int *)addr 具體是什么意思A:分開來看(volatile unsigned int *)就是定義一個可變的無符號整形指針,前面的那 個 * 就是取起內(nèi)容 .第 99 問 :Q:如何理解 #define VICI RQStatus(*
57、( volatile unsigned long *) OxFFFFFDOO)A宏定義,參考 C 語言的書籍 .(volatile unsigned long *) OxFFFFFOOO 將 OxFFFFFOOO 強行轉(zhuǎn)換為指針,然后 *(指 針) 即可對此地址進行訪問 .第 1OO 問:Q:在異常處理向量表的設(shè)置中,為什么不直接將異常向量的入口地址寫入PC 中呢,為什么非要用什么 DCD 這些偽指令,到底有什么用啊 A 為了保證任何時候其累加和為零,不然改一 次程序就要計算一次 .23第 1O1 問:Q:單步調(diào)試 i2clNT.C 在 ISendStr 中啟動總線后,程序怎么又跑到 vect
58、ors.。中,進行初 始化了呢A:由于 VIC 的限制,程序不能在 0 x18 停下來,否則執(zhí)行非向量中斷.如果沒有設(shè)置,則非 向量中斷為 0,將從 0 地址執(zhí)行.建議:有中斷時不要單步執(zhí)行程序,可以手動暫時關(guān)中斷或設(shè)置斷點代替單步 . (編者注:下載最新的驅(qū)動可以解決這個問題 )第 102 問:Q:請教:如何修改 ADS 的啟動代碼,從_main 到 main,按道理應(yīng)該有一個文件,修改這 個小文件,就可以修改 啟動代碼 .A:main 是 ADS 運行庫,最好不要修改,要是不使用庫就不要用 main()函數(shù),起個別的名 字.直接跳轉(zhuǎn)過去就行了 .詳見:ARM 體系結(jié)構(gòu)與編程P328.第 1
59、03 問 :Q:我在 JTAG 仿真時出現(xiàn)的對話框,提示:War nn ing! interr upt vect or s data is not corr ect!Program you downloaded can not r un freely!A:參見ARM 微控制器基礎(chǔ)與實戰(zhàn)附錄一第一個問題的第二部分,選擇源代碼的啟動代碼文件夾下的 vectors.s,并參照ARM 微控制器基礎(chǔ)與實戰(zhàn)圖 7.11 設(shè)置.第 104 問 : Q: 初始化代碼中分配 堆棧的問題MSR CPSR_c,# 0 xd3 ;進入特定的處理器模式LDR SP,StackSvc ;給當(dāng)前處理器模式的堆棧指針賦值,這
60、只是一個值而已,; 他在接下去的 DCD 語句賦值SvcStackSpace SPACE SVC_ST ACK_LEGT H * 4這個語句開辟一個 SVCSTACK_LEGTH * 4 大小的內(nèi)存,SvcStackSpace 是這塊內(nèi)存的標(biāo) 號,我想應(yīng)該就是內(nèi)存的首地址,這樣應(yīng)該好理解了 .StackSvc DCD Sv cSt a ckSpa ce + (SVC_STACK_LEGTH - 1)* 4 這個語句就是把這個首地址加 上堆棧大小值.A 計算出堆棧指針來,我想這個堆棧是向下生長的,所以 SP 賦值的是堆棧地址 最高的那個 .第 105 問:Q:請問啟動代碼中這句是什么意思24_u ser
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 山東省德州市齊河縣2024-2025學(xué)年八年級上學(xué)期期末生物學(xué)試題(含答案)
- 客戶溝通與反饋記錄
- 小王子遇見世界的觀后感
- 高中化學(xué)實驗設(shè)計與探究:化學(xué)反應(yīng)原理教案
- 《初高中英語語法比較與辨析教案》
- 不動產(chǎn)交易買賣協(xié)議書
- 中學(xué)生歷史事件故事讀后感
- 美容師儀器知識培訓(xùn)課件
- 血液++課件-2024-2025學(xué)年北師大版生物七年級下冊
- 紅色故事鐵道游擊隊的愛國主義教育解讀
- 《當(dāng)代廣播電視概論》(廣播電視發(fā)明與技術(shù)基礎(chǔ))課件
- 核心能力模型庫(-勝任力模型-)
- 高中地理 紐約的發(fā)展 紐約的輻射功能 城市的輻射功能 作業(yè)設(shè)計
- 5.3.2.2函數(shù)的最大(?。┲?課件(共20張PPT)
- TSG-R0005-2022《移動式壓力容器安全技術(shù)監(jiān)察規(guī)程》(2022版)
- 2020 ACLS-PC-SA課前自我測試試題及答案
- 上市公司組織架構(gòu)策略
- 上海交通大學(xué)有機化學(xué)課件第二章烷烴
- DB34∕T 3968-2021 橋梁健康監(jiān)測系統(tǒng)運營維護與管理規(guī)范
- 加氣混凝土砌塊砌筑規(guī)范標(biāo)準[詳]
- 定語從句漢譯英
評論
0/150
提交評論