《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 業界動態 > TMS320C/F2xx系列DSP的目標文件格式

TMS320C/F2xx系列DSP的目標文件格式

2009-08-18
作者:朱春海 李玉忍

  摘? 要: 對TI公司新的匯編器和鏈接器創建的目標文件所采用的一種格式——COFF目標文件格式的組成和產生過程作了詳細的闡述。

  關鍵詞: DSP技術? COFF文件格式

?

  近年來,數字信號處理器(DSPs)在信號處理及運動控制方面得到了日益廣泛的應用。開發DSPs時不論使用匯編語言還是C語言,源程序都要經過編譯(對C語言)生成目標文件,再由鏈接器把目標文件鏈接成可執行的COFF文件。TI公司新的匯編器和鏈接器創建的目標文件采用一種稱為COFF(Common Object File Format)的目標文件格式。采用這種文件格式更有利于模塊化編程,并且為管理代碼段和目標系統存儲器提供更強有力和更靈活的方法。

1? 塊的基本概念

  COFF文件格式鼓勵程序員用匯編語言或高級語言編程時使用基于代碼塊和數據塊的概念,而不是一條條命令或一個個數據,這就使得程序的可讀性和可移植性大大增強。在COFF格式中,這種塊稱為section。TI公司新的匯編器和鏈接器提供了相關的命令來創建塊和對塊進行處理。

  塊是目標文件中的最小單元,是最終在TMS320C/F2xx存儲器映象中占據一段連續空間的代碼或數據。目標文件中的每一個塊都是相互獨立的。通常COFF目標文件包含3個默認的塊:(1).text塊:包括可執行代碼;(2).data塊:包括已初始化的數據;(3).bss塊:為沒有初始化的數據保留空間。

  此外,匯編器和鏈接器允許程序員創建、命名、鏈接自定義的塊,這些塊與.text、.data、和.bss的使用類似。所有的塊可分為二種基本類型,即已初始化的塊和未初始化的塊。已初始化的塊包括已初始化的數據和程序代碼,上面提到的.text塊和.data塊就屬于這類塊。另外,匯編器命令.sect和.asect所創建的塊也屬于這類塊。未初始化的塊為沒有初始化的數據在存儲器映象中保留空間,.bss塊和由匯編器命令.usect所創建的塊屬于這一類。

  匯編器提供了將各種代碼和數據段與相應塊聯系的命令。

2?塊的匯編

  匯編器對塊的處理功能主要是確定匯編語言程序的各部分屬于哪個特定的塊。匯編器用.text、.data、.sect、.asect、.bss、.usect命令完成對塊的定位。其中,.text、.data、.sect和.asect命令建立已初始化的塊,.bss和.usect命令則用來建立未初始化的塊。如果程序中沒有用任何命令對塊進行操作,則匯編器將把所有的程序塊或數據塊統一匯編到.text塊中。

2.1 匯編器對已初始化塊的處理

  已初始化塊包括已初始化的數據和程序代碼。這部分塊的內容存儲在目標文件中。當程序下載時被下載到TMS320C/F2xx的存儲器中。每個已初始化塊可以獨立地進行重定位,并且可以引用其他塊中定義的變量。鏈接器可以自動解決塊與塊之間變量引用的問題。

  下面4個命令將代碼或數據存放在一個塊中,其命令格式如下:

  .text

  .data

  .sect “塊名”

  .asect “塊名”,地址

  在這些命令中,.text和.data命令建立的塊名稱就是.text和.data,而后二個命令建立的塊是自定義的塊。其中.asect建立的塊具有絕對地址,一般不要使用。當匯編器遇到上述命令時,立即停止匯編當前塊,且開始將隨后的代碼或數據匯編到當前命令所對應的塊中。

2.2 匯編器對未初始化塊的處理

  未初始化塊在TMS320C/F2xx存儲器中為沒有初始化的數據保留空間,它們通常被分配到RAM中。程序在運行時利用這些空間創建和存儲變量。

  匯編器用.bss和.usect命令建立未初始化塊。其中,.bss命令在.bss塊中保留空間,.usect命令在自定義的塊中保留空間。它們的命令格式如下:

  .bss??????? 變量,塊大小

  變量.usect“塊名”,塊大小

  匯編器遇到.bss和.usect命令時并不結束當前塊,只是暫時離開當前塊而去創建一個新塊。所以,.bss和.usect命令可以出現在一個已初始化塊中的任何地方,而不影響已初始化塊的內容。

