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

DSP編程技巧之2:揭開編譯器神秘面紗之處理器選項

發布時間:2014-9-1 14:42    發布者:看門狗
關鍵詞: FPU , CCS , DSP , 編譯器
作者:paradoxfx 來源:電子產品世界

  也許你已經熟練使用了CCS好多年,可是當某一天出現一個與cl2000有關的錯誤的時候,突然間也摸不著頭腦了;例如使用老版本的還不支持C2000 FPU的CCS來編譯28335的程序,cl2000就會提示你各種不支持然后報錯不運行了。Cl2000.exe是神馬?

  Cl2000.exe就是和我們的程序編譯密切相關的編譯器了,使用的方法是:
  cl2000 [編譯器選項] [需要編譯的文件] [--運行鏈接器 [鏈接器選項] 目標文件]]

  使用方法看起來很復雜,還好CCS已經幫我們調用它了(或者說CCS就是一個框架,它完成的編譯、調試、鏈接等功能幾乎都需要調用一些別的exe來執行,所以你可能體會過升級了一些庫文件、編輯器版本等,界面文件等卻不需要進行任何的更改),這些句子會顯示在工程的屬性里面。當然如果你想親自體驗一把,也可以在ccs安裝目錄下面的tools\compiler\c2000_6.1.5\bin下面找到它,即cl2000.exe,然后用命令行的方式運行起來)。舉個簡單例子:

  cl2000 -v28 symtab.c file.c seek.asm --run_linker --library=lnk.cmd
  --output_file=myprogram.out

  在上面的例子中,如果需要編譯的文件,例如幾個.c或者.asm找不到,CCS就會提示xxx.c或者xxx.asm找不到或者未定義了;或者你改了目標文件的名字,例如改成了a.out,但是加載程序到DSP中的時候卻仍然使用更改前的b.out,自然有可能出現預料之外的結果了:在以前幫助網友解決問題的時候,確實出現過這樣的狀況。

  明白了編譯器的調用方法之后,我們就更進一步,揭開編譯器中形形色色選項的神秘面紗,從此看到編譯器提示的形形色色的警告和錯誤不再用發怵。

  具體說來,編譯器的選項有多大20個大類,超過一百個具體的選項。當然這些選項是有輕重之分的,有的是必須用到的,例如支持一下FPU等功能;有的則是不常接觸的,例如MISRA這樣的汽車工業軟件可靠性檢查,只有在對軟件進行標準化時才會用到。所以我們首先看一下最常用的選項,例如處理器的選項,它們的意義在于定義了在編譯程序時CPU的模式。補充一點是,cl2000的幫助里看到的選項都是很長的名字,在CCS里面為了書寫方便(因為選項框就那么點面積啊),一般用別名來代替;沒有別名的則直接使用選項名字。

