新聞中心

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

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

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

  43. Error: option --include_path is missing its parameter 'dir',如何解決?

本文引用地址:http://butianyuan.cn/article/267640.htm

  這個錯誤的發(fā)生往往是編譯器沒有能夠正確地解析包含變量或者宏的頭文件的路徑。解決方法可以利用上圖中的Variables選項卡,點擊Add,把自定義的變量添加進去,此時CCS會檢查該編譯器變量是否符合標準。

  44. Error: unresolved symbols remain,如何解決?

  出現(xiàn)這個錯誤說明鏈接器在符號表中找不到相關的符號定義。在這個例子中,源程序example中使用了函數(shù)myfunc,但是在編譯生成的所有目標文件(.obj)或者所有的庫文件(.lib)中都找不到這個函數(shù)。解決的方法自然是找到這個函數(shù)從哪里來的?然后把它的源添加到工程中。

  在使用Stellarisware或者ControlSuite套件中的例子來創(chuàng)建我們自己的工程時,如果忘了使用—library選項把庫文件添加到鏈接器的路徑里,則經(jīng)常會出現(xiàn)此錯誤。這些庫文件包括:Stellarisware/Tivaware中的driverlib, grlib, usblib,ControlSuite中的driverlib, IQMath等等。

  那么接下來的步驟就是添加對應的庫文件了。最直接的方法是在工程屬性里選擇,如下圖所示:

  此外,如果在C++代碼中引用C代碼的頭文件,如果這個頭文件是自定義的(而不是系統(tǒng)提供的),則最好在頭文件中添加extern "C" {...}以方便在C++代碼中方便使用#include來引用該頭文件。那么問題又來了:C編譯器不認識extern "C"怎么辦?此時要使用#ifdef這樣的宏來在C中屏蔽它們,即:

  #ifdef __cplusplus

  extern "C" {

  #endif

  45. Error: placement fails for section "xxx",如何解決?

  這個錯誤說明我們定義的段超過了指定存儲器區(qū)間的大小??梢詮囊韵聨讉€方面來解決此問題:

  1. 檢查棧和堆的長度,看看是不是給它們配置了過大的值,導致了在RAM中保存不下去?然后嘗試減小它們的長度。

  2. 嘗試使能或者增加編譯器的優(yōu)化級別,未經(jīng)優(yōu)化的代碼往往需要更多的存儲空間。

  3. 如果使用了I/O代碼,則它們會顯著增加代碼尺寸,例如在很多小容量的器件上,一個printf()函數(shù)就能超過存儲容量了,此時可以使用printf()的最小格式,請參考http://butianyuan.cn/article/266820.htm

  4. 可以考慮修改cmd文件,以增加某個段所使用的存儲空間的長度;代價是別的存儲空間的長度會相應減小,有可能導致新的placement fails 這樣的錯誤產(chǎn)生。具體可參考http://butianyuan.cn/article/256732.htm

  5. 嘗試精簡/優(yōu)化代碼,在不影響功能的情況下,使用一些技巧來減小代碼尺寸。

  例如,我們可以使用“空間換時間”,或者“時間換空間”的方法,在代碼尺寸和執(zhí)行速度上做一些折衷。比如對于一個滑動傅立葉變換(sDFT),我們既可以使用很大的數(shù)組來保存滑動值, 從而實現(xiàn)很高的運算速度;也可以減少運算速度,每個周期只使用幾個點來完成計算,這樣可以極大地減小存儲空間的占用。

  6. 不到萬不得已,不要去考慮更換。

  但是如果在產(chǎn)品開發(fā)的評估階段,存儲空間就已經(jīng)捉襟見肘了,則還是要提早考慮升級的,不然以后再增加新的功能,或者哪怕是僅僅修正了一個小的bug,有可能就徹底放不進去了。

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



上一頁 1 2 下一頁

關鍵詞: DSP 編程 芯片

評論


相關推薦

技術專區(qū)

關閉