当前位置:首页 > 单片机 > 单片机
[导读]Segment Naming Conventions程序段命名约定Cx51编译器生成的目标(程序代码,程序数据和常量数据)都以程序段的形式存放,段是代码和数据的单元。一个段可能是可重定位的,也可能地址是绝对的。每一个可重定位的段都

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 对于可重入函数的,可函数的名字前添加“_?”,用来指明是可重入函数。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

MIKROE增加了图形功能,CLANG支持ARM和RISC-V以及许多其他功能

关键字: 编译器 RISC-V架构 工业自动化

IAR Embedded Workbench for Arm已全面支持恩智浦最新的S32系列,可加速软件定义汽车的车身和舒适性应用的开发

关键字: 电机控制 电动汽车 编译器

这款新编译器专为dsPIC®数字信号控制器 (DSC)优化设计,可为实时应用定制许可选项

关键字: 编译器 数字信号控制器 自动驾驶

C语言编译器是一种用于将C语言源代码转换为可执行程序的软件工具。它的主要功能是将C语言代码翻译成机器语言,以便计算机能够理解和执行。C语言编译器通常包括预处理器、编译器、汇编器和链接器等多个组件,它们协同工作以完成编译过...

关键字: C语言 编译器 Microsoft Visual C++

IAR Embedded Workbench 9.40版本引入了与指针验证和分支目标识别(PACBTI)扩展的无缝兼容性,保护嵌入式应用程序免受各种安全攻击。

关键字: 代码 嵌入式应用程序 编译器

在过去数十年,摩尔定律一直支配着半导体的发展。随着MCU的性能越来越强,嵌入式产品也越来越智能,嵌入式软件也变得越来越复杂。编译器作为嵌入式软件开发的基础工具,将程序员编写的源代码转换为底层硬件可以执行的机器指令。一款优...

关键字: 摩尔定律 嵌入式 软件开发 编译器

Python的创始人是一位荷兰籍的程序员——吉多·范罗苏姆(Guido van Rossum),江湖外号“龟叔”。据说这个外号是由于Guido的开头与龟的拼音gui相同得来的,所以Guido也被程序员们戏称为“龟叔”。在...

关键字: Python 编译器 人工智能

单片机内部有很多的特殊功能寄存器,每个寄存器在单片机内部都分配有唯一的地址,一般我们会根据寄存器功能的不同给寄存器赋予各自的名称,当我们需要在程序中操作这些特殊功能寄存器时,必须要在程序的最前面将这些名称加以声明,声明的...

关键字: C51 数据类型 扩充定义

数据元(Data Element),也称为数据元素,是用一组属性描述其定义、标识、表示和允许值的数据单元,在一定语境下,通常用于构建一个语义正确、独立且无歧义的特定概念语义的信息单元。数据元可以理解为数据的基本单元,将若...

关键字: C51 数据类型

从汇编角度来说,如果“test %al, %al”能改成“test %0x1, %al”就没有匪夷所思的问题了,如此一来应该会降低CPU的效率,毕竟执行指令还需要一个立即数,我没搞过编译器也没设计过CPU,纯属瞎猜,能搞...

关键字: 汇编 CPU 编译器
关闭
关闭