DSP 5502 程序結(jié)構(gòu)解析_第1頁
DSP 5502 程序結(jié)構(gòu)解析_第2頁
DSP 5502 程序結(jié)構(gòu)解析_第3頁
DSP 5502 程序結(jié)構(gòu)解析_第4頁
DSP 5502 程序結(jié)構(gòu)解析_第5頁
已閱讀5頁,還剩49頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、支持庫文件(系統(tǒng)帶,需加載)程序源文件(用戶寫)程序和數(shù)據(jù)在內(nèi)存空間中定位文件庫文件(主要為片基支持庫CLS文件) .C C源文件源文件 .ASM 匯編文件匯編文件 .CMD 命令文件命令文件 .H 頭文件頭文件 .PRJ 工程文件工程文件 .LST 列表文件列表文件 .MAP 映射文件映射文件 .OBJ目標(biāo)文件目標(biāo)文件 .OUT 可執(zhí)行文件可執(zhí)行文件 目標(biāo)文件鏈接目標(biāo)文件鏈接DSP系統(tǒng)中常用的文件后綴系統(tǒng)中常用的文件后綴 COFF目標(biāo)文件總是包括目標(biāo)文件總是包括3個默認(rèn)的段個默認(rèn)的段 : 文本段:文本段:用用.text定義,通常包括可執(zhí)行代碼。定義,通常包括可執(zhí)行代碼。 數(shù)據(jù)段:數(shù)據(jù)段:用用

2、.data定義,通常包括已初始化的數(shù)據(jù)。定義,通常包括已初始化的數(shù)據(jù)。 預(yù)留段:預(yù)留段:用用.bss定義,通常保留用于未初始化變量的空間。定義,通常保留用于未初始化變量的空間。 用用.usect,.sect或或.asect偽指令可創(chuàng)建命名段。這些命名段偽指令可創(chuàng)建命名段。這些命名段可以像可以像.text,.data一樣被使用。一樣被使用。段段 目標(biāo)文件的最小單位被稱為段,它是在存儲器中占有目標(biāo)文件的最小單位被稱為段,它是在存儲器中占有連續(xù)空間的代碼塊或數(shù)據(jù)塊。連續(xù)空間的代碼塊或數(shù)據(jù)塊。COFFCOFF有兩種基本類型的段:有兩種基本類型的段: 已初始化的段已初始化的段 包含數(shù)據(jù)或代碼。用包含數(shù)據(jù)

3、或代碼。用.text.text和和.data.data偽指令定義的段和用偽指令定義的段和用.sect.sect或或.asect.asect偽指令創(chuàng)建的偽指令創(chuàng)建的命名段均為已初始化的段。命名段均為已初始化的段。 未初始化的段未初始化的段 在內(nèi)存映射中為未初始化數(shù)據(jù)保留在內(nèi)存映射中為未初始化數(shù)據(jù)保留空間。空間。.bss.bss段和用段和用.usect.usect偽指令創(chuàng)建的命名段是未初始化偽指令創(chuàng)建的命名段是未初始化的段,在目標(biāo)文件中這些段沒有實際內(nèi)容。的段,在目標(biāo)文件中這些段沒有實際內(nèi)容。 匯編器在匯編過程中建立這些段,鏈接器把段重定位到目標(biāo)匯編器在匯編過程中建立這些段,鏈接器把段重定位到目標(biāo)

4、存儲器中存儲器中 所有的段都是獨立的、可定位的所有的段都是獨立的、可定位的 相同的段將按先后次序定位在連續(xù)的區(qū)域內(nèi)相同的段將按先后次序定位在連續(xù)的區(qū)域內(nèi) 未初始化段被定位到未初始化段被定位到RAM內(nèi);初始化段可單獨定位在內(nèi);初始化段可單獨定位在RAM或或ROM內(nèi),并且在鏈接時還可引用其他段內(nèi)定義的符號內(nèi),并且在鏈接時還可引用其他段內(nèi)定義的符號 匯編器為每個段設(shè)置了一個獨立的程序計數(shù)器,這些計數(shù)匯編器為每個段設(shè)置了一個獨立的程序計數(shù)器,這些計數(shù)器稱為器稱為段程序計數(shù)器段程序計數(shù)器(SPC,Section Program Counters)。)??梢钥梢杂枚纬绦蛴嫈?shù)器排列偽指令用段程序計數(shù)器排列偽

