keil c使用經(jīng)驗(yàn)小結(jié)

keil c使用經(jīng)驗(yàn)小結(jié)

ID:10021643

大?。?67.50 KB

頁數(shù):19頁

時(shí)間:2018-05-21

keil c使用經(jīng)驗(yàn)小結(jié)_第1頁
keil c使用經(jīng)驗(yàn)小結(jié)_第2頁
keil c使用經(jīng)驗(yàn)小結(jié)_第3頁
keil c使用經(jīng)驗(yàn)小結(jié)_第4頁
keil c使用經(jīng)驗(yàn)小結(jié)_第5頁
資源描述:

《keil c使用經(jīng)驗(yàn)小結(jié)》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

1、KeilC使用經(jīng)驗(yàn)小結(jié)秦建勛2005/7/29目錄引言1語言擴(kuò)展1數(shù)據(jù)存儲器區(qū)域1存儲器模型2指針3函數(shù)3參數(shù)傳遞3自動變量分配8C51的陷阱9運(yùn)算溢出9編譯與鏈接控制10編譯時(shí)控制10定制文件10Startup.A5110INIT.A5110L51_BANK.A5111鏈接時(shí)控制11代碼或常數(shù)的絕對定位11和_at_關(guān)鍵字的比較11Overlay12如何控制overlay15overlay相關(guān)的其它問題15可重入函數(shù)16μVisionIDE使用簡介16簡單的代碼習(xí)慣17頭文件(.h文件)習(xí)慣1

2、7C模塊的習(xí)慣18CVS的使用18引言2004年6月以來開始接觸KeilC,原因是MUSE項(xiàng)目控制器采用了目前8位微控制器領(lǐng)域最經(jīng)典、使用最廣泛的8051MCU。從一年多來的使用實(shí)踐看,我們的8051IP還是比較可靠的,那么以后可能有更多的產(chǎn)品需要用到該IP,因此看起來還是需要在相當(dāng)長一段時(shí)間需要與KeilC打交道。本文就簡單小結(jié)我對KeilC的一些理解以及使用過程中的一些經(jīng)驗(yàn)、教訓(xùn),試圖起到拋磚引玉的作用,為大家總結(jié)KeilC使用經(jīng)驗(yàn)提供一個(gè)討論的起點(diǎn)。語言擴(kuò)展所謂語言擴(kuò)展是指相對標(biāo)準(zhǔn)C(如A

3、NSIC嚴(yán)格說來,主要是針對ANSIC,因?yàn)镵eilC顯然不支持C++,一些語言特性,如“//”注釋是C99標(biāo)準(zhǔn)引入的)進(jìn)行的針對8051硬件平臺進(jìn)行的擴(kuò)展,這樣的C編譯器才是真正為8051量身訂做的:資源的使用是緊湊的、編譯出來的代碼是高效的,另外,Keil公司好象也出了針對ARM的C編譯器,所以,從命名來說,看起來C51更準(zhǔn)確些,實(shí)際上μVision也是這么做的。數(shù)據(jù)存儲器區(qū)域8051的數(shù)據(jù)存儲器分為片內(nèi)和片外存儲器兩大類,片內(nèi)RAM分為直接訪問和間接訪問兩部分,片外RAM由可有頁尋址和普通

4、區(qū)域兩部分,總是讓人混淆,下面我結(jié)合C51的數(shù)據(jù)存儲器區(qū)域給一個(gè)圖示解釋18FF007F80FF只能間接訪問,idata直接訪問:data間接訪問:idataSFRs,只能直接訪問,sfrFFFF00FF0000pdata,movx@Rnxdatamovx@DPTR片內(nèi)數(shù)據(jù)存儲器片外數(shù)據(jù)存儲器,DMbdataRegisterbanks1F2F圖18051數(shù)據(jù)存儲器對應(yīng)的C51存儲器模型我們可以看到,data作為可存放數(shù)據(jù)的空間只有128字節(jié),還要排除掉32字節(jié)的寄存器組和16字節(jié)的可位尋址空間,

5、實(shí)際只有80字節(jié)的變量可分配空間,所以有時(shí)候會出現(xiàn)鏈接時(shí)報(bào)告片內(nèi)數(shù)據(jù)只使用100字節(jié)卻數(shù)據(jù)空間溢出的情況(使用small存儲器編譯模型),原因就在于程序引入的附加data型的數(shù)據(jù)量已經(jīng)超過了80字節(jié),此時(shí),把data型變量改為idata就可以通過鏈接,只要變量總量不超過片內(nèi)的256字節(jié)(還應(yīng)該考慮運(yùn)行時(shí)堆棧大小J)。存儲器模型C51的存儲器模型用于確定:函數(shù)參數(shù)、自動變量以及不帶顯式存儲器類型說明變量聲明的缺省存儲器類型,有如下幾種模型:小模型(smallmodel),在該模型下,所有變量缺省都

6、駐留在8051片內(nèi)存儲器中(如同聲明為data類型),變量的訪問效率非常高。然而,所有對象,包括堆棧(運(yùn)行時(shí)的最大堆棧容量)必須都放在片內(nèi)RAM中,一般來說在程序規(guī)模小且使用overlay技術(shù)(后面會講到)、沒有聲明可重入函數(shù)并多次嵌套調(diào)用情況下是最佳的。緊湊模型(compactmodel),該模型下,所有變量,缺省駐留在外部DM的一個(gè)page之內(nèi),(通過MOVX@Ri指令訪問,見圖說明),緊湊模型的效率遜于小模型、優(yōu)于打模型。這里自然產(chǎn)生一個(gè)問題問題,當(dāng)緊湊模型下使用的變量超過一個(gè)頁大?。?5

7、6字節(jié))怎么辦?多余的部分,KeilC手冊說,使用P2的設(shè)置以使用另外的page,但實(shí)際情況是我們的8051只支持0頁,我向徐國柱核實(shí)過,這體現(xiàn)在MOVX@Ri的時(shí)候,16為DM地址總線的高8位(我們的8051與經(jīng)典的不一樣,經(jīng)典的由于考慮到封裝的要求,使用P0和P2,P0還是地址、數(shù)據(jù)復(fù)用,我們的8051和DM都是集成在片內(nèi)的,沒有封裝帶來的限制)始終為0,可否搞一個(gè)sfr來產(chǎn)生MOVX@Ri指令執(zhí)行時(shí)候的高8位地址,復(fù)位地址為0。我們現(xiàn)在的程序規(guī)模就采用了這種模式。大模型(largemode

8、l),該模型下,所有變量缺省情況下都駐留在DM中,就象使用xdata存儲器類型修飾符聲明一樣(通過MOVX@DPTR指令訪問,18尋址采用DPTR),這種方式速度慢,產(chǎn)生的代碼也最多,而且對于需要頻繁運(yùn)算的變量,效率更低。指針通用指針以標(biāo)準(zhǔn)C指針的方式聲明,如:char*s;/*stringptr*/int*numptr;/*intptr*/long*state;/*Texas*/通用指針總是以三字節(jié)進(jìn)行存儲,第一個(gè)字節(jié)是存儲器類型,第二字節(jié)是指針代表的地址的高字節(jié),第三字節(jié)是地址的低字節(jié)。通用

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時(shí)可能會顯示錯(cuò)亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時(shí)聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。