




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、絕對地址訪問C與匯編的接口C51軟件包中的通用文件段名轉(zhuǎn)換與程序優(yōu)化第一節(jié) 絕對地址訪問C51提供了三種訪問絕對地址的方法:1. 絕對宏:在程序中,用“include<absacc.h>”即可使用其中定義的宏來訪問絕對地址,包括: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)絕對變量不能
2、被初使化;(2)bit型函數(shù)及變量不能用_at_指定。例如:idata struct link list _at_ 0x40;指定list結(jié)構(gòu)從40h開始。xdata char text25b _at_0xE000;指定text數(shù)組從0E000H開始提示:如果外部絕對變量是I/O端口等可自行變化數(shù)據(jù),需要使用volatile關(guān)鍵字進行描述,請參考absacc.h。3. 連接定位控制此法是利用連接控制指令code xdata pdata data bdata對“段”地址進行,如要指定某具體變量地址,則很有局限性,不作詳細討論。第二節(jié) Keil C51與匯編的接口1. 模塊內(nèi)接口方法是用pragm
3、a語句具體結(jié)構(gòu)是:#pragma asm匯編行#pragma endasm這種方法實質(zhì)是通過asm與ndasm告訴C51編譯器中間行不用編譯為匯編行,因而在編譯控制指令中有SRC以控制將這些不用編譯的行存入其中。2. 模塊間接口C模塊與匯編模塊的接口較簡單,分別用C51與A51對源文件進行編譯,然后用L51將obj文件連接即可,關(guān)鍵問題在于C函數(shù)與匯編函數(shù)之間的參數(shù)傳遞問題,C51中有兩種參數(shù)傳遞方法。(1) 通過寄存器傳遞函數(shù)參數(shù)最多只能有3個參數(shù)通過寄存器傳遞,規(guī)律如下表:參數(shù)數(shù)目charintlong,float一般指針123R7R5R3R6 & R7R4 & R5R2
4、& R3R4R7R4R7R1R3R1R3R1R3(2) 通過固定存儲區(qū)傳遞(fixed memory)這種方法將bit型參數(shù)傳給一個存儲段中:?function_name?BIT將其它類型參數(shù)均傳給下面的段:?function_name?BYTE,且按照預(yù)選順序存放。至于這個固定存儲區(qū)本身在何處,則由存儲模式默認。(3) 函數(shù)的返回值函數(shù)返回值一律放于寄存器中,有如下規(guī)律:return typeRegistev說明bit標志位由具體標志位返回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存儲類型在R3 高位R2 低R1(4) SRC控制該控制指令將C文件編譯生成匯編文件(.SRC),該匯編文件可改名后,生成匯編.ASM文件,再用A51進行編譯。第三節(jié) Keil C51軟件包中的通用文件在C51LiB目錄下有幾個C源文件,這幾個C源文件有非常重要的作用,對它們稍事修改,就可以用在自己的專用系統(tǒng)中。1. 動態(tài)內(nèi)存分配init_mem.C:此文件是初始化動態(tài)內(nèi)存區(qū)的程序源代碼。它可以指定動態(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)整當前分配動態(tài)內(nèi)存的大小。2. C51啟動文件STARTUP.A51啟動文件STARTUP.A51中包含目標板啟動代碼,可在每個project中加入這個文件,只要復(fù)位,則該文件立即執(zhí)行,其功能包括:l 定義內(nèi)部RAM大小、外部RAM大小、可重入堆棧位置l 清除內(nèi)部、外部或者以此
7、頁為單元的外部存儲器l 按存儲模式初使化重入堆棧及堆棧指針l 初始化8051硬件堆棧指針l 向main( )函數(shù)交權(quán)開發(fā)人員可修改以下數(shù)據(jù)從而對系統(tǒng)初始化常數(shù)名 意義IDATALEN 待清內(nèi)部RAM長度XDATA START 指定待清外部RAM起始地址XDATALEN 待清外部RAM長度IBPSTACK 是否小模式重入堆棧指針需初始化標志,1為需要。缺省為0IBPSTACKTOP 指定小模式重入堆棧頂部地址XBPSTACK 是否大模式重入堆棧指針需初始化標志,缺省為0XBPSTACKTOP 指定大模式重入堆棧頂部地址PBPSTACK 是否Compact重入堆棧指針,需初始化標志,缺省為0PBP
8、STACKTOP 指定Compact模式重入堆棧頂部地址PPAGEENABLE P2初始化允許開關(guān)PPAGE 指定P2值PDATASTART 待清外部RAM頁首址PDATALEN 待清外部RAM頁長度提示:如果要初始化P2作為緊湊模式高端地址,必須:PPAGEENAGLE1,PPAGE為P2值,例如指定某頁1000H10FFH,則PPAGE10H,而且連接時必須如下:L51<input modules> PDATA(1080H),其中1080H是1000H10FFH中的任一個值。以下是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. 標準輸入輸出文件putchar.cputchar.c是一個低級字符輸出子程,開發(fā)人員可修改后應(yīng)用到自己的硬件系統(tǒng)上,例如向CLD或LEN輸出字符。缺
16、省:putchar.c是向串口輸出一個字符XON|XOFF是流控標志,換行符“*n”自動轉(zhuǎn)化為回車/換行“rn”。getkey.cgetkey函數(shù)是一個低級字符輸入子程,該程序可用到自己硬件系統(tǒng),如矩陣鍵盤輸入中,缺省時通過串口輸入字符。 4. 其它文件還包括對Watch-Dog有獨特功能的INIT.A51函數(shù)以及對8×C751適用的函數(shù),可參考源代碼。第四節(jié) 段名協(xié)定與程序優(yōu)化1. 段名協(xié)定(Segment Naming Conventions)C51編譯器生成的目標文件存放于許多段中,這些段是代碼空間或數(shù)據(jù)空間的一些單元,一個段可以是可重定位的,也可以是絕對段,每一個可重定位的段都有一個類型和名字,C51段名有以下規(guī)定:每個段名包括前綴與模塊名兩部分,前綴表示存儲類型,模塊名則是被編譯的模塊的名字,例如:?CO?main1 :表示main1模塊中的代碼段中的常數(shù)部分?PR?function1?module 表module模塊中函數(shù)function1的可執(zhí)行段,具體規(guī)定參閱手冊。2. 程序優(yōu)化
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 餐飲店租賃權(quán)及品牌使用權(quán)轉(zhuǎn)讓及加盟合同范本
- 邊疆古代手工業(yè)考古合同
- 物業(yè)管理公司車位使用權(quán)轉(zhuǎn)讓合同范本
- 安全生產(chǎn)標準化要素有哪些
- 建設(shè)工程開工前質(zhì)量安全條件核查表
- 幼兒園安全自查總結(jié)
- 安全管理績效考核細則
- 美術(shù)下雨天課件
- 安全事故案例反思總結(jié)
- 工程安全事故等級劃分
- 嘟嘟少兒英語beep演示簡化版
- GB/T 699-2015優(yōu)質(zhì)碳素結(jié)構(gòu)鋼
- GB/T 19250-2013聚氨酯防水涂料
- GB/T 19096-2003技術(shù)制圖圖樣畫法未定義形狀邊的術(shù)語和注法
- GB/T 13808-1992銅及銅合金擠制棒
- 項目安全體系圖
- 中央財政科技計劃的項目結(jié)題審計指引講解文課件
- 職業(yè)暴露(銳器傷)應(yīng)急預(yù)案演練腳本
- 首屆全國報刊編校技能大賽決賽試卷(一)及答案
- 材料出入庫表格范本
- DB14∕T 2442-2022 政務(wù)數(shù)據(jù)分類分級要求
評論
0/150
提交評論