5、指令.align或或.even,強迫,強迫SPC指向預(yù)定指向預(yù)定的位置。的位置。段段 段程序計數(shù)器段程序計數(shù)器 鏈接器通過鏈接鏈接器通過鏈接COFF目標(biāo)文件建立可目標(biāo)文件建立可 執(zhí)行文件,執(zhí)行文件, 目標(biāo)文件中的段是鏈接時的重要依據(jù)。目標(biāo)文件中的段是鏈接時的重要依據(jù)。 鏈接器可把段定位到用戶系鏈接器可把段定位到用戶系 統(tǒng)已配置的存儲器中。統(tǒng)已配置的存儲器中。 鏈接器命令文件(鏈接器命令文件(.cmd)則給出鏈接器在鏈接時的有關(guān)信息)則給出鏈接器在鏈接時的有關(guān)信息 DSP芯片的存儲器配置隨應(yīng)用芯片的存儲器配置隨應(yīng)用 的不同而不同的不同而不同. 用鏈接器偽指令用鏈接器偽指令 MEMORY(存儲器偽

6、指令)可以確定目標(biāo)系統(tǒng)的各種內(nèi)存配置。(存儲器偽指令)可以確定目標(biāo)系統(tǒng)的各種內(nèi)存配置。 當(dāng)當(dāng)MEMORY決定了存儲器模式后,可以用鏈接器偽指令決定了存儲器模式后,可以用鏈接器偽指令 SECTIONS(段偽指令)確定鏈接器組合輸入段的方法和輸出段在(段偽指令)確定鏈接器組合輸入段的方法和輸出段在 存儲器中的位置。存儲器中的位置。 如果不使用這兩條偽指令,鏈接器則用默認(rèn)存儲器的定位方式如果不使用這兩條偽指令,鏈接器則用默認(rèn)存儲器的定位方式 來組合段,并把它們定位到存儲器中。來組合段,并把它們定位到存儲器中。鏈接器命令文件和鏈接器偽指令鏈接器命令文件和鏈接器偽指令目標(biāo)文件中的段與目標(biāo)存儲器之間的關(guān)系

7、: 目標(biāo)存儲器目標(biāo)文件.bss.data.textRAMEPROMROM 匯編器偽指令可以用來將數(shù)據(jù)和代碼的各個部分與相應(yīng)的段相聯(lián)系。匯編器在匯編的過程中,根據(jù)匯編命令,用適當(dāng)?shù)亩螌⒏鞑糠殖绦虼a和數(shù)據(jù)連在一起,構(gòu)成目標(biāo)文件。鏈接器的一個任務(wù)就是分配存儲單元,即把各個段重新定位到目標(biāo)存儲器中,如上圖所示。 鏈接器命令文件鏈接器命令文件 .cmd 鏈接器命令文件允許用戶把鏈接信息放置在文件中。命令文鏈接器命令文件允許用戶把鏈接信息放置在文件中。命令文件是件是ASCII文件,可以包含下列各項中的某一項:文件,可以包含下列各項中的某一項: 輸入文件名。輸入文件名。該輸入文件可以是目標(biāo)文件、歸檔庫或其

