C51编译器-高级编程技巧(2)-程序段命名约定

发布者:muhaoying2017最新更新时间:2016-11-14 来源: eefocus关键字:C51  编译器  编程技巧  程序段  命名约定 手机看文章 扫描二维码
随时随地手机看文章
Segment Naming Conventions程序段命名约定

Cx51编译器生成的目标(程序代码,程序数据和常量数据)都以程序段的形式存放,段是代码和数据的单元。一个段可能是可重定位的,也可能地址是绝对的。每一个可重定位的段都有一个类型和一个名字。

段名包括:module_name。module_name是声明这个段的源文件的名字(不包含驱动器名,路径和扩展名)。为了能适应现有的各种各样的软件和硬件工具,所有段名都一律大写。

每个段名都有一个前缀,这个前缀对应于段所用的存储器类型。这个前缀放在两个问号(?)之间。下面列出几种标准的段名前缀:

段前缀      存储器类型      描述

?PR?        program             可执行的程序代码

?CO?        code            程序存储器中的常量数据

?BI?            bit                 内部数据存储器中的位数据

?BA?        bdata           内部数据存储器中的位可寻址数据

?DT?        data                内部数据存储器Internal data memory

?FD?        far                 far memory (RAM space)

?FC?        const           far far memory (constant ROM space)

?ID?            idata           间接寻址的内部数据存储器Indirectly-addressable internal data memory

?PD?        pdata           分页的外部数据存储器Paged data in external data memory

?XD?        xdata           外部数据存储器xdata memory (RAM space)

?XC?        const xdata         外部数据存储器xdata memory (常量ROM空间constant ROM space)

Data Objects数据对象

数据对像是在C程序中声明的变量和常量。Cx51为每个声明变量的存储器类型生成一个独的段。以下是不同的数据对象的段名:

段名            描述Description

?BA?module_name     位可寻址的数据对象

?BI?module_name 位对象

?CO?module_name     常量(字符串和初始化的变量)

?DT?module_name     data存储区中的对象

?XC?module_name     const far存储区中的对象 (requires OMF251 directive)

?XD?module_name far存储区中的对象(requires OMF251 directive)

?ID?module_name     idata存储区中的对象

?PD?module_name pdata存储区中的对象

?XC?module_name     const xdata存储区中的对象

?XD?module_name     xdata存储区中的对象

Program Objectst程序对象

程序对象包括Cx 51编译器用C程序生成的代码。源程序中每个函数都被指定给了一个独立的代码段,这个代码段使用?PR?function_name?module_name命名规则命名。比如源程序SAMPLE.C中的函数error_check生成一个名字为?PR?ERROR_CHECK?SAMPLE的段。

在一个函数体中的声明的局部变量也生成一个段。这些段名以上面的规则命名,只是根据使用的不同存储器区域使用不同的前缀

函数参数的传递使用固定的存储器区域。这对于使用PL/M-51书写的程序一样适用。然而,Cx51可以在寄存器中传递多达3个参数。其他的参数据采用经典的固定的存储器区域。保留的存储器空间用来存放所有的参数,而不论参数是否通过寄存器传递。这些参数区域对于调用的模块来说必须是可以访问的。因此,他采用以下段名公开地定义:

?function_name?BYTE

?function_name?BIT

例如:如果func1是一个既可以接受位参数又可以接受其他数据类型的函数。位参数的传递起始为?FUNC1?BIT,而其他所有参数的传递起始?FUNC1?BYTE。

那些有参数,局部变量或位变量的函数包括了这些变量的所有附加段。这些段可以被BL51 Linker/Locatot。

他们都根据存储器类型生成如下

小存储器模式段命名规则

Information         Segment Type    Segment Name

Program code       code        ?PR?function_name?module_name

Local variables    data            ?DT?function_name?module_name

Local bit variables     bit             ?BI?function_name?module_name

Compact存储器模式段命名规则

Information         Segment Type    Segment Name

Program code        code    ?PR?function_name?module_name

Local variables         pdata   ?PD?function_name?module_name

Local bit variables     bit         ?BI?function_name?module_name

Large存储器模式段命名规则

Information         Segment Type    Segment Name

Program code        code    ?PR?function_name?module_name

Local variables         xdata   ?XD?function_name?module_name

Local bit variables     bit         ?BI?function_name?module_name

为了避免运行时的错误,寄存器传递参数的函数和可重入函数的命名稍微不同。下表列出了这些不同。

Declaration                                 Symbol          Description

void func (void) …                      FUNC             没有参数的函数和不使用寄存器传递参数的函数转换到目标文件时,名字不做任何改变,只是将函数名大写

void func1 (char) …                   _FUNC1          使用寄存器存器传递参数的函数,函数名字添加一个下划线“_”,用来指明函数使用CPU寄存器传递参数

void func2 (void) reentrant…   _?FUNC2          对于可重入函数的,可函数的名字前添加“_?”,用来指明是可重入函数。

关键字:C51  编译器  编程技巧  程序段  命名约定 引用地址:C51编译器-高级编程技巧(2)-程序段命名约定

上一篇:C51编译器-高级编程技巧(3)-C语言与汇编的接口
下一篇:C51编译器-高级编程技巧(1)-定制文件

推荐阅读最新更新时间:2024-03-16 15:20

