版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
VR虛擬現(xiàn)實(shí)ARM經(jīng)典問ARM經(jīng)典300問第1章體系結(jié)構(gòu)第1問:Q:請問在初始化CPU堆棧的時(shí)候一開始在執(zhí)行movr0,LR這句指令時(shí)處理器是什么模式A:復(fù)位后的模式,即管理模式.第2問:Q:請教:MOV中的8位圖立即數(shù),是怎么一回事0xF0000001是怎么來的A:是循環(huán)右移,就是一個(gè)0—255之間的數(shù)左移或右移偶數(shù)位的來的,也就是這個(gè)數(shù)除以4一直除,直到在0-255的范圍內(nèi)它是整數(shù)就說明是可以的!A:8位數(shù)(0-255)循環(huán)左移或循環(huán)右移偶數(shù)位得到的,F0000001既是0x1F循環(huán)右移4位,符合規(guī)范,所以是正確的.這樣做是因?yàn)橹噶铋L度的限制,不可能把32位立即數(shù)放在32位的指令中.移位偶數(shù)也是這個(gè)原因.可以看一看ARM體系結(jié)構(gòu)(ADS自帶的英文文檔)的相關(guān)部分.第3問:Q:請教:《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》2.2.1節(jié)關(guān)于第2個(gè)操作數(shù)的描述中有這么一段:#inmed_8r常數(shù)表達(dá)式.該常數(shù)必須對應(yīng)8位位圖,即常熟是由一個(gè)8位的常數(shù)循環(huán)移位偶數(shù)位得到.合法常量:0x3FC,0,0xF0000000,200,0xF0000001.非法常量:0x1FE,511,0xFFFF,0x1010,0xF0000010.常數(shù)表達(dá)式應(yīng)用舉例:......LDRR0,[R1],#-4;讀取R1地址上的存儲器單元內(nèi)容,且R1=R1-4針對這一段,我的疑問:1.即常數(shù)是由一個(gè)8位的常數(shù)循環(huán)移位偶數(shù)位得到,這句話如何理解2.該常數(shù)必須對應(yīng)8位位圖,既然是8位位圖,那么取值為0-255,怎么0x3FC這種超出255的數(shù)是合法常量呢3.所舉例子中,合法常量和非法常量是怎么區(qū)分的如0x3FC合法,而0x1FE卻非法
0xF0000000,0xF0000001都合法,而0xF0000010又變成了非法4.對于匯編語句LDRR0,[R1],#-4,是先將R1的值減4結(jié)果存入R1,然后讀取R1所指單元的值到R0,還是先讀取R1到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.0xF0000010底數(shù)是9位,不能表示.4.LDRR0,[R1],#-4是后索引,即先讀,再減.可以看一看ARM體系結(jié)構(gòu)對相關(guān)尋址方式的說明.3第4問:Q:在程序移植的過程中,什么代碼段處于什么樣的模式,這可真是一個(gè)困擾人的大難題,有沒有一種標(biāo)志或辦法能夠識別"代碼段處于什么樣的模式"A:讀取CPSR,任何時(shí)候都是可以讀.第5問:Q:為什么保護(hù)現(xiàn)場時(shí),總是保護(hù)R0-R3,R12,為什么不保護(hù)R4-R11A:請看一看"ARM-thumb過程調(diào)用標(biāo)準(zhǔn)"這個(gè)文檔.第6問:Q:請問movR1,#0x00003DD0錯(cuò)誤:outoftherangeofoperation是怎么回事情我就是想IODIR=0x00003dd0,匯編就是LDRR0,=IODIRMOVR1,#0x00003dd0STRR1,[R0]編譯時(shí)候說是超出操作范圍A:使用ldr,mov的操作數(shù)為8位位圖數(shù).第7問:Q:"在ARM7TDMI(-S)處理器內(nèi)部有37個(gè)用戶可見的寄存器:"問題:"用戶可見"應(yīng)該怎樣理解這37個(gè)寄存器是否是37個(gè)不同的物理寄存器,例如R8與R8_fiq應(yīng)該是兩個(gè)不同的物理寄存器吧A:用戶可見是指用戶可以通過程序操作的.R8與R8_fiq是兩個(gè)不同的寄存器.
第8問:Q:USR模式,SVC模式,IRQ模式分別有哪些限制A:對于外設(shè)操作限制與芯片設(shè)計(jì)有關(guān).USR模式不能設(shè)置CPSR寄存器.用戶模式下無SPSR寄存器,代碼可以為ARM,Thumb.第9問:Q:請問"在初始化堆棧時(shí)就決定了工作模式"是什么意思如何決定工作模式的A:設(shè)置CPSR寄存器.第10問:Q:請問:ARM匯編程序設(shè)計(jì)中所謂的"文字池"作何理解A:可以理解為常量數(shù)組,文字池中保存的是常量,這些常量可以是正常的常量,也可以是地址.4第11問:Q:為什么在中斷向量表中不直接LDRPC,"異常地址".而是使用一個(gè)標(biāo)號,然有再在后面使用DCD定義這個(gè)標(biāo)號A:因?yàn)長DR指令只能跳到當(dāng)前PC4kB范圍內(nèi),而B指令能跳轉(zhuǎn)到32MB范圍,而現(xiàn)在這樣在LDRPC,"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偽指令通過設(shè)置指令緩沖池才能實(shí)現(xiàn)全范圍跳轉(zhuǎn),而LDR指令則只能實(shí)現(xiàn)4KB范圍跳轉(zhuǎn).第12問:Q:ARM7TDMI-S和ARM7TDMI有何區(qū)別A:ARM7TDMI-S是ARM7TDMI的可綜合(synthesizable)版本(軟核).對應(yīng)用工程師來說,除非芯片生產(chǎn)廠商對ARM7TDMI-S進(jìn)行了裁減,否則ARM7TDMI-S與ARM7TDMI沒有太大的區(qū)別,其編程模型與ARM7TDMI一致.第13問:Q:DCD偽指令的疑惑."StackUsrDCDUsrStackSpace+(USR_STACK_LEGTH-1)*4"這句話是什么意思DCD后面的程序標(biāo)號或數(shù)字表達(dá)式是何意A:它的內(nèi)容是初始化遞減堆棧的最高地址,看《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》2.3.2節(jié).5第2章編譯器與語言第14問:Q:00254:UnimplementedRDImessage是什么錯(cuò)誤提示我的設(shè)置連接都正常,是不是芯片燒了A:是JTAG的問題.可以先使用ISP操作試試就知道了,如果能ISP,說明LPC2104沒有損壞,還能正常運(yùn)行程序.第15問:Q:請教:我在調(diào)試程序的時(shí)候在AXD中出現(xiàn)這樣的提示信息:RDIWarning00159:couldnotopenspecifieddeviceport.我是根據(jù)配套教程的步驟設(shè)置的.A:請按照光盤\easyarm_drive\readme.txt安裝驅(qū)動程序.第16問:Q:我用實(shí)驗(yàn)程序運(yùn)行經(jīng)常出現(xiàn)下列信息!程序不能下載到目標(biāo)板.Warnning!interruptvectorsdataisnotcorrect!Programyoudownloadedcannotrunfreely!A:1.仿真器配置一定要正確,即"EasyARMConfiguration"設(shè)置窗口中的"FLASH"項(xiàng)中選擇"EraseFlashwhenneed";2.向量表累加和要為0;3.可以先在RAM調(diào)試一個(gè)程序(運(yùn)行),然后STOP,再使用File->LoadImage...加載要下載到FLASH的調(diào)試文件.第17問:Q:在ADS中是否可以進(jìn)行軟件調(diào)試基于UCOS-II的程序A:ADS軟件調(diào)試只能調(diào)試ARM的內(nèi)核,不能調(diào)試外設(shè).但是取消PLL鎖定檢測后,可以調(diào)試任務(wù)切換,最終到空閑任務(wù)上.開始移植時(shí)軟件仿真是最好的工具.第18問:Q:ARMulate軟件是干什么的2104不是用EasyJTAG.dll來仿真嗎A:軟件仿真只能仿真ARM核.第19問:Q:有關(guān)LPC2106.INC的問題.我無法在project引用lpc2106.inc文件,只能引用文件,這是什么原因且當(dāng)我的主程序用匯編編寫時(shí),不能引用lpc2106.h,用lpc2106.inc則無法加入project,請問匯編器應(yīng)如何設(shè)置A:不用加2106.inc只要該文件在你的工程文件夾中,就可以直接在匯編程序的開始處加6"include2106.inc".注意:該文件是匯編文件定義的頭文件,定義內(nèi)部寄存器.第20問:Q:入口點(diǎn)是什么意思我在使用LPC2106上移植UCOS-II,每次MAKE時(shí)總是提示我Imagedoesnothaveanentrypoint,可是我是把光盤的vetctors.s復(fù)制過來的,而且仔細(xì)看了看,已經(jīng)聲明了ENTERY,這是怎么回事A:需要在ADS中設(shè)置入口.第21問:Q:請教:如何定義不被初始化變量A:讓編譯器不知道有這個(gè)內(nèi)存地址即可.A:如用分散加載文件分配RAM故意預(yù)留一部分RAM不分配,用它來存您不需要初始化的東西.或者不調(diào)用編譯器提供的啟動代碼,不過這樣可能編程會麻煩一些.第22問:Q:我直接通過JTAG口下載EasyArm板帶的Ext1_test程序到ARM中,出現(xiàn)中斷向量的告警:interruptvectorisnotcorrectarmisnotrunningfreely.果然復(fù)位后芯片不能運(yùn)行.但是我用串口下載后芯片能正常工作,中斷也行的.并且我用JTAG仿真的話,芯片能正常工作,中斷也行的,唯獨(dú)JTAG口下載不行.不知道是什么原因A:仿真器配置中要設(shè)置EraseFlashwhenneed.也可以這樣試試:1.可以先打開一個(gè)工程在RAM中調(diào)試運(yùn)行;2.stop程序;3.使用File->LoadImage…重新加載Ext1_test生成的*.axf文件.Q:仿真器配置中我是設(shè)置了EraseFlashwhenneed,但照你說的話,那不是在RAM下調(diào)試嗎在RAM下調(diào)試我是可以的,但是下載后出現(xiàn)interruptvectordataisnotcorrect.
我又看了幾篇文章,是不是跟中斷向量表的累加和不為零有關(guān)系啊A:是的,是向量表的累加和不為零.因?yàn)槿绻肐SP下載能運(yùn)行,說明向量表的累加和已為零,而用JTAG下載不能運(yùn)行的情況可能是沒有正常下載代碼.先在RAM中調(diào)試,目的是為了后面正確下載程序到FLASH.第23問:Q:用Scatter怎樣將某個(gè)函數(shù)或文件定位在Flash的某個(gè)位置A:參考http:///download/downs.aspID=10097第24問:Q:我在仿真時(shí)遇到這樣的提示:Error,Flashisprotectedbyuserconfigation!怎么寫到flash里面呢A:看配套《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》附錄一.第25問:Q:我在移植實(shí)驗(yàn)中想到了兩個(gè)問題,如下:1.Debug和Release以及DebugRel有什么不同,為什么在作2104移植實(shí)驗(yàn)時(shí),要用Release2.在Release中為什么要將RWBase設(shè)置為0x40000040我將其設(shè)置為0x40003000,為什么不能工作A:都只是一個(gè)問題,內(nèi)存空間的使用,因?yàn)榕躉S要比較大的內(nèi)存空間,所以要騰出點(diǎn)地方.第26問:Q:請問沒有MMU的ARM芯片是否支持使用malloc()函數(shù)動態(tài)分配內(nèi)存A:是否支持malloc()函數(shù)與芯片沒有多大關(guān)系,主要與編譯器有關(guān).Q:再問:如果沒有操作系統(tǒng)支持呢A:也支持.第27問:Q:在I2C實(shí)驗(yàn)程序中,我想查看數(shù)據(jù)緩沖區(qū)DataBuf的值,怎么查看A:watch窗口或鼠標(biāo)停留在要查看的變量名上.Q:我查詢的是寫入DataBuf緩沖區(qū)的值,鼠標(biāo)在上面根本就不會出現(xiàn)他的值,即使在watch
中加入,結(jié)果也是"namenotfound".A:變量被優(yōu)化,調(diào)試時(shí)可以把該變量定義為全局變量查看.第28問:Q:仿真軟件和2104開發(fā)板連接不上DBEWarning00041:!AnunspecifiedDebugToolboxcallfailed電源和開發(fā)板都連好,錯(cuò)誤和沒接開發(fā)板一樣,驅(qū)動也安裝了,安裝時(shí)按確定鍵時(shí),軟件很長時(shí)間才有如上反應(yīng),請幫忙A:1.并口是否正常2.在其它操作系統(tǒng)(如98)下或其它臺式PC下試試.第29問:Q:如何生成32位hex文件8我在ReleaseSetting->ARMfromELF->OutputFormat中設(shè)置為Intel32bitHEX,可是好像沒有生成hex文件A:試試這種方法:Target-->TargetSetting-->PostLink中選擇"ARMfromELF"加上你上面設(shè)的應(yīng)該不成問題.第30問:Q:請問關(guān)于settings中r0baserwbase的意思A:ro:readonly,rw:readandwrite.第31問:Q:編譯成功后的信息第一行,code,R0data,RWdata,ZIdata,debug分別代表什么A:R0只讀段,即程序代碼空間;RW可讀/寫段,即數(shù)據(jù)變量空間;ZI清零變量段,即需要清零初始化的數(shù)據(jù)變量空間.第32問:Q:如何在ADS里面看任務(wù)執(zhí)行的一些情況比如堆棧.A:多任務(wù)環(huán)境下的堆棧,內(nèi)存等信息需要調(diào)試軟件的支持才可以實(shí)現(xiàn).
ucos下有一個(gè)統(tǒng)計(jì)功能的模塊可以間接實(shí)現(xiàn)部分功能.第33問:Q:請問向flash燒數(shù)據(jù)時(shí)出現(xiàn):exceedsflashlimitation請予賜教!A:要寫入的flash地址超過了范圍.如果不是代碼太大的問題,可以檢查scf文件是否正確.第34問:Q:在LPC2214之類的芯片中如何實(shí)現(xiàn)數(shù)組的絕對地址定位,比如51的_at_的用法.A:*((char*)0x40000300)類似訪問Q:謝謝,但這樣做就無須定義數(shù)組變量,訪問也不便,還有高招嗎A:可以使用分散加載.第35問:Q:請問ADS編譯錯(cuò)誤"L6221E:ExecutionregionER_ROoverlayswithExecutionregionER_ZI"該如何解決A:請用我們網(wǎng)站上的工程模板試一試,最大的可能是因?yàn)槟愕腞ELEASE或者DEBUG選項(xiàng)里面沒有正確設(shè)置,按照參考《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》上面的設(shè)置,是不會有這個(gè)問題的.9第36問:Q:請教一下:將程序?qū)懭雈lash,再用從JTAG方式調(diào)試寫入之后再復(fù)位程序沒什么反映.看了很多以前的帖子,說memmap寄存器要為1,我用的是一個(gè)很簡單的控制led的例子,改動了參數(shù)之后寫入flash的.在這個(gè)程序的vectors中找不到關(guān)于memmap寄存器操作的部分啊,這是怎么回事,該怎么辦呢A:《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》上附錄有"常見問題",列舉了幾點(diǎn)程序?qū)懙紽LASH不能運(yùn)行的原因.memmap操作可以在target.c中的TargetResetInit()函數(shù)內(nèi)添加.第37問:Q:HEX文件.EASY2100配套《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》上講:把項(xiàng)目編譯成HEX文件,我不會呀,咋辦A:Target-〉targetsettings設(shè)置Post-linker并且設(shè)置Linker-〉fromELF.Q:再問:我用的是光盤里的例子,打開工程項(xiàng)目里是DebugInARM.DebugInFlash.RelInFlash.不是《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》上的DebugRel呀,我都照《ARM微控制
器基礎(chǔ)與實(shí)戰(zhàn)》上設(shè)置的,可用ISP下載,提示無法找到HEX文件.A:光盤上的例子是用專用工程模板建立,已經(jīng)設(shè)置好參數(shù),與默認(rèn)模板不同.第38問:Q:EasyARM2100開發(fā)板如何通過JTAG接口下載到Flash我在用EasyARM2100開發(fā)板時(shí)JTAG接口不能進(jìn)行Flash中的調(diào)試(DebugInFlash),但是可以在RAM中調(diào)試(DebugInRAM),且通過ISP編程可以寫入Flash.通過JTAG接口進(jìn)行DebugInFlash調(diào)試時(shí),總是出現(xiàn)如下提示:FlashSector0writefailed!Warnninginterruptvectorsdataisnotcorrect!Programyoudownloadedcannotrunfreely!請問是什么原因我該如何辦A:仿真器設(shè)置選項(xiàng)有一個(gè)允許擦除FLASH的選項(xiàng),選擇它.第39問:Q:我發(fā)現(xiàn)程序在RAM調(diào)試時(shí)(RO=0X40000000)OK,但是JTAG下載到FLASH(RO=0X00000000),顯示如下:Thesessionfile'c:\DocumentsandSettings\jan\default-1-2-0-0.ses'couldnotbeloaded.A:這是ADS自身的問題,請不要通過IDE運(yùn)行AXD,而是通過開始菜單運(yùn)行,然后Load調(diào)試文件調(diào)試.第40問:Q:我有幾個(gè)問題想問問大家.10調(diào)試主機(jī)負(fù)責(zé)對ARM源程序進(jìn)行編譯鏈接,最好用什么樣的高級語言對ARM源程序進(jìn)行編譯鏈接使用調(diào)試程序(如AXD)進(jìn)行JTAG調(diào)試,AXD是什么調(diào)試程序,是否是類似什么軟件之類的到哪能下載AXD的調(diào)試程序呢怎么樣進(jìn)行AXD程序進(jìn)行JTAG調(diào)試如何通過JTAG仿真器發(fā)送到目標(biāo)機(jī)上呢對于單片機(jī)的調(diào)試,都用到了什么軟件都個(gè)有什么作用呢A:可以使用ADS1.2,KeilC也支持.AXD是ADS的一個(gè)組件.您可以在本公司網(wǎng)站下載EasyARM2100開發(fā)套件快速入門看一看.第41問:Q:EasyARM2100AXD調(diào)試時(shí)出錯(cuò),故障現(xiàn)象:按照光盤上的方法設(shè)置好ADS1.2后打開光盤上的expamples\gpio\c\LedDisp的工程文件(從光盤上拷貝到硬盤,已去處只讀屬性).編譯通過后,按Debug按鍵運(yùn)行調(diào)試,進(jìn)入AXD.按Go按鍵,EasyARM沒有反應(yīng).再按Stop按鍵.AXD彈出兩個(gè)確認(rèn)框窗口:"Nodisassemblycouldbereadattherequestedaddress".如果進(jìn)入AXD直接按Step按鍵,也是會彈出同樣的兩個(gè)確認(rèn)框.軟件是光盤上的,沒有經(jīng)過任何改動.光盤上的程序試過4,5個(gè)都是這種情況.AXD的設(shè)置是按照光盤上的說明設(shè)置的.EasyARM上的JP8是斷開的.ADS在出現(xiàn)這種問題后重新安裝過,故障依舊.出現(xiàn)這個(gè)問題前,可以調(diào)試.只是單步的時(shí)候感覺比較慢.差不多1-2秒鐘才能單步一次.A:原因找到了,是芯片被加密了,無法寫入新的程序,用FLASHISP清除后解決.加密后JTAG完全不能控制芯片,否則可能被解密.第42問:Q:我板上的lpc2214開始可以在線編程,只搞了兩三次可以把文件寫進(jìn)去.但我發(fā)現(xiàn)P0.14未置低電平時(shí)也進(jìn)入ISP模式,燒入的文件原來可以ISP下載到2014開發(fā)板中運(yùn)行的.最后只能讀芯片的一些ID,載文件都不能進(jìn)行.以下是對整片ERASE時(shí),對串口的捕獲,命令返回是19.SynchronizedSynchronizedOK11059OKU231300P014
0E0141119configuretar...->ARMUL,只能仿真ARM核外設(shè)不能仿真.第48問:Q:為什么盤中的工程會出錯(cuò)啊A:文件的只讀屬性去掉了嗎第49問:Q:您在2104的《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》中提到ucos與應(yīng)用代碼分開編譯,在分開編譯調(diào)試成功之后,最后要將代碼統(tǒng)一固化到芯片中.在最后一步需要注意什么統(tǒng)一編譯時(shí)感覺要改動很多東西,有沒有什么最簡單的辦法能否詳細(xì)介紹一下方法多謝!A:使用我們的工程模板,可在本公司網(wǎng)站下載.其實(shí)不分開編譯也可調(diào)試.http:///tools/kaifaban/EasyARM2104.asp的EasyARM2104開發(fā)套件快速入門和LPC210...第50問:Q:請問,我的2104板子,通過EasyJTAG仿真時(shí),在AXD上沒有文件,而且出現(xiàn)這樣"Error,Flashisprotectedbyuserconfigation!"的提示,這是怎么回事啊在AXD應(yīng)該打開什么類型的文件啊謝謝啦!!!!A:在仿真器的配置窗口設(shè)置仿真器允許擦除FALSH.AXD->Options->configuretarget->configure->erase……13第51問:Q:關(guān)于arm匯編語言跳轉(zhuǎn)指令的特殊用法.有如下兩條跳轉(zhuǎn)指令:beqlablefbeqlableb其中l(wèi)able為某段程序的標(biāo)號,beqlablef表示向前跳轉(zhuǎn)到與當(dāng)前指令最接近的標(biāo)號lable處執(zhí)行,而beqlableb表示向后跳轉(zhuǎn)到與當(dāng)前指令最接近的標(biāo)號lable處執(zhí)行.在arm匯編中有定義這樣的用法嗎A:沒有.第52問:Q:我將一段程序從flash從復(fù)制到了RAM中,但是因?yàn)榛旌暇幊讨胁荒苤苯酉騊C寄存器中賦值來實(shí)行跳轉(zhuǎn),這樣我該如何跳轉(zhuǎn)到這個(gè)RAM中的地址呢A:用函數(shù)指針.可參考IAP例子.第53問:Q:我想詳細(xì)的了解一下ADS開發(fā)工具中的stack.s,heap.s和startup.s中代碼的含義,各位高手推薦本書或給解釋一下A:開發(fā)套件用戶指南的第3.1.3節(jié)有說明.stack.s定義了系統(tǒng)模式堆棧的起始地址.heap.s為初始化庫函數(shù)的堆,是按ADS的編譯器要求編寫的.startup.s向量表及初始化代碼,是根據(jù)CPU來編寫的.第54問:Q:我不知道所選擇的C文件到底是用ARM還是THUMB編譯的,請大俠指點(diǎn)!A:看配套《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》7.1,7.2,7.3節(jié).第55問:Q:我重新建立了一個(gè)工程,沒有用模板,TEST.C程序在編譯的時(shí)候提示OS_EVENT沒有申明,但是我看了代碼,TEST.C中包含了CONFIG_EX.H,而congif_ex.h中又包含了include_ex.h,include_ex.h,這兩個(gè)頭文件又包含了ucos_ii.h,而OS_EVENT是在ucos_ii.h中申明的,不知道為什么會出現(xiàn)這種錯(cuò)誤,能不能給我一個(gè)比較合理的目錄結(jié)構(gòu)A:請參考我們光盤的目錄結(jié)構(gòu).最好使用我們的工程模板.第56問:Q:請問,我現(xiàn)在做2114的產(chǎn)品開發(fā).出現(xiàn)以下問題,特向您請教!問題:我們開發(fā)的產(chǎn)品要采樣,采用周期固定.于是我們采用timer0進(jìn)行時(shí)鐘觸發(fā),利用觸發(fā)中斷程序每隔10毫秒采樣一次并顯示波形.這都能很好的進(jìn)行.但是在中斷程序里面對幾個(gè)全局變量賦值,跳出中斷后卻不能使用該全局變量.很是頭疼!請賜教!!14框架如下:uint8a;//全局變量void__irqfuntimer0(){...a=0;//在中斷函數(shù)里面對全局變量賦值...}voidfun1(){uint8i;i=0;.......i=a;//出錯(cuò)位置,在調(diào)試過程中運(yùn)行到當(dāng)前位置,鼠標(biāo)移動到變量a上//顯示數(shù)值是0,但是不能傳給i,i的值不會隨該命令改變.......}因此,我在中斷函數(shù)中采集到的數(shù)據(jù)放到全局?jǐn)?shù)組中.采集完成關(guān)中斷后在用戶模式下的程序中來處理該數(shù)組,但是該數(shù)組中的數(shù)據(jù)也不能使用!全局?jǐn)?shù)組變量占1000個(gè)字節(jié),IRQ堆棧長度是256.A:全局變量用volatile聲明.第57問:Q:在AXD里打開DebugerInternals,在VariableName里為什么沒有PINSEL2,ADDR,ADCR等寄存器要在哪里設(shè)置A:有些片內(nèi)外設(shè)寄存器是不能讀出,《ARM微控制器基礎(chǔ)與實(shí)戰(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)"RDIWarning00159:Couldnotopenspecifieddeviceport"誰能告訴我這個(gè)是問題啊我一直搞不懂啊,全部是按照《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》第4
章上配的圖做的啊,但是就是不能仿真啊.A:請先按照光盤的easyarm_drive\readme.txt安裝驅(qū)動程序.15第60問:Q:1.在《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》的2.6.3節(jié)有說到"浮點(diǎn)數(shù)寄存器(F0-F7...)",2104是否具有這些寄存器2.如果EasyArm不支持浮點(diǎn)運(yùn)算,而我的程序需要用到浮點(diǎn)運(yùn)算,請問可以實(shí)現(xiàn)嗎A:1.沒有.2.用C就可以用浮點(diǎn)運(yùn)算.第61問:Q:EASYARM2104的例子程序怎么都是調(diào)用C寫的程序,匯編那個(gè)怎么沒用的啊A:按如下步驟進(jìn)行處理:1.在項(xiàng)目管理窗口中刪除原來的所有文件;2.在項(xiàng)目管理窗口中增加匯編文件*.S;3.編譯鏈接,調(diào)試.第62問:Q:請問版主:在AXD調(diào)試軟件中,我單步運(yùn)行到一定時(shí)候,我想讓自己編的軟件從復(fù)位處重新運(yùn)行,在AXD軟件中,EXECUTE欄目中有單步,連續(xù),運(yùn)行到光標(biāo)處等功能,但無復(fù)位功能,如果要實(shí)現(xiàn)此功能,如何操作A:我也沒有發(fā)現(xiàn),目前只能用重新裝載的操作實(shí)現(xiàn).第63問:Q:在AXD調(diào)試中,通過從jtag接口,連接上lpc2106,出現(xiàn)如下信息:TKSimulatorforADS,V1.2,2003/08SoftwareSuppliedby:ZLGMCUARM7TDMI-S,LittleEndian在從file|loadimgage...文件,出現(xiàn)兩種情況:1.正常,完全能調(diào)試;2.出現(xiàn)問題,如下:RDIWarning00254:UnimplementedRDImessage請問,這是錯(cuò)在哪里如何解決謝謝!A:可能是電源或其他接插件接觸不良引起.第64問:Q:請教幾個(gè)問題:1.移植中底層接口里的__swi關(guān)鍵字在SDT中能用嗎2.為什么在勘誤文檔中時(shí)鐘節(jié)拍服務(wù)子程序里去掉了開中斷及關(guān)中斷的宏3.時(shí)鐘節(jié)拍中斷的優(yōu)先級應(yīng)該設(shè)為最高嗎16A:1.不知,請自己看一看軟件自帶文檔.2.因?yàn)橹袛喾?wù)程序中肯定是關(guān)中斷的.3.不必.第65問:Q:arm匯編中的中括號是什么意思比如下面的例子中括號是什么作用呀[PLLONSTARTldrr0,=PLLCONldrr1,=((0xe8<<12)+(0x4<<4)+0x2)strr1,[r0]]A:等效于:IFPLLONSTARTldrr0,=PLLCONldrr1,=((0xe8<<12)+(0x4<上電->啟動AXD.現(xiàn)象:數(shù)碼管能顯示不斷變化的數(shù)字0--F,但是AXD的連接失敗,提示"DBEWarning00041:....".重復(fù)試了幾遍,現(xiàn)象相同.請教原因以及對策.A:剛才把我機(jī)器的Win2K系統(tǒng)的用戶屬性從"PowerUser"修改為"Administrator"就沒問題了.可能是ADS/AXD安裝的時(shí)候用了Administrator權(quán)限,在"PowerUser"下工作有問題吧.如果哪位老兄有類似問題,不妨試一下這個(gè)方法.第67問:Q:在Init.s中有這樣一段:ResetBLInitStack;初始化堆棧BLTargetResetInit;目標(biāo)板基本初始化B__main;跳轉(zhuǎn)到c語言入口誰知道__main()函數(shù)的具體內(nèi)容假如我不需要調(diào)用庫函數(shù)的話,是否可以改為BmainA:看調(diào)試是匯編代碼里有__main(),組成成分與一些鏈接選項(xiàng)有關(guān).可以.但是全局變量初始化不了.17第68問:Q:我在C中嵌入這樣一條語句__asm{MRSR4,CPSR;STMFDSP!,{R4};ORRR4,R4,0x80;MSRCPSR_cxsf,R4}會出新報(bào)錯(cuò)"illegalwritetosp"版主和各位大俠有什么辦法解決阿A:嵌入?yún)R編不能使用SP.第69問:Q:請問ADS如下的編譯錯(cuò)誤是什么意思L6221E:ExecutionregionER_ROoverlayswithExecutionregionER_ZIA:程序段內(nèi)存分配可能有問題,RO(只讀),ZI(0初始化)第70問:Q:在axd中有沒有運(yùn)行程序的時(shí)間計(jì)算器keil中就有那樣的東西.A:有的,不過不是時(shí)間而是執(zhí)行周期,可以換算成時(shí)間.在debuggerinternals中,具體可以參考幫助文檔.第71問:Q:我最初的init.s中沒有加入heap的分配和__user_initial_stackheap函數(shù),結(jié)果程序
跳到SWI中死循環(huán).我把他們加入后就好了.或者不加入他們,把B__main改為Bmain也可以.請問何解另外,就算目標(biāo)板會陷入死循環(huán),但是用軟件仿真卻可以正常運(yùn)行.何解A:堆的位置沒有分配到有效的RAM中.第72問:Q:在ARM匯編語言中,對立即數(shù)的有要求,我記得原來沒有這樣一說了.現(xiàn)在反而糊涂了,用立即數(shù)時(shí)候,很小心很忌諱,不回象51下隨心所欲的使用了,有對立即數(shù)熟悉的朋友站出來給大家釋疑.A:如使用"非法數(shù)據(jù)可以使用lrd送到寄存器"的方法.首先在存儲器中定義一個(gè)常量,再ldr進(jìn)去,編譯器是這樣弄的.可以看下面語句反匯編的區(qū)別;intz=0x101;intz=0Xff;18第73問:Q:請教各位:我在AXD中單步運(yùn)行一段程序后,想回到程序的開始重新運(yùn)行,除了重新加載,還有其他方法或按鍵A:你的程序有多大程序在Flash運(yùn)行點(diǎn)擊ReloadCurrentImage也不需要1秒吧~或在代碼窗口SetPC=0第74問:Q:在《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》程序清單6.22的376頁的OSIntCtxSW_1中:LDRR4,[R6]ADDSP,R4,#68LDRLR,[SP,#-8]MSRCPSR_c,#(NoInt|SVC32Mode)MOVSP,R4LDMFDSP!,{R4,R5}LDRR3,=OsEnterSumSTRR4,[R3]MSRSPSR_cxsf,R5LDMFDSP!,{R0-R12,LR,PC}^請問高手:LDMFDSP!,{R0-R12,LR,PC}^是不是恢復(fù)新任務(wù)工作寄存器和工作模式,LR寄存器一并得到恢復(fù),那么ADD指令后面的LDRLR,[SP,#-8]指令是不是可以去掉A:兩者恢復(fù)的是兩個(gè)不同處理器模式的LR.第75問:Q:既然option頁中的ImageentryPoint填入的是調(diào)試入口地址,那么在實(shí)際的程序運(yùn)行當(dāng)中它是不會覆蓋代碼中的ENTRY入口聲明的,對嗎僅僅是為了調(diào)試的方便.A:ImageentryPoint優(yōu)先.其實(shí)代碼中的ENTRY是為了確保代碼不被優(yōu)化掉.第76問:Q:我想使用標(biāo)準(zhǔn)C語言的庫函數(shù),比如memset在string.h中有定義,可是我直接包含#include,但是編譯沒錯(cuò)誤,運(yùn)行確有錯(cuò)誤,應(yīng)當(dāng)怎么設(shè)置A:請使用最新的工程模板第77問:Q:軟件中斷是不是必須由SWI指令觸發(fā)A:可以直接用你定義成軟中斷的函數(shù)名啊.比如:19__SWI(0x12)voidmyswi(void);//聲明函數(shù)__asm//調(diào)用方式1{swi0x12}myswi();//調(diào)用方式2第78問:Q:《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》程序清單6.9的程序是在哪里被調(diào)用的_user_initial_stackheapLDRr0,=bottom_of_heapMOVpc,lrA:__main.千萬別刪喲,否則出大事的.
第79問:Q:"LDRR0,=PINSEL0"中"="是什么意思這語句是取地址還是取地址中的內(nèi)容呢A:這是LDR偽指令,可用來加載32位立即數(shù)或地址,LDRR0,=PINSEL0是將PINSEL0的地址加載到R0中.第80問:Q:我不明白"SWI0"和"SWI0X123456"這兩條指令中的0和0X123456中有何用.有沒有應(yīng)用SWI的具體例子讓我看看A:那是特定的中斷入口地址,見ADS_DeveloperGuide_D.pdf下的swi.第81問:Q:SWI的功能表嗎A:SWI的功能表由swi異常服務(wù)程序決定.很多時(shí)候由編程者自己決定.第82問:Q:請問:我在實(shí)驗(yàn)?zāi)脑a進(jìn)行ucos移植時(shí)用的是例1,但是在按照圖7.17設(shè)置處理器的仿真器模式時(shí)enablemschannelview和semihostin項(xiàng)為不可激活狀態(tài).為什么,能否給一點(diǎn)提示A:在一些仿真器上使能了它們會影響swi異常處理程序.第83問:Q:請問"UnimplementedRDImessage"這個(gè)出錯(cuò)提示是什么意思啊20還有,有的時(shí)候當(dāng)我用axdload一個(gè).axf文件時(shí),常常loading的沒完沒了,這是怎么回事啊A:UnimplementedRDImessage:為命令操作失敗,需要重新連接.下載不結(jié)束為出現(xiàn)不正?,F(xiàn)象,請重新連接并下載.如果每次都出現(xiàn)該現(xiàn)象請聯(lián)系我們的技術(shù)支持.第84問:Q:各位高手好,我是ARM初學(xué)者我在程序調(diào)試中"LDRPC,[PC,R2]"命令執(zhí)行后PC為什么=0x0000000c,在這條命令執(zhí)行前PC+R2地址上的值是0x0000000c嗎A:要使用軟件仿真.0x0000000C是預(yù)取中止了.Q:請問:ARM7在初始化CPU堆棧時(shí),寄存器CPSR和CPSR_c有什么關(guān)系CPSR_c是在那里定義的A:這是MSR指令的語法,"_"后部分指定CPSR的域,請參考《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》上關(guān)于這條指令的說明.第85問:Q:軟中斷SWI作底層接口的問題.以下函數(shù)為啥要通過軟中斷調(diào)用,可以直接調(diào)用嗎OS_TASK_SW(),_OSStartHighTdy(),OS_ENTER_CRITICAL),OS_EXIT_CRITICAL(),A:在用戶模式或Thumb狀態(tài)不能直接調(diào)用.第86問:Q:ARM的一條指令是32bit長,但有時(shí)一個(gè)立即數(shù)也是32bit,這是如何解釋的A:指令中使用的立即數(shù)需要時(shí)8位數(shù)移位獲得,并非所有數(shù)都可以.第87問:Q:請教:全局變量的值在復(fù)位(不斷電)后會不會自動清零(用光盤自帶的啟動代碼)A:在C語言中一般會會初始化0或用戶指定的值,但這不是硬件自動的.第88問:Q:thesettingfilesfor*.mcpislocked!是什么問題A:文件屬性只讀.第89問:21Q:請問,關(guān)于printf()在ads中怎么用不了謝謝!A:請用我們我們網(wǎng)站上下載2104的工程模板,它解決了這個(gè)問題.即使這樣,也不能真正使用prinf.您還需要自己編寫一些底層函數(shù)才能使用,詳細(xì)參考ads自帶的ADS_pilerGuide_D.pdf.第90問:Q:swi的功能號是如何來的它和LR寄存器的值是何關(guān)系如《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》程序清單6.13LDREQR0,[LR,#-4];BICEQR0,R0,0xff000000A:LDREQR0,[LR,#-4];用來讀SWI的代碼BICEQR0,R0,0xff000000;是ARM方式進(jìn)入,取低24bit
第91問:Q:請問在TargetInit()中函數(shù)開始會執(zhí)行srand((INT32U)TargetInit),它是做什么用的A:ex1用它來產(chǎn)生隨機(jī)數(shù)種子的.Q:請問:我建立的工程中,所有源文件與2104附帶的光盤例子源文件相同,編譯鏈接也一切正常,可就是不能到板子上跑!提示錯(cuò)誤是:向量中斷有錯(cuò)誤,無法自由運(yùn)行!!這是怎么回事相同的源文件,加在你的工程里,正常;加到我的工程中就出錯(cuò)!我創(chuàng)建的是ARM可執(zhí)行映象.A:vector.s你自己的嗎如果是要計(jì)算向量去的累加和了.第92問:Q:請問:vectors.s中"DCD0xb9205f80"的0xb9205f80在實(shí)際運(yùn)用中需要改動嗎A:不需要更改,除非改動了向量表中的指令代碼.第93問:Q:請問,為什么queue數(shù)據(jù)隊(duì)列,《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》上給畫成了環(huán)形A:因?yàn)轭^跟尾的指針指向一個(gè)地址,隊(duì)列邏輯上是環(huán)狀的.第94問:Q:有沒有人成功的把一個(gè)數(shù)據(jù)定義到程序空間里各種方法我都試了,是不是有什么編譯開關(guān)A:使用const修飾,定義變量時(shí)帶初始化值,要定義為全局的變量.第95問:Q:ads里沒有CODE關(guān)鍵詞,怎樣使定義的字符串?dāng)?shù)組不占用RAM空間22A:constunsignedcharstring[]第96問:Q:在例程中TIME_test中的TIMEOUT當(dāng)寫入時(shí)提示:Warnning!interruptvectorsdataisnotcorrect!Programyoudownloadedcannotrunfreely!我不知怎樣改設(shè)置,哪位提醒一下A:中斷向量表的校驗(yàn)和不為0,用AXD看0地址的數(shù)據(jù)(32位方式),自己加一下.注意把高于32位的部分去掉.
第97問:Q:請教各位:我做TIMEOUT實(shí)驗(yàn)(2104板),Make通過,Debug時(shí)出現(xiàn)了如下錯(cuò)誤提示:Warnning!interruptvectorsdataisnotcorrect!Programyoudownloadedcannotrunfreely!設(shè)置Link:ARMLinkr0base:0x00000000rwbase:0x40003000imageentrypoint:0x00000000其它的沒變!!而我使用ISP完全可以下載而且可以運(yùn)行!這可以說是設(shè)置問題,但是我實(shí)在找不到!怎么辦A:請看一看配套《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》附錄1,ISP軟件可能對它進(jìn)行了處理,而JTAG沒有特殊處理第98問:Q:*(volatileunsignedint*)是什么意思例如*(volatileunsignedint*)addr具體是什么意思A:分開來看,(volatileunsignedint*)就是定義一個(gè)可變的無符號整形指針,前面的那個(gè)*就是取起內(nèi)容.第99問:Q:如何理解#defineVICIRQStatus(*((volatileunsignedlong*)0xFFFFF000))A:宏定義,參考C語言的書籍.(volatileunsignedlong*)0xFFFFF000將0xFFFFF000強(qiáng)行轉(zhuǎn)換為指針,然后*(指針)即可對此地址進(jìn)行訪問.第100問:Q:在異常處理向量表的設(shè)置中,為什么不直接將異常向量的入口地址寫入PC中呢,為什么非要用什么DCD這些偽指令,到底有什么用啊A:為了保證任何時(shí)候其累加和為零,不然改一次程序就要計(jì)算一次.23第101問:Q:單步調(diào)試i2cINT.C在ISendStr中啟動總線后,程序怎么又跑到vectors.o中,進(jìn)行初始化了呢A:由于VIC的限制,程序不能在0x18停下來,否則執(zhí)行非向量中斷.如果沒有設(shè)置,則非向量中斷為0,將從0地址執(zhí)行.建議:有中斷時(shí)不要單步執(zhí)行程序,可以手動暫時(shí)關(guān)中斷或設(shè)置斷點(diǎn)代替單步.(編者注:下載最新的驅(qū)動可以解決這個(gè)問題)第102問:Q:請教:如何修改ADS的啟動代碼,從__main到main,按道理應(yīng)該有一個(gè)文件,修改這個(gè)小文件,就可以修改啟動代碼.A:__main是ADS運(yùn)行庫,最好不要修改,要是不使用庫就不要用main()函數(shù),起個(gè)別的名字.直接跳轉(zhuǎn)過去就行了.詳見:《ARM體系結(jié)構(gòu)與編程》P328.第103問:Q:我在JTAG仿真時(shí)出現(xiàn)的對話框,提示:Warnning!interruptvectorsdataisnotcorrect!Programyoudownloadedcannotrunfreely!A:參見《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》附錄一第一個(gè)問題的第二部分,選擇源代碼的啟動代碼文件夾下的vectors.s,并參照《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》圖7.11設(shè)置.第104問:Q:初始化代碼中分配堆棧的問題MSRCPSR_c,#0xd3;進(jìn)入特定的處理器模式LDRSP,StackSvc;給當(dāng)前處理器模式的堆棧指針賦值,這只是一個(gè)值而已,;他在接下去的DCD語句賦值SvcStackSpaceSPACESVC_STACK_LEGTH*4這個(gè)語句開辟一個(gè)SVC_STACK_LEGTH*4大小的內(nèi)存,SvcStackSpace是這塊內(nèi)存的標(biāo)號,我想應(yīng)該就是內(nèi)存的首地址,這樣應(yīng)該好理解了.StackSvcDCDSvcStackSpace+(SVC_STACK_LEGTH-1)*4這個(gè)語句就是把這個(gè)首地址加上堆棧大小值.A:計(jì)算出堆棧指針來,我想這個(gè)堆棧是向下生長的,所以SP賦值的是堆棧地址最高的那個(gè).第105問:Q:請問啟動代碼中這句是什么意思24__user_initial_stackheapLDRr0,=bottom_of_heapMOVpc,lr;/*分配堆空間*/AREAMyheap,DATA,NOINIT,ALIGN=2bottom_of_heapSPACE256;庫函數(shù)的堆空間我的問題是:1.這個(gè)函數(shù)在哪里被調(diào)用2.賦值給r0以后就完事了r0起什么作用A:堆和棧的分配函數(shù),由ADS提供的初始化代碼調(diào)用,具體參考配套《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》的相關(guān)部分.第106問:Q:2104的啟動代碼是否適用2124呢網(wǎng)站上下載的那個(gè)easyarm2104工程模版里面寫著armexecutableimagforlpc21**,是否說也適用2124呢如果不行,哪些地方需要修改希望能夠指點(diǎn)一下!A:您可以下載2100的工程模板.第107問:Q:我在用ARM的IAP功能,要把已經(jīng)燒到flash中的數(shù)據(jù)寫到RAM中,我是這么寫的:uint32*q,data;q=0x00006000;data=*q;這是要讀的flash的起始地址,但是第二句編譯出錯(cuò),我想應(yīng)該是C編譯器不許給指針直接賦值,我用匯編解決了這個(gè)簡單的問題,但是怎么用C來解決呢A:q=(uint32*)0x00006000;第108問:Q:問一個(gè)有關(guān)匯編的基礎(chǔ)問題.例程:ANDSR1,R1,#0x0400BEQWAITOK請問ANDS是如何影響標(biāo)志位的,而BEQ判斷的是那兩個(gè)操作數(shù)相等時(shí)執(zhí)行A:R1&0x0400=>R1,若結(jié)果為0(即R1為0),則標(biāo)志位Z=1.
當(dāng)Z=1時(shí),BEQWAITOK有效執(zhí)行.第109問:Q:請教:在ADS中怎么給某個(gè)變量確定固定物理地址就是類似KEIL中的XDATAxxx_AT_0x4456的功能.A:使用分散加載機(jī)制,mem_c.scf等就是例子.25第110問:Q:哪里有介紹ARM的C語言編程的A:其實(shí)大多數(shù)嵌入式系統(tǒng)的C語言都差不多,可找一本寫嵌入式C語言的書即可.第111問:Q:請問在系統(tǒng)復(fù)位后首先執(zhí)行的是否為BootBlock的中斷向量然后由bootblock里面的程序決定是執(zhí)行用戶程序還是ISP程序.那么這時(shí)啟動的bootblock里的中斷向量表和用戶程序里的中斷向量表是如何在flash里安排的在《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》上看到的是復(fù)位后boot扇區(qū)的最低64字節(jié)出現(xiàn)在0x00000000區(qū)域,那用戶的中斷向量表應(yīng)該在哪個(gè)區(qū)域產(chǎn)品中一般為0x00000000,在開發(fā)板中重啟后實(shí)際為bootblock的中斷向量地址,對嗎A:看一看3.3.6節(jié).產(chǎn)品中一般為物理0地址處.第112問:Q:《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》上有一段程序:uint32i;i=VICIRQStatus;i=IOSET;請問:為何先要讀取VICIRQStatus的值,才能讀IOSET的值A(chǔ):讀出VICIRQStatus只是為了方便觀察當(dāng)前VICIRQStatus的值,沒其它用途.第113問:Q:請問處理器在什么情況下處于用戶模式多謝!A:需要你去設(shè)置CPSR寄存器.用戶程序前臺程序一般在用戶模式/系統(tǒng)模式下運(yùn)行.
第114問:Q:在EINT1_LED.S中的倒數(shù)第二行有一個(gè)單獨(dú)的B指令,它是什么含義多謝!A:是"B.",跳轉(zhuǎn)到當(dāng)前地址,即死循環(huán),與以下代碼等效:HALTBHALT第115問:Q:模板里到底有些什么A:起動代碼,相關(guān)編譯鏈接設(shè)置.起動代碼是用來初始化系統(tǒng)的程序,如Startup.s,target.c,stack.s等等.26第116問:Q:今天試用了工程模板.使用了ARMExecutableImageforlpc21xx建了個(gè)項(xiàng)目,看了下啟動文件與原來的不同了,用了個(gè)《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》上的例程來作試驗(yàn),用的是time0定時(shí)中斷來亮燈的程序,用的例程的TargetInit()和intmain(void);修改了用戶堆棧和bottom_of_heap的長度,程序能運(yùn)行,但不能產(chǎn)生中斷,time0和VIC初始化的是正確的,是什么原因用工程模板建立的項(xiàng)目文件夾的src中多了幾個(gè)文件,其中的mem_a.scf,mem_b.scf,mem_c.scf,怎樣才能導(dǎo)入到項(xiàng)目中來謝謝!A:原來startup.s默認(rèn)是關(guān)了中斷的!第117問:Q:在easyarm2104的配套光盤中的IAP例子中,定義了一個(gè)函數(shù)指針void(*IAP_Entry)(uint32param_tab[],uint32result_tab[]);我看不懂,這個(gè)函數(shù)和普通的函數(shù)定義方法不一樣,尤其是(*IAP_Entry),大家教教我.A:這是一個(gè)指向函數(shù)的指針!!第118問:Q:變量定義中volatile是什么意思請大俠告訴我一下《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》上c語言定義變量時(shí)出現(xiàn)了volatile,不知道是做什么用的.C語言里好像沒有這個(gè)語法阿!A:告訴編譯器不要優(yōu)化掉,volatile是易變的意思.第119問:Q:請問ARM中的一個(gè)編譯方面碰到的問題.在ARM地匯編語言中,有條件編譯偽指令I(lǐng)F..ELSE...ENDIF;而在C語言中,有相應(yīng)的條件編譯偽指令#IF...#ELSE...#ENDIF,在較大的程序設(shè)計(jì)中,往往需要對整個(gè)程序進(jìn)行條件編譯.我要問的問題是:我在CONFIG.H中設(shè)置一個(gè)編譯開關(guān),對所有的C文件進(jìn)行條件編譯是有效的,因?yàn)槊總€(gè)C文件中都有一個(gè)語句:#include"config.h",我如何將該編譯開關(guān)的信息傳遞給匯編語言文件,如VECYORS.SA:好像沒有直接的方法,可以編寫一個(gè)CONFIG.INC來管理匯編程序的配置.27第3章操作系統(tǒng)第120問:Q:在SWI_Exception的0x40中的_OSFunctionAddr[regs[0]]中的Regs[0]指的是堆棧中的R0還是其它A:是堆棧中的R0.第121問:Q:《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》中在ucos移植中說C語言無法保證堆棧的結(jié)構(gòu),請問這是什么含義A:就是不能保證有哪些寄存器入棧及寄存器入棧的順序.第122問:Q:請問斑竹OSNeedToSwapContext在哪個(gè)文件里聲明的,我找不到A:這是要?jiǎng)h除的,我的OS_CPU_C.C中函數(shù)OSIntCtxSw:/*****************************************************************************函數(shù):OSIntCtxSw.*描述:中斷級任務(wù)切換,此處并不真正進(jìn)行任務(wù)切換,具體切換在IRQ服務(wù)程序中.****************************************************************************/voidOSIntCtxSw(void){}第123問:Q:我的情況如下:我自己制作了一個(gè)硬件模塊,用的是lpc2214,現(xiàn)在需要將ucos-ii移
植到上面去.我用板子做ZLG公司提供的實(shí)驗(yàn),是可以做的,如led燈等,按道理說串口等硬件應(yīng)該沒有問題,然后我就做公司提供的那三個(gè)移植實(shí)例:ex2_arm.編譯等是通過的,生成了hex文件,下載到flash中,運(yùn)行easyarm,但是沒有任何顯示,不知道是什么問題,應(yīng)該是硬件上呢,還是其他的A:這主要是RAM的問題,請用我們的工程模板,并選擇在FALSH中調(diào)試,如果編譯通過,則一般行,否則請減少任務(wù)堆棧的大小.第124問:Q:下載了工程模板以后,將工程模板目錄下的文件都拷貝到了stationary目錄下,然后建立了一個(gè)ARMExecutableImageforUCOSII(forlpc21xx)的工程,在PROJECT目錄下的文件結(jié)構(gòu)如下:28test.cinlcudes.hsrc->config.h,heap.s,includes.h,irq.s,lpc2294.h,lpc2106.h,mem_a.scf,os_cfg.s,stack.s,startup.starget.c,target.h,ucos_ii.c,ucos_ii.h,arm->os_cpu.h,os_cup_a.s,os_cup_c.cuCOS->ucos源文件arm_pc->pc.h,pc.c編譯可以通過,但是MAKE時(shí)提示:ERROR:ExecutionregionIRAMoverlapswithExecutionregionSTACKS.如果我表述得不是很清楚的話,那么可否告訴我工程模板到底怎么操作,怎樣才能把例子在ARM2104上跑起來.A:RAM占用太大,請?jiān)趂lash中調(diào)試,并減少任務(wù)堆棧的大小.第125問:Q:我改了以下SCF文件,把堆棧的值設(shè)置大了一些,但是還是出現(xiàn)以前的老問題,那就是程序跑到TargetResetInit()函數(shù)處后就跳到取數(shù)據(jù)終止的異常中斷去了.A:不能把堆棧設(shè)置到內(nèi)部RAM之外.第126問:Q:新舊任務(wù)級的切換是不是必須在管理模式下切換切換后新任務(wù)的運(yùn)行是不是必須在管理模式下A:在配套《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》里的任務(wù)切換是通過SWI實(shí)現(xiàn)的.SWI會使CPU進(jìn)入管理模式.同時(shí)CPU自動將任務(wù)的CPSR保存到管理模式的SPSR中.SWI程序還保存了一些寄存器到管理模式的堆棧中.然后任務(wù)切換程序會在管理模式和系統(tǒng)模式間來回切換,目的是把保存在管理模式堆棧的寄存器內(nèi)容拷貝到任務(wù)的堆棧中(注意:任務(wù)是運(yùn)行在用戶模式或系統(tǒng)模式的,這兩個(gè)模式使用同一個(gè)SP,這時(shí)的系統(tǒng)模式的SP指向的就是任務(wù)的堆棧),也會將管理模式的SPSR拷貝到任務(wù)堆棧(注意管理模式的SPSR就是在執(zhí)行SWI時(shí)CPU自動保存的任務(wù)運(yùn)行時(shí)的CPSR,它記錄了任務(wù)運(yùn)行的CPU模式和其他的運(yùn)行狀態(tài)信息).最后把任務(wù)模式SP保存到任務(wù)的任務(wù)控制塊中(注意此時(shí)CPU已經(jīng)是運(yùn)行在系統(tǒng)模式下的了).以上大致就是uC/OS-II中所說的保存任務(wù)運(yùn)行環(huán)境的工作.任務(wù)的恢復(fù)運(yùn)行就比較好理解了.接著前面的說,CPU還在系統(tǒng)模式下.程序從任務(wù)控制塊中得到任務(wù)的堆棧指針.(OSIntCtxSw_1的第一句)將這個(gè)指針的值加上一定的偏移量保存到SP中.為什么要加上一定的偏移量呢因?yàn)檫@時(shí)任務(wù)的堆棧中除了保存任務(wù)運(yùn)行時(shí)的數(shù)據(jù)外還保存了任務(wù)的上下文,即任務(wù)切換時(shí)保存的CPU寄存器等內(nèi)容.而我們恢復(fù)任務(wù)等一下是在管理模式下進(jìn)行的,用的是管理模式的堆棧指針.等恢復(fù)任務(wù)后CPU就開始執(zhí)行任務(wù)29代碼了.我們已經(jīng)沒有機(jī)會再修改系統(tǒng)模式下的SP值了.所以在這個(gè)時(shí)候就應(yīng)該對SP進(jìn)行調(diào)整.調(diào)整的大小就應(yīng)該是所保存的上下文占用的大小.從堆棧中恢復(fù)LR的值.同樣的道理,管理模式和系統(tǒng)模式使用不同的LR,在切換到管理模式之前,必須先在系統(tǒng)模式下恢復(fù)任務(wù)運(yùn)行時(shí)的LR.(OSIntCtxSw_1的第三句)接下來就切換到管理模式了.(OSIntCtxSw_1的第四句)使管理模式SP指向任務(wù)堆棧(第五句)注意這是沒調(diào)整過的任務(wù)SP,也就是保存了上下文環(huán)境的SP.接下來的事情就真的很簡單了.從堆棧中恢復(fù)出保存的東西.先是OSEnterSum,然后是任務(wù)的CPSR(注意任務(wù)的CPSR就是進(jìn)入SWI時(shí)由CPU自動保存到管理模式的SPSR中的,所以此時(shí)也是恢復(fù)到管理模式的SPSR中)最后一句就是典型的中斷返回語句了.恢復(fù)寄存器,恢復(fù)PC,加了一個(gè)^號意味著同時(shí)將SPSR拷貝到CPSR中.現(xiàn)在是回答你的問題的時(shí)候了.切換前任務(wù)是運(yùn)行在什么環(huán)境下的(包括CPU模式,所有的寄存器),任務(wù)切換后任務(wù)就是運(yùn)行在什么環(huán)境下的.對任務(wù)來說,什么也沒改變.只有PC值指向了下一條指令,哈哈.第127問:Q:請教:在rtos51解釋的概念里的"信號量"比較難懂,"消息隊(duì)列"可以理解為任務(wù)之間互相傳遞的參數(shù),但"信號量"怎樣理解呢具體一點(diǎn),謝謝!A:信號量是60年代中期Edgserdijkstra發(fā)明的,它實(shí)際上是一種程序間的約定機(jī)制,這種約定決定那個(gè)程序(任務(wù))可以執(zhí)行.在多任務(wù)內(nèi)核中普遍使用信號量用于:1.控制共享資源的使用權(quán)(滿足互斥條件);2.標(biāo)志某事件的發(fā)生;3.使兩個(gè)任務(wù)的行為同步.信號量像是通行證,且通行證的數(shù)目是有限的.任務(wù)要運(yùn)行下去,要先拿到通行證.如果信號量已被別的任務(wù)占用,該任務(wù)只得被掛起,直到信號量被當(dāng)前使用者釋放掉.信號量的值可以是0到255或0到65535,或0到4294967295,取決于信號量規(guī)約機(jī)制使用的是8位,16位還是32位.到底是幾位,實(shí)際上是取決于用的那種內(nèi)核.根據(jù)信號量的值,內(nèi)核跟蹤那些等待信號量的任務(wù).一般地說,對信號量只能實(shí)施三種操作:初始化,也可稱作建立;等信號也可稱作掛起;給信號或發(fā)信號.信號量初始化時(shí)要給信號量賦初值,等待信號量的任務(wù)表應(yīng)清為空.想要得到信號量的任務(wù)執(zhí)行等待操作.如果該信號量有效(即信號量值大于0),則信號量值減1,任務(wù)得以繼續(xù)運(yùn)行.如果信號量的值為0,等待信號量的任務(wù)就被列入等待信號量任務(wù)表.多數(shù)內(nèi)核允許用戶定義等待超時(shí),如果等待時(shí)間超過了某一設(shè)定值時(shí),該信號量還是無效,則等待信號量的任務(wù)進(jìn)入就緒態(tài)準(zhǔn)備運(yùn)行,并返回出錯(cuò)代碼(指出發(fā)生了等待超時(shí)錯(cuò)誤).任務(wù)以發(fā)信號操作釋放信號量.如果沒有任務(wù)在等待信號量,信號量的值僅僅是簡單地加1.如果有任務(wù)在等待該信號量,那么就會有一個(gè)任務(wù)進(jìn)入就緒態(tài),信號量的值也就不加1.于是通行證給了等待信號量的諸任務(wù)中的一個(gè)任務(wù).至于給了那個(gè)任務(wù),要看內(nèi)核是如何調(diào)度的.收到信號量的任務(wù)可能是以下兩者之一:1.等待信號量任務(wù)中優(yōu)先級最高的任務(wù);2.最早開始等待信號量的那個(gè)任務(wù),即按先進(jìn)先出的原則(FIFO).30有的內(nèi)核有選擇項(xiàng),允許用戶在信號量初始化時(shí)選定上述兩種方法中的一種.但Small
RTOS51只支持優(yōu)先級法.如果進(jìn)入就緒態(tài)的任務(wù)比當(dāng)前運(yùn)行的任務(wù)優(yōu)先級高(假設(shè),是當(dāng)前任務(wù)釋放的信號量激活了比自己優(yōu)先級高的任務(wù)).則內(nèi)核做任務(wù)切換(假設(shè),使用的是占先式內(nèi)核),高優(yōu)先級的任務(wù)開始運(yùn)行.當(dāng)前任務(wù)被掛起.直到又變成就緒態(tài)中優(yōu)先級最高任務(wù).第128問:Q:我用了兩個(gè)串口,但當(dāng)我把程序做大的時(shí)候,發(fā)現(xiàn)在這個(gè)任務(wù)里所建立的郵箱失敗,我只用一個(gè)串口時(shí)是沒有這種事情的.Uart0ReviceMbox=OSMboxCreate((void*)0);/*建立郵箱*/if(Uart0ReviceMbox==NULL){while(1);}我想問一下有幾種可能會造成這種分配失敗我的程序存儲器用量如下:TotalR0size22168TotalRWsize7956TotalROMsize22168A:在OS_CFG.H中定義最大事件數(shù),太小的話,分配會失敗的.第129問:Q:在周立功的原例子中,系統(tǒng)代碼事先燒到ROM中,應(yīng)用代碼在RAM中運(yùn)行.我想知道,(RAM)應(yīng)用代碼調(diào)用系統(tǒng)函數(shù),那么2104是如何把ROM中的系統(tǒng)函數(shù)的地址傳遞給RAM,也就是應(yīng)用代碼和系統(tǒng)代碼是如何關(guān)聯(lián)在一起的我猜是通過swi(軟中斷),應(yīng)用代碼通過swi調(diào)用系統(tǒng)代碼,但是swi中斷程序中,是如何獲得燒到RAM中的系統(tǒng)函數(shù)的地址哪百思不得其解.A:您看一看romcode工程中swi的0x40和0x41功能,及Os_call.c,Os_call_arm.s,Usr_call_arm.s.第130問:Q:16k的RAM,128的FLASHROM跑uc/os-II夠嗎再跑點(diǎn)應(yīng)用程序夠嗎A:取決于您的應(yīng)用程序?qū)AM的需求,及代碼量.一般程序可以.第131問:Q:利用lpc2104開發(fā)應(yīng)用程序時(shí),在Os_call_arm.s,Os_call.c兩個(gè)文件中,那幾個(gè)函數(shù)
需要在匯編中實(shí)現(xiàn),哪幾個(gè)需要在.c文件中實(shí)現(xiàn),為什么謝謝各位大蝦!A:4個(gè)以上參數(shù)用c實(shí)現(xiàn).因?yàn)橥ㄟ^寄存器只能傳遞4個(gè)參數(shù).31第132問:Q:如果禁止SmallRTOS51進(jìn)行中斷嵌套管理(#defineEN_OS_INT_ENTER0),是否還需要設(shè)置中斷優(yōu)先級寄存器IP,使得所有中斷的優(yōu)先級都相同(全高或全低)A:受SmallRTOS51管理的設(shè)置為最低優(yōu)先級,不受SmallRTOS51管理的設(shè)置其它優(yōu)先級較好.第133問:Q:在OS_CPU_S.s文件中有如下一段代碼,其中有兩句代碼的作用不是很明白,請解說一下.OSIntCtxSw_1LDRR4,[R6];獲取新任務(wù)堆棧指針;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;這兩行代碼有何作用呢ADDSP,R4,#68;17寄存器CPSR,OsEnterSum,R0-R12,LR,SPLDRLR,[SP,#-8];;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MSRCPSR_c,#(NoInt|SVC32Mode);進(jìn)入管理模式MOVSP,R4;設(shè)置堆棧指針LDMFDSP!,{R4,R5};CPSR,OsEnterSum;恢復(fù)新任務(wù)的OsEnterSumLDRR3,=OsEnterSumSTRR4,[R3]MSRSPSR_cxsf,R5;恢復(fù)CPSRLDMFDSP!,{R0-R12,LR,PC}^;運(yùn)行新任務(wù)A:這兩條指令是在系統(tǒng)模式下恢復(fù)用戶模式下的LR;可以參考配套《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》6.4.9節(jié).第134問:Q:我將《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》上uC/OS-II的第一章例2移植例在ARM2104開發(fā)版上實(shí)現(xiàn)例2中的TEST.C中的"#defineTASK_STK_SIZE512"改為"...256",程序編譯
后,數(shù)據(jù)量低于16K,能正常運(yùn)行,但運(yùn)行時(shí)"TotalStack"不是256全是1024.另UC/OS-II書上,第一章例2每一個(gè)任務(wù)的堆棧都是512,為什么書上11頁"TotalStack"是"624,1024,1024,1024,1024,1024,1024",請老師指點(diǎn),萬分感謝!A:顯示的是字節(jié)而定義的是字.第135問:Q:可不可以把所有的任務(wù)和相關(guān)信號量(二值)在一個(gè)任務(wù)里面一起創(chuàng)建呢我現(xiàn)在是這樣做的,不知是不是這方面的原因而且全部信號量是這樣創(chuàng)建的:XX1=OSSemCreate(0);32XX2=OSSemCreate(0);XX3=OSSemCreate(0);一共創(chuàng)建了十個(gè)信號量,以前程序代碼版本是分開寫的執(zhí)行起來沒有問題,不知現(xiàn)在為什么這樣寫就會出現(xiàn)小問題呢這樣的問題和我的任務(wù)和信號里書寫位置有關(guān)系嗎A:必須在使用信號量前創(chuàng)建信號量.第136問:Q:UCOS在中斷處理完后調(diào)用OSIntExit(),該函數(shù)將判斷是不是要進(jìn)行任務(wù)切換,如果是則調(diào)用OSIntCtxSw()切換任務(wù),然后才恢復(fù)寄存器,中斷返回.這樣說來,在中斷返回前,已經(jīng)切換到別的任務(wù)去了,在再次回到被中斷的任務(wù)前,是不是一直沒有中斷返回A:如果進(jìn)行任務(wù)調(diào)度,則不會執(zhí)行OSIntCtxSw()后的語句,相當(dāng)于中斷已退出.第137問:Q:最近我在學(xué)習(xí)使用SMALLRTOS時(shí)發(fā)現(xiàn)一個(gè)BUG.任務(wù)在調(diào)用系統(tǒng)等待函數(shù)OSWait(K_TMO|K_SIG,x)后,不能在延時(shí)x個(gè)ticks后被喚醒.我分析了一下原因如下:在OS_CORE.Cuint8OSWait(uint8typ,uint8ticks)small中,case(K_TMO|K_SIG):中執(zhí)行了函數(shù)OSTaskSuspend(OSTaskID);(OS_CORE.C第549行)而此函數(shù)將延時(shí)值改為了0!解決辦法:將此函數(shù)改用另一個(gè)函數(shù)OS_TaskSuspend(TaskID);并在其后加入任務(wù)切換函數(shù)OSSched();
便能工作正常.A:對,這是疏忽,謝謝.您的更改是對的.第138問:Q:在文件Os_cpu_a.s中的函數(shù)OSIntCtxSw中有如下語句:……(1)LDRR4,[R6](2)ADDSP,R4,#68;17寄存器CPSR,OsEnterSum,R0-R12,LR,SP(3)LDRLR,[SP,#--8](4)MSRCPSR_c,#(NoInt|SVC32Mode);進(jìn)入管理模式(5)MOVSP,R4……(6)LDMFDSP!,{R0-R12,LR,PC}^;運(yùn)行新任務(wù)《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》404頁中解釋:只所以要(1)(2)是因?yàn)?OSTCBHighRdy—>OSTCBStkPtr保存的是任務(wù)棧位置,而寄存器恢復(fù)后堆棧指針并不指向這,所以要調(diào)33整新任務(wù)堆棧指針."可是將堆棧指針調(diào)整到"新任務(wù)入棧的其它數(shù)據(jù)(見《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》圖6.3)"處后,除了取出了LR以外并沒有做什么,而當(dāng)執(zhí)行了(4)后又重新將堆棧指針指向了棧頂(即第(5)句).我認(rèn)為可以將(2)省去,直接將(3)改為"LDRLR,[SP,#60]",而當(dāng)執(zhí)行完(6)后,堆棧指針就自動指向了"新任務(wù)入棧的其它數(shù)據(jù)"處.這樣修改后我運(yùn)行了EX1_arm例子,正常.請問這利用(3)進(jìn)行堆棧指針調(diào)整的原因是什么不調(diào)整可以嗎謝謝.A:注意不同模式有不同的SP指針.您這樣做會造成內(nèi)存泄漏,長時(shí)間運(yùn)行會耗盡堆棧而使程序崩潰.第139問:Q:不明白在光盤上ROMCODE/SRC/下的os_call.c做什么用.A:是應(yīng)用程序與事先固化到flash中的ucosii接口的一些代碼.在本例中為應(yīng)用程序如何調(diào)用事先固化到flash中的ucosii的OSFlagPend等函數(shù)的接口代碼.請看配套《ARM微控制器基礎(chǔ)與實(shí)戰(zhàn)》的7.4.3節(jié)的第10點(diǎn).第140問:Q:請問在OS_CORE.C中的常數(shù)數(shù)組OSUnMapTbl[]是做什么用的A:用來計(jì)算優(yōu)先級的,查表計(jì)算比較快.第141問:Q:ucos的中斷嵌套層數(shù)是否受到初始化時(shí)分配的IRQ堆棧大小的限制我的理解是每一次中斷需入棧的寄存器有R0-R3,R12,LR,SPSR,共7個(gè),如果想達(dá)到8層嵌套的話,堆棧長度IRQ_STACK_LEGTH應(yīng)設(shè)為56,不知這樣理解對不對.A:是,但中斷至少占用8個(gè)字,因?yàn)閏語言的中斷處理函數(shù)會將一些數(shù)據(jù)壓入堆棧.要達(dá)到8級嵌套需要的堆棧長度與具體的代碼有關(guān).(編者注:新移植代碼已有改變)第142問:Q:請問:核心定時(shí)器中斷不進(jìn)入可能因?yàn)椤业某绦蛟谶\(yùn)行一段時(shí)間以后,核心定時(shí)器中斷即操作系統(tǒng)用的Timer0不能進(jìn)入,查發(fā)現(xiàn)CPSR的I位為1,請教這可能是哪個(gè)原因A:估計(jì)為開關(guān)中斷次數(shù)不匹配造成.第143問:Q:請問:Get
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年粵教版八年級生物下冊階段測試試卷
- 2025年魯人新版必修1化學(xué)下冊月考試卷含答案
- 2025年人教A新版九年級生物上冊階段測試試卷含答案
- 2024年甲乙雙方關(guān)于房地產(chǎn)買賣的補(bǔ)充協(xié)議
- 二零二五年度綠色生態(tài)白酒銷售代理合同2篇
- 2025年教科新版六年級語文下冊月考試卷含答案
- 2025年陜教新版九年級語文下冊階段測試試卷含答案
- 2024版出售房屋委托協(xié)議書
- 二零二五年度文化傳播合作協(xié)議全面細(xì)化合作流程與文化產(chǎn)品推廣3篇
- DB37T 5175-2021 建筑與市政工程綠色施工技術(shù)標(biāo)準(zhǔn)
- GB∕T 26465-2021 消防員電梯制造與安裝安全規(guī)范(高清最新版)
- 泌尿道感染臨床路徑
- 古詩詞常見的修辭手法講課教案
- 科研項(xiàng)目評審評分表
- A5技術(shù)支持的課堂導(dǎo)入作業(yè)1—問題描述.針對日常教學(xué)中的某一主題針對教學(xué)目標(biāo)、教學(xué)內(nèi)容以及教學(xué)對象用簡短的語言描述當(dāng)前課堂導(dǎo)入環(huán)節(jié)中存在的問題和不足以及借助信息技術(shù)改進(jìn)課堂導(dǎo)入的必要性
- 2-07端陽賽馬節(jié)的傳說
- 國家開放大學(xué)《土木工程力學(xué)(本)》章節(jié)測試參考答案
- 衣柜技術(shù)標(biāo)準(zhǔn)
- 某隧道二襯檢測報(bào)告范本(共13頁)
- (完整版)臨時(shí)用電施工合同
評論
0/150
提交評論