dsp調試常見問題


1、 function "****" declared implicitly?
函數沒有聲明。
執行一個a.variable was set but never used?
如果對於某些變量,只是定義並賦值,而沒有做其他使用,有些編譯器就會認爲變量沒有使用。
數時,a.c文件起始要有函數聲明,有兩種方式,一種是直接聲明,另一種是包含頭文件a.h和b.h,並在b.h或者a.h頭文件中聲明。需要注意,如果a.h和b.h頭文件中沒有直接聲明,而在b.c文件中聲明此函數,那麼在b.c文件中可以使用此函數,在a.c文件中,此函數沒有聲明,此函數還是不能用在a.c文件中。
這種情況經常出現,類似的情況還有數據類型沒有定義。
2、 unresolved symble,first referenced?
原因是在前面沒有定義,就直接引用。
3、怎麼將variable was set but never used?
如果對於某些變量,只是定義並賦值,而沒有做其他使用,有些編譯器就會認爲變量沒有使用。
文件放在一起,另一種方法右擊工程,add filesc文件鏈接進去或者複製進去都可以。

4、不能單步調試的原因?
將properties裏面的build的optimization關掉即可,單步調試後程序就會進入子函數。因爲一旦將程序優化後,雖說功能沒有什麼變化,但是行數結構變化了,單步調試會亂跳。

5、ariable was set but never used
如果對於某些變量,只是定義並賦值,而沒有做其他使用,有些編譯器就會認爲變量沒有使用。
6、data: 8,這種格式是什麼意思?
這是位字段的定義,並不是表示data是一個uint16的數據,而是表示data在這個結構體裏佔據8位。這是嵌入式程序裏面所特有的,對資源的應用更加細化。
7、如果一個變量只在一個函數中使用,該如何定義它?
全局變量和局部變量的區別在於,一個在函數外定義一個在函數內定義。如果一個源文件中包含有a函數和b函數,在a函數裏面定義的變量只能在a函數中使用,而不能在b函數中使用。

8、爲什麼dsp中的數組CAN_HEX_BUFFER[5][37]沒有初始化時,是一些不確定的數值?

當全局變量或者靜態變量沒有初始化時,標準c規定變量值初始化爲0,但從效率出發,dsp規定:沒有顯示初始化的,仍保持未初始化狀態。

詳細說來,全局變量和靜態變量放在段.ebss中,需要顯式初始化的量放在段.cinit,當dsp上電時,系統初始化函數將自動調用段.cinit的值來初始化段.ebss,對沒有顯式定義初始化值的,則不初始化,這樣減少了存儲空間和初始化運行時間。

9、把該分開的分開,把該合併的合併,這句話應該怎麼理解?

對於嵌入式開發而言,應該將軟件分爲兩類,一類是與硬件有關的,另一類是與硬件無關的。這就是說,鼓勵程序將驅動和算法實現分開編寫。例如,不要試圖在一個模塊內既完成spwm的算法,又完成spwm的硬件輸出。

10、codestart.asm這個東西到底起什麼作用?

這是退出boot mode後,第一個要執行的代碼。_c_init00c環境的設置,之後再進入main()。Codestart.asm會將程序執行過程指向_c_init00_c_init00會初始化全局和靜態變量,完成後隨後進入主函數main()。 ccs環境中,默認條件下,當load program時,-e linker會記住程序的入口地址,程序會停在_c_init00的開始處。當點擊resume時,執行_c_init00,然後進入程序的入口。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章