軟件設(shè)計(jì)與開(kāi)發(fā)_第1頁(yè)
軟件設(shè)計(jì)與開(kāi)發(fā)_第2頁(yè)
軟件設(shè)計(jì)與開(kāi)發(fā)_第3頁(yè)
軟件設(shè)計(jì)與開(kāi)發(fā)_第4頁(yè)
軟件設(shè)計(jì)與開(kāi)發(fā)_第5頁(yè)
已閱讀5頁(yè),還剩57頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

軟件設(shè)計(jì)與開(kāi)發(fā)第1頁(yè),共62頁(yè),2023年,2月20日,星期二硬件軟件成本比較%硬件HW、軟件SW成本比較HWSWt系統(tǒng)的成本軟件取代硬件例子:計(jì)算器詞典:金山詞霸VCD播放器電子圖書(shū)e_bookPID調(diào)節(jié)器:運(yùn)放,模擬->數(shù)字化,軟件化第2頁(yè),共62頁(yè),2023年,2月20日,星期二開(kāi)發(fā)工具開(kāi)發(fā)工具硬件:

TIXDS510(ExtendedDevelopmentSystem)硬件仿真器(Emulator)(JTAG接口:基于掃描的仿真)

DSK初學(xué)者開(kāi)發(fā)套件(DSPStarterKit)聞亭XDS-EPPDSP開(kāi)發(fā)系統(tǒng)

(PC機(jī)插卡式-EISA,PCI總線,并口式,USB接口式,RS232串口式-PC機(jī)通過(guò)串口與評(píng)估板相連)第3頁(yè),共62頁(yè),2023年,2月20日,星期二EVM評(píng)估板(Evaluation,DEMO板,實(shí)驗(yàn)板板上資源):DSP芯片(定時(shí)器,WD),JTAG接口,A/D轉(zhuǎn)換,PWM輸出,捕獲單元輸入,QEP輸入,并行接口,RS232串口,SPI接口,CAN接口,片外擴(kuò)展的程序存儲(chǔ)器與數(shù)據(jù)存儲(chǔ)器,鍵盤(pán)顯示人機(jī)交互接口,電源(如5V轉(zhuǎn)3.3V芯片TITPS77666),有源晶體振蕩器,復(fù)位電路

軟件:集成開(kāi)發(fā)環(huán)境CC/CCS第4頁(yè),共62頁(yè),2023年,2月20日,星期二開(kāi)發(fā)工具:仿真器第5頁(yè),共62頁(yè),2023年,2月20日,星期二開(kāi)發(fā)工具:評(píng)估板(EVM)第6頁(yè),共62頁(yè),2023年,2月20日,星期二軟件開(kāi)發(fā)流程

編輯:生成源程序(*.asm,*.c)與命令文件(*.cmd)編譯與匯編:生成目標(biāo)文件(*.obj為COFF格式)及列表文件(*.lst)連接:生成可執(zhí)行代碼(*.out)及映射文件(*.map)調(diào)試:通過(guò)JTAG接口下載到目標(biāo)系統(tǒng)EVM程序固化燒寫(xiě)到FlashEPROM第7頁(yè),共62頁(yè),2023年,2月20日,星期二軟件開(kāi)發(fā)流程第8頁(yè),共62頁(yè),2023年,2月20日,星期二幾種基本文件源文件源程序:

匯編語(yǔ)言文件(*.asm),C文件(*.c)頭文件(*.h):定義寄存器映射地址,用戶自定義的常量等命令文件(*.cmd)實(shí)現(xiàn)程序存儲(chǔ)器空間和數(shù)據(jù)存儲(chǔ)器空間的分配庫(kù)文件(*.lib)生成文件目標(biāo)文件(*.obj):COFF目標(biāo)文件格式列表文件(*.lst):匯編生成的文件映射文件(*.map):存儲(chǔ)器分配可執(zhí)行代碼文件(*.out)第9頁(yè),共62頁(yè),2023年,2月20日,星期二匯編語(yǔ)言命令(偽指令)

