九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
DSP學(xué)習(xí)

1. 本想在一個函數(shù)里建立一個很大的數(shù)組,函數(shù)運行完會自動刪掉,但那是沒法做到的,這個大數(shù)組最好是聲明為全局變量,并且把它存到外部擴展內(nèi)存里,不要讓它占用有限的片上內(nèi)存,不然程序很容易跑飛。C語言本身的跑飛現(xiàn)象比較好查,而因為內(nèi)存問題而跑飛,很隱秘,很難查。

聲明存到外擴的片子上:#pragma DATA_SECTION(G, ".G");

然后在.cmd文件里寫:.G  > CE0

或者也可以改.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無法起作用:

    當(dāng)然還是內(nèi)存的問題。網(wǎng)上唯一一篇相關(guān)文章說是-heap的問題,讓把heap改成0x400,俺的heap本來就是400,后來改成800也沒用。最后把.stack移到片外內(nèi)存后,printf才好用,光改option里的stack改到800也無濟于事.

   不改.stack也行,把option里的stack改成0x1000,heap還是0x400,printf可以用。

   像LDPC這樣消耗內(nèi)存較多的程序,最好stack設(shè)成0x3000,heap不要管它。

  stack大小設(shè)錯或者放到CE0上,都可能導(dǎo)致程序結(jié)果出錯,是在內(nèi)存存取時被無意識改寫了,具體原因和對策有待分析。


5. 沒有板子的同志就別做了,光靠pc上的simulator太慢,不太現(xiàn)實。


6. 調(diào)用函數(shù)中用到的,其他文件已經(jīng)定義過的,外部靜態(tài)變量數(shù)組,必須用指針調(diào)用,不支持G[]的形式。

   但是,這個G如果是在本文件中定義的,可以用G[]。定義G時候好像要加static,調(diào)用時才可以用G[],不知道沒有static行不行。


7. C語言里還有一種用far定義的變量,沒用過,不知道怎么用,也不知道用了有什么好處,請高人指教!!查了一下.map文件,上面顯示說:靜態(tài)數(shù)都存在.far中了,可能CCS會自動識別far和near的變量吧。

還有一個什么內(nèi)存對齊的問題:#pragma DATA_ALIGN(highpoint, 8),好像用不用效果都是一樣的,為什么要對齊呀?


8. 對于CCS來說,對于外部變量G,初始化的語句int G[100]={0};并不能使G的元素變

     成 0,所以還是老老實實用memset語句進行初始化吧。

    但是對于動態(tài)變量{0}用于初始化是可以的。


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......,  #pragma DATA_ALIGN等聲明。


11. CCS的printf確實不太好用,比如printf("%f,%d",a,b);則b將會顯示出錯,顯示出來一個莫名其妙的值,所以在CCS上應(yīng)用printf一個變量用一個pirntf。修改stack大小也是沒用的。


12.  如果程序中用的數(shù)組超大(通信程序經(jīng)常是這樣), 編譯到最后link時會出現(xiàn)relocation value truncated 0xxxx in section .text, file 字樣。一般的辦法是前面說的將大數(shù)組聲明在一個特定的內(nèi)存空間中,聲明存到外擴的片子上:#pragma DATA_SECTION(G, ".G");如果這樣還不行,就修改Build option, 進入advance項,把memory mode 改成“far”,把RTS calls改成“are far”就行了。


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,  endif等偽指令,在所有C程序中包含這個頭文件,問題就解決了。先開始以為這種寫法是一種簡煉的寫法,沒想到還有防止DSP跑飛的作用,看來算是一種標(biāo)準(zhǔn)的寫法。

 

注:過了幾天發(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可以解決此類問題。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
[轉(zhuǎn)]想成為嵌入式程序員應(yīng)知道的16個基本問題
基于MATLAB 的DSP 調(diào)試方法-電子開發(fā)網(wǎng)
【DM642】H.264源代碼在DM642上的移植[轉(zhuǎn)]
VFP常用命令詳解
C語言程序設(shè)計試題及答案(十)
C語言入門教程-內(nèi)存地址
更多類似文章 >>
生活服務(wù)
熱點新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服