版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、 第四章第四章DSP的開發(fā)環(huán)境與工具的開發(fā)環(huán)境與工具 主要內(nèi)容主要內(nèi)容n軟件開發(fā)過程及開發(fā)工具軟件開發(fā)過程及開發(fā)工具 nCCS集成開發(fā)環(huán)境集成開發(fā)環(huán)境 CCS集成開發(fā)環(huán)境集成開發(fā)環(huán)境 n TMS320C54x代碼生成工具,如匯編器、鏈接器、代碼生成工具,如匯編器、鏈接器、C/C+編譯器、建庫工具等。編譯器、建庫工具等。n CCS集成開發(fā)環(huán)境(集成開發(fā)環(huán)境(Integrated Developong Envirorment,IDE),包括編輯器、工程管理工具、),包括編輯器、工程管理工具、調(diào)試工具等。調(diào)試工具等。n DSP/BIOS(Basic Input and Output System)插
2、)插件及應(yīng)用程序接口件及應(yīng)用程序接口API(Application Progran Interface)。)。n RTDX(Real Time Data Exchange)實(shí)時數(shù)據(jù)交換)實(shí)時數(shù)據(jù)交換插件、主機(jī)(插件、主機(jī)(Host)接口及相應(yīng)的)接口及相應(yīng)的API。CCS系統(tǒng)安裝系統(tǒng)安裝nCCS對對PC機(jī)的最低要求為機(jī)的最低要求為Windows 95、32M RAM、100M剩余硬盤空間、奔騰剩余硬盤空間、奔騰90以上處理以上處理器、器、SVGA顯示器(分辨率顯示器(分辨率800600以上)。以上)。CCS系統(tǒng)設(shè)置系統(tǒng)設(shè)置n在安裝在安裝CCS之后、運(yùn)行之后、運(yùn)行CCS軟件之前,首先需軟件之前,
3、首先需要運(yùn)行要運(yùn)行CCS設(shè)置程序,根據(jù)用戶所擁有的軟、設(shè)置程序,根據(jù)用戶所擁有的軟、硬件資源對硬件資源對CCS進(jìn)行適當(dāng)?shù)呐渲?。進(jìn)行適當(dāng)?shù)呐渲?。n啟動啟動Setup CCS 應(yīng)用程序,將顯示應(yīng)用程序,將顯示Code Composer Studio Setup窗口。窗口。 在在Factory Boards中添加設(shè)置中添加設(shè)置n 在在Family下選擇下選擇C55xx,將看到所有,將看到所有C55xx的仿真驅(qū)動,包括軟件仿真和硬件仿真;的仿真驅(qū)動,包括軟件仿真和硬件仿真;n 在在Platform下選擇下選擇Simulator,在,在Available Factory Boards中只顯示軟件仿真驅(qū)動
4、,選中只顯示軟件仿真驅(qū)動,選中相應(yīng)的驅(qū)動;中相應(yīng)的驅(qū)動;n 雙擊雙擊C55xx Rev4.0 CPU Functional Simulator,可以在,可以在My System下看到所加入下看到所加入的驅(qū)動;的驅(qū)動;n 點(diǎn)擊點(diǎn)擊Save & Quit,將保存設(shè)置退出,將保存設(shè)置退出Setup CCStudio v3.1并啟動運(yùn)行并啟動運(yùn)行CCStudio。CCS文件名介紹文件名介紹 n*.pjt:CCS定義的工程項(xiàng)目文件;定義的工程項(xiàng)目文件;n*.c:C語言編寫的源程序文件;語言編寫的源程序文件;n*.asm:匯編語言編寫的源程序文件;:匯編語言編寫的源程序文件;n*.h:C語言程序的
5、頭文件,包括語言程序的頭文件,包括DSP/BIOS API模塊的頭模塊的頭文件;文件;n*.lib:庫文件;:庫文件;n*.cmd:鏈接命令文件;:鏈接命令文件;n*.obj:由源文件編譯或匯編后所生成的目標(biāo)文件;:由源文件編譯或匯編后所生成的目標(biāo)文件;n*.out:完成編譯、匯編、鏈接后所形成的可執(zhí)行文件,:完成編譯、匯編、鏈接后所形成的可執(zhí)行文件,可在可在CCS監(jiān)控下調(diào)試和執(zhí)行;監(jiān)控下調(diào)試和執(zhí)行;n*.wks:工作空間文件;:工作空間文件;n*.cdb:CCS的配置數(shù)據(jù)庫文件,是使用的配置數(shù)據(jù)庫文件,是使用DSP/BIOS API模塊所必須的。模塊所必須的。 匯編偽指令匯編偽指令作用作用舉
6、例舉例.title緊跟其后的是用雙引號括起的源程序名緊跟其后的是用雙引號括起的源程序名.title “example” .end結(jié)束匯編命令,匯編程序?qū)⒑雎源撕蟮娜魏谓Y(jié)束匯編命令,匯編程序?qū)⒑雎源撕蟮娜魏卧凑Z句,所以它是程序的最后語句源語句,所以它是程序的最后語句放在匯編語言源程序的最后放在匯編語言源程序的最后.data緊跟其后的是已初始化數(shù)據(jù),通常含有數(shù)據(jù)緊跟其后的是已初始化數(shù)據(jù),通常含有數(shù)據(jù)表或預(yù)先初始化的數(shù)值表或預(yù)先初始化的數(shù)值 .datatable1: .int 1,2 ,3,4 .int 5,6,7,8Table2: .word -1,-2,-3,-4 .word -5,-6,-7,
7、-8.int用來設(shè)置一個或多個用來設(shè)置一個或多個1616位無符號整型量常數(shù)位無符號整型量常數(shù).word用來設(shè)置一個或多個用來設(shè)置一個或多個1616位帶符號整型量常數(shù)位帶符號整型量常數(shù).text緊跟其后的是匯編語言程序正文緊跟其后的是匯編語言程序正文.bss.bss.bss為未初始化變量保留存儲空間為未初始化變量保留存儲空間 .bss x,4 表示在數(shù)據(jù)存儲表示在數(shù)據(jù)存儲器中空出器中空出4個存儲單元存放變個存儲單元存放變量量x1,x2,x3,x4.sect建立包含代碼和數(shù)據(jù)的自定義段建立包含代碼和數(shù)據(jù)的自定義段.sect ”vectors”定義中斷服務(wù)定義中斷服務(wù)程序段,緊隨其后的是復(fù)位向程序段
8、,緊隨其后的是復(fù)位向量和中斷向量量和中斷向量常用偽指令一覽表常用偽指令一覽表匯編偽指令匯編偽指令作用作用舉例舉例.mmregs將將TMS320TMS320各寄存器名定義為全局符號,各寄存器名定義為全局符號,這樣就可以直接引用寄存器(符號)這樣就可以直接引用寄存器(符號).set.set.set偽指令附一常數(shù)值給某個符號,也偽指令附一常數(shù)值給某個符號,也可以將符號常數(shù)賦給寄存器可以將符號常數(shù)賦給寄存器Shift .set 5 ld #shift,AAuxR1 .set AR1 MVMM AuxR1,sp.copy/.include從其他文件讀取源代碼語句。從其他文件讀取源代碼語句。 .copy
9、“coeff.inc”.def指定定義在當(dāng)前模塊中,但可被其他模指定定義在當(dāng)前模塊中,但可被其他模塊使用的符號塊使用的符號 .def start.global聲明符號為全局符號,使其在鏈接時可聲明符號為全局符號,使其在鏈接時可為其他模塊使用為其他模塊使用 .global _c_int00.ref在當(dāng)前塊中使用,但在其他模塊中定義在當(dāng)前塊中使用,但在其他模塊中定義的符號的符號鏈接器命令文件的編寫和使用鏈接器命令文件的編寫和使用 n鏈接命令文件中可以使用鏈接命令文件中可以使用MEMORY命令和命令和SECTIONS命令來定義目標(biāo)系統(tǒng)的存儲器配置命令來定義目標(biāo)系統(tǒng)的存儲器配置圖及段的映射。圖及段的映
10、射。n MEMORY和和SECTIONS鏈接偽指令,存儲器偽鏈接偽指令,存儲器偽指令指令MEMEORY,用來定義目標(biāo)系統(tǒng)的存儲器,用來定義目標(biāo)系統(tǒng)的存儲器空間。段偽指令空間。段偽指令SECTIONS負(fù)責(zé)告訴鏈接器將負(fù)責(zé)告訴鏈接器將輸入文件中用輸入文件中用.text、.data、.bss、.sect等偽指等偽指令定義的段放到令定義的段放到MEMORY命令描述的存儲器空命令描述的存儲器空間的什么位置。間的什么位置。nMEMORY偽指令的一般語法為:偽指令的一般語法為:nMEMORYnn PAGE 0: name1(attr): original=constant, length=constant;
11、n nPAGE n: namen(attr): original=constant, length=constant;nn(1)PAGE指定存儲器空間頁面,最多指定存儲器空間頁面,最多255。通常通常PAGE 0用于程序存儲器,用于程序存儲器,PAGE 1用于數(shù)用于數(shù)據(jù)存儲器。如果不指定據(jù)存儲器。如果不指定PAGE,鏈接器默認(rèn)指,鏈接器默認(rèn)指定定PAGE 0。每一個。每一個PAGE代表一個完全獨(dú)立代表一個完全獨(dú)立的地址空間。的地址空間。n(2)name是存儲器區(qū)間的取名,可由是存儲器區(qū)間的取名,可由164個字符組成,包括個字符組成,包括AZ、az、$、.、_。名稱。名稱對鏈接器沒有特殊的含義,
12、只是用來區(qū)分鏈接對鏈接器沒有特殊的含義,只是用來區(qū)分鏈接器區(qū)間。在不同的器區(qū)間。在不同的PAGE里區(qū)間名可以相同,里區(qū)間名可以相同,但有同一個但有同一個PAGE里區(qū)間名不能相同,且不能里區(qū)間名不能相同,且不能重疊配置。重疊配置。n(3)attr指定存儲區(qū)的指定存儲區(qū)的14種屬性,屬性為任種屬性,屬性為任選項(xiàng),利用屬性將輸出段定位到存儲器時加以選項(xiàng),利用屬性將輸出段定位到存儲器時加以限制。限制。nR:指定該存儲區(qū)可以讀。:指定該存儲區(qū)可以讀。nW:指定該存儲區(qū)可以寫。:指定該存儲區(qū)可以寫。nX:指定該存儲區(qū)可以裝入可執(zhí)行代碼。:指定該存儲區(qū)可以裝入可執(zhí)行代碼。nI:指定該存儲區(qū)可以進(jìn)行初始化。:
13、指定該存儲區(qū)可以進(jìn)行初始化。n如果不給存儲區(qū)指定屬性,默認(rèn)為具有以上如果不給存儲區(qū)指定屬性,默認(rèn)為具有以上4種屬性,可以不受限制地將任何輸出段分配到種屬性,可以不受限制地將任何輸出段分配到該存儲區(qū)。該存儲區(qū)。n(4)original指定存儲區(qū)的起始地址,可以簡指定存儲區(qū)的起始地址,可以簡寫為寫為org或或o,該值是一個,該值是一個16位二進(jìn)制常數(shù),位二進(jìn)制常數(shù),可以用十進(jìn)制、八進(jìn)制或十六進(jìn)制數(shù)表示??梢杂檬M(jìn)制、八進(jìn)制或十六進(jìn)制數(shù)表示。n(5)length指定存儲區(qū)的長度,可以簡寫為指定存儲區(qū)的長度,可以簡寫為len或或l。nSECTIONS偽指令語法格式如下:偽指令語法格式如下:nSECTI
14、ONSnn name: property ,property ,propertynname: property ,property ,propertynname: property ,property ,propertyn鏈接器命令文件舉例鏈接器命令文件舉例nMEMORY PAGE 0: VECT:origin=0 x8000h,length 0 x040h PAGE 0: PROG:origin=0 x8040h,length 0 x600h PAGE 1: DATA:origin=0 x8000h,length 0 x400hSECTIONS.vectors VECT PAGE 0.tex
15、t PROG PAGE 0.bss DATA PAGE 1.const DATA PAGE 1;this function is FFT.title FFT.asm.mmregs.copy coeff.inc“ ;從從coeff.inc文件復(fù)制旋轉(zhuǎn)因子系數(shù)文件復(fù)制旋轉(zhuǎn)因子系數(shù).def _c_int00sine1: .usect sine1,512 ;512=N/2,N=1024(最大最大N=1024) cosine1: .usect cosine1,512 sine: .usectsine,512 ;512=N/2,N=1024(最大最大N=1024) cosine: .usect cosin
16、e,512 fft_data: .usect fft_data,1024 d_input: .usect d_input, 1024 fft_out: .usect fft_out, 512 STACK .usect STACK,10 .bss d_twid_idx,1.bssd_data_idx,1.bssd_grps_cnt,1.sectfft_prg“。 。MEMORYPAGE 0 :EPROM : org = 0E000h, len=1000hVECS : org = 0FF80h, len=0080hPAGE 1 :SPRAM : org =0060h, len=0020hDARAM
17、 : org =0200h, len=1000hRAM : org =8000h, len=1500hSECTIONS sine1 : EPROM PAGE 0 cosine1 : EPROM PAGE 0 fft_prg : EPROM PAGE 0 .vectors : VECS PAGE 0 .bss : SPRAM PAGE 1 sine : align(1024) DARAM PAGE 1 cosine : align(1024) DARAM PAGE 1 d_input : RAM PAGE 1 fft_data : RAM PAGE 1 fft_out : RAM PAGE 1
18、STACK : SPRAM PAGE 1存儲空存儲空間名稱間名稱分配分配各個各個段到段到各個各個存儲存儲空間空間該偽指令就是用來指定存儲器的模型該偽指令就是用來指定存儲器的模型該偽指令將輸出段分配到指定的存儲器范圍該偽指令將輸出段分配到指定的存儲器范圍程序存儲器程序存儲器E000E1FFE200E3FFE400E4A2FF80EFFF正弦系正弦系數(shù)表數(shù)表余弦系余弦系數(shù)表數(shù)表程序程序代碼代碼0000 005F0060006100620063006C040005FF080009FF800087FF88008FFF900093FF數(shù)據(jù)存儲器數(shù)據(jù)存儲器 sine1 cosine1 fft_prg .v
19、ectors .bss 存儲器映射存儲器映射寄存器寄存器暫存單元暫存單元堆棧堆棧正弦系數(shù)表正弦系數(shù)表余弦系數(shù)表余弦系數(shù)表輸入數(shù)據(jù)輸入數(shù)據(jù)FFT 結(jié)果結(jié)果(實(shí)部、虛部)(實(shí)部、虛部)FFT結(jié)果結(jié)果(功率譜)(功率譜)sinecosine d_input fft_data fft_out 用用CCS開發(fā)簡單的程序開發(fā)簡單的程序1創(chuàng)建新的工程文件創(chuàng)建新的工程文件n工程文件中包含著設(shè)計中所有的源代碼文件、工程文件中包含著設(shè)計中所有的源代碼文件、鏈接器命令文件、庫函數(shù)、頭文件等。鏈接器命令文件、庫函數(shù)、頭文件等。(1)在)在CCS的安裝目錄的的安裝目錄的myprojects子目錄下子目錄下創(chuàng)建一個創(chuàng)建一
20、個myfile1目錄。目錄。 (2)啟動)啟動CCS,在,在Project菜單中選擇菜單中選擇New項(xiàng),項(xiàng),在在Project中輸入中輸入myfile1,CCS將創(chuàng)建一個名將創(chuàng)建一個名為為myfile1.pjt的工程。的工程。 2.將文件添加到工程中將文件添加到工程中(1)新建源文件)新建源文件 執(zhí)行菜單執(zhí)行菜單file/New/source files,并把文件并把文件保存在保存在myfile工程文件夾下。工程文件夾下。(2)在工程中添加源文件)在工程中添加源文件 執(zhí)行菜單執(zhí)行菜單project/add files to project,把此文,把此文件添加到工程中。件添加到工程中。3生成和
21、運(yùn)行程序生成和運(yùn)行程序(1)選擇菜單命令)選擇菜單命令ProjectRebuild All,對工程重新,對工程重新編譯、匯編和鏈接,主窗口下方的信息窗口將顯示編譯、匯編和鏈接,主窗口下方的信息窗口將顯示build進(jìn)行匯編、編譯和鏈接的相關(guān)信息。進(jìn)行匯編、編譯和鏈接的相關(guān)信息。(2)選擇菜單命令)選擇菜單命令FileLoad Program,在當(dāng)前目錄,在當(dāng)前目錄的的Debug目錄下選擇目錄下選擇myfile.out并打開,將并打開,將Build生成生成的程序加載到的程序加載到DSP中。中。 (3)選擇菜單命令)選擇菜單命令DebugRun或在或在Debug工具欄上單工具欄上單擊擊Run按鈕,運(yùn)
22、行該程序。按鈕,運(yùn)行該程序。 舉例舉例n實(shí)現(xiàn)數(shù)組實(shí)現(xiàn)數(shù)組a20=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,x20=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1的初始化,并將數(shù)據(jù)存儲器中的初始化,并將數(shù)據(jù)存儲器中的數(shù)組的數(shù)組x20復(fù)制到數(shù)組復(fù)制到數(shù)組y20,將數(shù)據(jù)存儲器,將數(shù)據(jù)存儲器中的中的a20寫入到程序存儲器寫入到程序存儲器PROM(2000H-2013H),再將程序存儲器再將程序存儲器PROM中的中的20個數(shù)據(jù)個數(shù)據(jù)存入數(shù)據(jù)存儲器存入數(shù)據(jù)存儲器DATA(0200H-0213H)1.編寫匯編源程序
23、編寫匯編源程序n .mmregsn .datanTBL: .word n 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19n .word 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1nPROM : .usect “PROM”,20n .bss a,20n .bss x,20n .bss y,20nDATA .usect “DATA”,20n .textnStart: STM #a,AR1n RPT #39n MVPD TBL,*AR1+n STM #x,AR2n STM #y,AR3n RPT #19n M
24、VDD *AR2+,*AR3+n STM #a,AR1n LD #PROM,An STM #19,AR3nLOOP: WRITA *AR1+n ADD #1,A,An BANZ LOOP,*AR3-n LD #PROM-1,An STM #DATA,AR1n ST #19,BRCn RPTB LOOP1n ADD #1,A,AnLOOP1: READA *AR1+nWAIT: NOPn B WAIT2.建立匯編源程序建立匯編源程序n在在CCS環(huán)境下,點(diǎn)擊環(huán)境下,點(diǎn)擊file/new/source file菜單菜單命令,打開一個空白文檔,將匯編程序輸入。命令,打開一個空白文檔,將匯編程序輸入。n
25、單擊單擊file/save菜單命令,在菜單命令,在D:program filestimyprojects下保存文件名為下保存文件名為mymove,并選擇保存類型為并選擇保存類型為*.asm。3.建立鏈接命令文件建立鏈接命令文件n MEMORYn PAGE 0: n RAM: origin=1000h,length=800hn RAM1:origin=2000h,length=300hn PAGE 1: n DARAM1: origin=0100h,length=100hn DARAM2: origin=0200h,length=100hn n SECTIONSn n .data :RAM PA
26、GE 0n .text :RAM PAGE 0n PROM:RAM1 PAGE 0n .bss :DARAM1 PAGE1n DATA :DARAM2 PAGE1n 4.創(chuàng)建一個新工程創(chuàng)建一個新工程n在在project菜單中選擇菜單中選擇new項(xiàng),彈出項(xiàng),彈出project creation窗口,在窗口,在project欄中輸入欄中輸入mymove,單擊單擊“完成完成”按鈕,按鈕,CCS將創(chuàng)建一個名為將創(chuàng)建一個名為mymove.pjt的工程,此文件保存了工程的設(shè)的工程,此文件保存了工程的設(shè)置信息及工程中的文件引用情況。置信息及工程中的文件引用情況。5.將有關(guān)文件添加到工程中將有關(guān)文件添加到工程
27、中n從從project菜單中選取菜單中選取add files to project命令,命令,選擇文件選擇文件mymove.asm,雙擊,雙擊“找開找開”按鈕,按鈕,將將mymove.asm添加到工程中。添加到工程中。n從從project菜單中選取菜單中選取add files to project命令,命令,選擇文件選擇文件mymove.cmd,將,將mymove.cmd添添加到工程中。加到工程中。6.匯編、編譯和鏈接產(chǎn)生匯編、編譯和鏈接產(chǎn)生.out文件文件n點(diǎn)擊點(diǎn)擊project菜單中的菜單中的rebuild all。在監(jiān)視窗口。在監(jiān)視窗口顯示匯編、編譯和鏈接的相關(guān)信息。如果沒有顯示匯編、編譯和鏈接的相關(guān)信息。如果沒有錯誤,將產(chǎn)生錯誤,將產(chǎn)生mymove.out文件;如果有錯,文件;如果有錯,在監(jiān)視窗口以紅色字體顯示出錯行,用鼠標(biāo)雙在監(jiān)視窗口以紅色字體顯示出錯行,用鼠標(biāo)雙擊該行,光標(biāo)跳至源程序相應(yīng)的出錯行。修改擊該行,光標(biāo)跳至源程序相應(yīng)的出錯行。修改錯誤后,重新匯編、鏈接。錯誤后,重新匯編、鏈接。7.加載并運(yùn)行加載并運(yùn)行.out文件文件n執(zhí)行菜單命令執(zhí)行菜單命令
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 科技企業(yè)技術(shù)文檔語言規(guī)范制度
- 工作調(diào)動后事業(yè)單位聘用合同(2篇)
- 銀川-PEP-2024年11版小學(xué)5年級下冊英語第五單元測驗(yàn)卷
- 思維導(dǎo)圖在初中生物學(xué)重要概念教學(xué)中的應(yīng)用
- 學(xué)校購買灶具協(xié)議書(2篇)
- 儲煤場租賃合同的稅務(wù)處理
- VR直播娛樂技術(shù)合作協(xié)議范本
- 《兼職勞動合同》
- 生態(tài)修復(fù)工程沉降觀測方案
- 化工廠安全生產(chǎn)方案
- 2024年山東省春季高考數(shù)學(xué)試卷試題真題(含答案)
- 新生兒高膽紅素血癥護(hù)理查房 (精制手工圖文)
- 審計招投標(biāo)合同范本
- 2024年《種子生產(chǎn)經(jīng)營者及種子法》知識考試題庫與答案
- 醫(yī)療機(jī)構(gòu)聘用合同標(biāo)準(zhǔn)范本
- 2024-2030年中國移動運(yùn)營行業(yè)深度分析及發(fā)展戰(zhàn)略研究咨詢報告
- 服裝行業(yè)競爭對手分析
- 教室使用登記表
- 易制毒化學(xué)品培訓(xùn)教育制度
- 中成藥處方審核專家講座
- 2014年4月自考00804金融法二試題及答案含解析
評論
0/150
提交評論