段(塊、Section)定義命令共用目標(biāo)文件格式COFF:TI的匯編與聯(lián)接程序建立的目標(biāo)文件采用共用目標(biāo)文件格式COFF(CommonObjectFileFormat)。其核心是程序員在編寫(xiě)DSP程序時(shí)基于代碼塊和數(shù)據(jù)塊的概念,而不是一條條指令,一個(gè)個(gè)數(shù)據(jù)。基于這種文件格式編寫(xiě)的DSP程序,具有可讀性強(qiáng),可移植性好等特點(diǎn)。便于模塊化編程、管理代碼段和存儲(chǔ)器,即不必為程序代碼或變量指定目標(biāo)地址。第10頁(yè),共62頁(yè),2023年,2月20日,星期二段是目標(biāo)文件的最小單位,是在存儲(chǔ)器中占據(jù)連續(xù)空間的代碼和數(shù)據(jù)塊,各段相互獨(dú)立。

COFF文件格式包括三個(gè)缺省的段:.text段,通常包含可執(zhí)行代碼。.data段,通常包含已初始化的數(shù)據(jù)。.bss段,通常為未初始化的數(shù)據(jù)保留空間。第11頁(yè),共62頁(yè),2023年,2月20日,星期二匯編語(yǔ)言命令段可分為已初始化段與未初始化段:已初始化段:包含程序代碼和數(shù)據(jù),.text,.data.sect,.asect匯編命令創(chuàng)建的段;未初始化段:為未初始化的數(shù)據(jù)在存儲(chǔ)器中保留空,.bss,.usect匯編命令創(chuàng)建的段。確定段的地址由連接程序完成。第12頁(yè),共62頁(yè),2023年,2月20日,星期二定義已初始化段的命令:.text;建立的段名為.text.data;建立的段名為.data.sect“段名”;自定義段.asect“段名”,地址;建立的段具有絕對(duì)地址,一般不用

第13頁(yè),共62頁(yè),2023年,2月20日,星期二匯編語(yǔ)言命令定義未初始化段的命令:

.bss符號(hào),字?jǐn)?shù)

.符號(hào)usect

“段名”,字?jǐn)?shù)(自定義段)常數(shù)初始化命令

.word

將一個(gè)或多個(gè)16bit的值,放入當(dāng)前段中的連續(xù)字中

.byte將一個(gè)或多個(gè)8bit的值,放入當(dāng)前段中的連續(xù)字中

.bes,.space在當(dāng)前段內(nèi)保留特定的bit數(shù)第14頁(yè),共62頁(yè),2023年,2月20日,星期二

.float計(jì)算單精度32bitIEEE浮點(diǎn)的數(shù)值,并將其存入當(dāng)前段中的兩個(gè)連續(xù)的字中

.int將一個(gè)或多個(gè)16bit的數(shù),放入當(dāng)前段中的連續(xù)字中

.long將32bit的數(shù),放入當(dāng)前段的連續(xù)字中

.string將一個(gè)或多個(gè)8bit的字符放入當(dāng)前段第15頁(yè),共62頁(yè),2023年,2月20日,星期二匯編語(yǔ)言命令例,使用.word,.byte,.float,.int,.string匯編指令的例子。0000aa.byte0AAH,0BBH0001bb0002cccc.word0CCCCH00030DDDDH0004ffff.long0EEEEFFFFH0005eeee00066865.string“help”00076c700008ffa8.float1.9999900093fff第16頁(yè),共62頁(yè),2023年,2月20日,星期二匯編語(yǔ)言命令其它命令.include告訴匯編器從其它文件讀入源語(yǔ)句.global定義一個(gè)全局符號(hào),在連接時(shí)可供其他模塊使用外部符號(hào)指在一個(gè)模塊中定義,在另一個(gè)模塊中使用的符號(hào)。可使用.def、.ref或.global匯編偽指令將符號(hào)定義為外部符號(hào)。.def在當(dāng)前模塊中定義,可以在別的模塊中使用的符號(hào);.ref在當(dāng)前模塊中引用,但在別的模塊中定義的符號(hào);.global可用于以上任何一種情況.if/.elseif/.else/.endif條件匯編命令.set和.equ為一個(gè)符號(hào)設(shè)置一個(gè)常數(shù)值。該符號(hào)存在符號(hào)表中,不能再定義.end匯編結(jié)束宏定義、宏指令、宏展開(kāi)第17頁(yè),共62頁(yè),2023年,2月20日,星期二匯編語(yǔ)言程序舉例1指示燈閃爍程序;FileName:xfdemo.asm;本程序使XfLED閃爍

