KEIL中C51英文的翻译 - 图文

2026/1/27 17:37:52

第六章 高级编程技术

本章介绍的信息,有经验的高级编程软件工程师会发现非常宝贵的。这些课题大多知识对于成功地使用Cx51编译器创建一个嵌入式的8051目标程序是没有必要的。但是,以下的章节提供了非标准程序可以完成的洞察力(例如,连接到PL/M-51)。

本章将讨论以下议题:

? 你可以改变自定义启动程序的文件

? 你可以改变自定义运行时库例程执行的文件 ? Cx51编译器使用的名称代码和数据段的公约 ? 如何实现Cx51功能组装和PL/M-51例程 ? 对于不同的Cx51数据类型的数据存储格式 ? Cx51优化编译器的不同优化功能

自定义文件

该Cx51编译器提供一系列的源文件,你可以对一个特定的硬件平台修改以适应你的目标计划。这些文件包括:

? 在启动时(STARTUP.A51)执行的代码 ? 用来初始化静态变量(INIT.A51)的代码 ? 用来执行低电平流I/O的代码 ? 内存分配代码

在这些文件中包含的代码已经编译或组装和在C库中。当你连接你的程序,来自库的代码自动包含在内。

你可以定制这些文件以适应你的要求。如果您在μVision2IDE中工作,我们建议你复制您的项目文件夹中的自定义文件进行修改。该文件修改后的版本,也可以添加相同类型的其他源文件到你的项目中。

当你使用命令行工具时,你必须在连接器命令行中包含修改自定义文件的目标文件。下面的示例将演示如何包含STARTUP.A51和PUTCHAR.C自定义替换文件: Lx51 MYMODUL1.OBJ, MYMODUL2.OBJ, STARTUP.OBJ, PUTCHAR.OBJ XBANKING.A51文件允许你改变目前扩展内存访问rountines配置。

STARTUP.A51

在STARTUP.A51文件包含了Cx51目标程序的启动代码。该源文件位于lib目录下。在每一个8051项目中包含一个该文件的副本需要自定义启动代码。

启动代码后立即执行目标系统的复位和选择,以便执行下列操作: ? 清除内部数据存储器 ? 清除外部数据存储器 ? 清除分页外部数据存储器 ? 初始化小模型再入堆栈和指针 ? 初始化大模型再入堆栈和指针 ? 初始化紧凑型再入堆栈和指针 ? 初始化8051硬件堆栈指针 ? 将控制转移到主要的C函数

在STARTUP.A51文件提供了集合常数,你可以改变它来控制在启动时所采取的行动。这些定义如下表。 常数名称 IDATALEN XDATASTART XDATALEN 描述 指示idata的字节数初始化为0。默认是80是因为大多数8051衍生产品包含至少128字节的内部数据存储器。用于8052和其他衍生产品价值的100h具有256字节的内部数据存储器。 指定了xdata地址开始初始化为0。 指示xdata字节数初始化为0。默认为0。 指定pdata地址开始初始化为0。 指示pdata字节数初始化为0。默认为0。 指示是否初始化小模式再入堆栈指针(?C_IBP)。为1就将此指针值进行初始化,为0就阻止这个指针的初始化。默认为0。 IBPSTACKTOP 指定小模型再入.堆栈区的起始地址。默认是0xFF在idata存储器中。Cx51编译器不检查是否可用堆栈区满足了应用的要求,执行这样的测试是你的责任。 XBPSTACK 指示是否初始化大模式再入堆栈指针(?C_XBP)。为1就将此指针值进行初始化,为0就阻止这个指针的初始化。默认为0。 XBPSTACKTOP 指定大模式再入堆栈区的起始地址。默认是0xFFFF在xdata存储器。Cx51编译器不检查是否可用堆栈区满足了应用的要求,执行这样的测试是你的责任。 PBPSTACK 指示是否初始化大模式再入堆栈指针(?C_PBP)。为1就将此指针值进行初始化,为0就阻止这个指针的初始化。默认为0。 PBPSTACKTOP 指定紧凑型再入堆栈区的起始地址。默认是0xFF在pdata存储器。 Cx51编译器不检查是否可用堆栈区满足了应用的要求,执行这样的测试是你的责任。 PPAGEENABLE 启用(1值)或禁用(0值)8051芯片端口2的初始化。默认为0。端口2的寻址允许256个字节的变量内存在任意xdata页中的映射。 PPAGE 指定在pdata内存访问中写入8051的端口的值。这个值代表了XDATA内存页面使用的pdata。这是用于pdata的绝对地址范围的高八位。 例如,如果pdata去开始于在xdata存储器中的地址1000h(页10h),PPAGEENABLE 应将置1,PPAGE应设置为10h。在BL51连接器/定位器中必须在PDATA区指令中包含一个在1000h和10FFh之间的值。例如: BL51 PDATA (1050H) 无论是BL51还是Cx51都不会检查PDATA指令和PPAGE集合常数是否正确指定。你必须确保这些参数包含适当的值。 在8051的家族中有许多种芯片需要特殊的启动代码。以下列表提供了各种启动版本的概览: 启动文件 STARTUP.A51 START_AD.A51 STARTLPC.A51 START390.A51 START_MX.A51 START751.A51

