




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
實驗一、ARMSDT2.5開發(fā)環(huán)境一、實驗目的熟悉ARMSDT2.5開發(fā)環(huán)境,學會ARM并行口仿真器的使用。使用SDT編譯,下載,調(diào)試,并跟蹤一段已有的程序。了解嵌入式開發(fā)的基本思想和過程。二、實驗內(nèi)容本次試驗使用ARMSDT2.5集成開發(fā)環(huán)境。新建一個基于操作系統(tǒng)的工程文件,并編譯這個工程。學習ARM并行口仿真器的使用和開發(fā)環(huán)境的設(shè)置。下載已經(jīng)編譯好的文件到嵌入式控制器中運行。學會在程序中設(shè)置斷點,觀察系統(tǒng)內(nèi)存和變量,為調(diào)試應用程序打下基礎(chǔ)。三、預備知識C語言的基礎(chǔ)知識、程序調(diào)試的基礎(chǔ)知識和方法四、實驗設(shè)備及工具(包括軟件調(diào)試工具)硬件:ARM嵌入式開發(fā)板、用于ARM7TDMI的JTAG仿真器、PC機Pentumn100以上軟件:PC機操作系統(tǒng)win2000、ARMSDT2.51集成開發(fā)環(huán)境、仿真器驅(qū)動程序五、實驗步驟1、運行ARMSDT2.5集成開發(fā)環(huán)境(ARMProjectManager)。選擇File|New菜單,在對話框中選擇Project,并在如圖1-1所示,新建一個工程文件(work1.apj)。圖1-1“新建工程”對話框2、在新建的工程中,如圖1-2所示,選中工程樹的“根部”。使用菜單Project|ToolConfigurationforwork1.apj|<asm>=armasm|Set,對整個工程的匯編進行設(shè)置。圖1-23、因為開發(fā)板上的嵌入式處理器ARM7TDMI沒有浮點處理器,所以,如圖1-3所示,在彈出的對話框中設(shè)置FloatingPointProcessor為none。保持其它的設(shè)置不變。圖1-34、選中工程樹的“根部”,通過菜單Project|ToolConfigurationforwork1.apj|asmlink|Set,對整個工程的連接方式進行設(shè)置。5、在彈出的對話框中,選中EntryBase選項卡,如圖1-4所示,設(shè)置連接的Read-Only(只讀)和Read-Write(讀寫)地址。地址0xC000000是開發(fā)板上SDRAM的真實地址,是由系統(tǒng)的硬件決定的;0xC600000指的是系統(tǒng)可讀寫的內(nèi)存的地址。也就是說,在0xC000000—0xC5ffffff之間是只讀區(qū)域,存放程序的代碼段,在0xC600000開始是程序的數(shù)據(jù)段。圖1-46、選擇LinkerConfiguration的ImageLayout選項卡,如圖1-5所示,設(shè)置程序的入口模塊。指定在生成的代碼中,程序是從44binit.s開始運行的。圖1-57、選中工程樹中DebugRel子樹,用Delete鍵刪除,同樣,選中工程樹中Release子樹,用Delete鍵刪除,提示:在系統(tǒng)工程樹中Debug子樹是下面生成的是應用程序的調(diào)試版本,在生成的目標代碼中,包含了系統(tǒng)的調(diào)試信息。Release子樹是應用程序的發(fā)行版本,生成的代碼中不包括調(diào)試信息,而且編譯器還針對速度和代碼的大小進行優(yōu)化。DebugRel子樹是一個折衷版本,通常用不到,本實驗中均只考慮Debug子樹。8、按以下步驟步驟使編譯器輸出bios.bin文件。選擇工程樹的“根部”,選擇Project—>EditVariablesforwork1.apj…彈出圖1-6的窗口,將變量build_target的值<$projectname.axf>改為<$projectname.bin>,單擊ok。圖1-6選擇Project—>EditProjectTemplate…彈出圖1-7,單擊EditDetails…將標題改為Rom。單擊New…新加一個CreateRome構(gòu)建過程。如圖1-8所示。圖1-7圖1-8選擇Project—>EditVariablesforwork1.apj…在Name和Value項中如圖1-9填寫,點擊OK;在下圖窗口中,將$$Projectname的值改為bios。圖1-99、至此,工程文件設(shè)置完畢。因為設(shè)置過程比較繁瑣,可以保存此工程,下次新建項目的時候復制即可。提示:可以使用File|SaveasTamplete菜單把當前工程的設(shè)置保存為模板,比如,Rom.apj文件。把此文件復制到ARMSDT編譯器的\ARM251\Template目錄下,以后創(chuàng)建工程的時候,就可以直接選擇使用此模板了。模板文件也是一個工程文件(*.apj),但是,模板文件中不包括工程中文件的信息,只有編譯器環(huán)境的設(shè)置。10、把\bsp及其子目錄和main.c復制到work1的目錄下。如圖1-10所示。選中工程樹中Debug子樹的Sources選項。通過菜單Project|AddFilestoSources,把bsp\bspinit.c,bsp\cpu\44binit.s,bsp\cpu\44blib.c,bsp\uart\uart.c和main.c文件加入工程的源文件中,如圖1-10所示。圖1-1011、選中工程樹中Debug子樹,通過Project|Buildwork1.apj“Debug”菜單(或者工具欄中的相應按鈕)編譯整個工程。12、把ARM的JTAG仿真器連接到PC機的并行口和開發(fā)板上,打開開發(fā)板的電源,將光盤中jtag目錄拷貝到C:\下,按照“C:\jtag\SDT251在線調(diào)試方法.pdf”中的要求安裝仿真器的驅(qū)動程序,然后在開始->運行中輸入cmd命令,在彈出窗口中輸入cdc:\jtag,和winntjtag起動仿真器連接程序。13、使用Project|Debugwork1.apj“Debug”菜單(或者工具欄中的相應按鈕)啟動ARMDebugger軟件調(diào)試程序。14、在ARMDebugger中,通過Options|ConfigureDebugger菜單設(shè)置仿真器。如圖1-9所示,在彈出的對話框中,設(shè)置TargetEnvironment為Remote_A圖1-1115、單擊Configure按鈕,按照如圖1-10所示,設(shè)置仿真器,添加本機的IP地址。圖1-1216、出現(xiàn)如下提示以后,請先按開發(fā)板復位按鈕,然后點YES,ARMDebbuger開始通過仿真器裝載程序。如圖1-11所示。圖1-1317、裝載完畢以后,通過Option|Addsearchpath設(shè)置工程文件路徑,然后點擊View|Sourcefiles,會看到工程中的文件信息,如圖1-14所示。圖1-1418、通過Execute|Go菜單(或者工具欄中的相應按鈕)運行程序。程序運行的時候,可以使用Execute|Stop菜單(或者工具欄中的相應按鈕)暫停運行程序。如圖1-12所示,在Execute窗口中將顯示出程序暫停的位置。圖1-1519、通過Execute|Step菜單(或者工具欄中的相應按鈕)可以單步運行程序。也可以使用StepIn、StepOut菜單命令進入或者跳出函數(shù)的調(diào)用。20、在源文件列表中打開Main.c文件。選擇源文件中的某一行,右擊鼠標,如圖1-14所示,用ToggleBreakpoint快捷菜單命令可以設(shè)置斷點,使程序運行到這里停下來。圖1-1621、使用在View菜單下的Registers、Variables和Memory命令可以查看工作寄存器或者內(nèi)存變量。讀者可以逐一的嘗試,為以后調(diào)試程序打下基礎(chǔ)。實驗二:開發(fā)基本的嵌入式應用程序一、實驗目的學習使用UltraEditC代碼文本編輯器。掌握Uart_Printf()函數(shù)的用法。學會使用ppcboot,tftp和超級終端進行嵌入式應用開發(fā)。二、實驗內(nèi)容使用UltraEditC代碼文本編輯器,編寫一段程序,在串口顯示“Helloworld”等文本。利用ppcboot與tftp將程序下載到ARM板。三、預備知識用ARMSDT2.5集成開發(fā)環(huán)境,編寫和調(diào)試程序的基本過程。四、實驗設(shè)備及工具(包括軟件調(diào)試工具)硬件:ARM嵌入式開發(fā)板、用于ARM7TDMI的JTAG仿真器、PC機Pentumn100以上,串口線。軟件:PC機操作系統(tǒng)win2000、ARMSDT2.51集成開發(fā)環(huán)境、仿真器驅(qū)動程序、UltraEdit、tftp。五、實驗步驟在ARMSDT2.51中,打開實驗一中創(chuàng)建好的工程work1。啟動UltraEdit,通過UltraEdit的Files|Open菜單(或者相應的工具欄按鈕)打開eg1\main.c。可以看到,UltraEdit是一個很方便的C代碼閱讀和編輯工具,它會自動區(qū)分C語言的語法,把變量、函數(shù)和宏定義等都特殊的顯示出來便于閱讀。很適合于編輯大型軟件。花20分鐘熟悉一下UltraEdit,同時閱讀main.c文件的代碼。3、重點分析Main函數(shù)中的代碼,了解系統(tǒng)的啟動過程。Main函數(shù)的代碼如下:voidMain(void){ Bsp_Init(); while(1) { Uart_Printf("HelloWorld!\n"); Delay(10000); }}4、系統(tǒng)從bsp\cpu\44binit.s開始執(zhí)行,進行簡單的初始化后即進入main()函數(shù),Bsp_Init()用于初始化ARM板,然后進行while(1)死循環(huán)(注意系統(tǒng)任務(wù)都是死循環(huán)形式,沒有返回)。Uart_Printf()的格式可以參看bsp\uart\uart.h。5、讀者可以將Uart_Printf()中的內(nèi)容變更,看運行后超級終端有什么不同。6、編譯并下載程序,調(diào)試程序。開啟tftp服務(wù)程序,設(shè)置bios.bin(此即為將要下到ARM板運行的映象文件)的路徑,如圖2-1圖2-17、運行windows系統(tǒng)下的超級終端(HyperTerminal)應用程序,如圖2-2所示新建一個終端通訊,取名為arm。單擊確定按鈕。圖2-28、選擇終端的連接的串口(比如:串行口1),如圖2-3所示,設(shè)置通訊的格式和協(xié)議。圖2-39、設(shè)置完成超級終端以后,就可和嵌入式開發(fā)板中固化的ppcboot建立通訊。按嵌入式開發(fā)板系統(tǒng)的復位按鈕,使系統(tǒng)通過BIOS引導,通過PC機鍵盤可以和嵌入式開發(fā)板通訊,按回車鍵,此時超級終端等待命令輸入。輸入tftpc000000,終端顯示下載完畢,再輸入goc000000開始程序運行。如圖2-4。關(guān)于ppcboot的詳細使用可參看“ppcboot的移植與使用”。實驗三、μCOSII在ARM上的移植一、實驗目的1.了解UC/OS-II內(nèi)核的主要結(jié)構(gòu)。2.掌握將UC/OS-II內(nèi)核移植到ARM7處理器上的基本方法。二、實驗內(nèi)容1.將UC/OS-II內(nèi)核移植到ARM7處理器上。2.按鍵盤上的任意鍵,在超級終端上顯示對應的鍵值。三、預備知識1.掌握在ARMSDT2.5集成開發(fā)環(huán)境中編寫和調(diào)試程序的基本過程。2.會使用UltraEdit編輯C語言源程序。3.了解ARM7處理器的結(jié)構(gòu)。4.了解利用ppcboot和tftp進行下載文件的方法。5.了解UC/OS-II系統(tǒng)結(jié)構(gòu)。四、實驗設(shè)備及工具硬件:ARM嵌入式開發(fā)板、用于ARM7TDMI的JTAG仿真器、PC機Pentumn100以上,串口線。軟件:PC機操作系統(tǒng)win2000、ARMSDT2.51集成開發(fā)環(huán)境、仿真器驅(qū)動程序、UltraEdit、tftp。五、實驗原理所謂移植,指的是一個操作系統(tǒng)可以在某個微處理器或者微控制器上運行。雖然μCOS-II的大部分源代碼是用C語言寫成的,但是,仍需要用C語言和匯編語言完成一些與處理器相關(guān)的代碼。比如:μCOS-II在讀寫處理器寄存器時只能通過匯編語言來實現(xiàn)。因為μCOS-II在設(shè)計的時候就已經(jīng)充分考慮了可移植性,所以,μCOS-II的移植還是比較容易的。要使μCOS-II可以正常工作,處理器必須滿足如下要求:1.處理器的C編譯器能產(chǎn)生可重入代碼。可重入的代碼指的是一段代碼(比如:一個函數(shù))可以被多個任務(wù)同時調(diào)用,而不必擔心會破壞數(shù)據(jù)。也就是說,可重入型函數(shù)在任何時候都可以被中斷執(zhí)行,過一段時間以后又可以繼續(xù)運行,而不會因為在函數(shù)中斷的時候被其他的任務(wù)重新調(diào)用,影響函數(shù)中的數(shù)據(jù)。下面的兩個例子可以比較可重入型函數(shù)和非可重入型函數(shù):程序1:可重入型函數(shù)voidswap(int*x,int*y){inttemp;temp=*x;*x=*y;*y=temp;}程序2:非可重入型函數(shù)inttemp;voidswap(int*x,int*y){temp=*x;*x=*y;*y=temp;}程序1中使用的是局部變量temp作為變量,通常的C編譯器,把局部變量分配在棧中。所以,多次調(diào)用同一個函數(shù),可以保證每次的temp互不影響。而程序2中temp定義的是全局變量,多次調(diào)用函數(shù)的時候,必然受到影響。代碼的可重入性是保證完成多任務(wù)的基礎(chǔ),除了在C程序中使用局部變量以外,還要C編譯器的支持。筆者使用的是ARMSDT的集成開發(fā)環(huán)境,可以生成可重入的代碼。2.在程序中可以打開或關(guān)斷中斷。在μCOS-II中,可以通過OS_ENTER_CRITICAL()或者OS_EXIT_CRITICAL()宏來控制系統(tǒng)關(guān)閉或者打開中斷。這需要處理器的支持。在ARM7TDMI的處理器上,可以設(shè)置相應的寄存器來關(guān)閉或者打開系統(tǒng)的所有中斷。3.處理器支持中斷,并能產(chǎn)生定時中斷(通常在10Hz~1000Hz之間)μCOS-II是通過處理器產(chǎn)生的定時器的中斷來實現(xiàn)多任務(wù)之間的調(diào)度的。在ARM7TDMI的處理器上可以產(chǎn)生定時器中斷。4.處理器支持能夠容納一定量數(shù)據(jù)(可能是幾千字節(jié))的硬件堆棧。5.處理器有將堆棧指針和其他CPU寄存器讀出和存儲到堆棧或內(nèi)存中的指令。移植工作包括以下幾個內(nèi)容:1.用#define設(shè)置一個常量的值(OS_CPU.H)。2.聲明10個數(shù)據(jù)類型(OS_CPU.H)。3.用#define聲明三個宏(OS_CPU.H)。4.用C語言編寫六個簡單的函數(shù)(OS_CPU_C.C)。5.編寫四個匯編語言函數(shù)(OS_CPU_A.ASM)。μCOS-II進行任務(wù)調(diào)度的時候,會把當前任務(wù)的CPU寄存器存放到此任務(wù)的堆棧中,然后,再從另一個任務(wù)的堆棧中恢復原來的工作寄存器,繼續(xù)運行另一個任務(wù)。所以,寄存器的入棧和出棧是μCOS-II多任務(wù)調(diào)度的基礎(chǔ)。在移植過程中,INCLUDES.H使得用戶項目中的每個.C文件不用分別去考慮它實際上上需要那些頭文件。使用INCLUDES.H的唯一缺點是,它可能會包括一些實際不相關(guān)的頭文件。這意味著每個文件的編譯時間可能會增加。但由于它增強了代碼的可移植性,所以我們還是決定使用這一方法。用戶可以通過編輯INCLUDES.H來增加自己的頭文件,但用戶的頭文件必須添加在頭文件列表的最后。圖15-1uC/OS硬件和軟件體系結(jié)構(gòu)六、實驗步驟1.設(shè)置OS_CPU.H中與處理器和編譯器相關(guān)的代碼/**********************************************************************與編譯器相關(guān)的數(shù)據(jù)類型*********************************************************************/typedefunsignedchar BOOLEAN;typedefunsignedchar INT8U;//8位無符號整數(shù)typedefsignedchar INT8S;//8位有符號整數(shù)typedefunsignedshort INT16U;//16位無符號整數(shù)typedefsignedshort INT16S;//16位有符號整數(shù)typedefunsignedlong INT32U;//32位無符號整數(shù)typedefsignedlong INT32S;//32位有符號整數(shù)typedeffloat FP32;//單精度浮點數(shù)typedefdouble FP64;//雙精度浮點數(shù)typedefunsignedint OS_STK;//堆棧入口寬度為16位#defineBYTE INT8S//字節(jié)型#defineUBYTE INT8U//為了與uC/OSV1.xx.兼容#defineWORD INT16S//...uC/OS-II.#defineUWORD INT16U#defineLONG INT32S#defineULONG INT32U/*********************************************************************與ARM處理器相關(guān)的代碼********************************************************************/#defineOS_ENTER_CRITICAL()ARMDisableInt()/*關(guān)閉中斷*/#defineOS_EXIT_CRITICAL()ARMEnableInt()/*開啟中斷*//*設(shè)施堆棧的增長方向*/#defineOS_STK_GROWTH1/*堆棧由高地址向低地址增長*/2.用C語言編寫六個操作系統(tǒng)相關(guān)的函數(shù)(OS_CPU_C.C)void*OSTaskStkInit(void(*task)(void*pd),void*pdata,void*ptos,INT16Uopt){unsignedint*stk;opt=opt;/*'opt'isnotused,preventwarning*/stk=(unsignedint*)ptos;/*Loadstackpointer*//*buildacontextforthenewtask*/*--stk=(unsignedint)task;/*pc*/*--stk=(unsignedint)task;/*lr*/*--stk=0;/*r12*/*--stk=0;/*r11*/*--stk=0;/*r10*/*--stk=0;/*r9*/*--stk=0;/*r8*/*--stk=0;/*r7*/*--stk=0;/*r6*/*--stk=0;/*r5*/*--stk=0;/*r4*/*--stk=0;/*r3*/*--stk=0;/*r2*/*--stk=0;/*r1*/*--stk=(unsignedint)pdata;/*r0*/*--stk=(SVC32MODE|0x0); /*cpsrIRQ,FIQdisable*/*--stk=(SVC32MODE|0x0); /*spsrIRQ,FIQdisable*/return((void*)stk);}voidOSTaskCreateHook(OS_TCB*ptcb){ptcb=ptcb;//防止編譯時出現(xiàn)警告}voidOSTaskDelHook(OS_TCB*ptcb){ptcb=ptcb;//防止編譯時出現(xiàn)警告}voidOSTaskSwHook(void)voidOSTaskStatHook(void)voidOSTimeTickHook(void)后5個函數(shù)為鉤子函數(shù),可以不加代碼。3.用匯編語言編寫四個與處理器相關(guān)的函數(shù)(OS_CPU.ASM)(1)OSStartHighRdy();運行優(yōu)先級最高的就緒任務(wù);BL OSTaskSwHook;Calluser-definedhookfunctionLDR r4,addr_OSRunning;IndicatethatmultitaskinghasstartedMOV r5,#1STRB r5,[r4];OSRunning=trueLDR r4,addr_OSTCBHighRdy;GethighestprioritytaskTCBaddressLDR r4,[r4];getstackpointerLDR sp,[r4];switchtothenewstackLDMFD sp!,{r4};popnewtasksspsrMSR SPSR_cxsf,r4LDMFD sp!,{r4};popnewtaskspsrMSR CPSR_cxsf,r4LDMFD sp!,{r0-r12,lr,pc};popnewtasksr0-r12,lr&pc(2)OSCtxSw();任務(wù)級的任務(wù)切換函數(shù)STMFD sp!,{lr};pushpc(lrisactuallybepushedinplaceofPC)STMFD sp!,{r0-r12,lr};pushlr®isterfileMRS r4,CPSRSTMFD sp!,{r4};pushcurrentpsrMRS r4,SPSRSTMFD sp!,{r4};pushcurrentspsr_OSCtxSwLDR r4,=OSPrioCur;OSPrioCur=OSPrioHighRdyLDR r5,=OSPrioHighRdyLDRB r6,[r5]STRB r6,[r4]LDR r4,=OSTCBCur;GetcurrenttaskTCBaddressLDR r5,[r4]STR sp,[r5];storespinpreemptedtaskssTCB;BL OSTaskSwHook;callTaskSwitchHookLDR r6,=OSTCBHighRdy;GethighestprioritytaskTCBaddressLDR r6,[r6]LDR sp,[r6];getnewtasksstackpointerSTR r6,[r4];setnewcurrenttaskTCBaddressLDMFD sp!,{r4};popnewtaskspsrMSR SPSR_cxsf,r4LDMFD sp!,{r4};popnewtaskcpsrMSR CPSR_cxsf,r4LDMFD sp!,{r0-r12,lr,pc};popnewtaskr0-r12,lr&pc(3)OSIntCtxSw();中斷級的任務(wù)切換函數(shù)STMDBsp!,{r0-r1}LDR r0,addr_OSIntCtxSwFlag;OSIntCtxSwFlag=trueMOV r1,#1STR r1,[r0]LDMIA sp!,{r0-r1}MOV pc,lr;return(4)OSTickISR();中斷服務(wù)函數(shù) SUB lr,lr,#4 STMDBsp!,{r0-r12,lr};pushr0-r12registerfileandlr(pcreturnaddress) MRS r4,SPSR STMFD sp!,{r4};pushcurrentspsr_irq(=cpsr_svc) ;interruptdisable(notnessary) mrs r0,CPSR orr r0,r0,#0x80 ;andsetIRQdisableflag msr CPSR_cxsf,r0 BL OSIntEnter BL do_irq;heredo_IRQisusedtoclearsomevirtual-hardwareflags BL OSIntExit LDR r0,addr_OSIntCtxSwFlag;checkifOSIntCtxFlagismarkedastrue LDR r1,[r0] CMP r1,#1 LDREQ pc,=_IntCtxSw ;ifOSIntCtxFlag=true,thenjumpto_IntCtxSw LDMFD sp!,{r4};getcpsr_svcfromstack MSRSPSR_cxsf,r4;preparespsrtoreturnsvcmode LDMFD sp!,{r0-r12,pc}^ ;recoverr0-r12andpcfromstack,cpsralso_IntCtxSwMOV r1,#0;clearOSIntCtxSwFlag=flaseSTR r1,[r0] LDMFD sp!,{r4} ;restorespsr_irq MSR SPSR_cxsf,r4 LDMFD sp!,{r0-r12,lr} ;reco
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學體育德育工作總結(jié)
- 美容顧問崗位季度績效考核表
- 奉獻的演講稿(匯編15篇)
- 云南德宏圖書館招聘試題帶答案分析2024年
- 吉林通化圖書館招聘試題帶答案分析2024年
- 高溫作業(yè)保險覆蓋范圍
- 團隊凝聚力在高溫期維護
- 高溫作業(yè)噪音控制要點
- 保險法考試試題及答案
- 土地買賣協(xié)議書(合集15篇)
- 圖書館捐贈活動實施流程
- 《數(shù)字貿(mào)易》課程教學大綱
- 會展策劃考試試題及答案
- 2025零基礎(chǔ)應用DeepSeek手冊
- 建筑節(jié)能與環(huán)保培訓課件
- 微弱的光亮(2024年山東煙臺中考語文試卷記敘文閱讀試題)
- 2024高考物理一輪復習專題93機械振動和機械波練習含解析新人教版
- 廣西現(xiàn)代物流集團招聘筆試沖刺題2025
- 中職班主任班級管理經(jīng)驗分享
- 大學英語六級大綱詞匯正序版
- 《計算機圖形學》課后習題參考答案
評論
0/150
提交評論