Keil應用經驗

keil c 中可以用關鍵字 reentrant 定義, 如:void fun(void) reentrant{}
但函數中不可以使用BOOL變量,以爲KEIL默認 將所有變量定位到外部RAM的最高處,而外部RAM不可以位尋址。
另外如果你的外部RAM不足64K(0XFFFF),你還的更改KEIL系統文件STARTUP.A51中
XBPSTACKTOP EQU 0FFFFH+1;這一行。 例如你的外部RAM是0-0x7fff, 則該爲:
XBPSTACKTOP EQU 07FFFH+1
我們使用Keil C調試某系統時積累的一些經驗

1、由於Keil C對中文支持不太好,因而會出現顯示的光標與光標實際所在不一致的現象,這會對修改中文註釋造成影響。在Windows2000下面,我們可以把字體設置爲Courier,這樣就可以顯示正常。
2、當使用有片外內存的MCU(如W77E58,它有1K片外內存)的時候,肯定要設置標誌位,並且編譯方式要選擇大模式,否則會出錯。
3、當使用Keil C跟蹤程序運行狀態的時候,要把引起Warning的語句屏蔽,否則有可能跟蹤語句的時候會出錯。
4、在調用數組的時候,Keil C是首先把數組Load進內存。如果要在C中使用長數組的時候,我們可以使用code關鍵字,這樣就實現了彙編的DB的功能,Keil C是不會把標誌code的數組Load入內存的,它會直接讀取Rom。
5、當編程涉及到有關通信,時序是很重要的。拉高管腳的執行速度遠遠比檢查管腳電平的要快。
6、在等待管腳電平變化的時候,我們需要設置好超時處理,否則程序就會因爲一個沒有預計的錯誤而死鎖。
7、能用C語言實現的地方,儘量不要用匯編,尤其在算法的實現,用匯編是晦澀難懂。
8、程序的幾個參數數組所佔篇幅很大,其中液晶背景數組最長,有四千個Byte,因而把那些初始化數組都放在另外一個C文件,在主文件使用使用關鍵字extern定義,這樣就不會對主文件的編寫造成干擾。
9、所有函數之間的相關性越低越有利於以後功能的擴展。
10、6.20版在編譯帶code關鍵字的數組時,編譯通過但是單片機運行結果是錯誤的,改用6.14版後正常。
keil中的變量和常量定位問題

變量定位:char tab1[10] _at_ 0x200;
賦值:在函數中賦值,如tab1[0]=0x01;


常量定位及初始化:
新建一個TABLE.C, 寫入
char code table[]={ 初始值};
KEIL定位:選擇 option-->BL51 Locate, 在CODE:欄中寫入如:
?CO?TABLE(0x7000)
這樣,table[]表就定位到了0x7000開始的程序段。

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