版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第5章TMS320C54x軟件開發(fā)與設(shè) 計(jì) 1 第第5章章 TMS320C54x的軟件開發(fā)與設(shè)計(jì)的軟件開發(fā)與設(shè)計(jì) u5.1 5.1 TMS320C54xTMS320C54x應(yīng)用軟件開發(fā)過程應(yīng)用軟件開發(fā)過程 u5.2 5.2 TMS320C54xTMS320C54x匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì) u5.3 5.3 匯編器的使用匯編器的使用 u5.4 5.4 鏈接器和命令文件鏈接器和命令文件 u5.5 5.5 公共目標(biāo)文件格式公共目標(biāo)文件格式COFFCOFF u5.6 TMS320C54x C5.6 TMS320C54x C語言編程語言編程 u5.7 5.7 用用C C語言和匯編混合編程語言和匯
2、編混合編程 u5.8 5.8 本章小結(jié)本章小結(jié) 第第5章章 TMS320C54x的軟件開發(fā)與設(shè)計(jì)的軟件開發(fā)與設(shè)計(jì) 第5章TMS320C54x軟件開發(fā)與設(shè) 計(jì) 2 5.1 TMS320C54x5.1 TMS320C54x應(yīng)用軟件開發(fā)過程應(yīng)用軟件開發(fā)過程 1、TMS320C54x的應(yīng)用軟件開發(fā)的必備工作:的應(yīng)用軟件開發(fā)的必備工作: (1) 選擇編程語言編寫源程序選擇編程語言編寫源程序 匯編語言匯編語言 C/C+語言語言 (2) 選擇開發(fā)工具和環(huán)境選擇開發(fā)工具和環(huán)境 非集成開發(fā)環(huán)境非集成開發(fā)環(huán)境 集成開發(fā)環(huán)境集成開發(fā)環(huán)境CCS。 第第5章章 TMS320C54x的軟件開發(fā)與設(shè)計(jì)的軟件開發(fā)與設(shè)計(jì) 第5
3、章TMS320C54x軟件開發(fā)與設(shè) 計(jì) 3 2、 TMS320C54x應(yīng)用軟件開發(fā)流程應(yīng)用軟件開發(fā)流程 T (1) 編寫匯編或編寫匯編或C的源文件的源文件 T (2) 經(jīng)經(jīng)C編譯器、匯編器生成編譯器、匯編器生成COFF格式的目標(biāo)文件格式的目標(biāo)文件 T (3) 再用鏈接器進(jìn)行鏈接,生成在再用鏈接器進(jìn)行鏈接,生成在C54x上可執(zhí)行的目標(biāo)代上可執(zhí)行的目標(biāo)代 碼碼 T (4) 然后利用調(diào)試工具對(duì)可執(zhí)行的目標(biāo)代碼進(jìn)行仿真和調(diào)試。然后利用調(diào)試工具對(duì)可執(zhí)行的目標(biāo)代碼進(jìn)行仿真和調(diào)試。 T (5) 當(dāng)調(diào)試完成后,通過當(dāng)調(diào)試完成后,通過Hex代碼轉(zhuǎn)換工具,將調(diào)試后的可執(zhí)代碼轉(zhuǎn)換工具,將調(diào)試后的可執(zhí) 行目標(biāo)代碼轉(zhuǎn)換
4、成行目標(biāo)代碼轉(zhuǎn)換成EPROM編程器能接受的代碼,并將該代碼編程器能接受的代碼,并將該代碼 固化到固化到EPROM中或加載到用戶的應(yīng)用系統(tǒng)中,以便中或加載到用戶的應(yīng)用系統(tǒng)中,以便DSP目目 標(biāo)系統(tǒng)脫離計(jì)算機(jī)單獨(dú)運(yùn)行。標(biāo)系統(tǒng)脫離計(jì)算機(jī)單獨(dú)運(yùn)行。 第第5章章 TMS320C54x的軟件開發(fā)與設(shè)計(jì)的軟件開發(fā)與設(shè)計(jì) 5.1 TMS320C54x5.1 TMS320C54x應(yīng)用軟件開發(fā)過程應(yīng)用軟件開發(fā)過程 第5章TMS320C54x軟件開發(fā)與設(shè) 計(jì) 4 圖圖5-1 TMS320C54x的軟件開發(fā)流程圖的軟件開發(fā)流程圖 第第5章章 TMS320C54x的軟件開發(fā)與設(shè)計(jì)的軟件開發(fā)與設(shè)計(jì) 5.1 TMS320C
5、54x5.1 TMS320C54x應(yīng)用軟件開發(fā)過程應(yīng)用軟件開發(fā)過程 第5章TMS320C54x軟件開發(fā)與設(shè) 計(jì) 5 3、集成開發(fā)環(huán)境簡介、集成開發(fā)環(huán)境簡介 T CCS提供了配置、建立、調(diào)試、跟蹤和分析程序的工具,提供了配置、建立、調(diào)試、跟蹤和分析程序的工具, 它便于實(shí)時(shí)、嵌入式信號(hào)處理程序的編制和測(cè)試,它能夠加它便于實(shí)時(shí)、嵌入式信號(hào)處理程序的編制和測(cè)試,它能夠加 速開發(fā)進(jìn)程,提高工作效率。速開發(fā)進(jìn)程,提高工作效率。CCS集成開發(fā)環(huán)境(集成開發(fā)環(huán)境(IDE)允允 許編輯、編譯和調(diào)試許編輯、編譯和調(diào)試DSP目標(biāo)程序,支持設(shè)計(jì)開發(fā)全過程。目標(biāo)程序,支持設(shè)計(jì)開發(fā)全過程。 有關(guān)有關(guān)CCS的具體介紹參見第
6、的具體介紹參見第6章。章。 第第5章章 TMS320C54x的軟件開發(fā)與設(shè)計(jì)的軟件開發(fā)與設(shè)計(jì) 5.1 TMS320C54x5.1 TMS320C54x應(yīng)用軟件開發(fā)過程應(yīng)用軟件開發(fā)過程 第5章TMS320C54x軟件開發(fā)與設(shè) 計(jì) 6 5.2 5.2 TMS320C54xTMS320C54x匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì) T 什么是匯編語言、匯編器、匯編過程什么是匯編語言、匯編器、匯編過程 T 匯編語言是為特定匯編語言是為特定CPU設(shè)計(jì)的一種面向機(jī)器的語言,是其機(jī)設(shè)計(jì)的一種面向機(jī)器的語言,是其機(jī) 器語言便于記憶和理解的符號(hào)形式(又稱為助記符),匯編器語言便于記憶和理解的符號(hào)形式(又稱為助記符),
7、匯編 語言的語句與機(jī)器語言(機(jī)器語言操作碼)存在對(duì)應(yīng)關(guān)系。語言的語句與機(jī)器語言(機(jī)器語言操作碼)存在對(duì)應(yīng)關(guān)系。 T 使用匯編語言編寫的程序,機(jī)器不能直接識(shí)別,要由一種程使用匯編語言編寫的程序,機(jī)器不能直接識(shí)別,要由一種程 序?qū)R編語言翻譯成機(jī)器語言,這種起翻譯作用的程序叫匯序?qū)R編語言翻譯成機(jī)器語言,這種起翻譯作用的程序叫匯 編程序,也稱匯編器。匯編器把匯編語言翻譯成機(jī)器語言的編程序,也稱匯編器。匯編器把匯編語言翻譯成機(jī)器語言的 過程稱為匯編。過程稱為匯編。 T 匯編語言程序的編寫必須符合一定的格式,以便于匯編器將匯編語言程序的編寫必須符合一定的格式,以便于匯編器將 源文件翻譯成目標(biāo)文件,源文
8、件可以包含匯編語言指令、匯源文件翻譯成目標(biāo)文件,源文件可以包含匯編語言指令、匯 編偽指令、宏偽指令和規(guī)定的字符與數(shù)字。編偽指令、宏偽指令和規(guī)定的字符與數(shù)字。 第第5章章 TMS320C54x的軟件開發(fā)與設(shè)計(jì)的軟件開發(fā)與設(shè)計(jì) 第5章TMS320C54x軟件開發(fā)與設(shè) 計(jì) 7 5.2.1 匯編語言的語法格式匯編語言的語法格式 T 助記符指令語法格式:助記符指令語法格式: 標(biāo)號(hào)區(qū)標(biāo)號(hào)區(qū): 助記符指令區(qū)助記符指令區(qū) 操作數(shù)區(qū)操作數(shù)區(qū) ;注釋區(qū);注釋區(qū) 例例 T Begin: LD SYM1, AR1 ;將立即數(shù)將立即數(shù)SYM1裝入寄存器裝入寄存器AR1中中 第第5章章 TMS320C54x的軟件開發(fā)與設(shè)
9、計(jì)的軟件開發(fā)與設(shè)計(jì) 5.2 5.2 TMS320C54xTMS320C54x匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì) 第5章TMS320C54x軟件開發(fā)與設(shè) 計(jì) 8 T 標(biāo)號(hào)區(qū)標(biāo)號(hào)區(qū) T 所有匯編指令和大多數(shù)匯編偽指令前面都可以帶有標(biāo)號(hào),使所有匯編指令和大多數(shù)匯編偽指令前面都可以帶有標(biāo)號(hào),使 用它必須從語句第一列開始。標(biāo)號(hào)最多可達(dá)用它必須從語句第一列開始。標(biāo)號(hào)最多可達(dá)32個(gè)字符,由個(gè)字符,由 AZ、az、09、_以及以及$符號(hào)組成,且第一個(gè)字符不能是數(shù)符號(hào)組成,且第一個(gè)字符不能是數(shù) 字,標(biāo)號(hào)的大小寫必須一致。字,標(biāo)號(hào)的大小寫必須一致。 標(biāo)號(hào)后可帶冒號(hào)標(biāo)號(hào)后可帶冒號(hào)“:”,但冒,但冒 號(hào)并不作為標(biāo)號(hào)的一
10、部分,如例子中的號(hào)并不作為標(biāo)號(hào)的一部分,如例子中的“Begin”。 第第5章章 TMS320C54x的軟件開發(fā)與設(shè)計(jì)的軟件開發(fā)與設(shè)計(jì) 5.2 5.2 TMS320C54xTMS320C54x匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì) 第5章TMS320C54x軟件開發(fā)與設(shè) 計(jì) 9 T 助記符指令區(qū)和操作數(shù)區(qū)助記符指令區(qū)和操作數(shù)區(qū) T 例子中的匯編指令語句例子中的匯編指令語句“LD SYM1, AR1”。其中其中LD是是 助記符指令,助記符指令,SYM1, AR1是它的操作數(shù),該語句的功是它的操作數(shù),該語句的功 能是將立即數(shù)能是將立即數(shù)SYM1裝入寄存器裝入寄存器AR1中。中。 第第5章章 TMS320C
11、54x的軟件開發(fā)與設(shè)計(jì)的軟件開發(fā)與設(shè)計(jì) 5.2 5.2 TMS320C54xTMS320C54x匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì) 第5章TMS320C54x軟件開發(fā)與設(shè) 計(jì) 10 T 注釋區(qū)注釋區(qū) T 注釋用來說明指令功能的文字,便于用戶閱讀。注釋區(qū)注釋用來說明指令功能的文字,便于用戶閱讀。注釋區(qū) 可以從任何一列開始,可以包含可以從任何一列開始,可以包含ASCII字符和空格。注字符和空格。注 釋可位于句首或句尾,位于句首時(shí),以釋可位于句首或句尾,位于句首時(shí),以“*”或或“;”開開 始,位于句尾時(shí),以分號(hào)始,位于句尾時(shí),以分號(hào)“;”開始。注釋可單獨(dú)一行或開始。注釋可單獨(dú)一行或 數(shù)行;注釋是任選項(xiàng)
12、。數(shù)行;注釋是任選項(xiàng)。 第第5章章 TMS320C54x的軟件開發(fā)與設(shè)計(jì)的軟件開發(fā)與設(shè)計(jì) 5.2 5.2 TMS320C54xTMS320C54x匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì) 第5章TMS320C54x軟件開發(fā)與設(shè) 計(jì) 11 5.2.2 匯編語言中的偽指令匯編語言中的偽指令 T 匯編偽指令為程序提供數(shù)據(jù)并控制匯編過程。偽指令格式與匯編偽指令為程序提供數(shù)據(jù)并控制匯編過程。偽指令格式與 通常的操作指令一樣,并可加在匯編程序的任何地方,但它通常的操作指令一樣,并可加在匯編程序的任何地方,但它 們并不產(chǎn)生機(jī)器指令。們并不產(chǎn)生機(jī)器指令。 T 匯編偽指令主要完成以下工作:匯編偽指令主要完成以下工作:
13、T (1) 將數(shù)據(jù)和代碼匯編進(jìn)指定的段。將數(shù)據(jù)和代碼匯編進(jìn)指定的段。 T (2) 控制產(chǎn)生清單文件??刂飘a(chǎn)生清單文件。 T (3) 初始化存儲(chǔ)器。初始化存儲(chǔ)器。 T (4) 匯編條件代碼塊。匯編條件代碼塊。 T (5) 聲明全局變量。聲明全局變量。 T (6) 在存儲(chǔ)器中為未初始化的變量保存空間。在存儲(chǔ)器中為未初始化的變量保存空間。 T (7) 為匯編器指定庫。為匯編器指定庫。 第第5章章 TMS320C54x的軟件開發(fā)與設(shè)計(jì)的軟件開發(fā)與設(shè)計(jì) 5.2 5.2 TMS320C54xTMS320C54x匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì) 第5章TMS320C54x軟件開發(fā)與設(shè) 計(jì) 12 匯編偽匯編偽
14、 指令指令 作作 用用說明及示例說明及示例 .title 緊跟其后的是用雙引號(hào)括起的源 程序名.title example.asm .end 結(jié)束匯編命令,匯編程序?qū)⒑雎?此后的任何源語句,所以它應(yīng)是 程序的最后語句放在匯編語言源程序的最后 .text緊跟其后的是匯編語言程序正文 .text段是源程序正文。經(jīng)匯編后,緊隨.text 后的是可執(zhí)行程序代碼 .data 緊跟其后的是已初始化數(shù)據(jù),通 常含有數(shù)據(jù)表或預(yù)先初始化的數(shù) 值有兩種數(shù)據(jù)形式:.int和.word table: .word 1,2,3,4 .word 8,6,4,2 .word .word用來設(shè)置一個(gè)或多個(gè)16位 帶符號(hào)整型數(shù)常
15、數(shù) 表示在程序存儲(chǔ)器標(biāo)號(hào)為table開始的8個(gè)單 元中存放初始化數(shù)據(jù)1、2、3、4、8、6、4 和2 .bss x , 4 表示在數(shù)據(jù)存儲(chǔ)器中空出4個(gè)存儲(chǔ)單元存放 變量x1,x2,x3和x4 .sect vectors 定義向量表,緊隨其后的是復(fù)位向量和中斷 向量,名為vectors STACK .usect STACK,10h 在數(shù)據(jù)存儲(chǔ)器中留出16個(gè)單元作為堆棧區(qū), 名為STACK .int .int用來設(shè)置一個(gè)或多個(gè)16位無符 號(hào)整型數(shù)常數(shù) .bss .bss為未初始化變量保留的存儲(chǔ) 空間 .sect建立包含代碼和數(shù)據(jù)的自定義段 .usect 為未初始化變量保留存儲(chǔ)空間的 自定義段 第第
16、5章章 TMS320C54x的軟件開發(fā)與設(shè)計(jì)的軟件開發(fā)與設(shè)計(jì) 5.2 5.2 TMS320C54xTMS320C54x匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì) 表表51 常用的匯編偽指令常用的匯編偽指令 第5章TMS320C54x軟件開發(fā)與設(shè) 計(jì) 13 5.2.2 匯編語言中的偽指令匯編語言中的偽指令 1、段定義偽指令、段定義偽指令 T 段定義偽指令指定匯編程序的段,它們包括:段定義偽指令指定匯編程序的段,它們包括: T .bss 為未初始化的段預(yù)留空間。為未初始化的段預(yù)留空間。 T .data 指定后續(xù)代碼為數(shù)據(jù)段,通常包含初始化的數(shù)據(jù)。指定后續(xù)代碼為數(shù)據(jù)段,通常包含初始化的數(shù)據(jù)。 T .sect
17、自命名的初始化段,可包含可執(zhí)行代碼和數(shù)據(jù)。自命名的初始化段,可包含可執(zhí)行代碼和數(shù)據(jù)。 T .text 指定后續(xù)的代碼為文本段,通常包含可執(zhí)行代碼。指定后續(xù)的代碼為文本段,通常包含可執(zhí)行代碼。 T .usect 為未初始化的命名段預(yù)留空間。為未初始化的命名段預(yù)留空間。 T 例例5-4段定義偽指令示例段定義偽指令示例 T .data ;表示從這里開始數(shù)據(jù)段,后續(xù)數(shù)據(jù)順序存放在數(shù)表示從這里開始數(shù)據(jù)段,后續(xù)數(shù)據(jù)順序存放在數(shù) 據(jù)段中據(jù)段中 T coeff .word 044h,055h,066h ;3個(gè)個(gè)word型數(shù)據(jù)連續(xù)放型數(shù)據(jù)連續(xù)放 入入.data段段 第第5章章 TMS320C54x的軟件開發(fā)與設(shè)
18、計(jì)的軟件開發(fā)與設(shè)計(jì) 5.2 5.2 TMS320C54xTMS320C54x匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì) 第5章TMS320C54x軟件開發(fā)與設(shè) 計(jì) 14 5.2.2 匯編語言中的偽指令匯編語言中的偽指令 2、初始化常數(shù)偽指令、初始化常數(shù)偽指令 T .byte .ubyte .char 指定數(shù)值用指定數(shù)值用8位表示。位表示。 T .float和和.xfloat 指定數(shù)值用單精度指定數(shù)值用單精度IEEE浮點(diǎn)表示。浮點(diǎn)表示。 T .int .uint .half .short .ushort .word .uword 指定數(shù)值用指定數(shù)值用 16位表示。位表示。 T .long .ulong .
19、xlong 指定數(shù)值用指定數(shù)值用32位表示。位表示。 T .double和和.ldouble 指定數(shù)值用雙精度指定數(shù)值用雙精度IEEE浮點(diǎn)表示。浮點(diǎn)表示。 T .bes和和.space 在當(dāng)前段預(yù)留指定的存儲(chǔ)空間。在當(dāng)前段預(yù)留指定的存儲(chǔ)空間。 T 例例5-5 初始化常數(shù)偽指令示例初始化常數(shù)偽指令示例 T .byte 18 ;將一個(gè)值將一個(gè)值18放入當(dāng)前段的連續(xù)字節(jié)中放入當(dāng)前段的連續(xù)字節(jié)中 T .word 012Ch ;將一個(gè)將一個(gè)16比特位值比特位值012Ch放入當(dāng)前段的連續(xù)放入當(dāng)前段的連續(xù) 字中字中 第第5章章 TMS320C54x的軟件開發(fā)與設(shè)計(jì)的軟件開發(fā)與設(shè)計(jì) 5.2 5.2 TMS32
20、0C54xTMS320C54x匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì) 第5章TMS320C54x軟件開發(fā)與設(shè) 計(jì) 15 5.2.2 匯編語言中的偽指令匯編語言中的偽指令 3、段程序計(jì)數(shù)器(、段程序計(jì)數(shù)器(SPC)定位偽指令定位偽指令 T 有一些偽指令可以指定當(dāng)前段在內(nèi)存中地址對(duì)齊:有一些偽指令可以指定當(dāng)前段在內(nèi)存中地址對(duì)齊: T .align 用于指定起始位置對(duì)準(zhǔn)在用于指定起始位置對(duì)準(zhǔn)在1128字的邊界。操作數(shù)字的邊界。操作數(shù) 為為1表示對(duì)準(zhǔn)到字邊界;操作數(shù)為表示對(duì)準(zhǔn)到字邊界;操作數(shù)為2表示對(duì)準(zhǔn)到長字表示對(duì)準(zhǔn)到長字/偶字偶字 邊界;操作數(shù)為邊界;操作數(shù)為128表示對(duì)準(zhǔn)到頁邊界。表示對(duì)準(zhǔn)到頁邊界。 T
21、 .even 用于指定起始位置對(duì)準(zhǔn)到下一個(gè)字的邊界。它等效用于指定起始位置對(duì)準(zhǔn)到下一個(gè)字的邊界。它等效 于于.align偽指令的操作數(shù)為偽指令的操作數(shù)為1;使用;使用.even操作數(shù)為操作數(shù)為2時(shí),表時(shí),表 示對(duì)齊到下一個(gè)長字的邊界。示對(duì)齊到下一個(gè)長字的邊界。 T 任何在當(dāng)前字中沒有使用的位都填充任何在當(dāng)前字中沒有使用的位都填充0。 第第5章章 TMS320C54x的軟件開發(fā)與設(shè)計(jì)的軟件開發(fā)與設(shè)計(jì) 5.2 5.2 TMS320C54xTMS320C54x匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì) 第5章TMS320C54x軟件開發(fā)與設(shè) 計(jì) 16 5.2.2 匯編語言中的偽指令匯編語言中的偽指令 4、輸出
22、列表格式偽指令、輸出列表格式偽指令 T 輸出列表格式偽指令可以指定格式化的清單列表文件輸出:輸出列表格式偽指令可以指定格式化的清單列表文件輸出: T .length用于控制清單列表文件頁面的長度。用于控制清單列表文件頁面的長度。 T .page 用于控制清單列表文件中加入新頁。用于控制清單列表文件中加入新頁。 T .tab 用于定義制表鍵(用于定義制表鍵(tab)的長度。的長度。 T .title 用于控制在清單列表文件每頁頂部打印標(biāo)題。用于控制在清單列表文件每頁頂部打印標(biāo)題。 T .list和和.nolist用于控制打開或關(guān)閉清單列表文件的輸出。用于控制打開或關(guān)閉清單列表文件的輸出。 第第5
23、章章 TMS320C54x的軟件開發(fā)與設(shè)計(jì)的軟件開發(fā)與設(shè)計(jì) 5.2 5.2 TMS320C54xTMS320C54x匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì) 第5章TMS320C54x軟件開發(fā)與設(shè) 計(jì) 17 5.2.2 匯編語言中的偽指令匯編語言中的偽指令 5、文件引用偽指令、文件引用偽指令 T 文件引用偽指令可以引用其它文件中的信息:文件引用偽指令可以引用其它文件中的信息: T .copy和和.include 指明從其它文件讀取源代碼程序語句。指明從其它文件讀取源代碼程序語句。 T .def 指明在當(dāng)前文件中定義但可被其它文件中引用的符號(hào)。指明在當(dāng)前文件中定義但可被其它文件中引用的符號(hào)。 T .gl
24、obal 指明符號(hào)為全局符號(hào)。指明符號(hào)為全局符號(hào)。 T .ref 指明在當(dāng)前文件中引用,但在其它文件中定義的符號(hào)。指明在當(dāng)前文件中引用,但在其它文件中定義的符號(hào)。 第第5章章 TMS320C54x的軟件開發(fā)與設(shè)計(jì)的軟件開發(fā)與設(shè)計(jì) 5.2 5.2 TMS320C54xTMS320C54x匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì) 第5章TMS320C54x軟件開發(fā)與設(shè) 計(jì) 18 5.2.2 匯編語言中的偽指令匯編語言中的偽指令 6、條件匯編偽指令、條件匯編偽指令 T 條件匯編偽指令用于指示對(duì)某些代碼按照表達(dá)式的計(jì)算結(jié)條件匯編偽指令用于指示對(duì)某些代碼按照表達(dá)式的計(jì)算結(jié) 果,決定是否對(duì)其匯編。有兩組偽指令用于
25、條件匯編:果,決定是否對(duì)其匯編。有兩組偽指令用于條件匯編: T .if .elseif .else .endif 這些語句用于通知匯編器按照表這些語句用于通知匯編器按照表 達(dá)式的計(jì)算結(jié)果,對(duì)某段代碼塊進(jìn)行條件匯編。達(dá)式的計(jì)算結(jié)果,對(duì)某段代碼塊進(jìn)行條件匯編。 T .loop .break .endloop 這些語句用于通知匯編器按照表這些語句用于通知匯編器按照表 達(dá)式的計(jì)算結(jié)果重復(fù)匯編一個(gè)代碼塊。要求表達(dá)式和偽指達(dá)式的計(jì)算結(jié)果重復(fù)匯編一個(gè)代碼塊。要求表達(dá)式和偽指 令必須完全在同一行指定。令必須完全在同一行指定。 第第5章章 TMS320C54x的軟件開發(fā)與設(shè)計(jì)的軟件開發(fā)與設(shè)計(jì) 5.2 5.2 T
26、MS320C54xTMS320C54x匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì) 第5章TMS320C54x軟件開發(fā)與設(shè) 計(jì) 19 5.2.3 匯編語言中的常數(shù)及字符串匯編語言中的常數(shù)及字符串 T 匯編器可支持匯編器可支持7種類型的常數(shù)(常量):種類型的常數(shù)(常量): T 二進(jìn)制整數(shù)二進(jìn)制整數(shù) T 八進(jìn)制整數(shù)八進(jìn)制整數(shù) T 十進(jìn)制整數(shù)十進(jìn)制整數(shù) T 十六進(jìn)制整數(shù)十六進(jìn)制整數(shù) T 浮點(diǎn)數(shù)常量浮點(diǎn)數(shù)常量 T 字符常量字符常量 T 字符串字符串 第第5章章 TMS320C54x的軟件開發(fā)與設(shè)計(jì)的軟件開發(fā)與設(shè)計(jì) 5.2 5.2 TMS320C54xTMS320C54x匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì) 第5章TM
27、S320C54x軟件開發(fā)與設(shè) 計(jì) 20 5.2.3 匯編語言中的常數(shù)及字符串匯編語言中的常數(shù)及字符串 1、二進(jìn)制整數(shù)、二進(jìn)制整數(shù) T 二進(jìn)制整型常量最多由二進(jìn)制整型常量最多由16位二進(jìn)制數(shù)字(位二進(jìn)制數(shù)字(0或或1)組成,后綴)組成,后綴 為為B(或或b)。)。如果數(shù)字少于如果數(shù)字少于16位,匯編器將其右邊對(duì)齊,并位,匯編器將其右邊對(duì)齊,并 在前面補(bǔ)零。在前面補(bǔ)零。 T 例例5-6二進(jìn)制整數(shù)示例二進(jìn)制整數(shù)示例 T 10001000B 136(十進(jìn)制)或十進(jìn)制)或88 (十六進(jìn)制)(十六進(jìn)制) T 0111100b 60 (十進(jìn)制)或十進(jìn)制)或3C(十六進(jìn)制)十六進(jìn)制) T 10b 2 (十進(jìn)制
28、)或十進(jìn)制)或2 (十六進(jìn)制)(十六進(jìn)制) T 10001111B 143(十進(jìn)制)或十進(jìn)制)或8F(十六進(jìn)制)十六進(jìn)制) 第第5章章 TMS320C54x的軟件開發(fā)與設(shè)計(jì)的軟件開發(fā)與設(shè)計(jì) 5.2 5.2 TMS320C54xTMS320C54x匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì) 第5章TMS320C54x軟件開發(fā)與設(shè) 計(jì) 21 5.2.3 匯編語言中的常數(shù)及字符串匯編語言中的常數(shù)及字符串 2、八進(jìn)制整數(shù)、八進(jìn)制整數(shù) T 八進(jìn)制整型常量最多由八進(jìn)制整型常量最多由6位的八進(jìn)制數(shù)字(位的八進(jìn)制數(shù)字(0到到7) 組組 成,后綴為成,后綴為Q(或或q)或前綴為或前綴為0(零)。(零)。 T 例例5-7
29、八進(jìn)制整數(shù)示例八進(jìn)制整數(shù)示例 T 100011Q 32777(十進(jìn)制)或十進(jìn)制)或8009(十六進(jìn)制)(十六進(jìn)制) T 124q 84 (十進(jìn)制)或十進(jìn)制)或54 (十六進(jìn)制)(十六進(jìn)制) T 八進(jìn)制常數(shù)也可使用八進(jìn)制常數(shù)也可使用C語言的記號(hào),即加前綴語言的記號(hào),即加前綴0。 T 0100011 32777(十進(jìn)制)或(十進(jìn)制)或8009(十六進(jìn)制)(十六進(jìn)制) T 0124 84 (十進(jìn)制)或(十進(jìn)制)或54 (十六進(jìn)制)(十六進(jìn)制) 第第5章章 TMS320C54x的軟件開發(fā)與設(shè)計(jì)的軟件開發(fā)與設(shè)計(jì) 5.2 5.2 TMS320C54xTMS320C54x匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì) 第
30、5章TMS320C54x軟件開發(fā)與設(shè) 計(jì) 22 5.2.3 匯編語言中的常數(shù)及字符串匯編語言中的常數(shù)及字符串 3、十進(jìn)制整數(shù)、十進(jìn)制整數(shù) 十進(jìn)制整型常量由十進(jìn)制數(shù)字串組成,無后綴。取值范圍十進(jìn)制整型常量由十進(jìn)制數(shù)字串組成,無后綴。取值范圍 為:為:32 76832 767或或065 535。 例例5-8十進(jìn)制整數(shù)示例十進(jìn)制整數(shù)示例 2118 2118 (十進(jìn)制)或(十進(jìn)制)或846 (十六進(jìn)制)(十六進(jìn)制) 65535 65535(十進(jìn)制)或(十進(jìn)制)或0FFFF(十六進(jìn)制)十六進(jìn)制) 32768 32768(十進(jìn)制)或(十進(jìn)制)或8000 (十六進(jìn)制)(十六進(jìn)制) 第第5章章 TMS320C
31、54x的軟件開發(fā)與設(shè)計(jì)的軟件開發(fā)與設(shè)計(jì) 5.2 5.2 TMS320C54xTMS320C54x匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì) 第5章TMS320C54x軟件開發(fā)與設(shè) 計(jì) 23 5.2.3 匯編語言中的常數(shù)及字符串匯編語言中的常數(shù)及字符串 4、十六進(jìn)制整數(shù)、十六進(jìn)制整數(shù) 十六進(jìn)制整型常量最多由十六進(jìn)制整型常量最多由4位十六進(jìn)制數(shù)字組成,帶后綴位十六進(jìn)制數(shù)字組成,帶后綴 H(或或h),必須以數(shù)字(必須以數(shù)字(09)開始,也可加前綴)開始,也可加前綴0 x。 例例5-9 十六進(jìn)制整數(shù)示例十六進(jìn)制整數(shù)示例 0DH 14 (十進(jìn)制)或十進(jìn)制)或000D (十六進(jìn)制)十六進(jìn)制) 12BCH 4796(
32、十進(jìn)制)或十進(jìn)制)或12BC(十六進(jìn)制)十六進(jìn)制) 十六進(jìn)制常數(shù)也可用十六進(jìn)制常數(shù)也可用C語言記號(hào),即加前綴語言記號(hào),即加前綴0 x。 0 x0D 14 (十進(jìn)制)或十進(jìn)制)或000D (十六進(jìn)制)十六進(jìn)制) 0 x12BC 4796(十進(jìn)制)或十進(jìn)制)或12BC(十六進(jìn)制)十六進(jìn)制) 第第5章章 TMS320C54x的軟件開發(fā)與設(shè)計(jì)的軟件開發(fā)與設(shè)計(jì) 5.2 5.2 TMS320C54xTMS320C54x匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì) 第5章TMS320C54x軟件開發(fā)與設(shè) 計(jì) 24 5.2.3 匯編語言中的常數(shù)及字符串匯編語言中的常數(shù)及字符串 5、浮點(diǎn)數(shù)、浮點(diǎn)數(shù) 浮點(diǎn)整型常量由一串十進(jìn)制
33、數(shù)字組成,可以帶小數(shù)點(diǎn)、分浮點(diǎn)整型常量由一串十進(jìn)制數(shù)字組成,可以帶小數(shù)點(diǎn)、分 數(shù)和指數(shù)部分。數(shù)和指數(shù)部分。 浮點(diǎn)數(shù)的表示方法:浮點(diǎn)數(shù)的表示方法: nn E | e n n為一串十進(jìn)制數(shù),浮點(diǎn)數(shù)前可帶加減號(hào)(或),且為一串十進(jìn)制數(shù),浮點(diǎn)數(shù)前可帶加減號(hào)(或),且 小數(shù)點(diǎn)必須指定。小數(shù)點(diǎn)必須指定。 例例5-10 浮點(diǎn)數(shù)示例浮點(diǎn)數(shù)示例 99.e9 有效的數(shù)有效的數(shù) 99e9 非法非法 合法:合法:.314 ,3.14 , -.314e-19 。111111 第第5章章 TMS320C54x的軟件開發(fā)與設(shè)計(jì)的軟件開發(fā)與設(shè)計(jì) 5.2 5.2 TMS320C54xTMS320C54x匯編語言程序設(shè)計(jì)匯編語言
34、程序設(shè)計(jì) 第5章TMS320C54x軟件開發(fā)與設(shè) 計(jì) 25 第第5章章 TMS320C54x的軟件開發(fā)與設(shè)計(jì)的軟件開發(fā)與設(shè)計(jì) 5.2 5.2 TMS320C54xTMS320C54x匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì) 5.2.3 匯編語言中的常數(shù)及字符串匯編語言中的常數(shù)及字符串 6、字符常數(shù)、字符常數(shù) T 字符常數(shù)是包括在單引號(hào)內(nèi)的字符。若單引號(hào)之間沒有字符,字符常數(shù)是包括在單引號(hào)內(nèi)的字符。若單引號(hào)之間沒有字符, 則值為則值為0。每個(gè)字符在內(nèi)部表示為。每個(gè)字符在內(nèi)部表示為8位位ASCII碼。碼。 T 例例5-11 字符常數(shù)示例字符常數(shù)示例 T A 內(nèi)部表示為內(nèi)部表示為61 h T B 內(nèi)部表示為
35、內(nèi)部表示為42 h 第5章TMS320C54x軟件開發(fā)與設(shè) 計(jì) 26 5.2.3 匯編語言中的常數(shù)及字符串匯編語言中的常數(shù)及字符串 7、字符串、字符串 字符串是由雙引號(hào)括起來的一串字符,最大長度是可字符串是由雙引號(hào)括起來的一串字符,最大長度是可 以變化的,由要求字符串的偽指令來設(shè)置。字符在內(nèi)以變化的,由要求字符串的偽指令來設(shè)置。字符在內(nèi) 部用部用8位位ASCII碼來表示。碼來表示。 例例5-12 字符串示例字符串示例 “example” 定義了一個(gè)長度為定義了一個(gè)長度為7的字符串:的字符串: example。 第第5章章 TMS320C54x的軟件開發(fā)與設(shè)計(jì)的軟件開發(fā)與設(shè)計(jì) 5.2 5.2 T
36、MS320C54xTMS320C54x匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì) 第5章TMS320C54x軟件開發(fā)與設(shè) 計(jì) 27 5.2.4 匯編語言中的表達(dá)式匯編語言中的表達(dá)式 表達(dá)式可以是常數(shù)、符號(hào),或者是由算術(shù)運(yùn)算符連接的表達(dá)式可以是常數(shù)、符號(hào),或者是由算術(shù)運(yùn)算符連接的 一些常數(shù)和符號(hào)、并可直接計(jì)算得到一個(gè)常數(shù)結(jié)果值的一些常數(shù)和符號(hào)、并可直接計(jì)算得到一個(gè)常數(shù)結(jié)果值的 運(yùn)算式。表達(dá)式值的有效范圍從運(yùn)算式。表達(dá)式值的有效范圍從32 76832 767。 對(duì)于運(yùn)算式形式的表達(dá)式,影響其計(jì)算結(jié)果值的主要因?qū)τ谶\(yùn)算式形式的表達(dá)式,影響其計(jì)算結(jié)果值的主要因 素有:素有: (1) 圓括號(hào)(圓括號(hào)( )。圓括號(hào)
37、內(nèi)的表達(dá)式最先計(jì)算。)。圓括號(hào)內(nèi)的表達(dá)式最先計(jì)算。 (2) 優(yōu)先級(jí)。優(yōu)先級(jí)。TMS320C54x表達(dá)式中使用與表達(dá)式中使用與C語言相似的語言相似的 優(yōu)先級(jí),優(yōu)先級(jí)高的先計(jì)算。優(yōu)先級(jí),優(yōu)先級(jí)高的先計(jì)算。 (3) 從左到右運(yùn)算順序。在具有相同的優(yōu)先級(jí)的運(yùn)算式中,從左到右運(yùn)算順序。在具有相同的優(yōu)先級(jí)的運(yùn)算式中, 按從左到右的順序計(jì)算。按從左到右的順序計(jì)算。 第第5章章 TMS320C54x的軟件開發(fā)與設(shè)計(jì)的軟件開發(fā)與設(shè)計(jì) 5.2 5.2 TMS320C54xTMS320C54x匯編語言程序設(shè)計(jì)匯編語言程序設(shè)計(jì) 第5章TMS320C54x軟件開發(fā)與設(shè) 計(jì) 28 5.2.4 匯編語言中的表達(dá)式匯編語言中
38、的表達(dá)式 1、匯編源程序中的運(yùn)算符、匯編源程序中的運(yùn)算符 序號(hào)序號(hào)符符 號(hào)號(hào) 運(yùn)算操作運(yùn)算操作求值順序求值順序 1+ - ! 取正、取負(fù)、按位求補(bǔ) 、邏輯負(fù) 從右至左 2* / % 乘法、除法、求模從左至右 3+ -加法、減法從左至右 4指數(shù)從左到右 5 左移、右移從左至右 6 = 大于、大于等于從左至右 8!= = = 不等于、等于從左至右 9 (2)volatile關(guān)鍵字關(guān)鍵字 一個(gè)定義為一個(gè)定義為volatile的變量是說這變量可能會(huì)被意想不到地的變量是說這變量可能會(huì)被意想不到地 改變,這樣,編譯器就不會(huì)去根據(jù)假設(shè)這個(gè)變量的值去優(yōu)改變,這樣,編譯器就不會(huì)去根據(jù)假設(shè)這個(gè)變量的值去優(yōu) 化程序
39、了。換句話說,化程序了。換句話說,C編譯時(shí)的優(yōu)化器在用到這個(gè)變量時(shí)編譯時(shí)的優(yōu)化器在用到這個(gè)變量時(shí) 必須每次都小心地重新讀取這個(gè)變量的值,而不是使用保必須每次都小心地重新讀取這個(gè)變量的值,而不是使用保 存在寄存器里的備份。存在寄存器里的備份。 第第5章章 TMS320C54x的軟件開發(fā)與設(shè)計(jì)的軟件開發(fā)與設(shè)計(jì) 5.6 TMS320C54x C5.6 TMS320C54x C語言編程語言編程 第5章TMS320C54x軟件開發(fā)與設(shè) 計(jì) 67 T5.6.1 相關(guān)基礎(chǔ)知識(shí)相關(guān)基礎(chǔ)知識(shí) T 2.TMS320C54x C擴(kuò)展的擴(kuò)展的C語言關(guān)鍵字語言關(guān)鍵字 (3)near、far關(guān)鍵字關(guān)鍵字 TMS320C5
40、4x C拓展了標(biāo)準(zhǔn)拓展了標(biāo)準(zhǔn)C語言,增加了語言,增加了near、far關(guān)鍵字,用于指關(guān)鍵字,用于指 定函數(shù)調(diào)用的方式。例如:定函數(shù)調(diào)用的方式。例如: far int SubFunction( ); near int sub_function( ); 當(dāng)使用當(dāng)使用near限定的函數(shù),編譯將使用限定的函數(shù),編譯將使用CALL指令產(chǎn)生調(diào)用;當(dāng)使用指令產(chǎn)生調(diào)用;當(dāng)使用far 限定的函數(shù),編譯將使用限定的函數(shù),編譯將使用FCALL指令產(chǎn)生調(diào)用。注意,指令產(chǎn)生調(diào)用。注意,near、far關(guān)鍵關(guān)鍵 字僅影響函數(shù)的調(diào)用,對(duì)函數(shù)指針沒有任何影響。字僅影響函數(shù)的調(diào)用,對(duì)函數(shù)指針沒有任何影響。 (4)interru
41、pt關(guān)鍵字關(guān)鍵字 TMS320C54x C拓展了標(biāo)準(zhǔn)拓展了標(biāo)準(zhǔn)C語言,增加了語言,增加了interrupt關(guān)鍵字,用于指關(guān)鍵字,用于指 定函數(shù)作為中斷處理函數(shù)。中斷處理函數(shù)與普通函數(shù)的區(qū)別在于采用定函數(shù)作為中斷處理函數(shù)。中斷處理函數(shù)與普通函數(shù)的區(qū)別在于采用 了特殊的寄存器保護(hù)規(guī)則和返回序列。當(dāng)中斷發(fā)生時(shí),中斷處理函數(shù)了特殊的寄存器保護(hù)規(guī)則和返回序列。當(dāng)中斷發(fā)生時(shí),中斷處理函數(shù) 必須保護(hù)所有寄存器,在返回時(shí)要恢復(fù)所有保護(hù)的寄存器,使用語法必須保護(hù)所有寄存器,在返回時(shí)要恢復(fù)所有保護(hù)的寄存器,使用語法 如下:如下: 例例5-20 中斷服務(wù)程序定義示例中斷服務(wù)程序定義示例 interrupt void
42、 int_handler( ) /中斷程序體中斷程序體 第第5章章 TMS320C54x的軟件開發(fā)與設(shè)計(jì)的軟件開發(fā)與設(shè)計(jì) 5.6 TMS320C54x C5.6 TMS320C54x C語言編程語言編程 第5章TMS320C54x軟件開發(fā)與設(shè) 計(jì) 68 T5.6.1 相關(guān)基礎(chǔ)知識(shí)相關(guān)基礎(chǔ)知識(shí) T 2.TMS320C54x C擴(kuò)展的擴(kuò)展的C語言關(guān)鍵字語言關(guān)鍵字 (5)ioport關(guān)鍵字關(guān)鍵字 ioport關(guān)鍵字允許訪問關(guān)鍵字允許訪問TMS320C54x的的I/O存儲(chǔ)空間,使用語法:存儲(chǔ)空間,使用語法: ioport type port hex_num 其中,其中,ioport 是關(guān)鍵字;是關(guān)鍵字
43、;type 必須是必須是char、short、int或或unsigned int 之一;之一;port hex_num指明了端口地址;指明了端口地址;hex_num必須是十六進(jìn)制數(shù)的必須是十六進(jìn)制數(shù)的 描述。描述。 例例5-21ioport關(guān)鍵字使用示例關(guān)鍵字使用示例 / 把把I/O空間空間0 x100地址的端口映射為地址的端口映射為C語言中語言中unsigned變量并命名為變量并命名為 port100 ioport unsigned port100; int fun( ) port100=0 x10;/將將0 x10寫入寫入0 x100地址處的地址處的IO端口端口 a= port100;/讀
44、入讀入0 x100地址處的地址處的IO端口,數(shù)據(jù)存入端口,數(shù)據(jù)存入a變量變量 第第5章章 TMS320C54x的軟件開發(fā)與設(shè)計(jì)的軟件開發(fā)與設(shè)計(jì) 5.6 TMS320C54x C5.6 TMS320C54x C語言編程語言編程 第5章TMS320C54x軟件開發(fā)與設(shè) 計(jì) 69 T5.6.1 相關(guān)基礎(chǔ)知識(shí)相關(guān)基礎(chǔ)知識(shí) T 3.C語言開發(fā)需要的支持語言開發(fā)需要的支持 T TMS320C54x 在用在用C語言開發(fā)時(shí),必須添加語言開發(fā)時(shí),必須添加C開發(fā)運(yùn)行庫的支開發(fā)運(yùn)行庫的支 持。在持。在C代碼編譯生成的目標(biāo)代碼執(zhí)行代碼編譯生成的目標(biāo)代碼執(zhí)行main函數(shù)代碼之前,有函數(shù)代碼之前,有 許多工作要做,才能保
45、證程序的正確運(yùn)行,這都需要開發(fā)庫提許多工作要做,才能保證程序的正確運(yùn)行,這都需要開發(fā)庫提 供解決方案。供解決方案。 第第5章章 TMS320C54x的軟件開發(fā)與設(shè)計(jì)的軟件開發(fā)與設(shè)計(jì) 5.6 TMS320C54x C5.6 TMS320C54x C語言編程語言編程 第5章TMS320C54x軟件開發(fā)與設(shè) 計(jì) 70 T5.6.2 應(yīng)用應(yīng)用C語言編程的示例語言編程的示例 T 例例5-22 I/O引腳引腳XF控制輸出控制輸出C源代碼示例(完整示例操作可源代碼示例(完整示例操作可 參考參考7.2節(jié))節(jié)) T #include zx54x.h T volatile WORD *p; T int main(
46、void) T WORD x; Tp=(volatile WORD *)0 x0;/close interruption T *p=0 x0; T while(1) T T p=(volatile WORD *)0 x7; T *p /set XF to 0 T for(x=0;x0 x0ffff;x+);/delay Tp=(volatile WORD *)0 x7; T *p|=0 x02000; /set XF to 1 Tfor(x=0;x0 x0ffff;x+);/delay T T return 0; T 第第5章章 TMS320C54x的軟件開發(fā)與設(shè)計(jì)的軟件開發(fā)與設(shè)計(jì) 5.6 T
47、MS320C54x C5.6 TMS320C54x C語言編程語言編程 第5章TMS320C54x軟件開發(fā)與設(shè) 計(jì) 71 T5.6.3 C程序目標(biāo)文件的段程序目標(biāo)文件的段 存儲(chǔ)結(jié)構(gòu)存儲(chǔ)結(jié)構(gòu) 段名段名使用對(duì)象使用對(duì)象存儲(chǔ)器種類存儲(chǔ)器種類 .text:可執(zhí)行代碼可執(zhí)行代碼程序程序 ROM .cinit:全局全局 inits程序程序 ROM .bss:變量變量數(shù)據(jù)數(shù)據(jù) RAM .stack:用于用于 SP數(shù)據(jù)數(shù)據(jù) RAM Vector s 向量向量程序程序 ROM (0 xFF80) .switc h 為為.const語句建語句建 立的表格立的表格 數(shù)據(jù)數(shù)據(jù) ROM .constconst int
48、x=25;數(shù)據(jù)數(shù)據(jù) ROM .sysm e m 堆,動(dòng)態(tài)內(nèi)存堆,動(dòng)態(tài)內(nèi)存數(shù)據(jù)數(shù)據(jù) RAM 第第5章章 TMS320C54x的軟件開發(fā)與設(shè)計(jì)的軟件開發(fā)與設(shè)計(jì) 5.6 TMS320C54x C5.6 TMS320C54x C語言編程語言編程 第5章TMS320C54x軟件開發(fā)與設(shè) 計(jì) 72 5.7 5.7 用用C C語言和匯編混合編程語言和匯編混合編程 T 雖然雖然C編譯器的優(yōu)化功能可以使編譯器的優(yōu)化功能可以使C代碼的效率大大增加,但是代碼的效率大大增加,但是 在某些特定情況下,在某些特定情況下,C代碼的效率還是無法與手工編寫的匯編代碼的效率還是無法與手工編寫的匯編 代碼的效率相比,畢竟即使是最佳
49、的代碼的效率相比,畢竟即使是最佳的C編譯器,也無法在所有編譯器,也無法在所有 的情況下都能夠最佳合理地利用處理器所提供的各種資源;相的情況下都能夠最佳合理地利用處理器所提供的各種資源;相 反,匯編編程方式代碼效率高,程序執(zhí)行速度快,可以充分合反,匯編編程方式代碼效率高,程序執(zhí)行速度快,可以充分合 理地利用處理器提供的硬件資源,但程序編寫比較煩瑣,可讀理地利用處理器提供的硬件資源,但程序編寫比較煩瑣,可讀 性較差,可移植性較差,軟件的修改和升級(jí)困難。因此在很多性較差,可移植性較差,軟件的修改和升級(jí)困難。因此在很多 特定的情況下,特定的情況下,DSP應(yīng)用程序往往需要用應(yīng)用程序往往需要用C語言和匯編
50、語言的語言和匯編語言的 混合編程方法來實(shí)現(xiàn),以達(dá)到最佳地利用混合編程方法來實(shí)現(xiàn),以達(dá)到最佳地利用DSP處理器軟硬件資處理器軟硬件資 源的目的。源的目的。 第第5章章 TMS320C54x的軟件開發(fā)與設(shè)計(jì)的軟件開發(fā)與設(shè)計(jì) 第5章TMS320C54x軟件開發(fā)與設(shè) 計(jì) 73 T C語言和匯編語言的混合編程有以下幾種方法:語言和匯編語言的混合編程有以下幾種方法: (1)獨(dú)立編寫匯編程序和獨(dú)立編寫匯編程序和C程序模塊,分別匯編形成各自的中間程序模塊,分別匯編形成各自的中間 目標(biāo)代碼模塊,再將目標(biāo)代碼模塊,再將C模塊和匯編模塊鏈接起來形成最終代模塊和匯編模塊鏈接起來形成最終代 碼。這種方法用戶必須自己維護(hù)
51、各匯編模塊的入口和出口代碼。這種方法用戶必須自己維護(hù)各匯編模塊的入口和出口代 碼,自己計(jì)算傳遞的參數(shù)在堆棧中的偏移量,工作量較大,碼,自己計(jì)算傳遞的參數(shù)在堆棧中的偏移量,工作量較大, 但好處是靈活性較大,能做到對(duì)程序的絕對(duì)控制。但好處是靈活性較大,能做到對(duì)程序的絕對(duì)控制。 (2)在在C程序與匯編程序中相互調(diào)用變量和常量。程序與匯編程序中相互調(diào)用變量和常量。 (3)在在C程序中直接內(nèi)嵌匯編語句。用此種方法主要是應(yīng)用在程序中直接內(nèi)嵌匯編語句。用此種方法主要是應(yīng)用在C 程序中實(shí)現(xiàn)一些硬件控制功能(程序中實(shí)現(xiàn)一些硬件控制功能(C語法不好實(shí)現(xiàn)的),例如語法不好實(shí)現(xiàn)的),例如 修改中斷控制寄存器、中斷標(biāo)志
52、寄存器等等。修改中斷控制寄存器、中斷標(biāo)志寄存器等等。 第第5章章 TMS320C54x的軟件開發(fā)與設(shè)計(jì)的軟件開發(fā)與設(shè)計(jì) 5.7 5.7 用用C C語言和匯編混合編程語言和匯編混合編程 第5章TMS320C54x軟件開發(fā)與設(shè) 計(jì) 74 T5.7.1 C模塊和匯編模塊的數(shù)據(jù)相互訪問模塊和匯編模塊的數(shù)據(jù)相互訪問 T 1.從從C程序中訪問匯編程序變量程序中訪問匯編程序變量 T 從從C程序中訪問在匯編程序中定義的變量或常數(shù)時(shí),需要根據(jù)程序中訪問在匯編程序中定義的變量或常數(shù)時(shí),需要根據(jù) 變量或常數(shù)定義的方式一般采取三種不同的方法,分別為變量變量或常數(shù)定義的方式一般采取三種不同的方法,分別為變量 在在.bs
53、s塊中定義、變量不在塊中定義、變量不在.bss塊中定義、常數(shù)。塊中定義、常數(shù)。 T 對(duì)于訪問在對(duì)于訪問在.bss命令定義的變量或直接用命令定義的變量或直接用.usect定義的變量,定義的變量, 可用如下方法實(shí)現(xiàn):可用如下方法實(shí)現(xiàn): T 采用采用.bss或或.usect命令定義變量命令定義變量 T 用用.global命令聲明為外部變量命令聲明為外部變量 T 在變量名前加一下劃線在變量名前加一下劃線“_” T 在在C程序中將變量說明為外部變量程序中將變量說明為外部變量 T 采用上述方法后,在采用上述方法后,在C程序中就可以訪問這個(gè)變量。程序中就可以訪問這個(gè)變量。 第第5章章 TMS320C54x的
54、軟件開發(fā)與設(shè)計(jì)的軟件開發(fā)與設(shè)計(jì) 5.7 5.7 用用C C語言和匯編混合編程語言和匯編混合編程 第5章TMS320C54x軟件開發(fā)與設(shè) 計(jì) 75 5.7.1 C5.7.1 C模塊和匯編模塊的數(shù)據(jù)相互訪問模塊和匯編模塊的數(shù)據(jù)相互訪問 1.1.從從C C程序中訪問匯編程序變量程序中訪問匯編程序變量 例例5-23C訪問匯編變量示例訪問匯編變量示例 匯編程序:匯編程序: .global _var ;說明為外部變量說明為外部變量 ;.bss須以雙字對(duì)齊須以雙字對(duì)齊 .bss _var,1 ;定義變量定義變量 .bss _Lvar,2 ;定義變量定義變量 .bss x,1 ;定義變量定義變量 .bss _
55、LW,1 ;定義變量定義變量 ;或或 ;_var .usect comm1,1 ;注意標(biāo)號(hào)注意標(biāo)號(hào)_var頂行寫,不能有空格頂行寫,不能有空格 等符號(hào)等符號(hào) C程序:程序: extern int var; /*外部變量外部變量*/ extern long int Lvar; /長整型不以雙字長整型不以雙字 對(duì)齊會(huì)產(chǎn)生在雙字塊內(nèi)折疊存放現(xiàn)象。對(duì)齊會(huì)產(chǎn)生在雙字塊內(nèi)折疊存放現(xiàn)象。 extern long int LW; /長整型以雙字對(duì)齊,長整型以雙字對(duì)齊, 不會(huì)產(chǎn)生在雙字塊內(nèi)折疊存放現(xiàn)象。不會(huì)產(chǎn)生在雙字塊內(nèi)折疊存放現(xiàn)象。 int main(void) var=5; /*訪問變量訪問變量*/ Lva
56、r=0 x11223344; LW=0 x55667788; LW*=2; return 0; 第第5章章 TMS320C54x的軟件開發(fā)與設(shè)計(jì)的軟件開發(fā)與設(shè)計(jì) 5.7 5.7 用用C C語言和匯編混合編程語言和匯編混合編程 第5章TMS320C54x軟件開發(fā)與設(shè) 計(jì) 76 5.7.1 C模塊和匯編模塊的數(shù)據(jù)相互訪問模塊和匯編模塊的數(shù)據(jù)相互訪問 1.從從C程序中訪問匯編程序變量程序中訪問匯編程序變量 例例5-24 C訪問匯編常量表示例訪問匯編常量表示例 匯編程序:匯編程序: .global _sine ;定義外部變量定義外部變量 .sect sine_tab ;定義一個(gè)獨(dú)立塊定義一個(gè)獨(dú)立塊 _
57、sine: .float 0.0 .float 0.01 .float 0.02 .float 0.03 C程序:程序: extern float sine; /*定義外定義外 部變量部變量*/ void main( void ) float f; float *sine_pointer=sine; /* 定義一個(gè)定義一個(gè)C指針指針*/ f=sine_pointer3; /*訪訪 問問sine_pointer3*/ f=2*f; 第第5章章 TMS320C54x的軟件開發(fā)與設(shè)計(jì)的軟件開發(fā)與設(shè)計(jì) 5.7 5.7 用用C C語言和匯編混合編程語言和匯編混合編程 第5章TMS320C54x軟件開發(fā)與
58、設(shè) 計(jì) 77 5.7.1 C模塊和匯編模塊的數(shù)據(jù)相互訪問模塊和匯編模塊的數(shù)據(jù)相互訪問 1.從從C程序中訪問匯編程序變量程序中訪問匯編程序變量 例例5-25 C訪問匯編常量示例訪問匯編常量示例 匯編程序:匯編程序: _table_size .set 500 ; 常數(shù)定義常數(shù)定義 .global _table_size ; 定義為全局定義為全局 C程序:程序: extern int table_size; void main(void) int i; int a=(int)( for(i=0;ia;+i); /. 第第5章章 TMS320C54x的軟件開發(fā)與設(shè)計(jì)的軟件開發(fā)與設(shè)計(jì) 5.7 5.7 用
59、用C C語言和匯編混合編程語言和匯編混合編程 第5章TMS320C54x軟件開發(fā)與設(shè) 計(jì) 78 5.7.1 C模塊和匯編模塊的數(shù)據(jù)相互訪問模塊和匯編模塊的數(shù)據(jù)相互訪問 2.從匯編程序中訪問從匯編程序中訪問C程序變量程序變量 T 編寫?yīng)毩⒌膮R編程序時(shí),也經(jīng)常需要訪問在編寫?yīng)毩⒌膮R編程序時(shí),也經(jīng)常需要訪問在C程序中定義的程序中定義的 全局變量或數(shù)組。需要特別注意的是在全局變量或數(shù)組。需要特別注意的是在C中的命名符號(hào),在中的命名符號(hào),在 匯編中被引用要在前面加下劃線匯編中被引用要在前面加下劃線_。 第第5章章 TMS320C54x的軟件開發(fā)與設(shè)計(jì)的軟件開發(fā)與設(shè)計(jì) 5.7 5.7 用用C C語言和匯編
60、混合編程語言和匯編混合編程 第5章TMS320C54x軟件開發(fā)與設(shè) 計(jì) 79 5.7.1 C模塊和匯編模塊的數(shù)據(jù)相互訪問模塊和匯編模塊的數(shù)據(jù)相互訪問 2.從匯編程序中訪問從匯編程序中訪問C程序變量程序變量 例例5-26 匯編訪問匯編訪問C全局變量示例全局變量示例 匯編程序:匯編程序: .global _gvar .global _asmfunc _asmfunc: ADD *(_gvar),A ;匯編中使用匯編中使用 STL A,*(_gvar) RET C程序:程序: extern int asmfunc(); int gvar; /*C中定義的中定義的 變量變量*/ void main(v
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年幼兒課程教案6篇
- 智能科創(chuàng)課程設(shè)計(jì)
- 2025年度股權(quán)代持及收益權(quán)分配合同(個(gè)人股權(quán)投資與代持)20篇
- 2025年度住宅小區(qū)智能安防系統(tǒng)合同11294篇
- 2025年新能源汽車充電樁停車場(chǎng)地合作租賃合同3篇
- 網(wǎng)紅木質(zhì)拓展課程設(shè)計(jì)
- 2025年草花種植基地水資源使用權(quán)合同3篇
- 2024食品行業(yè)市場(chǎng)競(jìng)爭(zhēng)分析合同
- 電纜掛牌施工方案
- 2024食品行業(yè)線上線下整合營銷代理協(xié)議3篇
- GB/T 18724-2024印刷技術(shù)印刷品與印刷油墨耐各種試劑性的測(cè)定
- IEC 62368-1標(biāo)準(zhǔn)解讀-中文
- 15J403-1-樓梯欄桿欄板(一)
- 2024年中考語文名句名篇默寫分類匯編(解析版全國)
- 新煤礦防治水細(xì)則解讀
- 故障診斷技術(shù)的國內(nèi)外發(fā)展現(xiàn)狀
- 醫(yī)院領(lǐng)導(dǎo)班子集體議事決策制度
- 解讀2024年《學(xué)紀(jì)、知紀(jì)、明紀(jì)、守紀(jì)》全文課件
- 農(nóng)機(jī)維修市場(chǎng)前景分析
- 大學(xué)生《思想道德與法治》考試復(fù)習(xí)題及答案
- 職業(yè)技術(shù)學(xué)院汽車專業(yè)人才需求調(diào)研報(bào)告
評(píng)論
0/150
提交評(píng)論