新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 牛人業(yè)話 > DSP編程技巧之33---答疑解惑哪家強(qiáng)之(8)

        DSP編程技巧之33---答疑解惑哪家強(qiáng)之(8)

        作者:paradoxfx 時間:2015-01-04 來源:電子產(chǎn)品世界 收藏

          答疑解惑哪家強(qiáng)?當(dāng)屬我們EEPW最強(qiáng)。。。接下來繼續(xù)了解一下與編譯器和鏈接器的常見錯誤、警告有關(guān)的問題原因和解決方法。

        本文引用地址:http://www.104case.com/article/267641.htm

          46. Tag_Memory_Model attribute value of "1" that is different than one previously seen ("2"); combining incompatible files,是神馬意思?

          這個錯誤表明鏈接器所鏈接的目標(biāo)文件中存在不同的內(nèi)存模式,比如說有的目標(biāo)文件使用了大內(nèi)存模式,而有的使用的是小內(nèi)存模式。修改的方法則是讓所有的文件在鏈接時都使用相同的內(nèi)存模式。

          事實上這種錯誤出現(xiàn)的場合并不算太多,主要出現(xiàn)在工程中引用了別人提供的某些obj文件或者庫文件的時候。在C2000上,新建工程的時候推薦大家統(tǒng)統(tǒng)使用大內(nèi)存模式(-ml)選項。

          47. Error: file grlib.lib" was built without VFP coprocessor support while a previously seen file was; combining incompatible files,是神馬意思?

          這個錯誤與上面那個錯誤的原因是類似的,表明鏈接器所鏈接的目標(biāo)文件中存在不同的浮點支持模式。修改方法則是讓所有的目標(biāo)文件和庫文件使用相同的浮點支持--float_support選項。

          48. 為什么編譯的時候總是提示W(wǎng)arning: creating output section "xxx" without a SECTIONS specification?

          在使用默認(rèn)的cmd文件進(jìn)行,而工程中有使用了某些cmd中未明確定義的段的時候,就會出現(xiàn)這個警告。因為沒有在cmd中定義這個段,所以鏈接器會使用默認(rèn)的算法來創(chuàng)建和分配輸出段“XXX”;這樣雖然能保證程序的工作,卻不被建議這樣做,因為它不利于內(nèi)存地址空間的有效分配和管理。通常來說,最好不要有任何的鏈接器警告,以消除程序運(yùn)行時潛在的bug。

          49. 莫名其妙的gmake: Access is denied。

          在編譯程序的時候,編譯器會生成一系列的中間文件,包括obj、lib、asm等等,這個過程被一些帶有主動防御系統(tǒng)的殺毒軟件和安全軟件當(dāng)作危險行為,因此就被禁止掉了,導(dǎo)致編譯失敗,如下圖所示:

          所以在編譯程序的時候,最好禁用安全軟件,不然即使是安全軟件沒有直接阻止編譯,也會跳出各種各樣的詢問信息,不勝其擾。

          50. Type 'xyz' or Symbol 'abc' could not be resolved。

          這些錯誤一般是由Eclipse CDT (C/C++開發(fā)工具)錯報出的,而不是由TI本身的編譯器所給出的。目前的解決方法是:

          從CCSv4的工程升級到CCSv5或者更高版本的時候,如果選擇的是project---導(dǎo)入工程,一般會有一定的兼容性問題,可能會產(chǎn)生這樣的錯誤。解決方案則是創(chuàng)建一個新的工作區(qū),然后把所有的源程序、庫文件、cmd文件等導(dǎo)入到新的工程中,重新配置工程選項,然后再編譯。

          或者干脆忽略CDT的語法錯誤,方法是在CCS中點擊Window->Preferences->General->Editors->Text Editors->Annotations, 選擇C/C++ Indexer Markers,然后清除掉所有的選擇。

          51. Warning: build attribute vendor section TI missing in " : compatibility cannot be determined。是什么屬性丟失了?

          出現(xiàn)這個問題,說明使用的庫文件是由一個老版本的編譯/鏈接工具所創(chuàng)建的,在使用新版本的工具進(jìn)行編譯/鏈接時,這個老的庫文件缺失了某些屬性,導(dǎo)致了這個警告的產(chǎn)生。在C2000 的開發(fā)中,有幾個場合特別容易出現(xiàn)此警告:

          ² 在新的編譯環(huán)境中,使用了一個老版本的IQmath庫文件。

          ² 在測試時,使用了老版本的編譯器生成的Flash API。

          ² 在使用高分辨率的HRPWM模塊時,使用了老版本的SFO庫文件來修正MEP。

          這個警告總的來說并不影響程序的運(yùn)行,我們即可以通過把老的庫文件換成最新版本來徹底解決此問題,也可以在cmd文件中使用--diag_suppress=16002來消除此警告信息。至于16002這樣的警告信息是如何歸類的,在CCS的編譯提示里就有:

          #16002-D build attribute vendor section TI missing in "c:/ti/ccsv6/tools/compiler/C2000_6.2.2/lib/IQmath.lib": compatibility cannot be determined

          52. fatal error: file .....rts2800_fpu32.lib" specifies ISA revision "C28FPU32", which is not compatible with ISA revision "C2800" specified in a previous file or on the command line。

          這個致命錯誤說明對某些不是FPU32的目標(biāo)文件啟用了--float_support=FPU32選項進(jìn)行編譯,例如這個目標(biāo)文件是由不含有FPU的器件上的編譯編譯而來的時候就會產(chǎn)生,也有可能是這個目標(biāo)文件沒有使用FPU選項。解決的方法是:

          ² 如果導(dǎo)致錯誤的目標(biāo)文件是支持FPU的,則使用-v28 --float_support=FPU32來編譯所有的程序。在CCS中,可以把這個選項作為全局選項,或者預(yù)編譯選項。

          ² 如果器件不支持FPU,則不要使用FPU32選項。這是因為在含有FPU的器件中,float類型的變量會傳遞到FPU寄存器中進(jìn)行處理;而在不含有FPU的器件中,float類型的變量仍然會保存到棧中。

          53. Warning: entry-point symbol other than "_c_int00" specified: "code_start"。

          初學(xué)者經(jīng)常會遇到此問題。事實上這個警告并不會對程序的運(yùn)行產(chǎn)生什么影響,它只是用來告訴我們,程序的入口點被編譯器給自動分配到code_start,而不是默認(rèn)的_c_int00中;它們的效果是一樣的,含義請參考http://www.104case.com/article/262926.htm。TI提供的外設(shè)例子在編譯時也經(jīng)常會產(chǎn)生此警告。

          54. Error: unresolved symbols remain....

          符號FD$$MPY、FD$$TOL之類的找不到,這樣的問題也是初學(xué)者經(jīng)常遇到的。這樣的問題說明相關(guān)的庫函數(shù)被使用了,但是庫并沒有被添加到工程之中。例如,在程序中使用了c = IQdiv(a,b);這樣的程序,但是并沒有把IQmath.lib添加到工程中,則IQdiv就會被提示unsolved這樣的錯誤,解決方法則是把對應(yīng)的庫文件添加到工程里就好了。

          特別說明:帶有兩個美元符號$$的函數(shù)一般都是實時運(yùn)行庫RTS里的,一定要記得添加對應(yīng)的RTS庫文件。

          55. Error: Tag_ISA attribute value of "2" that is different than one previously seen ("1"); combining incompatible files.

          這個錯誤表明ISA版本這個屬性不正確。其中,1代表C27x,2代表C28x。在使用C28x時,應(yīng)該使用-v28這樣的選項來使用C28x模式,而不應(yīng)該再使用其它的兼容模式了。

          56. Error: placement fails for object "csmpasswds"

          在早期版本的CCS5.x編譯器/鏈接器中,有這個問題,鏈接器會不停地提示相同名字的段被既保存在page0,又被保存在page1之中,直到我們把它們改好;這算是一個bug吧,升級編譯工具codegen的版本,或者干脆升級整個ccs軟件,就可以解決此問題。

          57. Warning: function declared implicitly

          雖然這只是個警告,但是它表明函數(shù)的原型不存在,編譯器會對函數(shù)的參數(shù)和返回值做一些假設(shè),這就是bug的一種源頭,所以一定要把這個警告給消除掉。

        c++相關(guān)文章:c++教程




        關(guān)鍵詞: DSP 編程

        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 章丘市| 旬阳县| 雷波县| 辛集市| 宁远县| 麻江县| 尼木县| 墨脱县| 江城| 钦州市| 襄城县| 汕尾市| 丰县| 赞皇县| 湟源县| 武平县| 梁河县| 根河市| 登封市| 昭平县| 台东县| 遵化市| 朝阳市| 罗定市| 宁强县| 玛纳斯县| 长汀县| 京山县| 济源市| 西林县| 湟源县| 兴仁县| 哈密市| 英吉沙县| 任丘市| 蒲江县| 灌云县| 沂水县| 油尖旺区| 紫云| 新密市|