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

DSP編程技巧之7---揭開編譯器神秘面紗之預處理與診斷

發布時間:2014-9-22 14:15    發布者:看門狗
關鍵詞: DSP , 編程 , CCS , 解析器
作者:paradoxfx 來源:電子產品世界

    在編程軟件例如CCS中編程時,代碼分析工具可以方便我們對代碼進行分析,例如我們把鼠標指向一個函數名的時候,所指的地方就能出來一個實時菜單,使得我們可以直接定位到函數的聲明、被調用的位置或者某個宏定義等等,非常方便。這種功能是如何實現的呢?在編譯器的前端是一個語義解析器,它負責把源程序中的token找出來,然后解析器parser(也有的地方叫分析器)就可以解析這些token,并產生樹狀表,供編程環境使用;此外解析器還可以完成一部分的語法錯誤檢查功能。如果希望了解關于解析器的更詳細的信息,可以參考編譯原理方面最著名的“龍書”,即《Compliers: Principles, Techniques, &Tools》;在K&RC語言文檔的A12這一節中也對解析器的預處理功能進行了詳細的敘述,它預處理的信息主要包括:

  1. 宏定義和擴展,例如_INLINE;

  2. #include引用的文件,包括<>和“”兩種方法引用的頭文件;

  3. 條件編譯指令,例如#if,#endif等等;

  4. 其它的多種預處理指令,主要是#開頭的一些指令,例如#error。

  我們可以控制編譯器的預處理選項,使得解析器根據我們的需求產生需要的預處理結果,方便我們對程序的開發調試;這些選項如表1所示。

  表1 編譯器中解析器的預處理選項