8、他命該輸入文件可以是目標(biāo)文件、歸檔庫或其他命令文件。令文件。 鏈接器選項。鏈接器選項。在命令文件中可以用命令行上的鏈接器選項。在命令文件中可以用命令行上的鏈接器選項。 MEMORY和和SECTIONS鏈接器偽指令。鏈接器偽指令。 注釋。注釋。用戶可以使用用戶可以使用/*和和*/定界符把注釋加到命令文件中。定界符把注釋加到命令文件中。 賦值語句。賦值語句。該語句定義并賦值給全局符號。該語句定義并賦值給全局符號。鏈接器命令文件和鏈接器偽指令鏈接器命令文件和鏈接器偽指令鏈接時給符號賦值鏈接時給符號賦值 賦值語句的語法:賦值語句的語法:鏈接器中賦值語句的語法類似于鏈接器中賦值語句的語法類似于C語言中語

9、言中賦值語句語法。賦值語句語法。 符號符號 = 表達(dá)式表達(dá)式 ;把表達(dá)式的值賦予符號;把表達(dá)式的值賦予符號 符號符號 += 表達(dá)式表達(dá)式 ;把表達(dá)式的值加到符號上;把表達(dá)式的值加到符號上 符號符號 -= 表達(dá)式表達(dá)式 ;從符號減去表達(dá)式的值;從符號減去表達(dá)式的值 符號符號 *= 表達(dá)式表達(dá)式;符號乘以表達(dá)式;符號乘以表達(dá)式 符號符號 /= 表達(dá)式表達(dá)式;符號除以表達(dá)式;符號除以表達(dá)式 把把SPC賦予符號賦予符號“.”:“.”表示定位期間表示定位期間SPC的當(dāng)前值。的當(dāng)前值?!?”符號僅可用在符號僅可用在 SECTIONS偽指令內(nèi)的賦值語句中,用來表示段偽指令內(nèi)的賦值語句中,用來表示段的當(dāng)前運行

10、地址。的當(dāng)前運行地址。鏈接器命令文件和鏈接器偽指令鏈接器命令文件和鏈接器偽指令 賦值表達(dá)式:鏈接器表達(dá)式必須遵循以下規(guī)則賦值表達(dá)式:鏈接器表達(dá)式必須遵循以下規(guī)則: 表達(dá)式可包含全局符號、常數(shù),以及表表達(dá)式可包含全局符號、常數(shù),以及表8-3-1所列的所列的C語言語言運算符。運算符。 所有數(shù)被當(dāng)做長整數(shù)(所有數(shù)被當(dāng)做長整數(shù)(32位)處理。位)處理。 鏈接器用和匯編器相同的方式識別常數(shù)。見表鏈接器用和匯編器相同的方式識別常數(shù)。見表8-3-2. 表達(dá)式中的符號只具有符號的地址值,不進(jìn)行類型檢查。表達(dá)式中的符號只具有符號的地址值,不進(jìn)行類型檢查。 鏈接器表達(dá)式可以是絕對的或可重定位的。鏈接器表達(dá)式可以是

11、絕對的或可重定位的。鏈接器命令文件和鏈接器偽指令鏈接器命令文件和鏈接器偽指令 MEMORY偽指令偽指令 確定在目標(biāo)系統(tǒng)中具有物理位置且可被程序使用的存儲器范圍。確定在目標(biāo)系統(tǒng)中具有物理位置且可被程序使用的存儲器范圍。MEMORY偽指令的一般語句形式為:偽指令的一般語句形式為:MEMORY PAGE 0: 存儲器名存儲器名1(屬性)(屬性):ORIGIN=常數(shù)常數(shù), LENGTH=常數(shù)常數(shù) PAGE n: 存儲器存儲器名名n(屬性)(屬性): ORIGIN=常數(shù)常數(shù),LENGTH=常數(shù)常數(shù) 鏈接器命令文件和鏈接器偽指令鏈接器命令文件和鏈接器偽指令PAGE: 定義一個存儲器空間,用戶可以定義多達(dá)定

