下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、絕對(duì)地址訪問C與匯編的接口C51軟件包中的通用文件段名轉(zhuǎn)換與程序優(yōu)化第一節(jié) 絕對(duì)地址訪問C51提供了三種訪問絕對(duì)地址的方法:1. 絕對(duì)宏:在程序中,用“include<absacc.h>”即可使用其中定義的宏來訪問絕對(duì)地址,包括:CBYTE、XBYTE、PWORD、DBYTE、CWORD、XWORD、PBYTE、DWORD具體使用可看一看absacc.h便知例如:rval=CBYTE0x0002;指向程序存貯器的0002h地址rval=XWORD 0x0002;指向外RAM的0004h地址2. _at_關(guān)鍵字直接在數(shù)據(jù)定義后加上_at_ const即可,但是注意:(1)絕對(duì)變量不能
2、被初使化;(2)bit型函數(shù)及變量不能用_at_指定。例如:idata struct link list _at_ 0x40;指定list結(jié)構(gòu)從40h開始。xdata char text25b _at_0xE000;指定text數(shù)組從0E000H開始提示:如果外部絕對(duì)變量是I/O端口等可自行變化數(shù)據(jù),需要使用volatile關(guān)鍵字進(jìn)行描述,請(qǐng)參考absacc.h。3. 連接定位控制此法是利用連接控制指令code xdata pdata data bdata對(duì)“段”地址進(jìn)行,如要指定某具體變量地址,則很有局限性,不作詳細(xì)討論。第二節(jié) Keil C51與匯編的接口1. 模塊內(nèi)接口方法是用pragm
3、a語(yǔ)句具體結(jié)構(gòu)是:#pragma asm匯編行#pragma endasm這種方法實(shí)質(zhì)是通過asm與ndasm告訴C51編譯器中間行不用編譯為匯編行,因而在編譯控制指令中有SRC以控制將這些不用編譯的行存入其中。2. 模塊間接口C模塊與匯編模塊的接口較簡(jiǎn)單,分別用C51與A51對(duì)源文件進(jìn)行編譯,然后用L51將obj文件連接即可,關(guān)鍵問題在于C函數(shù)與匯編函數(shù)之間的參數(shù)傳遞問題,C51中有兩種參數(shù)傳遞方法。(1) 通過寄存器傳遞函數(shù)參數(shù)最多只能有3個(gè)參數(shù)通過寄存器傳遞,規(guī)律如下表:參數(shù)數(shù)目charintlong,float一般指針123R7R5R3R6 & R7R4 & R5R2
4、& R3R4R7R4R7R1R3R1R3R1R3(2) 通過固定存儲(chǔ)區(qū)傳遞(fixed memory)這種方法將bit型參數(shù)傳給一個(gè)存儲(chǔ)段中:?function_name?BIT將其它類型參數(shù)均傳給下面的段:?function_name?BYTE,且按照預(yù)選順序存放。至于這個(gè)固定存儲(chǔ)區(qū)本身在何處,則由存儲(chǔ)模式默認(rèn)。(3) 函數(shù)的返回值函數(shù)返回值一律放于寄存器中,有如下規(guī)律:return typeRegistev說明bit標(biāo)志位由具體標(biāo)志位返回char/unsigned char 1_byte指針R7單字節(jié)由R7返回int/unsigned int 2_byte指針R6 & R7
5、雙字節(jié)由R6和R7返回,MSB在R6long&unsigned longR4R7MSB在R4, LSB在R7floatR4R732Bit IEEE格式一般指針R1R3存儲(chǔ)類型在R3 高位R2 低R1(4) SRC控制該控制指令將C文件編譯生成匯編文件(.SRC),該匯編文件可改名后,生成匯編.ASM文件,再用A51進(jìn)行編譯。第三節(jié) Keil C51軟件包中的通用文件在C51LiB目錄下有幾個(gè)C源文件,這幾個(gè)C源文件有非常重要的作用,對(duì)它們稍事修改,就可以用在自己的專用系統(tǒng)中。1. 動(dòng)態(tài)內(nèi)存分配init_mem.C:此文件是初始化動(dòng)態(tài)內(nèi)存區(qū)的程序源代碼。它可以指定動(dòng)態(tài)內(nèi)存的位置及大小,只
6、有使用了init_mem( )才可以調(diào)回其它函數(shù),諸如malloc calloc,realloc等。calloc.c:此文件是給數(shù)組分配內(nèi)存的源代碼,它可以指定單位數(shù)據(jù)類型及該單元數(shù)目。malloc.c:此文件是malloc的源代碼,分配一段固定大小的內(nèi)存。realloc.c:此文件是realloc.c源代碼,其功能是調(diào)整當(dāng)前分配動(dòng)態(tài)內(nèi)存的大小。2. C51啟動(dòng)文件STARTUP.A51啟動(dòng)文件STARTUP.A51中包含目標(biāo)板啟動(dòng)代碼,可在每個(gè)project中加入這個(gè)文件,只要復(fù)位,則該文件立即執(zhí)行,其功能包括:l 定義內(nèi)部RAM大小、外部RAM大小、可重入堆棧位置l 清除內(nèi)部、外部或者以此
7、頁(yè)為單元的外部存儲(chǔ)器l 按存儲(chǔ)模式初使化重入堆棧及堆棧指針l 初始化8051硬件堆棧指針l 向main( )函數(shù)交權(quán)開發(fā)人員可修改以下數(shù)據(jù)從而對(duì)系統(tǒng)初始化常數(shù)名 意義IDATALEN 待清內(nèi)部RAM長(zhǎng)度XDATA START 指定待清外部RAM起始地址XDATALEN 待清外部RAM長(zhǎng)度IBPSTACK 是否小模式重入堆棧指針需初始化標(biāo)志,1為需要。缺省為0IBPSTACKTOP 指定小模式重入堆棧頂部地址XBPSTACK 是否大模式重入堆棧指針需初始化標(biāo)志,缺省為0XBPSTACKTOP 指定大模式重入堆棧頂部地址PBPSTACK 是否Compact重入堆棧指針,需初始化標(biāo)志,缺省為0PBP
8、STACKTOP 指定Compact模式重入堆棧頂部地址PPAGEENABLE P2初始化允許開關(guān)PPAGE 指定P2值PDATASTART 待清外部RAM頁(yè)首址PDATALEN 待清外部RAM頁(yè)長(zhǎng)度提示:如果要初始化P2作為緊湊模式高端地址,必須:PPAGEENAGLE1,PPAGE為P2值,例如指定某頁(yè)1000H10FFH,則PPAGE10H,而且連接時(shí)必須如下:L51<input modules> PDATA(1080H),其中1080H是1000H10FFH中的任一個(gè)值。以下是STARTUP.A51代碼片斷,紅色是經(jīng)常可能需要修改的地方:;-; This file is p
9、art of the C51 Compiler package; Copyright KEIL ELEKTRONIK GmbH 1990;-; STARTUP.A51: This code is executed after processor reset.; To translate this file use A51 with the following invocation:; A51 STARTUP.A51; To link the modified STARTUP.OBJ file to your application use the following; L51 invocati
10、on:; L51 <your object file list>, STARTUP.OBJ <controls>-; User-defined Power-On Initialization of Memory; With the following EQU statements the initialization of memory; at processor reset can be defined:; ; the absolute start-address of IDATA memory is always 0IDATALEN EQU 80H ; the le
11、ngth of IDATA memory in bytes.;XDATASTART EQU 0H ; the absolute start-address of XDATA memoryXDATALEN EQU 0H ; the length of XDATA memory in bytes.;PDATASTART EQU 0H ; the absolute start-address of PDATA memoryPDATALEN EQU 0H ; the length of PDATA memory in bytes.; Notes: The IDATA space overlaps ph
12、ysically the DATA and BIT areas of the; 8051 CPU. At minimum the memory space occupied from the C51; run-time routines must be set to zero.;-; Reentrant Stack Initilization; The following EQU statements define the stack pointer for reentrant; functions and initialized it:; Stack Space for reentrant
13、functions in the SMALL model.IBPSTACK EQU 0 ; set to 1 if small reentrant is used.IBPSTACKTOP EQU 0FFH+1 ; set top of stack to highest location+1.; Stack Space for reentrant functions in the LARGE model.XBPSTACK EQU 0 ; set to 1 if large reentrant is used.XBPSTACKTOP EQU 0FFFFH+1; set top of stack t
14、o highest location+1.; Stack Space for reentrant functions in the COMPACT model.PBPSTACK EQU 0 ; set to 1 if compact reentrant is used.PBPSTACKTOP EQU 0FFFFH+1; set top of stack to highest location+1.;-; Page Definition for Using the Compact Model with 64 KByte xdata RAM; The following EQU statement
15、s define the xdata page used for pdata; variables. The EQU PPAGE must conform with the PPAGE control used; in the linker invocation.;PPAGEENABLE EQU 0 ; set to 1 if pdata object are used.PPAGE EQU 0 ; define PPAGE number.;-3. 標(biāo)準(zhǔn)輸入輸出文件putchar.cputchar.c是一個(gè)低級(jí)字符輸出子程,開發(fā)人員可修改后應(yīng)用到自己的硬件系統(tǒng)上,例如向CLD或LEN輸出字符。缺
16、?。簆utchar.c是向串口輸出一個(gè)字符XON|XOFF是流控標(biāo)志,換行符“*n”自動(dòng)轉(zhuǎn)化為回車/換行“rn”。getkey.cgetkey函數(shù)是一個(gè)低級(jí)字符輸入子程,該程序可用到自己硬件系統(tǒng),如矩陣鍵盤輸入中,缺省時(shí)通過串口輸入字符。 4. 其它文件還包括對(duì)Watch-Dog有獨(dú)特功能的INIT.A51函數(shù)以及對(duì)8×C751適用的函數(shù),可參考源代碼。第四節(jié) 段名協(xié)定與程序優(yōu)化1. 段名協(xié)定(Segment Naming Conventions)C51編譯器生成的目標(biāo)文件存放于許多段中,這些段是代碼空間或數(shù)據(jù)空間的一些單元,一個(gè)段可以是可重定位的,也可以是絕對(duì)段,每一個(gè)可重定位的段都有一個(gè)類型和名字,C51段名有以下規(guī)定:每個(gè)段名包括前綴與模塊名兩部分,前綴表示存儲(chǔ)類型,模塊名則是被編譯的模塊的名字,例如:?CO?main1 :表示main1模塊中的代碼段中的常數(shù)部分?PR?function1?module 表module模塊中函數(shù)function1的可執(zhí)行段,具體規(guī)定參閱手冊(cè)。2. 程序優(yōu)化
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 尼龍絲項(xiàng)目可行性研究報(bào)告
- 2025年特白瓷項(xiàng)目可行性研究報(bào)告-20250102-044540
- 2025年熔融還原鐵項(xiàng)目可行性研究報(bào)告
- 2022-2027年中國(guó)物流運(yùn)輸行業(yè)市場(chǎng)運(yùn)行現(xiàn)狀及未來發(fā)展預(yù)測(cè)報(bào)告
- 2025特許加盟合同范文
- 2025試用期的合同和試用期后的合同有什么區(qū)別
- 2025借款合同抵押范本
- 2025融資服務(wù)代理合同
- 2025貿(mào)易合同范本鋼材訂貨合同
- 2025關(guān)于私人建房合同協(xié)議書范本
- 中建安全標(biāo)準(zhǔn)化圖冊(cè)圖集(上下全集)(全電子版)
- 高一物理必修一思維導(dǎo)圖
- 錨索張拉和鎖定記錄表
- 2016年校本課程--------合唱教案1
- 【原創(chuàng)】《圓柱與圓錐》復(fù)習(xí)課教教學(xué)設(shè)計(jì)
- 《中國(guó)藥典》規(guī)定中藥飲片用量
- 國(guó)網(wǎng)合肥供電公司城市新建住宅小區(qū)電力建設(shè)實(shí)施細(xì)則
- 初中物理元件實(shí)物圖及一些常用圖形
- 中小學(xué)生備戰(zhàn)期末迎接期末考試動(dòng)員班會(huì)PPT
- 房測(cè)之友BMF用戶說明書
- 國(guó)自然模板(空白版)
評(píng)論
0/150
提交評(píng)論