当前位置:首页 > 单片机 > 单片机
[导读]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 对于可重入函数的,可函数的名字前添加“_?”,用来指明是可重入函数。

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

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