12、義一個存儲器空間,用戶可以定義多達(dá)255頁。頁。 PAGE0定義程序存儲器,定義程序存儲器,PAGE1定義數(shù)據(jù)存儲器,定義數(shù)據(jù)存儲器, PAGE2 定義定義I/O空間空間。如果用戶沒有使用如果用戶沒有使用PAGE選項,那么鏈接器把段定位到選項,那么鏈接器把段定位到PAGE0。每個每個PAGE代表一個完全獨立的地址空間。代表一個完全獨立的地址空間。在在PAGE0上已配置的存儲器可以和在上已配置的存儲器可以和在PAGE1上已配置的存儲器重上已配置的存儲器重疊疊。存儲器名:存儲器名: 命名存儲器范圍。由命名存儲器范圍。由18個字符組成。個字符組成。名字對于鏈接器沒有特殊的意義,僅指明存儲器的區(qū)域。名

13、字對于鏈接器沒有特殊的意義,僅指明存儲器的區(qū)域。在不同頁上存儲器范圍可以有相同的名字,在不同頁上存儲器范圍可以有相同的名字,在同一頁,所有的存儲器范圍不能有相同的名字,且不能重疊在同一頁,所有的存儲器范圍不能有相同的名字,且不能重疊。鏈接器命令文件和鏈接器偽指令鏈接器命令文件和鏈接器偽指令屬性:屬性:可選項,當(dāng)被使用時,必須用括號括起來。屬性把輸出可選項,當(dāng)被使用時,必須用括號括起來。屬性把輸出段的定位限制在某些存儲器范圍內(nèi)。如果用戶不使用任何屬性,段的定位限制在某些存儲器范圍內(nèi)。如果用戶不使用任何屬性,則輸出段即可以定位到任何范圍內(nèi)。有效的屬性包括:則輸出段即可以定位到任何范圍內(nèi)。有效的屬性

14、包括:R存儲器可讀;存儲器可讀;W存儲器可寫;存儲器可寫;X儲器可以包含可執(zhí)行儲器可以包含可執(zhí)行代碼;代碼; I存儲器可被初始化。存儲器可被初始化。ORIGIN:指定存儲器的起始地址,也可以寫成指定存儲器的起始地址,也可以寫成org或或o。這個。這個值是以字節(jié)規(guī)定的值是以字節(jié)規(guī)定的16位常數(shù),也可以是十進(jìn)制、八進(jìn)制或十六位常數(shù),也可以是十進(jìn)制、八進(jìn)制或十六進(jìn)制。進(jìn)制。 LENGTH:指定存儲器的長度指定存儲器的長度,也可以寫成也可以寫成len或或l。數(shù)值的表。數(shù)值的表示與示與origin相同相同 當(dāng)用戶使用當(dāng)用戶使用MEMORY偽指令時偽指令時,要確信已指定了所有可要確信已指定了所有可 用于裝

15、載代碼的存儲器范圍。用于裝載代碼的存儲器范圍。 鏈接器不把程序放到未配置的存儲器中。鏈接器不把程序放到未配置的存儲器中。注意:注意:鏈接器命令文件和鏈接器偽指令鏈接器命令文件和鏈接器偽指令例例6.24 MEMORY指令舉例指令舉例 / * Sample Command file with MEMORY directive * /file1.obj file2.obj -o prog.out MEMORY PAGE0: ROM: ORIGIN=0C00h ,LENGTH=1000h PAGE1: SCRATCH: ORIGIN =60h, LENGTH =20h RAM: ORIGIN =200

16、h, LENGTH =200h 該例定義了一個存儲器系統(tǒng):具有程序存儲器中地址該例定義了一個存儲器系統(tǒng):具有程序存儲器中地址為為0C00h,長度為,長度為4K字的字的ROM;數(shù)據(jù)存儲器中地址為;數(shù)據(jù)存儲器中地址為60h,長度為,長度為32字的字的RAM;數(shù)據(jù)存儲器中地址為;數(shù)據(jù)存儲器中地址為200h,長長度為度為512字的字的RAM。鏈接器命令文件和鏈接器偽指令鏈接器命令文件和鏈接器偽指令 SECTIONS偽指令偽指令 描述輸入段怎樣被組合到輸出段內(nèi);定義在執(zhí)行程描述輸入段怎樣被組合到輸出段內(nèi);定義在執(zhí)行程序中的輸出段;序中的輸出段; 規(guī)定輸出段在存儲器中的位置;允許重新命規(guī)定輸出段在存儲器中

