




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rè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)鍵字進(jìn)行描述,請參考absacc.h。3. 連接定位控制此法是利用連接控制指令code xdata pdata data bdata對“段”地址進(jìn)行,如要指定某具體變量地址,則很有局限性,不作詳細(xì)討論。第二節(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對源文件進(jìn)行編譯,然后用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ū)本身在何處,則由存儲模式默認(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存儲類型在R3 高位R2 低R1(4) SRC控制該控制指令將C文件編譯生成匯編文件(.SRC),該匯編文件可改名后,生成匯編.ASM文件,再用A51進(jìn)行編譯。第三節(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)整當(dāng)前分配動態(tài)內(nèi)存的大小。2. C51啟動文件STARTUP.A51啟動文件STARTUP.A51中包含目標(biāo)板啟動代碼,可在每個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 是否小模式重入堆棧指針需初始化標(biāo)志,1為需要。缺省為0IBPSTACKTOP 指定小模式重入堆棧頂部地址XBPSTACK 是否大模式重入堆棧指針需初始化標(biāo)志,缺省為0XBPSTACKTOP 指定大模式重入堆棧頂部地址PBPSTACK 是否Compact重入堆棧指針,需初始化標(biāo)志,缺省為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. 標(biāo)準(zhǔn)輸入輸出文件putchar.cputchar.c是一個低級字符輸出子程,開發(fā)人員可修改后應(yīng)用到自己的硬件系統(tǒng)上,例如向CLD或LEN輸出字符。缺
16、?。簆utchar.c是向串口輸出一個字符XON|XOFF是流控標(biāo)志,換行符“*n”自動轉(zhuǎn)化為回車/換行“rn”。getkey.cgetkey函數(shù)是一個低級字符輸入子程,該程序可用到自己硬件系統(tǒng),如矩陣鍵盤輸入中,缺省時通過串口輸入字符。 4. 其它文件還包括對Watch-Dog有獨(dú)特功能的INIT.A51函數(shù)以及對8×C751適用的函數(shù),可參考源代碼。第四節(jié) 段名協(xié)定與程序優(yōu)化1. 段名協(xié)定(Segment Naming Conventions)C51編譯器生成的目標(biāo)文件存放于許多段中,這些段是代碼空間或數(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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 茶飲行業(yè)2025年展望:新型品牌擴(kuò)張策略與競爭格局研究報告
- 建筑施工安全基礎(chǔ)試題及答案
- 教育教學(xué)反思與切實改變方案試題及答案
- 電動車技術(shù)創(chuàng)新考試題及答案
- 學(xué)習(xí)樂理的個人化方案試題及答案
- 工業(yè)互聯(lián)網(wǎng)平臺與5G通信模組適配性工業(yè)互聯(lián)網(wǎng)平臺國際合作研究報告
- 施工安全技術(shù)交流與學(xué)習(xí)試題及答案
- 職場英語溝通中的適應(yīng)能力測試試題及答案
- 醫(yī)療與醫(yī)藥行業(yè):2025年醫(yī)療健康產(chǎn)業(yè)投資機(jī)會與風(fēng)險預(yù)警報告
- 2025年資源型城市綠色轉(zhuǎn)型中的綠色物流與供應(yīng)鏈優(yōu)化報告
- 2025年中考語文二輪復(fù)習(xí):散文閱讀 專題練習(xí)題(含答案)
- 高校宿管培訓(xùn)
- 2025屆新高考教學(xué)教研聯(lián)盟高三第二次聯(lián)考政治試題及答案
- 賭博酒駕警示教育
- 產(chǎn)業(yè)園物業(yè)管理實施方案
- 管理學(xué)基礎(chǔ)-形考任務(wù)三-國開-參考資料
- 梁曉聲母親測試題及答案
- 企業(yè)會計人員勞動合同模板2025
- 浙江省腫瘤醫(yī)院醫(yī)療廢物暫存間環(huán)保設(shè)施提升改造項目報告表
- 敬老院安全培訓(xùn)課件
- 《加拉帕戈斯群島》課件
評論
0/150
提交評論