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

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

在C语言编程中,结构体内存对齐是一个容易被忽视却影响深远的关键问题。它不仅关乎程序性能,更直接影响到内存占用效率,尤其在嵌入式系统等资源受限环境中显得尤为重要。本文将深入探讨结构体内存对齐的原理,并分享手动调整与编译器优...

关键字: C语言 内存对齐 编译器

编译器不仅是连接硬件与软件的桥梁,还直接影响MCU的性能优化与功能安全。面对汽车行业对高可靠性、低功耗和高算力的需求,编译器需在确保ASIL-D等严格标准的同时,最大化发挥RISC-V芯片的潜力。

关键字: 车规MCU RISC-V 编译器 HighTec

国内电子信息产业内的厂商正在全球嵌入式系统的发展浪潮中扮演着越来越重要的角色,但随之而来的是国内嵌入式系统和相关芯片企业在出海时也面临越来越多的合规要求,尤其是在保障用户、设备和周边人与物安全的功能安全领域内的合规要求。...

关键字: 嵌入式系统 智能网联 编译器

【2025年4月11日, 德国慕尼黑讯】全球功率系统和物联网领域的半导体领导者英飞凌科技股份公司(FSE代码:IFX / OTCQX代码:IFNNY)推出用于AURIX™、TRAVEO™和PSOC™的可扩展软件包产品组合...

关键字: PSOC 物联网 编译器

瑞典乌普萨拉,2025年3月11日 — 全球领先的嵌入式系统开发软件解决方案供应商IAR在德国纽伦堡举办的embedded world 2025展会上重磅发布全新云端平台。该平台为嵌入式软件开发人员提供前所未有的自由度与...

关键字: 编译器 嵌入式 RISC-V

该统一解决方案为Microchip编译器产品线提供灵活且经济高效的许可选项

关键字: 编译器 嵌入式

当安全标准相互契合:意法半导体 (ST) Stellar MCU取得了风险管理安全标准等级最高的ISO 26262 ASIL D 级认证,现在更有达到同等安全级别的 HighTec Rust 编译器的加持

关键字: 微控制器 编译器

在STM32的开发过程中,开发者可能会遇到各种编译错误,其中“Program file does not exist”是一个较为常见且可能由多种原因引起的错误。这个错误通常意味着编译器在预期的路径下没有找到可执行文件(如...

关键字: STM32 编译器

基于ARM内核的芯片在我们的世界中无处不在,从简单的MCU到高端的应用处理器,各行各业中都有它们的身影。 如今ARM生态系统非常繁荣,在这繁荣的背后编译器的作用功不可没。

关键字: ARM 编译器

台湾新竹-2024 年 11 月 5 日-新唐科技正式推出免费版 Arm® Keil® MDK Nuvoton Edition,成为全球首家提供 Keil MDK 完整版的公司。此专业工具适用于开发基于Arm Corte...

关键字: 编译器 微控制器 嵌入式
关闭