新聞中心

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

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

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

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

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

  這個(gè)錯(cuò)誤的發(fā)生往往是編譯器沒(méi)有能夠正確地解析包含變量或者宏的頭文件的路徑。解決方法可以利用上圖中的Variables選項(xiàng)卡,點(diǎn)擊Add,把自定義的變量添加進(jìn)去,此時(shí)CCS會(huì)檢查該編譯器變量是否符合標(biāo)準(zhǔn)。

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

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

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

  那么接下來(lái)的步驟就是添加對(duì)應(yīng)的庫(kù)文件了。最直接的方法是在工程屬性里選擇,如下圖所示:

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

  #ifdef __cplusplus

  extern "C" {

  #endif

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

  這個(gè)錯(cuò)誤說(shuō)明我們定義的段超過(guò)了指定存儲(chǔ)器區(qū)間的大小??梢詮囊韵聨讉€(gè)方面來(lái)解決此問(wèn)題:

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

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

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

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

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

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

  6. 不到萬(wàn)不得已,不要去考慮更換。

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

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



上一頁(yè) 1 2 下一頁(yè)

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

評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