global_c_int0;全局符號(hào)

.text;text段包含可執(zhí)行代碼_c_int0:;_c_int0符號(hào)用于CodeComposerC規(guī)范

clrcxf;xf=0,LED亮

setcxf;xf=1,LED滅,用于單步調(diào)試_start:clrcxf;LED亮

calldelay;調(diào)用延時(shí)程序

setcxf;LED滅

calldelay;延時(shí)

b_start;循環(huán)閃爍第18頁(yè),共62頁(yè),2023年,2月20日,星期二匯編語(yǔ)言程序舉例1;延時(shí)子程序delay: larar2,#10h;延時(shí)常數(shù)delay0: nop larar1,#0ffffh nopdelay1: nop mar*,ar1;ar1設(shè)為當(dāng)前ar banzdelay1 mar*,ar2 banzdelay0 retend;匯編語(yǔ)言程序結(jié)束第19頁(yè),共62頁(yè),2023年,2月20日,星期二匯編語(yǔ)言程序舉例2求W=5X+10Y-3Z。;File:aa.asm;W=5X+10Y-3Zx.set2f96hy.set18f5hz.set053ahw.usect“sum”,2;定義一個(gè)段sum,符號(hào)w占2個(gè)字

.text;建立一個(gè)段為.text的代碼段START:MAR*,AR2;AR2為當(dāng)前AR LARAR2,#x;x的地址

LT*;T←x第20頁(yè),共62頁(yè),2023年,2月20日,星期二匯編語(yǔ)言程序舉例2MPY#5;P←5xLARAR2,#y;y的地址LTP*;y→T,P→ACCMPY#10LARAR2,#zLTA*;z→T,ACC+P→ACCLARAR2,#wspm0;SACL*+要加入rpt#2;或mpy#3;SACH*subar2;spac;.end第21頁(yè),共62頁(yè),2023年,2月20日,星期二連接器命令文件連接器命令文件(*.cmd):該文件實(shí)現(xiàn)對(duì)程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器空間的分配。該文件常用的偽指令有MEMORY和SECTIONS。

MEMORY偽指令定義目標(biāo)系統(tǒng)中可以使用的存儲(chǔ)器范圍,每個(gè)存儲(chǔ)器范圍具有名字、起始地址和長(zhǎng)度。一般形式為

MEMORY{

PAGE0:name:origin=constant,length=constant;

PAGEn:name:origin=constant,length=constant;}PAGEn:定義存儲(chǔ)器空間。n=0-254.通常PAGE0定義程序存儲(chǔ)器,

PAGE1定義數(shù)據(jù)存儲(chǔ)器。name:

存儲(chǔ)器范圍的名字。可以是1-8個(gè)字符。origin或o:存儲(chǔ)器范圍的起始地址。length或l:存儲(chǔ)器范圍的長(zhǎng)度。第22頁(yè),共62頁(yè),2023年,2月20日,星期二連接器命令文件SECTIONS定義段。一般形式為SECTIONS{name:[property,property,…]name:[property,property,…]

…}在段名之后是是特性列表,定義段的內(nèi)容以及是怎樣分配的。段的可能的特性是:裝載位置、運(yùn)行位置、輸入段、段類型等。第23頁(yè),共62頁(yè),2023年,2月20日,星期二連接器命令文件例1命令文件/*Name:xfdemo.cmd*//*連接器命令,存儲(chǔ)器分配*/ xfdemo.obj -oxfdemo.out/* 存儲(chǔ)器分配*/MEMORY{ PAGE0: /*程序存儲(chǔ)器*/ PM_F:origin=8000hlength=7e00h /*PAGE1: /*數(shù)據(jù)存儲(chǔ)器*/}SECTIONS{ .text: {}>PM_F PAGE0}第24頁(yè),共62頁(yè),2023年,2月20日,星期二連接器命令文件例2命令文件

