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

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

ID:10021643

大?。?67.50 KB

頁(yè)數(shù):19頁(yè)

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

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

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

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

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

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

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

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

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

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

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

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

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

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