單片機(jī)啟動文件.s有什么作用_第1頁
單片機(jī)啟動文件.s有什么作用_第2頁
單片機(jī)啟動文件.s有什么作用_第3頁
單片機(jī)啟動文件.s有什么作用_第4頁
單片機(jī)啟動文件.s有什么作用_第5頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論