版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第第頁單片機(jī)啟動文件.s有什么作用?在我們使用keic51創(chuàng)建一個(51單片機(jī))項目時,會有如下圖所示的提示:
(keil)創(chuàng)建新項目時,提示是否添加啟動文件
一般情況下,需要選擇“是”。當(dāng)然,也可以選擇不加。那么,這個啟動文件的作用是什么?什么情況下需要加,什么情況下可以不加?
今天我們就來詳細(xì)了解一下這個啟動文件的內(nèi)容,看明白這個內(nèi)容后,我們就會有種恍然大悟的感覺:“哦,原來是這樣??!”
啟動代碼第一段
以下是啟動代碼原文第一段:
$NOMOD51;;ThisfileispartoftheC51Com(pi)lerpackage;Copyright(c)1988-2023KeilElektronikGmbHandKeilSoftware,Inc.;Version8.01;;***>>***;;STARTUP.A51:Thiscodeisexecu(te)dafterprocessorreset.;;TotranslatethisfileuseA51withthefollowinginvoca(ti)on:;;A51STARTUP.A51;;TolinkthemodifiedSTARTUP.OBJfiletoyourapplicationusethefollowing;Lx51invocation:;;Lx51yourobjectfilelist,STARTUP.OBJcontrols;;;;User-definedPower-OnInitializationofMemory;;WiththefollowingEQUstatementstheinitializationofmemory;atprocessorreset(can)bedefined:;;IDATALEN:IDATAmemorysize;Note:Theabsolutestart-(ad)dressofIDATAmemoryisalways0;TheIDATAspaceoverlapsphysicallytheDATAandBITareas.IDATALENEQU80H;;XDATASTART:XDATAmemorystartaddress;TheabsolutestartaddressofXDATAmemoryXDATASTARTEQU0;;XDATALEN:XDATAmemorysize;ThelengthofXDATAmemoryinbytes.XDATALENEQU0;;PDATASTART:PDATAmemorystartaddress;TheabsolutestartaddressofPDATAmemoryPDATASTARTEQU0H;;PDATALEN:PDATAmemorysize;ThelengthofPDATAmemoryinbytes.PDATALENEQU0H;;
以下是啟動代碼第一段的翻譯:
不使用預(yù)先定義的SFR。就是告訴(匯編)器不使用預(yù)定義的(寄存器)名,因為匯編器內(nèi)部定義了51的寄存器名,但在實際使用時會用51的擴(kuò)展(芯片)例如52之類的,如果包含了52的頭文件就會出現(xiàn)重復(fù)定義所以要先聲明一下不適用匯編器內(nèi)部定義的寄存器名。
這個文件是C51編譯器包的一部分
版權(quán)所有(c)1988-2023KeilElektronikGmbH和KeilSoftware,Inc。
版本8.01
***>>***
STARTUP.A51里面的代碼在處理器復(fù)位后執(zhí)行。
用下面的命令行語句調(diào)用A51進(jìn)行編譯產(chǎn)生目標(biāo)文件,
A51STARTUP.A51
用下面的命令行語句調(diào)用BL51連接器把STARTUP.OBJ目標(biāo)文件連接到(程序代碼)中,
Lx51invocation:
Lx51調(diào)用
Lx51調(diào)用目標(biāo)文件列表,由STARTUP.OBJ目標(biāo)文件控制
用戶自定義上電后需要初始化的儲存區(qū)域(初始化(RAM)區(qū)的數(shù)據(jù))
在處理器復(fù)位時通過下列EQU偽指令來初始化內(nèi)存(RAM單元)
IDATALEN:IDATA存儲區(qū)的大小,可以根據(jù)自己的選擇修改
IDATA絕對的起始地址總是0
IDATA區(qū)涵蓋DATA和BIT區(qū)(DATA區(qū)(直接尋址區(qū))以及BIT區(qū)(位尋址區(qū))),;至少要保證與C51編譯器運行庫有關(guān)的存儲器的空間進(jìn)行0初始化
XDATA存儲區(qū)的起始地址
XDATA內(nèi)存的絕對起始地址。
XDATA存儲器空間的絕對起始地址為0,
XDATA空間的大小
XDATA空間的長度以字節(jié)為單位
說明xdata的字節(jié)數(shù)清0,該值默認(rèn)為0
PDATA空間的大小
PDATA存儲器的空間的絕對起始地址
需用0進(jìn)行初始化的PDATA存儲器的空間字節(jié)數(shù)
在51系列中data、idata、xdata、pdata的區(qū)別:
data:固定指前面0x00-0x7f的128個RAM。
idata:固定指前面0x00-0xff的256個RAM,其中前128和data的128完全相同,只是因為訪問的方式不同。
xdata:外部擴(kuò)展RAM,一般指外部0x0000-0xffff空間。
pdata:外部擴(kuò)展RAM的低256個字節(jié)。
需用0進(jìn)行初始化的IDATA存儲器空間的字節(jié)數(shù),IDATALEN只是一個標(biāo)號(與IDATA不一樣哦),EQU只是做宏一樣的替換,類似于(C語言)中的#defineuint(unsignedint),以上的代碼使得程序以后在碰到IDATALEN時替換成80H。
IDATALEN可以定義為你自己喜歡的名字如MyDataLen等。之所以用IDATALEN,一是為了好記,二是為了表明和IDATA有關(guān)。
各種常數(shù)名及其含義
啟動代碼第二段
我們繼續(xù)來看看51單片機(jī)的啟動代碼里面都有哪些東西。
下面先列出51單片機(jī)啟動代碼第二部分的原文:
;;;ReentrantStackInitialization;;ThefollowingEQUstatementsdefinethestackpointerforreentrant;functionsandinitializedit:;;StackSpaceforreentrantfunctionsintheSMALLmodel.;IBPSTACK:EnableSMALLmodelreentrantstack;StackspaceforreentrantfunctionsintheSMALLmodel.IBPSTACKEQU0;setto1ifsmallreentrantisused.;IBPSTACKTOP:EndaddressofSMALLmodelstack;Setthetopofthestacktothehighestlocation.IBPSTACKTOPEQU0xFF+1;default0FFH+1;;;StackSpaceforreentrantfunctionsintheLARGEmodel.;XBPSTACK:EnableLARGEmodelreentrantstack;StackspaceforreentrantfunctionsintheLARGEmodel.XBPSTACKEQU0;setto1iflargereentrantisused.;XBPSTACKTOP:EndaddressofLARGEmodelstack;Setthetopofthestacktothehighestlocation.XBPSTACKTOPEQU0xFFFF+1;default0FFFFH+1;;;StackSpaceforreentrantfunctionsintheCOMPACTmodel.;PBPSTACK:EnableCOMPACTmodelreentrantstack;StackspaceforreentrantfunctionsintheCOMPACTmodel.PBPSTACKEQU0;setto1ifcompactreentrantisused.;;PBPSTACKTOP:EndaddressofCOMPACTmodelstack;Setthetopofthestacktothehighestlocation.PBPSTACKTOPEQU0xFF+1;default0FFH+1;;
原文全是偽指令、宏定義這些東東,看起來確實很頭疼啊。我們簡單的翻譯一下吧。
以下是第二段啟動代碼翻譯:
再入函數(shù)模擬初始化;
以下用EQU指令定義了再入函數(shù)模擬堆棧指針的初始化;
使用SMALL存儲器模式時再入函數(shù)的堆棧空間;
IBPSTACKEQU0;使用SMALL存儲器模式再入函數(shù)時將其設(shè)置成1;
IBPSTACKTOPEQU0FFH+1;將堆棧頂設(shè)置為最高地址+1;
使用LARGE存儲器模式時再入函數(shù)的堆??臻g;
XBPSTACKEQU0;使用LARGE存儲器模式再入函數(shù)時將其設(shè)置成1;
XBPSTACKTOPEQU0FFFFH+1;將堆棧頂設(shè)置為最高地址+1;
使用COMPACT存儲器模式時再入函數(shù)的堆棧空間;
PBPSTACKEQU0;使用COMPACT存儲器模式再入函數(shù)時將其設(shè)置成1;
PBPSTACKTOPEQU0FFFFH+1;將堆棧頂設(shè)置為最高地址+1。
三種模式解析
這里提到了SMALL,LARGE,COMPACT三種模式。這三種模式究竟有什么含義呢?我們下面就來了解一下。
不同內(nèi)存模式下的堆棧。Keil編譯器中有三種模式設(shè)置。這是由51處理器繁多的尋址模式導(dǎo)致的,不同的尋址模式有不同的效率。
small模式:在small模式中,所有默認(rèn)變量均裝入(單片機(jī))內(nèi)部的RAM中,51單片機(jī)默認(rèn)內(nèi)部RAM只有128B;52單片機(jī)默認(rèn)256B。該模式下的優(yōu)點是訪問速度快,缺點是空間有限。
compact模式:在compact模式中,所有默認(rèn)變量均位于單片機(jī)的256BRAM中
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 共享知識產(chǎn)權(quán)協(xié)議版3篇
- 公司間借款協(xié)議書案例3篇
- 會議服務(wù)合同規(guī)范版本專業(yè)示例3篇
- 借款合同延期范例3篇
- 合同變更管理技巧3篇
- 產(chǎn)品委托加工協(xié)議書3篇
- 墻體廣告合同范例
- 自助洗車合同范例
- 焊工承包協(xié)議合同范例
- 武漢軟件工程職業(yè)學(xué)院《電子測量》2023-2024學(xué)年第一學(xué)期期末試卷
- 重型燃?xì)廨啓C(jī)
- 史記年表·十二諸侯年表
- 配網(wǎng)規(guī)劃工作思路
- 項目復(fù)盤報告PPT通用模板
- 心理統(tǒng)計學(xué)考研歷年真題及答案
- 《校長人大代表述職報告》
- 專項法律服務(wù)方案
- 辦公樓室內(nèi)精裝修工程施工組織設(shè)計方案(同名74275)
- 2023年諸暨市提前招生選拔考試科學(xué)試卷
- 標(biāo)準(zhǔn)化預(yù)制梁場驗收表
- GB/T 39604-2020社會責(zé)任管理體系要求及使用指南
評論
0/150
提交評論