2.3 匯編器對自定義塊的處理

  自定義塊是程序員自己建立的塊,它與默認的.text、

  .data和.bss塊的使用方法相同,而與默認塊是分開匯編的。

  程序員可以用.usect、.sect和.asect命令建立自定義的塊。其中,.usect建立的塊用來在RAM中為變量保留空間,其用法類似于.bss塊;.sect和.asect建立包括代碼和數據的塊,用法類似于.text塊和.data塊。.sect命令建立的塊是可重定位的,.asect命令建立的塊是具有絕對地址的塊,是不能重定位的。它們的命令格式如下:

  變量.usect“塊名”,塊大小

  .sect “塊名”

  .asect “塊名”,地址

3? 塊的鏈接

  鏈接器對塊的處理主要包括下面2個方面。首先,鏈接器將COFF目標文件中的塊建立為程序塊或數據塊并以這些塊作為輸入塊,鏈接器再把這些輸入塊組合起來以建立可執行的COFF輸出模塊。然后,鏈接器為輸出塊選擇存儲器地址。鏈接器提供Memory和Sections 2個命令來完成上述工作。其中,Memory命令定義目標系統的存儲器分配,程序員可以通過指定存儲器起始地址和長度來定義每一塊存儲器。Sections命令定義如何組合輸入塊以及在存儲器何處存放輸出塊。若不用這二條命令,鏈接器就會采用默認的分配方法;若采用這二條命令,則需要在鏈接器命令文件(擴展名為.cmd)中確定。下面是一個TMS320F240鏈接命令文件的例子。

  

  

4?程序的重定位

  匯編器對目標文件中的每個塊匯編時都假定其起始地址為0,所以每一塊中的重定位符號都是相對于0地址而言的。當然,所有的塊在存儲器中并不都是以0地址起始,因此鏈接器用以下方法對每一個塊進行重定位。首先,鏈接器把塊分配到存儲器中,從而使各個塊都有自己的起始地址;然后調整符號值使之對應于新的塊地址;最后通過調整重定位后符號的參考值來反映調整后的符號值。

  鏈接器利用重定位項來調整符號的參考值。匯編器在每次可重定位符號被參考時會建立一個重定位項,鏈接器則在符號被重定位后利用這個重定位項來修正參考值。

5?COFF目標文件的生成

  下面以C語言編寫的源程序為例,給出如圖1所示的COFF目標文件的生成框圖。

?

  用戶編寫的C源程序經過C編譯器的處理后,轉化為具有相同功能的匯編語言代碼。之后再作為獨立的匯編源程序經過匯編處理產生COFF目標文件,其中包含上述的各類程序塊或數據塊。接下來,鏈接器以這些塊作為輸入將其組合起來,并參照具體的CMD文件,最終生成可執行的COFF文件。此外在鏈接過程中系統將自動訪問目標文件庫和運行庫,以簡化鏈接過程,縮短鏈接過程所需的時間。

6? 結? 論

  本文介紹了TI公司新的匯編器和鏈接器所采用的COFF目標文件格式及這種文件格式中的最小單元——塊,討論了匯編器和鏈接器對塊的處理方法。COFF目標文件格式非常有利于模塊化編程,使管理代碼段和系統存儲器更加方便和靈活,使程序具有更強的可讀性和可移植性。