**//*LINKERCOMMANDFILE-MEMORYSPECIFICATION*//*FORMSK243BOARD*//**//*Name:pmsms.cmdFile*//**//*LINKERDIRECTIVES連接命令*//**//**/-c/*LINKUSINGCCONVENTIONS用C規(guī)范連接*/"pmsms.obj"-lc:\2xxtool\rts2xx.lib/*RUN-TIMESUPPORT-STACKMODEL*/-l第25頁(yè),共62頁(yè),2023年,2月20日,星期二連接器命令文件例2..\obj\logdata.obj..\obj\pi_id_a.obj..\obj\pi_iq_a.obj..\obj\pi_omg_a.obj..\obj\refer.obj-mpmsms.map/*映射文件*/-opmsms.out/*輸出可執(zhí)行文件*//**//*MEMORYALLOCATION存儲(chǔ)器分配*//**/MEMORY{PAGE0:/*Programmemory程序存儲(chǔ)器*/FLASH:origin=0,length=0x2000/*on-chipFlash8K字*/PM_F:o=8000H,l=7e00H/*externalSRAMPM擴(kuò)展*/第26頁(yè),共62頁(yè),2023年,2月20日,星期二連接器命令文件例2

B0PM_F:o=0xfe00,l=0x100/*B0PM*/

PAGE1:/*Datamemory數(shù)據(jù)存儲(chǔ)器*/REGS:o=0,l=0x60/*memory-mapedregs.*/INTVEC:o=0x60,l=0x20/*DMB2int.vectors*/B0DM_F:o=0x200,l=0x100/*DMB0free*/M_VARS:o=0x300,l=0x60/*DMB1usedbymonitor*/SPS:o=0x360,l=0x20/*stackassignedbymonitor*/B1_F:o=0x380,l=0x20/*DMB1free*/DM_F:o=8000H,l=2000H/*externalSRAMDMfree*/BMCK:o=0xa000,l=0x2000/*MCK_DEMOVariables*/B_SAV:o=0xc000,l=0x2000/*SAVEDRESULTSBUFFER*/REF:o=0xe000,l=0x200/*externalDMfree*/}第27頁(yè),共62頁(yè),2023年,2月20日,星期二連接器命令文件例2SECTIONS/*Linkerdirectivetospecifysectionplacementinthememorymap*/{/*vectors:{}>FLASHPAGE0/*INTERRRUPTVECTORTABLE00-3FH*//*CODE0040-1FFFH*/vectors:{}>PM_FPAGE0.text:{}>PM_FPAGE0/*CODE:8000~FE00*/.cinit:{}>PM_FPAGE0/*._c_int0:{}>PM_FPAGE0*//*.switch:{}>PM_FPAGE0*/.const:{}>PM_FPAGE0.data:{}>PM_FPAGE0/*.sysmem{}>B1_FPAGE1*/RAM_B11:{}>B1_F1PAGE1

第28頁(yè),共62頁(yè),2023年,2月20日,星期二連接器命令文件例2

/*.bss:{}>B1_FPAGE1*/MCK_DEMO:{}>BMCKPAGE1RES:{}>B_SAVPAGE1 .stack:{}>B1_FPAGE1/*user'sstack*/LOGGER:{}>B_SAVPAGE1/*采集記錄*/REFER:{}>REFPAGE1/*指令參考值給定*/}第29頁(yè),共62頁(yè),2023年,2月20日,星期二C語(yǔ)言程序設(shè)計(jì)C語(yǔ)言程序設(shè)計(jì)優(yōu)缺點(diǎn)C24xC語(yǔ)言基礎(chǔ)存儲(chǔ)器模式寄存器規(guī)則中斷處理匯編與C語(yǔ)言混合編程C程序舉例第30頁(yè),共62頁(yè),2023年,2月20日,星期二C語(yǔ)言程序設(shè)計(jì)優(yōu)缺點(diǎn)匯編語(yǔ)言程序設(shè)計(jì):

執(zhí)行速度快開(kāi)發(fā)周期長(zhǎng)、移植性和可讀性差C語(yǔ)言程序設(shè)計(jì):

