• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      或者干脆忽略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)建的,在使用新版本的工具進行編譯/鏈接時,這個老的庫文件缺失了某些屬性,導致了這個警告的產(chǎn)生。在C2000 的開發(fā)中,有幾個場合特別容易出現(xiàn)此警告:

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

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

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

      這個警告總的來說并不影響程序的運行,我們即可以通過把老的庫文件換成最新版本來徹底解決此問題,也可以在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的目標文件啟用了--float_support=FPU32選項進行編譯,例如這個目標文件是由不含有FPU的器件上的編譯編譯而來的時候就會產(chǎn)生,也有可能是這個目標文件沒有使用FPU選項。解決的方法是:

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

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

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

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

      54. Error: unresolved symbols remain....

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

      特別說明:帶有兩個美元符號$$的函數(shù)一般都是實時運行庫RTS里的,一定要記得添加對應的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時,應該使用-v28這樣的選項來使用C28x模式,而不應該再使用其它的兼容模式了。

      56. Error: placement fails for object "csmpasswds"

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

      57. Warning: function declared implicitly

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

    c++相關文章:c++教程




    關鍵詞: DSP 編程

    評論


    相關推薦

    技術專區(qū)

    關閉
    主站蜘蛛池模板: 泸西县| 淮滨县| 行唐县| 威信县| 岑溪市| 青神县| 苍溪县| 彝良县| 合川市| 亚东县| 芮城县| 新丰县| 金寨县| 霍山县| 武清区| 洛浦县| 潼南县| 邳州市| 榆中县| 灵璧县| 紫金县| 双江| 萝北县| 龙门县| 丹寨县| 依兰县| 宁化县| 句容市| 云霄县| 察哈| 通江县| 洛阳市| 龙井市| 景谷| 原平市| 小金县| 乌审旗| 宁远县| 登封市| 鹤壁市| 东至县|