17、的位置;允許重新命名輸出段。名輸出段。SECTIONS偽指令的一般語法形式是:偽指令的一般語法形式是:SECTIONS 段名段名1:特性特性1,特性,特性2, 段名段名2:特性特性1,特性,特性2, 指令中的每一行從段名開始定義輸出段,輸出段是輸出文件指令中的每一行從段名開始定義輸出段,輸出段是輸出文件內(nèi)的段。在段名之后是特性列表(以逗號隔開)內(nèi)的段。在段名之后是特性列表(以逗號隔開),定義段的內(nèi)定義段的內(nèi)容以及它是怎樣被分配的容以及它是怎樣被分配的。鏈接器命令文件和鏈接器偽指令鏈接器命令文件和鏈接器偽指令特性列表的選項(段所具備的特性)有以下幾種。特性列表的選項(段所具備的特性)有以下幾種。

18、 裝載地址:裝載地址:規(guī)定段將被裝載在存儲器中的位置。規(guī)定段將被裝載在存儲器中的位置。 語法:語法:load = allocation 或或 allocation 或或 allocation allocation是是MEMORY偽指令所定義的范圍內(nèi)地址。偽指令所定義的范圍內(nèi)地址。 運行地址:運行地址:定義段在存儲器內(nèi)運行的位置。定義段在存儲器內(nèi)運行的位置。 語法:語法:run = allocation 或或 run allocation 如果在一個段中如果在一個段中 load 和和 run 的地址相同,的地址相同, run 可以省略可以省略。 鏈接器為每個輸出段分配兩個目標(biāo)存儲器地址:裝載地址

19、和鏈接器為每個輸出段分配兩個目標(biāo)存儲器地址:裝載地址和運行地址。運行地址。通常這兩個地址是相同的通常這兩個地址是相同的。但有時用戶可能把代碼裝。但有時用戶可能把代碼裝入存儲器的一個區(qū)域卻在另一個區(qū)域運行它。例如在引導(dǎo)加載程入存儲器的一個區(qū)域卻在另一個區(qū)域運行它。例如在引導(dǎo)加載程序,用序,用load設(shè)置它的裝載地址,用設(shè)置它的裝載地址,用run設(shè)置它的運行地址。設(shè)置它的運行地址。鏈接器命令文件和鏈接器偽指令鏈接器命令文件和鏈接器偽指令 調(diào)準(zhǔn)地址:調(diào)準(zhǔn)地址:規(guī)定段應(yīng)在規(guī)定段應(yīng)在地址邊界地址邊界上開始。調(diào)準(zhǔn)可以使鏈接器上開始。調(diào)準(zhǔn)可以使鏈接器把輸出段放在位于把輸出段放在位于n字邊界的地址,其中字邊界

20、的地址,其中n是是2的冪。的冪。 語法:語法:align=n 或或 align=(n) 如如 .text align=128, 即將即將.text段定位于頁邊界。段定位于頁邊界。 塊地址:塊地址:規(guī)定段必須裝在兩個地址邊界之間規(guī)定段必須裝在兩個地址邊界之間,它把段定位在它把段定位在大小為大小為n的塊內(nèi)任何地方,如果段大于塊,那么段將從該邊界的塊內(nèi)任何地方,如果段大于塊,那么段將從該邊界開開 始。和調(diào)準(zhǔn)一始。和調(diào)準(zhǔn)一 樣,樣,n必須是必須是2的冪。的冪。 語法:語法:block=n 或或 block(n) 如如 .bss load=block(0 x80)。 定位定位.bss段使其包含在單個段使