開(kāi)發(fā)周期短、移植性和可讀性好執(zhí)行速度可以滿足要求第31頁(yè),共62頁(yè),2023年,2月20日,星期二C語(yǔ)言基礎(chǔ):段C24x將存儲(chǔ)器處理為程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器兩個(gè)線性塊。程序存儲(chǔ)器包含可執(zhí)行代碼;數(shù)據(jù)存儲(chǔ)器主要包含外部變量、靜態(tài)變量和系統(tǒng)堆棧。編譯器的任務(wù)是產(chǎn)生可重定位的代碼,允許鏈接器將代碼和數(shù)據(jù)定位進(jìn)合適的存儲(chǔ)空間。C編譯器對(duì)C語(yǔ)言編譯后除了生成3個(gè)基本段,即.text、.data、.bss外,還生成.cinit、.const、.stack、.sysmem段。第32頁(yè),共62頁(yè),2023年,2月20日,星期二C語(yǔ)言基礎(chǔ):C系統(tǒng)堆棧:.stack不同于DSP匯編指令定義的堆棧。DSP匯編程序中要將堆棧指針SP指向一塊RAM,用于保存中斷、調(diào)用時(shí)的返回地址,存放PUSH指令的壓棧內(nèi)容。.stack定義的系統(tǒng)堆棧實(shí)現(xiàn)的功能是保護(hù)函數(shù)的返回地址,分配局部變量,在調(diào)用函數(shù)時(shí)用于傳遞參數(shù),保護(hù)臨時(shí)結(jié)果。.stack定義的段大?。ǘ褩4笮。┛捎面溄悠鬟x項(xiàng)-stacksize設(shè)定,鏈接器還產(chǎn)生一個(gè)全局符號(hào)__STACK_SIZE,并賦給它等于堆棧長(zhǎng)度的值,以字為單位,缺省值為1K。第33頁(yè),共62頁(yè),2023年,2月20日,星期二C程序設(shè)計(jì):存儲(chǔ)器分配(1)運(yùn)行時(shí)間支持函數(shù)。(2)動(dòng)態(tài)存儲(chǔ)器分配。(3)靜態(tài)和全局變量的存儲(chǔ)器分配。(4)位域/結(jié)構(gòu)的對(duì)準(zhǔn)。第34頁(yè),共62頁(yè),2023年,2月20日,星期二C程序設(shè)計(jì):寄存器規(guī)則寄存器規(guī)則明確了編譯器如何使用寄存器以及在函數(shù)調(diào)用過(guò)程中如何保護(hù)寄存器。(1)輔助寄存器(2)堆棧指針SP(3)ARP(4)在默認(rèn)情況下,編譯器總是假定ST0中的OVM在硬件復(fù)位時(shí)被清0。若在匯編代碼中對(duì)OVM置位為1,返回到C環(huán)境時(shí)必須復(fù)位。(5)寄存器變量(可以加快變量訪問(wèn)速度)第35頁(yè),共62頁(yè),2023年,2月20日,星期二寄存器規(guī)則寄存器用法調(diào)用時(shí)是否保存AR0幀指針是AR1堆棧指針是AR2-AR5局部變量指針?lè)馎R3-AR5表達(dá)式分析否AR6-AR7寄存器變量是ACC表達(dá)式分析/返回值否P表達(dá)式分析否T表達(dá)式分析否第36頁(yè),共62頁(yè),2023年,2月20日,星期二域名稱預(yù)設(shè)值修改ARP輔助寄存器指針1是C進(jìn)位位-是DP數(shù)據(jù)頁(yè)指針-是OV溢出位-是OVM溢出模式0否PM成績(jī)移位模式0否SXM符號(hào)擴(kuò)展位-是TC測(cè)試控制位-是第37頁(yè),共62頁(yè),2023年,2月20日,星期二C語(yǔ)言程序設(shè)計(jì):中斷處理

