1. 本想在一個函數(shù)里建立一個很大的數(shù)組,函數(shù)運行完會自動刪掉,但那是沒法做到的,這個大數(shù)組最好是聲明為全局變量,并且把它存到外部擴展內(nèi)存里,不要讓它占用有限的片上內(nèi)存,不然程序很容易跑飛。C語言本身的跑飛現(xiàn)象比較好查,而因為內(nèi)存問題而跑飛,很隱秘,很難查。
聲明存到外擴的片子上:#pragma
然后在.cmd文件里寫:.G
或者也可以改.stack,把整個堆棧放到CE0去。但是這樣會嚴(yán)重減慢系統(tǒng)速度。不要相信擴展內(nèi)存會比片上內(nèi)存快。
2. 一般數(shù)組的名字代表它的首地址,但是CCS里有些別扭的地方。
如果數(shù)組G是在其他文件里聲明的,在本文件中想用的話直接extern int G;就可以了。但是要想用一個指針指向這個G,如:G_pointer要指向G,則應(yīng)寫成G_pointer=&G;若寫成G_pointer=G;將提示錯誤。
如果G是本文件定義的靜態(tài)變量,用指針指向它,可以寫成:G_pointer=G;
3. 把大數(shù)組作為靜態(tài)變量并給它獨立分配內(nèi)存空間的必要性:
如果大數(shù)組在函數(shù)內(nèi)部定義,其數(shù)據(jù)會出現(xiàn)莫名其妙的異常,還會經(jīng)常變化。其實不是你程序的錯,是內(nèi)存的緣故,所以硬著頭皮,把他們統(tǒng)統(tǒng)放到程序前面去吧。
4. 程序中的printf無法起作用:
5. 沒有板子的同志就別做了,光靠pc上的simulator太慢,不太現(xiàn)實。
6. 調(diào)用函數(shù)中用到的,其他文件已經(jīng)定義過的,外部靜態(tài)變量數(shù)組,必須用指針調(diào)用,不支持G[]的形式。
7. C語言里還有一種用far定義的變量,沒用過,不知道怎么用,也不知道用了有什么好處,請高人指教!!查了一下.map文件,上面顯示說:靜態(tài)數(shù)都存在.far中了,可能CCS會自動識別far和near的變量吧。
還有一個什么內(nèi)存對齊的問題:#pragma
8. 對于CCS來說,對于外部變量G,初始化的語句int G[100]={0};并不能使G的元素變
9. VC中一個指針是unsigned int型還是int型都無所謂,都意味著指針+1跳4個字節(jié),但是CCS中則很嚴(yán)格,G如果是unsigned int型的,他的指針一定要定義成unsigned int *。
10.不同文件的聲明部分:CCS中每一個文件都要寫聲明,如文件A需要include <stdio.h>,文件B也需要,則A,B兩文件都要寫include <stdio.h>,編譯器不會自動找的。還包括:
#define......,
11. CCS的printf確實不太好用,比如printf("%f,%d",a,b);則b將會顯示出錯,顯示出來一個莫名其妙的值,所以在CCS上應(yīng)用printf一個變量用一個pirntf。修改stack大小也是沒用的。
12.
13. 需要非常注意:CCS有自動優(yōu)化功能,即build option中選擇 -o1~-o3,會有不同程度的優(yōu)化效果。但是優(yōu)化之后,CCS會將程序的循環(huán)體變成DSP喜歡的流水線形式,所以用優(yōu)化過的程序進行程序調(diào)試是不明智的,因為你的循環(huán)變量counter將不再顯示它本來的值,而且單步運行時,很可能不會按照程序一步一步走下去,因為優(yōu)化會帶來程序的跳轉(zhuǎn)。所以正確的方法是,處在調(diào)試階段的程序不進行優(yōu)化,調(diào)試成功,結(jié)果正確,再進行優(yōu)化。優(yōu)化效果非常明顯哦。
14. 2011年5月7日,今天一個很簡單的程序在DSP上給跑飛掉了,不知道怎么回事。最后發(fā)現(xiàn)是頭文件的問題,不是沒包含頭文件,而是頭文件定義太多次了。我將所有頭文件和聲明都放到一個config.h文件中,里面用了ifndef,
注:過了幾天發(fā)現(xiàn),第14個問題的這種解決方法只是表象,其實質(zhì)是CCS中用的fp = fopen();函數(shù),CCS并不能很好地支持這里文件處理函數(shù),經(jīng)常會出現(xiàn)問題,包括第15個問題。更奇怪的是:我將這些文件處理函數(shù)注釋掉后,程序仍然跑飛,而將這些注釋掉的程序刪除,程序就正常運轉(zhuǎn)了,這說明fopen()等函數(shù)即便是被注釋掉,對于CCS的程序仍然有影響,真是詭異,但這是事實。
15. 對CCS進行fprintf操作,輸出一個文本時它是很不給力的,有可能保存不了文本。這時我們要清楚,CCS中保存文本以來 -heap(堆)的大小,在build option中將heap的大小由默認(rèn)的0x400改為0x700或0x1000可以解決此類問題。
聯(lián)系客服