21、其包含在單個128字的頁內(nèi)或者從新頁開始。字的頁內(nèi)或者從新頁開始。用戶可以單獨使用調(diào)準(zhǔn)或塊,也可以和裝入地址、運行地址用戶可以單獨使用調(diào)準(zhǔn)或塊,也可以和裝入地址、運行地址結(jié)合在一起使用,但是結(jié)合在一起使用,但是調(diào)準(zhǔn)和塊不能一起使用。調(diào)準(zhǔn)和塊不能一起使用。鏈接器命令文件和鏈接器偽指令鏈接器命令文件和鏈接器偽指令 輸入段:輸入段:定義組成輸出段的輸入段。定義組成輸出段的輸入段。 語法:語法: input_sections 輸入文件中的段組合起來形成輸出段,鏈接器按照所列輸入文件中的段組合起來形成輸出段,鏈接器按照所列出的輸入段的次序鏈接并組合它們。輸出段的大小是組成它出的輸入段的次序鏈接并組合它們

22、。輸出段的大小是組成它的輸入段的大小之和。通用類型的段的規(guī)格說明中沒有輸入的輸入段的大小之和。通用類型的段的規(guī)格說明中沒有輸入段。段。 如如 :SECTIONS .text: .data: .bss : 此時鏈接器從輸入文件取出所有此時鏈接器從輸入文件取出所有.text段并把它們組合到段并把它們組合到.text輸出段內(nèi)。鏈接器按照它在輸入文件中遇到的次序鏈接輸出段內(nèi)。鏈接器按照它在輸入文件中遇到的次序鏈接.text輸入輸入段,對段,對.data和和.bss段的操作與段的操作與.text相同。相同。 用戶也可以明確規(guī)定組用戶也可以明確規(guī)定組成輸出段的輸入段成輸出段的輸入段,每個輸入段用它的文件名

23、和段名來標(biāo)志。每個輸入段用它的文件名和段名來標(biāo)志。鏈接器命令文件和鏈接器偽指令鏈接器命令文件和鏈接器偽指令例例6.25 SECTIONS .text f1.obj(.text) f2.obj(sec1) f3.obj f3.obj(.text,sec2) 輸入段不必相互同名也不必和輸出段同名。輸入段不必相互同名也不必和輸出段同名。如果列舉輸入如果列舉輸入文件時不帶段,那么它所有的段將被包含在輸出段之內(nèi)。文件時不帶段,那么它所有的段將被包含在輸出段之內(nèi)。鏈接器命令文件和鏈接器偽指令鏈接器命令文件和鏈接器偽指令 段類型:段類型:定義特殊段類型的標(biāo)志。定義特殊段類型的標(biāo)志。 語法:語法:type=C

24、OPY 或或type=DSECT 或或 type=NOLOAD 用戶可以把這用戶可以把這3種特殊的類型賦予輸出段。用種特殊的類型賦予輸出段。用COPY和和DSECT創(chuàng)建的段是一個虛段創(chuàng)建的段是一個虛段,它不包括在輸出段存儲器分配內(nèi),也不占據(jù),它不包括在輸出段存儲器分配內(nèi),也不占據(jù)存儲器空間,不包括在存儲器映象列表中。但在虛段中定義的全局存儲器空間,不包括在存儲器映象列表中。但在虛段中定義的全局符號可以被其他輸入段引用,符號可以被其他輸入段引用,COPY段可以將段的內(nèi)容、重定位信段可以將段的內(nèi)容、重定位信息及行號信息放在輸出模塊中,而息及行號信息放在輸出模塊中,而DSECT段則不放置。段則不放置

25、。 NOLOAD創(chuàng)建的段不將段的內(nèi)容、重定位信息及行號信息放創(chuàng)建的段不將段的內(nèi)容、重定位信息及行號信息放在輸出模塊中,但鏈接器為其分配空間并包括在存儲器映象列表中。在輸出模塊中,但鏈接器為其分配空間并包括在存儲器映象列表中。 鏈接器命令文件和鏈接器偽指令鏈接器命令文件和鏈接器偽指令 填充值:填充值:定義用于填充初始化空位的數(shù)值。定義用于填充初始化空位的數(shù)值。 語法:語法:file=value 或或name: =value 當(dāng)初始化輸出段內(nèi)有空位存在時,鏈接器必須提供原始當(dāng)初始化輸出段內(nèi)有空位存在時,鏈接器必須提供原始數(shù)據(jù)以填充它。鏈接器用數(shù)據(jù)以填充它。鏈接器用16位數(shù)值填充空位,該數(shù)值在存儲位