(1)中斷的使能和屏蔽必須由程序員自己來(lái)設(shè)置。(2)中斷程序沒(méi)有參數(shù)傳遞,即使說(shuō)明,也會(huì)被忽略(3)中斷處理程序不能被正常的C程序調(diào)用。(4)為了使中斷程序與中斷一致,在相應(yīng)的中斷矢量中必須放置一條轉(zhuǎn)移指令,可以用.sect匯編偽指令建立一個(gè)簡(jiǎn)單的跳轉(zhuǎn)指令表來(lái)完成此項(xiàng)功能。第38頁(yè),共62頁(yè),2023年,2月20日,星期二(5)在匯編語(yǔ)言中,注意在符號(hào)名前面加上一個(gè)下劃線,例如c_int00記為_(kāi)c_int00。(6)中斷程序使用的所有寄存器,包括狀態(tài)寄存器和程序中調(diào)用函數(shù)使用的寄存器都必須予以保護(hù)。(7)C24xC編譯器將C語(yǔ)言進(jìn)行了擴(kuò)展,中斷可以利用interrupt關(guān)鍵字由C/C++函數(shù)直接處理。第39頁(yè),共62頁(yè),2023年,2月20日,星期二匯編與C語(yǔ)言混合編程獨(dú)立的C模塊和匯編模塊接口獨(dú)立編寫(xiě)C程序與匯編程序,分別編譯、匯編生成目標(biāo)代碼模塊,然后用連接器連接起來(lái)。從C程序中訪問(wèn)匯編程序變量在C程序中直接嵌入?yún)R編語(yǔ)句第40頁(yè),共62頁(yè),2023年,2月20日,星期二訪問(wèn)I/O端口空間關(guān)鍵字ioport使DSP能夠訪問(wèn)I/O端口空間。關(guān)鍵字格式為:ioporttypeporthex_num其中,關(guān)鍵字ioport指明這是一個(gè)端口變量,變量類型必須為charshortint或unsigned,porthex_num為16進(jìn)制端口號(hào)示例:ioportunsignedport10;

/*端口號(hào)為10h的I/O端口變量*/intfunc(){……port10=a;……b=port10;……}第41頁(yè),共62頁(yè),2023年,2月20日,星期二獨(dú)立的C模塊和匯編模塊接口在編寫(xiě)?yīng)毩⒌膮R編程序時(shí),必須注意以下幾點(diǎn):(1)不論是用C語(yǔ)言編寫(xiě)的函數(shù)還是用匯編語(yǔ)言編寫(xiě)的函數(shù),都必須遵循寄存器使用規(guī)則。(2)必須保護(hù)函數(shù)要用到的幾個(gè)特定寄存器。(3)中斷程序必須保護(hù)所有用到的寄存器。(4)從匯編程序調(diào)用C函數(shù)時(shí),第一個(gè)參數(shù)(最左邊)必須放入累加器A中,剩下的參數(shù)按自右向左的順序壓入堆棧。(5)調(diào)用C函數(shù)時(shí),注意C函數(shù)只保護(hù)了幾個(gè)特定的寄存器,而其他是可以自由使用的。第42頁(yè),共62頁(yè),2023年,2月20日,星期二獨(dú)立的C模塊和匯編模塊接口(6)長(zhǎng)整型和浮點(diǎn)數(shù)在存儲(chǔ)器中存放的順序是低位字在高地址,高位字在低地址。

(7)如果函數(shù)有返回值,返回值存放在累加器A中。(8)匯編語(yǔ)言模塊不能改變由C模塊產(chǎn)生的.cinit段,如果改變其內(nèi)容將會(huì)引起不可預(yù)測(cè)的后果。(9)編譯器在所有標(biāo)識(shí)符(函數(shù)名、變量名等)前加下劃線“_”。