預處理選項
別名
控制效果
--preproc_dependency[=filename-ppd
只執行預處理操作,并不輸出預處理的解析結果,但是會并產生供make程序使用的列表文件,其中包含了被預處理的程序中存在的與頭文件中的定義關聯的行信息。
make程序是編譯器在編譯時調用的編譯程序。如果使用命令行的方法,可以不使用CCS而直接調用make程序進行編譯。
--preproc_includes[=filename]
-ppi
只執行預處理操作,但是會把包含#include指令的文件列表寫入列表文件。
--preproc_macros[=filename]-ppm
只執行預處理操作,會生成其中包含了預定義的和用戶自定義的宏的多個文件,這些文件和被預處理的文件的名字一樣,只是其擴展名為.pp。
預定義的宏是TI預定義的,它在預處理結果中被用/* Predefined */標注出。
--preproc_only-ppo
只執行預處理操作,并把解析的結果輸出為名字與輸入文件名一致、擴展名為.pp的文件。
在這種模式下,#include文件中的信息會被復制到.pp文件中,宏定義和其它的一些預處理指令信息都會被完全展開。
--preproc_with_comment
-ppc
只執行預處理操作,并把解析的結果輸出為名字與輸入文件名一致、擴展名為.pp的文件;與-ppo相比,輸出的文件中保留了輸入程序中的注釋信息。
--preproc_with_compile
-ppa
在執行預處理之后,繼續編譯工作。對比可以看出,在預處理選項中,除了-ppa之外,其余的幾個選項只完成預處理功能,并不進行接下來的編譯工作。-ppa選項可以和其它的預處理選項一起使用,這樣既可以輸出預處理結果,又可以在預處理完成之后繼續編譯工作。
--preproc_with_line
-ppl
只執行預處理操作,并把包含行控制信息(#line指令)的解析結果輸出為名字與輸入文件名一致、擴展名為.pp的文件。

  因為預處理器要使用到文件中的符號信息,所以相關的預定義信息一定要提供給預處理器,否則找不到符號信息就要報錯了。符號選項比較簡單,就是預定義與解除定義,如表2所示。

  表2 預定義的符號選項
語言選項
別名
控制效果
--define=name[=def]
-D
預定義符號,使用方法是--define=name=""string def""。在編譯器選項里使用-D,與在C程序里使用#define的效果是一樣的。
--undefine=name
-U
解除對某個符號的定義,它會覆蓋-D選項的效果。

  在程序的處理過程中,我們可以控制編譯器輸出診斷信息選項,使得它輸出我們期望的詳細信息,更加容易定位和解決一些看起來難以捉摸的問題;這些選項如表3所示。需要注意的是,診斷信息相關的選項必須放在鏈接器選項--run_linker之前。

  表3編譯器的診斷信息選項
語言選項
別名
控制效果
--compiler_revision
在信息窗口中打印出編譯器的版本號。這個用處不太大,因為從CCS的help的“關于”里面很容易看到。
--diag_error=num-pdse
這里的num是診斷信息的標識符。不顯示標識符的話,在編譯出現錯誤時,會提示:
error: a break statement may only be used within a loop or switch
啟用的話,在有錯誤的時候,會提示:
error #77: this declaration has no storage class or type specifier xxxxx;
-pdse是把標識符num對應的語句標記為錯誤。
--diag_remark=num
-pdsr
把標識符num對應的語句標記為提示。
--diag_suppress=num
-pds
把標識符num對應的語句標記為不提示。
--diag_warning=num
-pdsw
把標識符num對應的語句標記為警告。
--diag_wrap={on|off}
默認為on,打包診斷信息。
--display_error_number
-pden
把診斷信息標識符和它對應的文本說明一起顯示出來。
--emit_warnings_as_errors
-pdew
把警告信息作為錯誤處理。在這樣的嚴格的模式下,必須消除所有的警告和錯誤,編譯才能繼續。
--issue_remarks
-pdr
提示所有的提醒信息(即非嚴重的警告信息)。
--no_warnings
-pdw
不顯示警告信息,但是錯誤信息還是會提示的:畢竟有錯誤在的話編譯無法完成。
--quiet
-q
安靜模式,不顯示編譯過程中的診斷信息。
--set_error_limit=num
-pdel
這個選項設置編譯過程中錯誤的上限,比如有10個源程序,設定錯誤上限為5,假如第3個文件時就已經有5個錯誤了,那么編譯器就停止了編譯,不再繼續編譯剩下的文件了。
--super_quiet
-qq
“超級安靜”模式。與-q相比,多了個q,足以看出它的級別。顯然它的處理速度最快,但是給出的診斷信息那是一個也沒有:最多告訴你程序有x個錯誤。如果確信程序完全無誤,用這個選項編譯倒是要快了不少。
--tool_version
-version
顯示編譯過程中調用的各個工具的版本信息。
--verbose
啰嗦模式:顯示函數編譯過程中的處理信息。
--verbose_diagnostics
-pdv
在啰嗦模式的基礎上,把源程序中的對應部分也顯示出來。
--write_diagnostics_file
-pdf
產生診斷信息文件。



本文地址:http://m.qingdxww.cn/thread-132997-1-1.html     【打印本頁】

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

廠商推薦

  • Microchip視頻專區
  • 利用SAM E54 Xplained Pro評估工具包演示CAN轉USB橋接器以及基于CAN的主機和自舉程序應用程序
  • 使用SAM-IoT Wx v2開發板演示AWS IoT Core應用程序
  • 使用Harmony3加速TCP/IP應用的開發培訓教程
  • 集成高級模擬外設的PIC18F-Q71家族介紹培訓教程
  • 貿澤電子(Mouser)專區

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 毛片免费视频 | 九九热精品在线 | 久久九九视频 | 狠狠狠色丁香婷婷综合激情 | 国产精品女 | 羞羞视频在线免费 | 啦啦啦社区手机在线视频免费视频 | 在线视频99 | 狠狠干97| 香蕉网站男人网站 | 国产精品国内免费一区二区三区 | 国产福利一区二区三区在线观看 | 亚洲日本高清 | 欧美成人www在线观看网页 | 国产高清福利91成人 | 亚洲伦理精品久久 | 欧美大片无尺码在线观看 | 久久国产视屏 | 亚洲一级毛片免费观看 | 日韩在线看片中文字幕不卡 | 久久99精品福利久久久 | 九九国产 | 久久免费观看视频 | 国产欧美精品区一区二区三区 | 国产色司机在线视频免费观看 | 91国语精品自产拍在线观看性色 | 日本一二区在线观看 | 久久精品免费观看视频 | 国产亚洲午夜精品a一区二区 | 麻豆高清视频 | 清纯唯美亚洲综合五月天 | 毛片免费永久不卡视频观看 | 色吊丝免费观看网站 | 四虎永久免费地址ww417 | 亚洲国产欧美日韩一区二区三区 | 91成人高清在线播放 | 国产性大片免费播放网站 | 窝窝午夜看片成人精品 | 日韩欧美中文字幕出 | 欧美激情视频一区二区三区 | 国产欧美一区二区精品性色 |