描述 典型8051芯片的标准启动代码。 模拟装置微型转换器B2系列变种的启动代码。 飞利浦LPC变种的启动代码。 达拉斯80C390,80C400,5240 contigious模式。 飞利浦80C51MX架构的启动代码。 飞利浦80C75x变种的启动代码。 PDATASTART PDATALEN IBPSTACK INIT.A51

INIT.A51文件包含了明确初始化变量的初始化例程。如果你的系统中安装了看门狗定时器,你可以使用看门狗宏把看门狗集成到初始化代码中。这个宏只有在初始化时间超过看门狗周期较长时需要定义。例如,如果您使用的是英飞凌C515,宏可以定义如下:

WATCHDOG MACRO

SETB WDT SETB SWDT ENDM

INIT_TNY.A51文件是INIT.A51的简化版本,用于项目时可能不包含XDATA存储器。当你写代码入如飞利浦LPC系列这种在数据空间包含变量初始化的单芯片时,你应该使用该文件。

XBANKING.A51

此文件提供远(HDATA)和常远(HCONST)内存类型支持例程。扩展LX51连接器/定位器管理扩展地址空间HDATA和HCONST中针对远和常量远的处理。该Cx51编译器使用一个3字节通用指针来访问这些内存区域。与远东内存类型定义的变量都放在内存类HDATA中。变量定义的常量远获取内存类HCONST。要对传统的8051芯片使用C51编译器的远内存你必须使用如第84页所述的“VARBANKING”指令。

内存类型远和常量远提供新型8051芯片的大量代码/xdata空间。如果您正在使用的CPU提供一个扩展的24位DPTR寄存器,你可以匹配文件XBANKING.A51的默认版本,并确定在以下表中列出的符号。 常量名 描述 ?C?XPAGE1SFR DPTR页面寄存器的SFR地址包含了DPTR位16-23。 ?C?XPAGE1RST 重置?C?XPAGE1SFR的值在X:0区域的地址。当你使用的是VARBANKING(1)指令时该设置由C51编译器来使用。VARBANKING(1)C51编译器在中断函数的开始保存?C?XPAGE1 SFR并设置这个寄存器为?C?XPAGE1RST的值。 远内存类型允许你访问注入EEPROM空间或者字符串代码ROM的特殊内存区域。您的应用程序访问这些内存区域,好像他们是标准8051内存空间的一部分。文件夹C51\\实例\\ FARMEMORY中的示例程序展示如何在经典8051芯片中使用C51远内存类型。如果一个例子没有满足你的要求,你可以调整访问程序如以下列表。 访问例程 描述 ?C?CLDXPTR, ?C?CSTXPTR 在扩展内存中加载/存储一个字节(char)。 ?C?ILDXPTR, ?C?ISTXPTR 在扩展内存中加载/存储一个字(int)。 ?C?PLDXPTR, ?C?PSTXPTR 在扩展内存在加载/存储一个三位指针。 ?C?LLDXPTR, ?C?LSTXPTR 在扩展内存中加载/存储一个双字(long)。 每个访问例程在CPU寄存器R1/R2/R3的一个3位指针参数中作为一个内存地址参数得到。寄存器R3保存内存类型的值。对于经典8051芯片,Cx51编译器使用以下内存类型的值: R3值 0x00 存储类型 data/idata 存储类 DATA/IDATA 地址范围 I:0x00-I:0xFF


KEIL中C51英文的翻译 - 图文.doc 将本文的Word文档下载到电脑
搜索更多关于: KEIL中C51英文的翻译 - 图文 的文档
相关推荐
相关阅读
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 10

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219