處理器選項
別名
含義
--silicon_version=28
0
為C28x架構的DSP產生目標文件;不選擇的話模式為C27x模式,也可以選擇為C2xLP兼容模式(例如讓C28的CPU支持C24的匯編語句,存在較多的兼容性問題,因為尋找模式、CPU架構等都發生了一定的變化,有的指令不再適用于新器件)。后兩種模式大部分網友都幾乎不會用到,所以我們的編譯器選項里面一般都會選擇-v28。更詳細的信息可以參考DSP的CPU介紹和匯編編程指南。
--large_memory_model-ml產生“大內存模式”下的代碼。開啟這個選項的話,會強迫編譯器把整個地址空間當作一塊完整的22位寬的空間(實際是分為16位寬的低地址和超過16位寬度之后的高地址空間的),從而使得尋址時使用的指針也是22位的(這個指針是針對CPU尋址來說的,不是我們C程序里用的指針),這樣尋找空間就不必局限于2的16次方,即64K了。這種模式適合在C++編程的時候使用,使得編譯生成的代碼可以訪問超過16位寬度的地址空間的存儲單元,這樣就沒有64K字的空間限制了。
那么為什么在在C++編程時使用呢?是因為目前編譯器不支持C++的關鍵字far;如果你了解C++關鍵字的話,那用同樣的思路來理解這個模式就容易了。
此外,在開啟FPU的情況下,大內存模式是必須開啟的,否則編譯器會報錯。
在新建C2000的工程,需要添加相關的庫文件的時候,如果你再看到有的庫是rts2800.lib,有的是rts2800_ml.lib,這次應該明白改用哪個了吧。小建議是為了省事和保持兼容性,沒有別的顧慮的話就把這個選項打開吧。
--unified_memory-mt在“統一的內存模式”下產生代碼。顧名思義,就是把所有的存儲空間定義為一個整體,這樣編譯器在編譯時就可以使用RPT與PREAD指令來處理大部分的內存復制memcpy調用和結構體的分配(它也不用“擔心”存儲空間突然出個斷層,沒法連續尋找了)。例如像下面的匯編指令就可以得到更加高效的執行:
MOVL XAR7, #Array1    ;XAR7指向數組1
MOVL XAR2, #Array2    ;XAR2指向數組2
RPT #(N-1) ;重復執行下一條指令N次
||PREAD *XAR2++,*XAR7 ;Array2=Array1,i++
這樣的一段匯編代碼我們可以直接手工編寫;如果你有個for循環的C代碼的話,看一下編譯生成的匯編代碼,是不是幾乎一模一樣的?
--cla_support[=cla0]--cla_support是C2833x系列之后的Piccolo系列才有的特性,叫控制規律加速器,意思是把一些與控制系統性能息息相關的代碼放到CLA中獨立運行,不占用CPU時間,這樣整個控制軟件的運行速度都得到極大提高,從而保證實時性。
--float_support={fpu32|softlib|fpu64}在啟用了-v28和-ml的前提下才能使用;含義是啟用軟件處理(比如調用一些優化好的庫函數)、32位或者64位的FPU協處理器進行浮點運算,從而支持相關的匯編指令。
這這個子選項是不能同時使用的,即使用方法為:
--float_support=fpu32
或者--float_support=fpu64等。
需要補充的是,這里的64位浮點運算指的數據類型是long  double,而實際上28335這樣的DSP中FPU目前只硬件支持32位的FPU運算,64位的浮點運行要經過CPU折算再送給FPU處理的,所以不是必須的話盡量不要使用FPU64這樣的運算。
--vcu_support[=vcu0]VCU是F2837xD這樣的高端芯片上具備的功能,指的是Viterbi  and complex unit (VCU II) accelerators,即通過采用viterbi 復雜單元  (VCU II)  加速器執行振動分析來更好地預測電機故障,振動信號的來源是加速度傳感器或者振動傳感器等,可以使用流行的MEMS,可以貼在電機的外殼、編碼器等部位。如果需要使用這個功能的話,就需要在編譯器選項里面打開它。


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

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

廠商推薦

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

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩精品a在线视频| 五月香福利| 四虎影视ww5234hucomww网站| 天美传媒tm0087| 99久久99久久久精品齐齐鬼色| 黑丝美女娇喘| 亚洲中文字幕永久在线全国| 欧美亚洲国产日韩综合在线播放| 日韩欧美国产一区二区三区| 亚洲欧洲中文| 亚洲国产精品久久久久| 97国产成人精品免费视频| 男女无遮挡吃奶gift动态图| 一级片a| 欧美午夜免费观看福利片| 亚色在线观看| 亚洲国产成人久久午夜| 国产AV国片精品无套内谢无码| 小寡妇好紧进去了好大看视频 | 日韩精品无码免费专区| 午夜日韩在线| 亚洲精品第一页| 亚洲视频在线观看免费| 高h gl肉文| 亚洲精品一区三区三区在线观看| 欧美一级高清片免费一级| 亚洲天堂视频在线观看免费| 中国老太婆性疯狂| 拍戏被CAO翻了H| 日韩啪啪网| 青青久久精品国产| 特黄一级大片| 国产超碰人人爱被IOS解锁| 亚洲欧美中文在线一区| 欧美精品午夜| 亚洲一区二区在线成人| 中文字幕第一页在线视频| 青柠在线观看免费高清电视剧荣耀| 亚色网址| 欧洲性开放大片免费观看视频 | 五月性|