亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 絕對地址訪問------c與匯編的接口----- c51軟件包中的通用文件----- 段名轉換與程序優化.txt

?? 個人收藏的14篇有關KEIL C51語言編程的使用要點。 目錄: C51變量或數據類型 C51 怎樣將1個子程序段定位在1個固定的地址位置 C51存儲模式 C語言下的單片機軟件抗
?? TXT
字號:
本章討論以下內容: 
l 絕對地址訪問

l C與匯編的接口

l C51軟件包中的通用文件

l 段名轉換與程序優化

第一節 絕對地址訪問
C51提供了三種訪問絕對地址的方法:

1. 絕對宏:
在程序中,用“#include<absacc.h>”即可使用其中定義的宏來訪問絕對地址,包括:

CBYTE、XBYTE、PWORD、DBYTE、CWORD、XWORD、PBYTE、DWORD

具體使用可看一看absacc.h便知

例如:

rval=CBYTE[0x0002];指向程序存貯器的0002h地址

rval=XWORD [0x0002];指向外RAM的0004h地址

2. _at_關鍵字
直接在數據定義后加上_at_ const即可,但是注意:

(1)絕對變量不能被初使化;

(2)bit型函數及變量不能用_at_指定。

例如:

idata struct link list _at_ 0x40;指定list結構從40h開始。

xdata char text[25b] _at_0xE000;指定text數組從0E000H開始

提示:如果外部絕對變量是I/O端口等可自行變化數據,需要使用volatile關鍵字進行描述,請參考absacc.h。

3. 連接定位控制
此法是利用連接控制指令code xdata pdata \data bdata對“段”地址進行,如要指定某具體變量地址,則很有局限性,不作詳細討論。

第二節 Keil C51與匯編的接口
1. 模塊內接口
方法是用#pragma語句具體結構是:

#pragma asm

匯編行

#pragma endasm

這種方法實質是通過asm與ndasm告訴C51編譯器中間行不用編譯為匯編行,因而在編譯控制指令中有SRC以控制將這些不用編譯的行存入其中。

2. 模塊間接口
C模塊與匯編模塊的接口較簡單,分別用C51與A51對源文件進行編譯,然后用L51將obj文件連接即可,關鍵問題在于C函數與匯編函數之間的參數傳遞問題,C51中有兩種參數傳遞方法。

(1) 通過寄存器傳遞函數參數

最多只能有3個參數通過寄存器傳遞,規律如下表:


參數數目
char
int
long,float
一般指針

1

2

3
R7

R5

R3
R6 & R7

R4 & R5

R2 & R3
R4~R7

R4~R7
R1~R3

R1~R3

R1~R3



(2) 通過固定存儲區傳遞(fixed memory)

這種方法將bit型參數傳給一個存儲段中:

?function_name?BIT

將其它類型參數均傳給下面的段:?function_name?BYTE,且按照預選順序存放。

至于這個固定存儲區本身在何處,則由存儲模式默認。

(3) 函數的返回值

函數返回值一律放于寄存器中,有如下規律:


return type
Registev
說明

bit
標志位
由具體標志位返回

char/unsigned char 1_byte指針
R7
單字節由R7返回

int/unsigned int 2_byte指針
R6 & R7
雙字節由R6和R7返回,MSB在R6

long&unsigned long 
R4~R7
MSB在R4, LSB在R7

float
R4~R7
32Bit IEEE格式

一般指針
R1~R3
存儲類型在R3 高位R2 低R1


(4) SRC控制

該控制指令將C文件編譯生成匯編文件(.SRC),該匯編文件可改名后,生成匯編.ASM文件,再用A51進行編譯。

第三節 Keil C51軟件包中的通用文件
在C51\LiB目錄下有幾個C源文件,這幾個C源文件有非常重要的作用,對它們稍事修改,就可以用在自己的專用系統中。

1. 動態內存分配
init_mem.C:此文件是初始化動態內存區的程序源代碼。它可以指定動態內存的位置及大小,只有使用了init_mem( )才可以調回其它函數,諸如malloc calloc,realloc等。

calloc.c:此文件是給數組分配內存的源代碼,它可以指定單位數據類型及該單元數目。

malloc.c:此文件是malloc的源代碼,分配一段固定大小的內存。

realloc.c:此文件是realloc.c源代碼,其功能是調整當前分配動態內存的大小。

2. C51啟動文件STARTUP.A51
啟動文件STARTUP.A51中包含目標板啟動代碼,可在每個project中加入這個文件,只要復位,則該文件立即執行,其功能包括:

l 定義內部RAM大小、外部RAM大小、可重入堆棧位置

l 清除內部、外部或者以此頁為單元的外部存儲器

l 按存儲模式初使化重入堆棧及堆棧指針

l 初始化8051硬件堆棧指針

l 向main( )函數交權

開發人員可修改以下數據從而對系統初始化

常數名 意義

IDATALEN 待清內部RAM長度

XDATA START 指定待清外部RAM起始地址

XDATALEN 待清外部RAM長度

IBPSTACK 是否小模式重入堆棧指針需初始化標志,1為需要。缺省為0

IBPSTACKTOP 指定小模式重入堆棧頂部地址

XBPSTACK 是否大模式重入堆棧指針需初始化標志,缺省為0

XBPSTACKTOP 指定大模式重入堆棧頂部地址

PBPSTACK 是否Compact重入堆棧指針,需初始化標志,缺省為0

PBPSTACKTOP 指定Compact模式重入堆棧頂部地址

PPAGEENABLE P2初始化允許開關

PPAGE 指定P2值

PDATASTART 待清外部RAM頁首址

PDATALEN 待清外部RAM頁長度

提示:如果要初始化P2作為緊湊模式高端地址,必須:PPAGEENAGLE=1,PPAGE為P2值,例如指定某頁1000H-10FFH,則PPAGE=10H,而且連接時必須如下:

L51<input modules> PDATA(1080H),其中1080H是1000H-10FFH中的任一個值。

以下是STARTUP.A51代碼片斷,紅色是經常可能需要修改的地方:

;------------------------------------------------------------------------------

; This file is part 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 invocation:

;

; 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 0

IDATALEN EQU 80H ; the length of IDATA memory in bytes.

;

XDATASTART EQU 0H ; the absolute start-address of XDATA memory

XDATALEN EQU 0H ; the length of XDATA memory in bytes.

;

PDATASTART EQU 0H ; the absolute start-address of PDATA memory

PDATALEN EQU 0H ; the length of PDATA memory in bytes.

;

; Notes: The IDATA space overlaps physically 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 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 to 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 statements 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.c

putchar.c是一個低級字符輸出子程,開發人員可修改后應用到自己的硬件系統上,例如向CLD或LEN輸出字符。

缺省:putchar.c是向串口輸出一個字符XON|XOFF是流控標志,換行符“\*n”自動轉化為回車/換行“\r\n”。

getkey.c

getkey函數是一個低級字符輸入子程,該程序可用到自己硬件系統,如矩陣鍵盤輸入中,缺省時通過串口輸入字符。 4. 其它文件
還包括對Watch-Dog有獨特功能的INIT.A51函數以及對8×C751適用的函數,可參考源代碼。

第四節 段名協定與程序優化
1. 段名協定(Segment Naming Conventions)
C51編譯器生成的目標文件存放于許多段中,這些段是代碼空間或數據空間的一些單元,一個段可以是可重定位的,也可以是絕對段,每一個可重定位的段都有一個類型和名字,C51段名有以下規定:

每個段名包括前綴與模塊名兩部分,前綴表示存儲類型,模塊名則是被編譯的模塊的名字,例如:

?CO?main1 :表示main1模塊中的代碼段中的常數部分

?PR?function1?module 表module模塊中函數function1的可執行段,具體規定參閱手冊。

2. 程序優化
C51編譯器是一個具有優化功能的編譯器,它共提供六級優化功能。確保生成目標代碼的最高效率(代碼最少,運行速度最快)。具體六級優化的內容可參考幫助。

在C51中提供以下編譯控制指令控制代碼優化:

OPTIMIZE(SJXE):盡量采用子程序,使程序代碼減少。

NOAREGS:不使用絕對寄存器訪問,程序代碼與寄存器段獨立。

NOREGPARMS:參數傳遞總是在局部數據段實現,程序代碼與低版本C51兼容。

OPTIMIZE(SIZE)AK OPTIMIZE(speed)提供6級優化功能,缺省為: OPTIMIZE(6,SPEED)。


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
av亚洲精华国产精华精华| 国产91丝袜在线播放九色| 亚洲四区在线观看| 国产精品久久久久久久久免费樱桃 | 伊人色综合久久天天人手人婷| 久久一夜天堂av一区二区三区| 欧美草草影院在线视频| 日韩欧美高清在线| 久久精品一区二区三区四区| 337p粉嫩大胆色噜噜噜噜亚洲| 久久久五月婷婷| 国产精品久久三区| 亚洲成年人影院| 青青草国产成人99久久| 国产一区二区调教| 高清国产午夜精品久久久久久| 不卡高清视频专区| 欧美在线小视频| 日韩亚洲欧美高清| 国产精品毛片高清在线完整版| ●精品国产综合乱码久久久久| 亚洲国产综合视频在线观看| 免费观看在线综合色| 成人一区二区三区在线观看| 色又黄又爽网站www久久| 欧美疯狂做受xxxx富婆| 亚洲综合一区二区三区| 日本在线不卡视频| 粉嫩高潮美女一区二区三区| 色狠狠一区二区| 欧美精品一区二区久久久| 国产精品久久久久久久午夜片| 午夜精品一区二区三区三上悠亚| 久久成人久久鬼色| 色琪琪一区二区三区亚洲区| 日韩精品专区在线| 日韩美女视频19| 韩国v欧美v亚洲v日本v| 欧美在线观看一二区| 久久久久久久久久久久久久久99| 亚洲一区在线视频| 粉嫩久久99精品久久久久久夜| 欧美另类变人与禽xxxxx| 中文字幕久久午夜不卡| 精品中文字幕一区二区小辣椒| 91同城在线观看| 久久久久久久综合狠狠综合| 亚洲国产精品久久人人爱| 国产成人av一区二区三区在线 | 欧美日本在线一区| 国产亚洲污的网站| 精品一区二区三区免费观看| 欧美视频一区二| 中文字幕日韩av资源站| 狠狠v欧美v日韩v亚洲ⅴ| 欧美日韩你懂的| 一区二区三区欧美久久| 成人av在线资源网站| 久久午夜国产精品| 久久97超碰色| 亚洲精品一区在线观看| 久久精品国产精品亚洲综合| 欧美区在线观看| 天天综合日日夜夜精品| 欧美三级一区二区| 亚洲成人免费在线| 欧美日韩成人激情| 青青草国产成人99久久| 中文字幕在线不卡| 成人综合激情网| 国产精品网站导航| 99精品久久99久久久久| 综合在线观看色| 色综合久久88色综合天天6| 亚洲欧美综合另类在线卡通| eeuss鲁片一区二区三区在线看| 国产精品久久午夜| 91麻豆精品视频| 亚洲一区免费观看| 欧美一区二区视频观看视频| 奇米亚洲午夜久久精品| 日韩欧美国产wwwww| 国产乱对白刺激视频不卡| 欧美国产日韩亚洲一区| 99久久精品国产精品久久| 亚洲女人****多毛耸耸8| 欧美怡红院视频| 美女网站在线免费欧美精品| 久久精品在这里| 色综合久久六月婷婷中文字幕| 亚洲综合男人的天堂| 91麻豆精品国产91久久久使用方法 | 国内偷窥港台综合视频在线播放| 日韩精品专区在线| 粉嫩欧美一区二区三区高清影视 | 久久99国产精品久久99果冻传媒| 久久久久久免费网| 91免费国产在线| 天天色图综合网| 久久久久久久久久久99999| 色综合久久中文综合久久牛| 日本伊人色综合网| 日本一区二区三区电影| 91免费国产在线观看| 蜜臀av性久久久久蜜臀aⅴ| 欧美国产综合色视频| 欧美日韩www| 成人毛片老司机大片| 午夜精品在线视频一区| 欧美国产精品v| 欧美一二三区在线| 99精品视频中文字幕| 免费一级片91| 一区二区视频在线| 亚洲国产成人高清精品| 久久久五月婷婷| 欧美情侣在线播放| caoporn国产精品| 九九**精品视频免费播放| 洋洋av久久久久久久一区| 久久久久青草大香线综合精品| 欧美日韩色综合| 日本乱人伦一区| 国产福利一区在线观看| 日本va欧美va欧美va精品| 亚洲色欲色欲www在线观看| 2020国产精品自拍| 欧美男男青年gay1069videost| 99天天综合性| 国产精品99久久久久久似苏梦涵| 日韩精品久久久久久| 亚洲一区二区在线免费看| 国产精品短视频| 久久九九久久九九| 久久久美女毛片| 日韩一区二区三区av| 欧美剧在线免费观看网站| 色94色欧美sute亚洲线路一ni| 国产成人亚洲综合a∨猫咪| 激情久久五月天| 精品一区在线看| 久久99久久精品欧美| 久久精品国内一区二区三区| 日韩国产在线观看一区| 亚洲一区二区免费视频| 一区二区三区高清| 亚洲国产裸拍裸体视频在线观看乱了| 亚洲欧美国产77777| 日韩一区在线看| 亚洲男人的天堂在线aⅴ视频| 国产精品久线观看视频| 蜜桃久久av一区| 久久99精品国产麻豆婷婷| 国产一区二区美女| 床上的激情91.| av成人免费在线| 欧美性生活一区| 91精品在线一区二区| 日韩免费视频一区| 久久久久久电影| 国产精品成人免费在线| 一区二区三区在线视频观看58| 一区二区三区在线视频观看| 亚洲国产综合视频在线观看| 亚洲国产sm捆绑调教视频| 首页综合国产亚洲丝袜| 麻豆精品久久久| 国产成人自拍网| 99视频精品免费视频| 欧美日韩国产一级片| 日韩欧美国产一区在线观看| 久久久久久毛片| 一区二区三区蜜桃网| 久久精品国产99| 成人动漫中文字幕| 欧美年轻男男videosbes| 日韩欧美亚洲一区二区| 久久免费午夜影院| 亚洲一区免费视频| 国产精品一区二区三区四区| 91免费视频网址| 精品国产99国产精品| 亚洲视频一区二区在线观看| 丝袜国产日韩另类美女| 国产iv一区二区三区| 欧美美女一区二区| 国产欧美日韩在线| 日本不卡一区二区三区高清视频| 国产.欧美.日韩| 日韩一二三四区| 夜夜嗨av一区二区三区网页| 激情综合色播激情啊| 91福利区一区二区三区| 国产日韩欧美高清| 免费观看久久久4p| 欧美亚洲另类激情小说| 国产精品久久二区二区| 久久成人免费日本黄色| 在线观看免费一区| 成人欧美一区二区三区白人 |