(10)任何在匯編程序中定義的對(duì)象或函數(shù),如果需要在C程序中訪問(wèn)或調(diào)用,則必須用匯編指令.global定義。第43頁(yè),共62頁(yè),2023年,2月20日,星期二從C程序中訪問(wèn)匯編程序變量從C程序中訪問(wèn)在匯編程序中定義的變量或常數(shù),可以分為以下3種情況:(1)訪問(wèn)在.bss塊中定義的變量;(2)對(duì)于訪問(wèn)不在.bss塊中定義的變量;(3)對(duì)于在匯編程序中用.set和.global偽指令定義的全局常數(shù),也可以使用特殊的操作從C程序中訪問(wèn)它們。第44頁(yè),共62頁(yè),2023年,2月20日,星期二在C程序中直接嵌入?yún)R編語(yǔ)句在C程序中嵌入?yún)R編語(yǔ)句是一種直接的C模塊和匯編模塊接口方法。采用這種方法一方面可以在C程序中實(shí)現(xiàn)用C語(yǔ)言難以實(shí)現(xiàn)的一些硬件控制功能。另一方面,也可以用這種方法在C程序中的關(guān)鍵部分用匯編語(yǔ)句代替C語(yǔ)句以優(yōu)化程序。采用這種方法的一個(gè)缺點(diǎn)是它比較容易破壞C環(huán)境,因?yàn)镃編譯器在編譯嵌入了匯編語(yǔ)句的C程序時(shí)并不檢查或分析所嵌入的匯編語(yǔ)句。直接在C語(yǔ)言程序中相應(yīng)位置嵌入?yún)R編語(yǔ)句,只需在匯編語(yǔ)句加上雙引號(hào)和小括號(hào),前面加ASM標(biāo)識(shí)符號(hào)。即,

ASM

(“匯編語(yǔ)句”)例如ASM(“LACC#10H”)第45頁(yè),共62頁(yè),2023年,2月20日,星期二C程序舉例1-Lab0102intx,y,z;main(){

x=1;y=2; while(1){ z=x+y; //x++;y++;}}第46頁(yè),共62頁(yè),2023年,2月20日,星期二C程序舉例2-Lab0301-Led:4個(gè)指示燈顯示#include"DSP281x_Device.h"http://DSP281xHeaderfileIncludeFile#include"DSP281x_Examples.h"http://DSP281xExamplesIncludeFile#include"f2812a.h"http://定義指示燈寄存器地址和寄存器類型#defineLBDS(*((unsignedint*)0xc0000))voidDelay(unsignedintnDelay); //延時(shí)子程序main(){ unsignedintuLED[4]={1,2,4,8};//控制字0001,0010,0100,1000 inti; InitSysCtrl(); //初始化DSP運(yùn)行時(shí)鐘

while(1) {第47頁(yè),共62頁(yè),2023年,2月20日,星期二C程序舉例2for(i=0;i<4;i++) { LBDS=uLED[i]; //正向順序送控制字

Delay(256); //延時(shí)

}for(i=3;i>=0;i--) { LBDS=uLED[i]; //反向順序送控制字

Delay(256); //延時(shí)

} }}第48頁(yè),共62頁(yè),2023年,2月20日,星期二C程序舉例2voidDelay(unsignedintnDelay)//延時(shí)程序{ intii,jj,kk=0; for(ii=0;ii<nDelay;ii++) { for(jj=0;jj<512;jj++) { kk++; } }}第49頁(yè),共62頁(yè),2023年,2月20日,星期二C程序舉例3-Lab0302-Dip

開(kāi)關(guān)狀態(tài)顯示#include"DSP281x_Device.h"http://DSP281xHeaderfileIncludeFile#include"DSP281x_Examples.h"http://DSP281xExamplesIncludeFile#include"f2812a.h"http://定義指示燈控制寄存器地址和寄存器類型#defineLBDS(*((unsignedint*)0xc0000))//定義撥碼開(kāi)關(guān)控制寄存器地址和寄存器類型#defineDIPS(*(unsignedint*)0xc0001)main(){ InitSysCtrl(); //初始化DSP運(yùn)行時(shí)鐘

while(1) { LBDS=DIPS; //讀取撥碼開(kāi)關(guān)狀態(tài)直接送指示燈顯示

}} 第50頁(yè),共62頁(yè),2023年,2月20日,星期二集成開(kāi)發(fā)環(huán)境CCSCodeComposerStudio(CC,CCS)軟件安裝與設(shè)置集成環(huán)境與使用(主要菜單與功能)調(diào)試功能與實(shí)例第51頁(yè),共62頁(yè),2023年,2

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論