![嵌入式系統(tǒng) B實驗報告_第1頁](http://file4.renrendoc.com/view/29f67237bc1797abc1d8224f25bff530/29f67237bc1797abc1d8224f25bff5301.gif)
![嵌入式系統(tǒng) B實驗報告_第2頁](http://file4.renrendoc.com/view/29f67237bc1797abc1d8224f25bff530/29f67237bc1797abc1d8224f25bff5302.gif)
![嵌入式系統(tǒng) B實驗報告_第3頁](http://file4.renrendoc.com/view/29f67237bc1797abc1d8224f25bff530/29f67237bc1797abc1d8224f25bff5303.gif)
![嵌入式系統(tǒng) B實驗報告_第4頁](http://file4.renrendoc.com/view/29f67237bc1797abc1d8224f25bff530/29f67237bc1797abc1d8224f25bff5304.gif)
![嵌入式系統(tǒng) B實驗報告_第5頁](http://file4.renrendoc.com/view/29f67237bc1797abc1d8224f25bff530/29f67237bc1797abc1d8224f25bff5305.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、南京郵電大學通達學院嵌入式系統(tǒng)B實驗報告班級100023專業(yè)通信工程(嵌入式系統(tǒng)開發(fā))學號10002304姓名陸海霞實驗項目:1、ADS下簡單ARM匯編程序2、熟悉LINUX開發(fā)環(huán)境3、多線程應用程序設計指導教師范山崗實驗一ADS下簡單ARM匯編程序?qū)嶒災康模菏煜DS1.2下進行匯編語言程序設計的基本流程;熟悉在ADS中創(chuàng)建工程及編寫、編譯和運行匯編語言程序的方法;熟悉AXD中各種調(diào)試功能。實驗環(huán)境:1、硬件:PC機。2、軟件ADS1.2。實驗內(nèi)容:在ADS中新建工程,并設置開發(fā)環(huán)境。在CodeWarrior環(huán)境中編輯、編譯和鏈接匯編語言程序,并生成可執(zhí)行文件。在AXD中調(diào)試匯編程序;使用命
2、令行界面編輯、編譯和鏈接匯編程序。實驗步驟:本實驗要求在ADS環(huán)境下,編寫一個匯編程序,計算S=1+2+3+n的累加值。把累加結果S存入到存儲器的指定位置;在AXD中調(diào)試該程序,使用ARMulator模擬目標機。1、新建工程。打開CodeWarrior,選擇File-New(project)選項,使用ARMExecutableImage模版新建一個工程。2、設置編譯和鏈接選項。由于我們使用的是模擬機,設置匯編語言編譯器的模擬處理器架構為Xscale;在ARMLinker中,選擇output選項卡并選擇Linktype為Simple類型,確認ROBase為0 x8000,修改RWBase為0 x
3、9000,3、為當前工程添加源程序文件。ARM匯編程序源文件后綴名為S大小寫均可。確保添加入當前工程復選框選上。4、編輯源程序代碼。參考程序add.s:;armadd源程序NEQU7;累加次數(shù);定義名為Adding的代碼段AREAAdding,CODE,READONLYENTRYMOVR0,#0MOVR1,#1REPEATADDR0,R0,R1ADDR1,R1,#1CMPR1,#NBLEREPEATLDRR2,=RESULTSTRR0,R2HEREBHERE定義名為Dataspace的數(shù)據(jù)段AREADataspace,DATA,READWRITERESULTDCD0END實驗中程序編寫如下圖所
4、示:10002304.5Jh-日Patln:D:workVarmadilVNEQU7jAREAAdding.匚ODE,READONLYENTRYMOVRJ#0MOV51.#1|REPEATADDRCi.RD.RlADDR1.R1.#1CMPRmBLEREPEA丁LDRR2.=RESULTSTRRO.R2HEREBHEREAREADataspace.D2TA,REA.DWRITERESULTLCDEND5、編譯匯編源代碼文件。右擊add.S文件,選擇Compile,如果沒有成功會彈出錯誤和警告窗口。生成.O目標代碼文件。實驗中生成的WMM.O文件如下圖所示:搜索u文件夾囪.nkrmaarmapd
5、d_DataretxjgRe!ObjectCMleadd.axf。6、編譯整個工程。選才iProjectMake進行整個工程的編譯??梢栽谀夸浛臻g查看是否生成了映像文件7、確認調(diào)試目標設置。設置目標處理器型號。8、運行映像文件。9、調(diào)試準備在AXD中,打開各個觀察窗口,做調(diào)試準備。選擇ProcessorViewsRegisters選項,打開ARM寄存器顯示窗口。調(diào)整窗口大小,使得Corrent節(jié)點的R0R2寄存器可見。選才PProcessorViewsMemory選項,打開ARM存儲器顯示窗口。在StartAddress輸入框中輸入準備查看的內(nèi)存區(qū)域首地址0 x9000。10、調(diào)試映像文件。打
6、開調(diào)試窗口。為了便于調(diào)試,觀察各個寄存器和存儲器的變化情況。11、單步運行程序,觀察并記錄結果。在AXD中,選擇ExecuteStep選項,或者F10鍵,單步運行程序,查看相關寄存器和存儲器相應地址上的變化,請把每一步的結果填入下表中。運行結果如圖所示:分析源程序可以看出,我們的程序僅對少數(shù)幾個寄存器進行了讀寫操作。序號執(zhí)行指令執(zhí)行后的變化情況寄存器八進制)存儲器(十六進制)R0R1R2PC0 x90001MOVR0,#00 x000000000 x000000000 x000000000 x000080040 x90002MOVR1,#10 x000000000 x000000010 x00
7、0000000 x000080080 x90103ADDR0,R0,R10 x000000010 x000000010 x000000000 x0000800c0 x90204ADDR1,R1,#10 x000000010 x000000020 x000000000 x000080100 x90305CMPR1,#N0 x000000010 x000000020 x000000000 x000080140 x90406BLE0 x000000010 x000000020 x000000000 x000080080 x9050REPEAT7ADDR0,R0,R10 x000000030 x000
8、000020 x000000000 x0000800c0 x9060注意:如果錯過記錄的時機可以選擇FileReloadCurrentImage重新加載映像文件。實驗思考:1、有沒有辦法讓AXD中寄存器和存儲器單元的值直接顯示為十進制?答:暫停ads,修改相關參數(shù),即可顯示同組同學:10002201孫郡遙10002304陸海霞10002302祁蕾10002308梁玉實驗二熟悉LINUX開發(fā)環(huán)境實驗目的:熟悉Linux開發(fā)環(huán)境,學會基于S3c2410的Linux開發(fā)環(huán)境的配置和使用。使用Linux的armv4l-unknown-linux-gcc編譯,使用基于NFS方式的下載調(diào)試,了解嵌入式開發(fā)
9、的基本過程。實驗環(huán)境:硬件:UP-NETARM2410-%入式實3平臺、PC機Pentium500以上,硬盤10G以上。軟件:PC機操作系統(tǒng)REDHATLINUX9.0+MINICOMFARM-LINUX開發(fā)環(huán)境實驗內(nèi)容:1、本次實驗使用RedhatLinux9.0操作系統(tǒng)環(huán)境,安裝ARM-Linux的開發(fā)庫及編譯器。2、創(chuàng)建一個新目錄,并在其中編寫hello.c和Makefile文件。學習在Linux下的編程和編譯過程。3、ARM開發(fā)板的使用和開發(fā)環(huán)境的設置。4、下載已經(jīng)編譯好的文件到目標開發(fā)板上運行。實驗步驟:1、嵌入式交叉開發(fā)環(huán)境的建立1)宿主機的環(huán)境搭建選擇一種方式在宿主機上直接安裝L
10、inux操作系統(tǒng),如安裝RedHat.下載VMWare解壓后根據(jù)提示正確安裝VMWar顯U硬盤中;運行VMWare根據(jù)向?qū)?chuàng)建一臺虛擬機并選擇Linux作為客戶操作系統(tǒng);根據(jù)向?qū)О惭bRedHatLinux9.02)虛擬機中啟動Linux操作系統(tǒng)用戶名:root密碼:12345678將Windows下的e盤設為共享目錄,則在Linux的/mnt/hgfs/目錄下就可以訪問到Windows下的e盤了。3)開發(fā)工具軟件的安裝1、安裝gcc在Linux主窗口中單擊鼠標右鍵,選擇“新建終端”命令,打開Linux命令行窗口。在目錄/mnt/hgfs/e/Linuxv7.2/arm41-tools/下找到g
11、cc的安裝文件install.sh并執(zhí)行它。操作命令如下:#ls#./install.sh2、配置PATH各徑/root/下有一個“.bash_Profile”文件(因為該文件是隱藏文件,所以需要用“l(fā)s-a”命令才能顯示);用vi編輯器編輯該文件:#vi.bash_Profile將文件中PATH量改為PATH=$PATH:$HOME/bin:/opt/host/armv41/bin/;存盤后執(zhí)行#source.bash_profile以后armv41-unknown-linux-gcc將會被自動搜索到。4)宿主機上的開發(fā)環(huán)境配置1、配置IP地址實驗箱的IP地址是192.168.0.115,所
12、以可以把主機的IP配置成192.168.0.121,具體配置時間方法如下:#ifconfigeth0192.168.0.121在Linux中選擇“Rec”菜單一“系統(tǒng)設置”-“網(wǎng)絡”,打開“網(wǎng)絡配置”窗口,雙擊設備eth0的藍色區(qū)域,進入以太網(wǎng)設置界面。2、關閉防火墻單擊“Rec”菜單一“系統(tǒng)設置”一安全級別,打開“安全級別配置”窗口,選擇“無防火墻”選項。3、配置NFS單擊“Red菜單-系統(tǒng)設置-服務器設置-服務,在“服務配置”窗口中勾選nfs,單擊“開始”4、NFS設置單擊“Red菜單-系統(tǒng)設置-服務器設置-NFS服務器,打開“NFS服務器配置”窗口,設置NFS共享。單擊增加,在“目錄”文
13、本框中填入需要共享的路徑,在主機文本框中填入允許進行連接的主機IP地址。選擇允許客戶對共享目錄的操作為只讀或讀寫。最后退出時則完成NFS配置。配置好后,界面應顯示如下圖所示:至此,交叉開發(fā)環(huán)境的主機部分配置完成。5)目標機的信息輸出使用超級終端介紹宿主機與實驗箱的通信。首先連接串口線:一端連接PC的串口(COM1,另一端連接到UP-NETARM2410-故驗箱的串口。接下來建立超級終端:運行Windows系統(tǒng)下的“開始”-“所有程序”-“附件”-“通訊”-“超級終端”,新建一個通信終端。M 11 i com Cbr-nTund Su mm ryWr 1 c utomuinds can be c
14、alled by (TRL-A/ $ A /bln/ConpiPressM i n Func t i on sSe 1 e a I I line I i oil a r pt e s i- lin I e r t o r none. 11 I. i un Lv Mquu I vaia Sjiuui unbui g 19917995 Suim iidiL i t i un h by JLikka Lali I inrii 1907 20 by Arna Ido Cn rvu 1 hu de M? I。1 PD8IJiaIirfdirectory.-JSendfiIe5.與cuiinriPuiun
15、匕l(fā)匕iCapturcun/off.aL心end.brak.IFTermnnIst*11in7工TIinswapon/Qff.wrunscriptt.tia)CiRuceive門Ie*RAddIliifajrtjed.Ihiiinip.】Iiniti白Ii重口M#dvm.Mrun府rrnt+KIoraIErhnon/offHOtherFuncIioni4JearSerten.LcOifljureMhicomBOSubpUIldjtiJiicujtl.JeXilmidrc心lXQiiiwjihno必仁甘1.Qfiir*nrkeye】iI鎧.BIft1p?題匚rollRackli6)程序的運行打開
16、超級終端,打開實驗箱電源開關,系統(tǒng)會由vivi開始引導。正常顯示時會顯示啟動信息到PressReturntostarttheLINUXnow,anyotherkeyforvivi:如果不進行任何操作等待30s或按回車鍵則啟動進入Linux系統(tǒng);如果按回車鍵以外的其他鍵則進入vivi控制臺。在這里輸入boot,會引導Kernel啟動Linux系統(tǒng)。Linux系統(tǒng)啟動完成后,屏幕顯示:/mnt/yaffs基于Linux的應用程序的開發(fā)步驟1、建立工作目錄rootzxtsmile#mkdirhellorootzxtsmile#cdhello2、編寫程序源代碼在Linux下的文本編輯器有許多,常用的是
17、vim和Xwindow界面下的gedit等,我們在開發(fā)過程中推薦使用vim,用戶需要學習vim的操作方法,請參考相關書籍中的關于vim的操作指南。Kdevelope、anjuta軟件的界面與vc6.0類似,使用它們對于熟悉windows環(huán)境下開發(fā)的用戶更容易上手。實際的hello.c源代碼較簡單,如下:#includemain()printf(helloworldn);我們可以是用下面的命令來編寫hello.c的源代碼,進入hello目錄使用vi命令來編輯代碼:rootzxthello#vihello.c按廠或者a”進入編輯模式,將上面的代碼錄入進去,完成后按Esc鍵進入命令狀態(tài),再用命令:w
18、q”保存并退出。這樣我們便在當前目錄下建立了一個名為hello.c的文件。3、編寫Makefile要使上面的hello.c程序能夠運行,我們必須要編寫一個Makefile文件,Makefile文件定義了一系列的規(guī)則,它指明了哪些文件需要編譯,哪些文件需要先編譯,哪些文件需要重新編譯等等更為復雜的命令。使用它帶來的好處就是自動編譯,你只需要敲一個make”命令整個工程就可以實現(xiàn)自動編譯,當然我們本次實驗只有一個文件,它還不能體現(xiàn)出使用Make巾le的優(yōu)越性,但當工程比較大文件比較多時,不使用Make巾le幾乎是不可能的。下面我們介紹本次實驗用到的Makefile文件。CC=armv4l-unkn
19、own-linux-gccEXEC=helloOBJS=hello.oCFLAGS+=LDFLAGS+=-staticall:$(EXEC)$(EXEC):$(OBJS)$(CC)$(LDFLAGS)-o$(OBJS)clean:-rm-f$(EXEC)*.elf*.gdb*.o下面我們來簡單介紹這個Makefile文件的幾個主要部分:CC指明編譯器EXEC表示編譯后生成的執(zhí)行文件名稱OBJS目標文件列表CFLAGS編譯參數(shù)LDFLAGS連接參數(shù)all:編譯主入口clean:清除編譯結果與上面編寫hello.c的過程類似,用vi來創(chuàng)建一個Makefile文件并將代碼錄入其中rootzxthel
20、lo#viMakefile4、編譯應用程序在上面的步驟完成后,我們就可以在hello目錄下運行“make”來編譯我們的程序了。如果進行了修改,重新編譯則運行:rootzxthello#makecleanrootzxthello#make5、下載調(diào)試在宿主PC計算機上啟動NFS服務,并設置好共享的目錄,具體配置請參照前面第一章第四節(jié)中關于嵌入式Linux環(huán)境開發(fā)環(huán)境的建立。在建立好NFS共享目錄以后,我們就可以進入MINICOM中建立開發(fā)板與宿主PC機之間的通訊了。rootzxthello#minicom/mnt/yaffsmount-tnfs-onolock192.168.0.56:/arm2
21、410s/host如果不想使用我們提供的源碼的話,可以再建立一個NFS共享文件夾。如/root/share,我們把我們自己編譯生成的可執(zhí)行文件復制到該文件夾下,并通過MINICOM掛載到開發(fā)板上。rootzxthello#cphello/root/sharerootzxthello#minicom/mnt/yaffsmount-tnfs-onolock192.168.0.56:/root/share/host再進入/host目錄運行剛剛編譯好的hello程序,查看運行結果。/mnt/yaffscd/host/host./hellohelloworld實驗思考:1.Makefile是如何工作的?
22、其中的宏定義分別是什么意思?答:解釋makefile如何工作:makefile是一個文本文件,用于描述程序源代碼之間以及程序可執(zhí)行代碼與源代碼之間的依賴關系。簡單例子:最終編譯生成的可執(zhí)行文件ab.out是由a.c和b.c共同編譯生成的,那么make文件就要寫兩行:ab.out:a.cb.cgcca.cb.c-oab.out第一行描述了依賴關系,第二行描述了依賴關系是如何達成的。更復雜的例子:最終編譯生成的可執(zhí)行文件ab.out是由a.c和b.obj功能編譯生成的,而b.obj是由bl.c和b2.c編譯而成,那么要寫好多行:ab.out:a.cb.objgcca.cb.obj-oab.outb
23、.obj:bl.cb2.cgcc-cbl.cb2.c-ob.obj這就是makefile的工作方法。關于宏定義,簡單點說就是文本替換。為了方便使用不同的編譯器或者編譯環(huán)境以及硬件環(huán)境,一些復雜的軟件使用了大量的宏定義來代替諸如“gcc”。同組同學:10002201孫郡遙10002304陸海霞10002302祁蕾10002308梁玉實驗三多線程應用程序設計實驗目的:了解多線程程序設計的基本原理。學習pthread庫函數(shù)的使用。實驗環(huán)境:硬件:UP-NETARM2410-S嵌入式實3平臺,PC機Pentium500以上,硬盤40G以上,內(nèi)存大于128M。軟件:PC機操作系統(tǒng)REDHATLINUX9
24、.0+MINICOM+ARM-LINUX開發(fā)環(huán)境實驗內(nèi)容:讀懂pthread.c的源代碼,熟悉幾個重要的PTHREA*函數(shù)的使用。掌握共享鎖和信號量的使用方法。進入/arm2410s/exp/basic/02_pthread目錄,運行make產(chǎn)生pthread程序,使用NFS方式連接開發(fā)主機進行運行實驗。實驗步驟:.實驗源代碼與結構流程圖本實驗為著名的生產(chǎn)者一消費者問題模型的實現(xiàn),主程序中分別啟動生產(chǎn)者線程和消費者線程。生產(chǎn)者線程不斷順序地將0到1000的數(shù)字寫入共享的循環(huán)緩沖區(qū),同時消費者線程不斷地從共享的循環(huán)緩沖區(qū)讀取數(shù)據(jù)。流程圖如下圖所示:本實驗具體代碼如下:#include#inclu
25、de#include#includepthread.h#defineBUFFER_SIZE16/*設置一個整數(shù)的圓形緩沖區(qū)*/structprodcons緩沖區(qū)數(shù)組 */互斥鎖 */讀寫的位置*/緩沖區(qū)非空信號 */緩沖區(qū)非滿信號*/intbufferBUFFER_SIZE;/*pthread_mutex_tlock;/*intreadpos,writepos;/*pthread_cond_tnotempty;/*pthread_cond_tnotfull;/*;/*初始化緩沖區(qū)*/voidinit(structprodcons*b)pthread_mutex_init(&b-lock,NUL
26、L);pthread_cond_init(&b-notempty,NULL);pthread_cond_init(&b-notfull,NULL);b-readpos=0;b-writepos=0;/*向緩沖區(qū)中寫入一個整數(shù)*/voidput(structprodcons*b,intdata)pthread_mutex_lock(&b-lock);/*等待緩沖區(qū)非滿*/while(b-writepos+1)%BUFFER_SIZE=b-readpos)printf(waitfornotfulln);pthread_cond_wait(&b-notfull,&b-lock);/*寫數(shù)據(jù)并且指針前
27、移*/b-bufferb-writepos=data;b-writepos+;if(b-writepos=BUFFER_SIZE)b-writepos=0;/*設置緩沖區(qū)非空信號*/pthread_cond_signal(&b-notempty);pthread_mutex_unlock(&b-lock);/*從緩沖區(qū)中讀出一個整數(shù)*/intget(structprodcons*b)intdata;pthread_mutex_lock(&b-lock);/*等待緩沖區(qū)非空*/while(b-writepos=b-readpos)printf(waitfornotemptyn);pthread_
28、cond_wait(&b-notempty,&b-lock);/*讀數(shù)據(jù)并且指針前移*/data=b-bufferb-readpos;b-readpos+;if(b-readpos=BUFFER_SIZE)b-readpos=0;/*設置緩沖區(qū)非滿信號*/pthread_cond_signal(&b-notfull);pthread_mutex_unlock(&b-lock);returndata;#defineOVER(-1)structprodconsbuffer;/*/void*producer(void*data)intn;for(n=0;n%dn,n);put(&buffer,n);
29、put(&buffer,OVER);printf(producerstopped!n);returnNULL;/*/void*consumer(void*data)intd;while(1)d=get(&buffer);if(d=OVER)break;printf(%d-getn,d);printf(consumerstopped!n);returnNULL;/*/intmain(void)pthread_tth_a,th_b;void*retval;init(&buffer);pthread_create(&th_a,NULL,producer,0);pthread_create(&th_b
30、,NULL,consumer,0);/*等待生產(chǎn)者和消費者結束*/pthread_join(th_a,&retval);pthread_join(th_b,&retval);return0;3.主要函數(shù)分析:下面我們來看一下,生產(chǎn)者寫入緩沖區(qū)和消費者從緩沖區(qū)讀數(shù)的具體流程,生產(chǎn)者首先要獲得互斥鎖,并且判斷寫指針+1后是否等于讀指針,如果相等則進入等待狀態(tài),等候條件變量notfull;如果不等則向緩沖區(qū)中寫一個整數(shù),并且設置條件變量為notempty,最后釋放互斥鎖。消費者線程與生產(chǎn)者線程類似,這里就不再過多介紹了。流程圖如下:生產(chǎn)者寫入共享的循環(huán)緩沖區(qū)函數(shù)PUTvoidput(structprodcons*b,intdata)pthread_mutex_lock(&b-lock);/獲取互斥鎖while(b-writepos+1)%BUFFER_SIZE=b-readpos)/如果讀寫位置相同pthread_cond_wait(&b-notfull,&b-lock);/等待狀態(tài)變量b-no
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度建筑企業(yè)內(nèi)部承包合同爭議解決機制
- 2025年度個人信用貸款合同模板匯編
- 2025年度建筑抗震加固安裝工程承包合同(安全耐久)
- 鹽城江蘇鹽城市大豐區(qū)住房和城鄉(xiāng)建設局招聘勞務派遣工作人員4人筆試歷年參考題庫附帶答案詳解
- 滁州2025年安徽滁州來安縣司法局招聘5名司法協(xié)理員筆試歷年參考題庫附帶答案詳解
- 湖北2025年湖北理工學院專項招聘97人筆試歷年參考題庫附帶答案詳解
- 浙江浙江省衛(wèi)生健康綜合保障中心招聘編外人員筆試歷年參考題庫附帶答案詳解
- 洛陽2024年河南洛陽市孟津區(qū)引進研究生學歷人才50人筆試歷年參考題庫附帶答案詳解
- 承德2025年河北承德市中心醫(yī)院招聘筆試歷年參考題庫附帶答案詳解
- 2025年中國五礦機械市場調(diào)查研究報告
- 數(shù)學-河南省三門峽市2024-2025學年高二上學期1月期末調(diào)研考試試題和答案
- 2025年春新人教版數(shù)學七年級下冊教學課件
- 《心臟血管的解剖》課件
- 心肺復蘇課件2024
- 2024-2030年中國并購基金行業(yè)發(fā)展前景預測及投資策略研究報告
- 河道清淤安全培訓課件
- 2024各科普通高中課程標準
- 7.3.1印度(第1課時)七年級地理下冊(人教版)
- 教師培訓校園安全
- 北師大版語文四年級下冊全冊教案
- 《湖南師范大學》課件
評論
0/150
提交評論