非常简单的8×8LED点阵c51源代码
/* 实验目的:学会8*8点阵动态扫描方法. */ /* 实验现象:8*8点阵光柱先从0-9每隔一定的时间动态显示。 */ /*********************************************************************************************/ #include reg52.h #include intrins.h #define uchar unsigned char #define uint unsigned int uchar code row ={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//
[单片机]
C51---16 AD/DA 模拟数字转换
AD/DA介绍 硬件电路模型 运算放大器 运算放大电路 DA原理 AD原理 AD/DA性能指标 XPT2016芯片时序 AD采集可调电阻、热敏电阻、光敏电阻 main.c #include REGX52.H #include Delay.h #include LCD1602.h #include XPT2046.h unsigned int ADValue; void main(void) { LCD_Init(); LCD_ShowString(1,1, ADJ NTC GR ); while(1) { ADValue=XPT2046_ReadA
[单片机]
C51---16 AD/DA 模拟数字转换
Keil C51软件使用详解
第一节 Keil C51编译器的控制指令 C51编译器的控制指令分为三类:源文件控制类,目标文件控制类及列表控制类。 1. 源文件控制类 NOEXTEND:C51源文件不允许使用ANSI C扩展功能。 DEFINE(DF):定义预处理(在C51命令行)。 2. 目标文件(Object)控制类: COMPACT LARGE SMALL 选编译模式 DEBUG(DB) 包含调试信息,以供仿真器或dSCope51使用。 NOAMAKE(NOAM) 禁止AutoMake信息记录 NOREGPARMS 禁止用寄存器传递参数 OBJECTEXTEND(OE) Object文件包含附加变量类型信息 OPTIMIZE(OT) 指
[单片机]
PICC 编译器的安装与使用方法
使用过汇编语言和C语言的朋友肯定会感觉到C语言的人性化与方便性,汇编语言起源的年代比较早,因此,有很多程序高手仍使用汇编语言,毕竟自己也已经习惯了,但对于一些单片机新手入门的,我们还是推荐使用C语言来写程序,相对来说比较通俗,易学。在某些特定的场合,汇编语言仍然有不可代替的优势,毕竟指令执行时间很精确,但对于目前越来越长的程序代码,考虑到软件的升级性与维护性,我们还是强烈推荐用户使用C语言作为开发语言。下面,我们来介绍一下,PIICC C编译器 for MPLAB IDE 的安装与使用方法,从此开始了我们的PIC单片机C语言时代。 运行安装程序,将出现如图1所示安装界面。 点击“下一步”出现如图2所示: 单击“下一步”出现
[单片机]
PICC <font color='red'>编译器</font>的安装与使用方法
c51控制双色点阵左移显示与右移显示
;;c51控制双色点阵左移显示与右移显示.;; ;;;程序显示的为6;; ORG 0 AJMP MAIN MAIN: MOV 30H,#00H MOV 31H,#00H MOV 32H,#0FEH MOV 33H,#92H MOV 34H,#92H MOV 35H,#0F2H MOV 36H,#00H MOV 37H,#00H mov 2fh,#7fh MOV 29H,#00H loopm: acall led ACALL DELAY ;; ACALL DELAY ACALL REDL ajmp loopm led: mov r6,#08h loop1: MOV
[单片机]
51单片机的出租车计价器C51程序
已通过模拟测试 #include reg52.h unsigned char cir_num,pwm_mach,temp,distance,wait_time,price,distance; unsigned int a,t; sbit pwm_mach=P1^0; sbit key_clean=P3^0;//定义按键位置 sbit key_stop=P3^1; sbit key_cheak=P3^2; sbit key_oneway=P3^3; sbit key_doubleway=P3^4; unsigned char code led_buf ={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07
[单片机]
C51的基础 10《 联 合(union) 》
联 合(union) 1. 联合说明和联合变量定义 联合也是一种新的数据类型, 它是一种特殊形式的变量。 联合说明和联合变量定义与结构十分相似。其形式为: union 联合名{ 数据类型 成员名; 数据类型 成员名; ... } 联合变量名; 联合表示几个变量公用一个内存位置, 在不同的时间保存不同的数据类型和不同长度的变量。 下例表示说明一个联合a_bc: union a_bc{ int i; char mm; }; 再用已说明的联合可定义联合变量。例如用上面说明的联合定义一个名为lgc的联合变量, 可写成: union
[单片机]
C51单片机的IO口介绍(下)
上一篇文章我们对C51的IO简单的介绍了一下,现在我们来简单了解C51的IO的结构 这里我们学习一下比较常见的单片机的IO模式,分别是准双向,开漏输出和推挽输出 (这里要提一嘴,我们用的STC88C52RC是没有推挽输出功能的,STC公司后续推出的一些机型才有推挽输出功能) 接下来我们来看看这几种模式 1.准双向 看看下面的原理图,机内信号通过一个非门取反后送入一个MOS管,MOS管负责控制这个IO的高低电平,配合内部上拉电阻完成高低电平的输出 为了方便我们分析,我们把这个MOS管看成一只NPN三极管。区别是三极管靠电流导通,MOS管靠电压导通 结合前面我们讲过的知识,对于一只NPN三极管,基极b电压比集电极c电压
[单片机]
<font color='red'>C51</font>单片机的IO口介绍(下)
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved