好文档 - 专业文书写作范文服务资料分享网站

keilc 详细中文手册

天下 分享 时间: 加入收藏 我要投稿 点赞

第四章 Keil C51高级编程

本章讨论以下内容:

●绝对地址访问

●C与汇编的接口

●C51软件包中的通用文件

●段名转换与程序优化

第一节 绝对地址访问

C51提供了三种访问绝对地址的方法:

1. 绝对宏:

在程序中,用“#include”即可使用其中定义的宏来访问绝对地址,包括:

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 R7 R6 & R7 R4~R7 R1~R3 2 R5 R4 & R5 R4~R7 R1~R3 3 R3 R2 & R3 R1~R3 (2) 通过固定存储区传递(fixed memory)

这种方法将bit型参数传给一个存储段中:

?function_name?BIT

将其它类型参数均传给下面的段:?function_name?BYTE,且按照预选顺序存放。

至于这个固定存储区本身在何处,则由存储模式默认。

(3) 函数的返回值

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

Return type Registev 说明 Bit 标志位 由具体标志位返回 char/unsigned char R7 单字节由R7返回 1_byte指针 int/unsigned int R6 & R7 双字节由R6和R7返回,MSB在R6 2_byte指针 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进行编译。

keilc 详细中文手册

第四章KeilC51高级编程本章讨论以下内容:●绝对地址访问●C与汇编的接口●C51软件包中的通用文件●段名转换与程序优化第一节绝对地址访问C51提供了三种访问绝对地址的方法:1.绝对宏
推荐度:
点击下载文档文档为doc格式
7dm2016so20088t3x4ji0cqsi0v0qh00p4i
领取福利

微信扫码领取福利

微信扫码分享