26、數(shù)值填充空位,該數(shù)值在存儲器內(nèi)復(fù)制直至它填滿空位為止。器內(nèi)復(fù)制直至它填滿空位為止。鏈接器命令文件和鏈接器偽指令鏈接器命令文件和鏈接器偽指令例例6.26 SETIONS偽指令的使用偽指令的使用file1.obj file2.obj -o prog.out SECTIONS .text: load=ROM run=0800h .const: load=ROM .bss: load=RAM vectors: load=0FF80h t1.obj (.intvec1) t2.obj(.intvec2) endvec= . .data : align=16 鏈接器命令文件和鏈接器偽指令鏈接器命令文件和鏈

27、接器偽指令 鏈接器舉例鏈接器舉例 例例6.27是一個名為是一個名為demo.cmd的鏈接器命令文件,它鏈接了的鏈接器命令文件,它鏈接了3個目個目標(biāo)文件:標(biāo)文件:demo.obj,fft.obj和和tables.obj,并創(chuàng)建了一個名為,并創(chuàng)建了一個名為demo.out的可執(zhí)行程序。假設(shè)目標(biāo)存儲器具有下列配置。的可執(zhí)行程序。假設(shè)目標(biāo)存儲器具有下列配置。程序存儲器:程序存儲器:地址范圍地址范圍 內(nèi)容內(nèi)容 0 xF0000 0 x3FFFBF 片內(nèi)片內(nèi)ROM 0 x3FFFC0 0 x3FFFFF 中斷向量表中斷向量表數(shù)據(jù)存儲器:數(shù)據(jù)存儲器:地址范圍地址范圍 內(nèi)容內(nèi)容 0 x000040 0 x00

28、01FF 堆棧堆棧 0 x000200 0 x0007FF RAM_1 0 x3ED000 0 x3EFFFF RAM_2鏈接器命令文件和鏈接器偽指令鏈接器命令文件和鏈接器偽指令例例6.27 命令文件命令文件exmp.cmd /* 定義鏈接器選項定義鏈接器選項*/ -e SETUP /* 定義程序入口定義程序入口 */-o demo.out /* 命名輸出文件命名輸出文件 */-m demo.map /* 創(chuàng)建一個輸出列表文件創(chuàng)建一個輸出列表文件*/ /* 定義輸入文件定義輸入文件 */demo.obj /* 鏈接三個目標(biāo)文件鏈接三個目標(biāo)文件 */fft.objtables.obj /*定義存

29、儲器配置定義存儲器配置 */MEMORYPAGE 0:ROM (R):ORIGIN = 3F0000h, LENGTH =0FFC0h VECTORS (R): ORIGIN = 3FFFC0h,LENGTH = 0040h PAGE 1:STACK (RW):ORIGIN = 000040h, LENGTH = 01C0h RAM_2 (RW) : ORIGIN = 000200h, LENGTH = 0600h RAM_1 (RW) : ORIGIN = 3ED000h, LENGTH = 3000h SECTIONS vectors:VECTORS, PAGE=0 .text: load

30、 = ROM, PAGE=0 .data:file=07A1Ch, load=RAM_1,PAGE=1 tables.obj(.data) fft.obj(.data) +=100h ; /*創(chuàng)建一個長度為創(chuàng)建一個長度為100的空間,用的空間,用07A1Ch填充填充*/ var_defs: RAM_2 page=1 /*包含在包含在dmo.obj文件中文件中var_defs段的變量鏈接到數(shù)據(jù)塊段的變量鏈接到數(shù)據(jù)塊RAM_2中中*/ .bss: RAM_1, page=1, fill=0FFFFh /* .bss的填充和鏈接的填充和鏈接*/ 鏈接器命令文件和鏈接器偽指令鏈接器命令文件和鏈接器偽指

