国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

DSP編程技巧之1:聊一聊編譯流程

發布時間:2014-8-26 15:09    發布者:看門狗
關鍵詞: DSP , 編譯器 , CCS , symbol
作者:paradoxfx 來源:電子產品世界

  在我們有關DSP的論壇、博客和一些互動活動中,網友經常會問一些有關“編程技巧”的問題。

  關于編程技巧的定義,也沒有一個統一的標準,例如實現一個很復雜的多層嵌套的指針設計算是一種編程熟練的體現吧;又或者用C/C++的高級特性做了很復雜的功能,但是編譯器不能完全支持,例如某種內存的動態重分配方法,這時對編譯器特性的熟悉就顯得很重要了。

  接下來我們就聊一聊DSP編程技巧里面有關編譯技巧的一些問題,具體的分類包括編譯器的選項、代碼的優化、庫文件的使用、代碼實現標準、實時運行環境等等;了解了這些具體的問題,對于解決在編譯和鏈接程序的時候經常遇到的讓人摸不著頭腦的警告和錯誤也是很有幫助的;因為程序的語法錯誤很容易被編譯器發現并定位到具體的代碼中,而鏈接器輸出的那些莫名其妙的警告是很難定位的,如果理解了編譯流程中各個環節的作用所在,就有了對癥下藥的入口。編譯器主要以TI的CCS編譯器為例,目標器件為28系列,相比6000系列的,28系列的要稍微簡單一些。

  首先要了解一下基于CCS開發的一個完整流程,以免“只見樹木,不見森林”:



  因為很少有文檔把它們的具體漢語含義講清楚,所以在此我們要用通俗的語言描述一下各個部分:

  1. 在這個流程中,與我們編程效率直接相關的就是C/C++編譯器了(如果沒有使用匯編直接編寫的話),它的直接用途是將C/C++代碼編譯為針對DSP匯編指令集的匯編代碼。

  目前的C和C++語言標準有好幾個版本,CCS的編譯器目前支持的版本包括:

  C語言的C89和C99版本的ISO標準(C99部分支持,主要是與C89一樣的特性):通俗的講就是我們學過的C語言里常用的功能都是支持的,除了一些多字節字符和一些極少數的特性等。不清楚的可以參考Kernighan和Ritchie編寫的C語言書籍《The C Programming Language》第二版。

  C++語言的2003版本的的ISO標準: 可以參考Ellis和Stroustrup編寫的經典書籍《The Annotated C++ Reference Manual》。同時也支持一部分的嵌入式C++特性。因為C++的特性眾多,而許多并不適用于這樣一種嵌入式的環境,所以不支持的特性相比C要多一些。

  2. 匯編器的作用是將匯編語言代碼轉換為機器語言(目標文件),這里的匯編代碼包括前面由C/C++生成的匯編代碼和我們直接編寫的匯編代碼。

  3. 鏈接器是作用是把所有的庫文件、目標文件等鏈接成為一個可執行的目標文件,其中包含程序的機器代碼和數據,以及其他用來鏈接和加載該程序所需的信息(在TI DSP上是COFF格式,通俗地講就是.out二進制文件),同時根據內存地址的分配對各目標文件進行重定位,并解析外部參考,例如在一個源程序里引用另一個源程序中定義的變量就可以理解為外部參考,假如一個目標文件引用了一個未定義的符號symbol,則鏈接器搜索其他目標文件中定義的全局符號,找到匹配的符號修補指令。否則報告一個錯誤;所以有時候編譯所有程序完成在鏈接的時候會提示xxx symbol為定義,說明對應的文件沒有加到工程里面。

  4. 歸檔器archiver:也可以叫壓縮器,看一下我們常用的壓縮軟件winrar的全稱winrar archiver就不難理解了。

  5. 實時支持庫:包括標準C和C++的運行支持函數、編譯器公用程序函數、浮點運算函數和C編譯器支持的I/O函數,

  6. 十六進制轉換程序:把編譯、鏈接等步驟生成的可執行文件,轉換為十六進制文件,例如.HEX格式,然后可以燒寫到EEPROM、FLASH等外部存儲器之中。

  7. 絕對列表器:讀取目標文件并輸出.abs文件,通過匯編.abs文件可產生含有絕對地址的列表文件,從而使得我們不用手工費時費力地去創建列表文件。這本來不就是軟件該做的事情嗎:-D

  8. 交叉引用列表:與3中外部參考解析相關的,它用目標文件產生參照列表文件,可顯示符號及其定義,以及符號所在的源文件。

  9. C/C++命名還原工具:C/C++編譯器會將程序中的變量名、函數名轉換成內部名稱,這個過程被稱作Name Mangling,反過程被稱作Name Demangling,即命名還原工具。內部名稱包含了變量或函數的更多信息,例如編譯器看到?g_var@@3HA,就知道這是:int g_var。具體的還原規則一般是不開放給我們用戶的,只要編譯器知道就行了。

  10. 調試工具:例如我們電腦上裝的CCS軟件,讓我們可以用斷點、圖形窗口等進行軟件的調試。

  此外,并沒有明確列在前面的流程中,但是隱含在流程中,或者我們也有可能會用到的工具或者流程包括:

  1. 優化工具:在編譯時對代碼進行優化的工具,可以根據我們期望的優化級別,進行從不優化到直至CPU寄存器級別的優化。

  2. 反編譯器:可以對目標文件進行解碼,顯示對應的匯編語言。在CCS的調試模式下,我們可以打開disassembler窗口,然后單步運行,就能看到一條條的匯編指令是如何執行的了。

  3. 加載器:把可執行的二進制文件復制到DSP的內存中,并運行啟動程序,使得程序從程序入口處開始運行,這個入口地址可能是地址0,也可能是帶有一個偏移量的地址,這個具體的值我們可以以后再具體討論。

  4. 其它:補充一下名詞的定義,包括:

  符號:在整個編譯、鏈接的過程中都會使用到符號symbol的概念,簡單地理解,符號就是指一些變量、函數名字等。

  庫文件:多個目標文件的壓縮包,包含了所有目標文件定義的全局符號的索引。在源程序中如果找不到某些符號的定義,鏈接器從嘗試從庫里面提取出對應的目標文件,然后鏈接到可執行文件里。