本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
亚洲字幕一区二区| 亚洲激情另类| 亚洲观看高清完整版在线观看| 国产欧美日本| 国产精品卡一卡二| 国产精品videosex极品| 欧美伦理在线观看| 欧美大片在线看| 欧美fxxxxxx另类| 女仆av观看一区| 欧美大片一区| 欧美激情国产精品| 欧美精品18+| 欧美成人精品一区| 欧美精品成人| 欧美日韩国产成人高清视频| 欧美精选一区| 欧美日韩国产一区二区三区| 欧美成人国产一区二区| 欧美国产日韩一二三区| 欧美日韩播放| 欧美丝袜一区二区| 国产精品尤物| 韩国欧美一区| 亚洲国产成人高清精品| 亚洲精华国产欧美| 99av国产精品欲麻豆| 亚洲午夜精品| 欧美一区三区二区在线观看| 久久国产精品99久久久久久老狼| 欧美在线观看天堂一区二区三区 | 亚洲男人第一网站| 小处雏高清一区二区三区| 欧美专区福利在线| 亚洲精品视频一区二区三区| 中文国产一区| 欧美一区二区三区四区在线观看| 久久免费视频网站| 欧美激情一区二区三区高清视频| 欧美三级在线| 国产欧美三级| 1024国产精品| 一二三四社区欧美黄| 欧美一区二区三区四区在线观看| 久久黄色小说| 一区二区免费在线观看| 性8sex亚洲区入口| 久久夜色精品国产亚洲aⅴ| 欧美精品成人在线| 国产毛片一区二区| 亚洲国产精品黑人久久久| 中文av字幕一区| 久久爱另类一区二区小说| 亚洲精品免费看| 亚洲一区二区三区在线看| 久久久www成人免费精品| 欧美日韩国产综合视频在线观看中文| 国产精品日韩欧美一区二区| 精品白丝av| 亚洲一区二区高清| 最新日韩在线视频| 欧美一级久久久| 欧美精品在线视频观看| 国产欧美亚洲日本| 亚洲欧洲日本在线| 午夜日韩在线观看| 在线亚洲精品| 久久久久久日产精品| 欧美日韩三级电影在线| 国产主播精品在线| 一区二区av在线| 亚洲黄色毛片| 午夜视频一区二区| 欧美日韩国产片| 黄色av成人| 亚洲视频中文| 亚洲精品视频一区二区三区| 欧美在线网站| 国产精品videossex久久发布| 黄色成人91| 亚洲欧美在线一区| 亚洲视频福利| 欧美成人免费在线观看| 国产日韩av在线播放| 一个人看的www久久| 亚洲日韩欧美视频一区| 久久久久国色av免费观看性色| 欧美日韩一区二区精品| 亚洲国产精品传媒在线观看 | 欧美三级乱码| 亚洲国产一区二区三区青草影视| 午夜精品久久久久| 亚洲永久网站| 欧美日产一区二区三区在线观看| 狠狠网亚洲精品| 欧美一区二区三区免费视频| 亚洲一区二区久久| 欧美极品欧美精品欧美视频| 黄色成人在线免费| 午夜精品久久久久久久99水蜜桃 | 亚洲成色777777在线观看影院| 亚洲欧美日本视频在线观看| 一区二区三区视频免费在线观看| 欧美3dxxxxhd| 激情久久久久| 午夜视频在线观看一区| 欧美一级视频一区二区| 国产精品卡一卡二卡三| 正在播放欧美一区| 亚洲自拍高清| 国产精品va| 一本色道久久综合亚洲91| 一片黄亚洲嫩模| 欧美日韩久久精品| 99视频一区| 亚洲一级二级| 欧美日韩在线精品一区二区三区| 亚洲欧洲精品一区二区| 日韩视频免费观看| 欧美精品乱人伦久久久久久| 亚洲国产美国国产综合一区二区| 亚洲国产精品va| 美女网站久久| 亚洲国产mv| 99综合视频| 欧美私人啪啪vps| 亚洲香蕉在线观看| 新67194成人永久网站| 国产情侣久久| 久久成人免费日本黄色| 久久九九久久九九| 一区二区三区在线观看欧美| 亚洲高清二区| 欧美aa在线视频| 亚洲区免费影片| 亚洲视频大全| 国产精品综合| 亚洲第一主播视频| 欧美a级在线| 日韩视频欧美视频| 亚洲免费一级电影| 国产视频亚洲| 亚洲国语精品自产拍在线观看| 欧美高清在线视频观看不卡| 亚洲精品久久久久久久久久久久久 | 亚洲欧洲午夜| 欧美日韩精品久久| 亚洲天堂偷拍| 久久久精品午夜少妇| 亚洲国产高清视频| 亚洲天堂男人| 国产亚洲欧洲| 99国内精品久久| 国产精品你懂的在线| 久久aⅴ乱码一区二区三区| 欧美二区不卡| 一区二区三区黄色| 久久国产精品久久w女人spa| 激情欧美一区| 亚洲视频在线观看网站| 国产深夜精品| 99精品热视频| 国产欧美日韩综合精品二区| 亚洲黄网站黄| 欧美性久久久| 久久精品国产在热久久| 欧美日韩国产综合网| 欧美一区二区网站| 欧美韩日一区二区三区| 亚洲综合三区| 欧美福利网址| 亚洲综合欧美日韩| 欧美韩国日本综合| 亚洲欧美乱综合| 欧美理论在线| 欧美自拍偷拍午夜视频| 欧美日韩网址| 亚洲高清免费| 国产精品久久久久久久app| 亚洲国产精品一区二区第四页av| 欧美三级网址| 亚洲欧洲日产国产网站| 国产精品日韩欧美综合| 亚洲精品国产拍免费91在线| 国产精品一区2区| 99国产精品国产精品毛片| 国产在线精品成人一区二区三区| 中国成人在线视频| 黄色日韩精品| 午夜精品福利一区二区三区av| 亚洲国产成人精品久久久国产成人一区| 亚洲欧美日韩成人| 亚洲人人精品| 久久婷婷国产综合尤物精品| 国产精品99久久99久久久二8 | 欧美日韩午夜在线| 亚洲国产精品一区二区久| 国产农村妇女毛片精品久久麻豆 | 免费人成精品欧美精品| 午夜激情综合网|