31、令鏈接器命令文件和鏈接器偽指令鏈接器命令文件和鏈接器偽指令 TMS320C228x器件的默認(rèn)定位器件的默認(rèn)定位MEMORY PAGE 0:PROG: ORIGIN = 0 x000040H, LENGTH = 0 x3FFFC0H PAGE 1: DATA: ORIGIN = 0 x000000H, LENGTH = 0 x010000H PAGE 1: DATA1:ORIGIN = 0 x010000H, LENGTH = 0 x3F0000H SECTIONS .text: PAGE = 0 .data:PAGE = 0 .cinit: PAGE = 0 /*僅在僅在C程序中使用程序中使用

32、*/ .bss: PAGE = 1 用戶沒有使用用戶沒有使用MEMORY和和SECTIONS的情況下,存儲器使用該默認(rèn)定位的情況下,存儲器使用該默認(rèn)定位程序舉例程序舉例 公用文件公用文件 程序設(shè)計時,需在多個模塊中使用相同設(shè)置和中斷處理程序設(shè)計時,需在多個模塊中使用相同設(shè)置和中斷處理: 將芯片中映射至將芯片中映射至I/O空間的寄存器地址及標(biāo)號、預(yù)置變量空間的寄存器地址及標(biāo)號、預(yù)置變量和常數(shù)的空間等設(shè)置語句集中在一個文件中,稱為和常數(shù)的空間等設(shè)置語句集中在一個文件中,稱為I/O寄存器寄存器頭文件(如頭文件(如init.h);); 將轉(zhuǎn)移中斷矢量地址的指令集中在一個文件中,稱為將轉(zhuǎn)移中斷矢量地址的

33、指令集中在一個文件中,稱為中中斷矢量頭文件(如斷矢量頭文件(如vector.h);); 將定義程序、數(shù)據(jù)和將定義程序、數(shù)據(jù)和I/O空間地址塊大小和位置的偽指令空間地址塊大小和位置的偽指令集中在一個文件中,稱為集中在一個文件中,稱為命令文件(如命令文件(如F206.cmd)。)。 這這3個文件稱為個文件稱為公用文件。公用文件。 用用.copy或或.include偽指令將偽指令將I/O寄存器頭文件和中斷矢量寄存器頭文件和中斷矢量 頭文件復(fù)制到該應(yīng)用程序中頭文件復(fù)制到該應(yīng)用程序中,形成一個匯編源程序(如形成一個匯編源程序(如 delay.asm) 由匯編器進(jìn)行匯編后生成一個目標(biāo)文件(如由匯編器進(jìn)行匯

34、編后生成一個目標(biāo)文件(如delay.obj) 再由鏈接器把該目標(biāo)文件和命令文件相鏈接再由鏈接器把該目標(biāo)文件和命令文件相鏈接,生成一個可生成一個可 執(zhí)行文件(如執(zhí)行文件(如delay.out)。)。 對于簡單的應(yīng)用程序也可不使用這兩個頭文件,直接在對于簡單的應(yīng)用程序也可不使用這兩個頭文件,直接在應(yīng)用程序中對用到的應(yīng)用程序中對用到的I/O寄存器和中斷轉(zhuǎn)移地址進(jìn)行設(shè)置。寄存器和中斷轉(zhuǎn)移地址進(jìn)行設(shè)置。程序舉例程序舉例 公用文件公用文件程序舉例程序舉例C20X程程序序舉舉例例* File: F206.cmdMEMORY PAGE 0 : EX1_PM :origin = 0h, length = 0FEFFh B0_PM :origin = 0FF00h, length = 0100h PAGE 1 : REGS :origin = 0h, length = 60h BLK_B2 :origin = 60h, lengt

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論