本文地址:http://www.qingdxww.cn/thread-132304-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • 使用SAM-IoT Wx v2開發板演示AWS IoT Core應用程序
  • 使用Harmony3加速TCP/IP應用的開發培訓教程
  • 集成高級模擬外設的PIC18F-Q71家族介紹培訓教程
  • 探索PIC16F13145 MCU系列——快速概覽
  • 貿澤電子(Mouser)專區

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩高清一区二区三区五区七区 | 免费看欧美日韩一区二区三区 | 亚洲激情 欧美 | 日本丰满大乳欲妇三级 | 久久久久久国产精品三级 | 日韩欧美高清 | 久久99热狠狠色精品一区 | 国产三级精品三级在线专区91 | 91亚洲精品丁香在线观看 | 国产日韩在线观看视频网站 | 国产成人精品久久二区二区 | 麻豆md国产在线观看 | 日韩欧美一区二区在线 | 亚洲免费成人在线 | 麻豆手机在线 | 尤物国产精品福利三区 | 星空影院在线影视 | 91亚洲人成手机在线观看 | 手机在线观看亚洲国产精品 | 精品久久久久久中文字幕一区 | 99视频精品国在线视频艾草 | 国产高清在线精品一区a | 奇米网奇米色 | 欧美成人在线免费观看 | 在线看免费毛片 | 精品国产一区二区三区久久久蜜臀 | 色一情一区二区三区四区 | 日韩欧美中文字幕在线视频 | 国产一区亚洲二区三区毛片 | 99色亚洲| 日本高清视频在线播放 | 国产精品精品国产 | 九九综合视频 | 天天操天天操天天干 | 最近最新2019中文字幕6 | 狠狠综合欧美综合欧美色 | 久久国产亚洲偷自 | 欧美视频在线免费看 | 亚色污 | 色综合天天综合网国产成人网 | swag国产精品一区二区 |