当前位置:首页 > 单片机 > 单片机
[导读]在8051体系中,数据指针DPTR作为一个特殊的16位寄存器,用于寻址64 KB的XDATA或CODE空间,通常它被当作一个16位指针,指向一个常数表。双数据指针可以改善同时有两个16位指针使用时的性能。作为一种增强特性,有许多

在8051体系中,数据指针DPTR作为一个特殊的16位寄存器,用于寻址64 KB的XDATA或CODE空间,通常它被当作一个16位指针,指向一个常数表。双数据指针可以改善同时有两个16位指针使用时的性能。作为一种增强特性,有许多8051派生型器件支持双数据指针。以宏晶科技STC89系列的产品为例,DPTR被增强为DPTR0和DPTR1两个,仍然使用原来的地址,用另外一个SFR AUXR1的0位DPS来切换。当DPS位为0时,所有对DPTR的操作使用DPTR0;当DPS位为1时,所有对DPTR的操作使用DPTR1。这样,通过一个简单的INC AUXR1指令,就可以来回切换两个数据指针。

1 Keil C51对双数据指针的支持情况

作为一个常用的C51编译器,Keil C51是支持双数据指针的,但并不是直接支持。如果要在C51程序中使用双数据指针,有一些特别的要求。
首先来看Keil C51是如何支持双数据指针的。

在Keil C51的编译器手册中指出:#pragma modp2可以打开Philips或Atmel WM系列器件中有双DPTR的型号,并且可以提升以下库函数的性能,包括:memcpy,memmove,memcmp,strcpy,strcmp。

Keil公司也提供了一个对照表,对比性能的提升。对比的型号是8051和Dallas 320,函数是memcpy块拷贝。对照表如下:



看起来似乎使用库函数就可以大幅度提高程序性能,但实际上这样做并不能保证一定可以提高程序性能。首先Dallas 320是4T的CPU,本身就比12T的8051快。其次,以memcpy为例,它的原型是void*memcpy(void*s1,const void*s2,int len),其传人参数有3个,合计8字节,要使用数据段来传送。在数据量少的情况下,参数传递的开销就有可能大过数据传递的开销。如果想要在数据块拷贝或移动的同时对数据加以处理,比如在一个目的数据块后面加上一个校验和,那么使用库函数是办不到的,只有通过循环来进行。当数据块的源和目都是16位地址时,每一次循环都会有两次对数据指针的赋值,在源地址和目地址之间来回切换,这时采用双数据指针会有效地提高程序性能。

如果要在程序中直接生成使用双数据指针的代码,目前没有直接的编译指令。Keil公司在它的网站上曾说过多数据指针支持库函数,并且目前也未打算在编泽器中直接支持多数据指针。

2 Keil C中直接生成双数据指针的代码

实际上,Keil C51编译器还是可以直接生成使用双数据指针的代码的,只要没定好适当的优化级别,安排好适当的C51语句,编译器就会生成使用双数据指针的代码。下面给出一个例子,使用双数据指针将CODE区的一个16字节的数组拷贝到XDATA区。 编译后其中for循环的汇编代码主体如下:






可以看到,汇编代码基本上是最简化的使用双数据指针的汇编程序。

由上面的代码可知,在优化级别7(Extended Index Ac-cess Optimizing)的作用下,DPTR被调用了。通过类型转换和SFR指令的配合,双数据指针指令被生成。这足一个经验方法,基本上这是一个框架,可以在看到双DPTR调用被生成后加入其他语句,在块操作的同时处理数据。

3 调试环境的设定

在Keil uVision2环境下,软件仿真Philips或AtmelWM系列器件中有双DPTR的型号时,仿真器中会有AUXR1、DPTR0、DPTR1这3个寄存器。如果不使能双DPTR特性,仿真时DPTR的值是混乱的。对于宏晶科技STC89系列器件的双DPTR特性,打开软件仿真设定的具体步骤是:在File/Device Database菜单中选择STC的某一具体型号,在Options框中"CPU="一项后加上MODP2,然后单击Update更新器件库。打开双数据指针调试后,再启动Debug,就会有AUXR1、DPTR[0]、DPTR[1]这3个寄存器。当加载上述程序时,会清楚地看到双数据指针的操作和AUXR1的变化。

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

电磁干扰(EMI)超标:医疗设备的电磁干扰可能对其他设备或系统造成干扰,导致性能下降或误操作。这通常是由于设备设计或制造过程中的不当措施引起的。

关键字: EMC 电磁

自动驾驶技术向L4/L5级跃迁,激光雷达作为核心感知器件,正面临前所未有的技术挑战。当行业将目光聚焦于激光雷达的探测距离与点云密度时,舱内集成方案中热设计与电磁兼容(EMC)的协同优化,已成为决定系统可靠性的关键瓶颈。本...

关键字: 激光雷达 EMC

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

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

在汽车电气化浪潮中,48V启动停止系统凭借其节能增效优势迅速普及。然而,该系统在复杂电磁环境下的电磁兼容性(EMC)问题,已成为制约产品量产的关键瓶颈。本文结合某车型48V电源模块的整改案例,系统阐述EMC问题诊断与优化...

关键字: 汽车电子 EMC 电磁兼容性

高速数字电路向56Gbps PAM4、112Gbps NRZ等超高速率演进,电磁兼容性(EMC)问题已从辅助设计环节跃升为决定产品成败的核心要素。传统“设计-测试-整改”的串行模式因周期长、成本高,难以满足AI服务器、8...

关键字: 高速数字电路 EMC

新能源汽车产业向高功率、智能化加速演进中,电磁兼容性(EMC)标准已成为保障充电系统安全与互联互通的核心基石。从早期以GB/T 18487为代表的通用标准体系,到如今以ChaoJi技术为载体的下一代标准,中国主导的充电系...

关键字: 新能源汽车 EMC

电源入口是电磁干扰(EMI)传导与辐射的关键路径,无论是消费电子、工业控制还是新能源汽车领域,电源线上的高频噪声若未得到有效抑制,不仅会通过传导干扰影响其他设备,还可能通过空间辐射形成电磁污染。π型滤波器与磁珠作为电源入...

关键字: 电源入口 EMC

在现代电子设备中,开关电源系统以其高效、紧凑等诸多优势,成为各类设备不可或缺的供电部分。然而,开关电源工作过程中产生的电磁干扰(EMI)问题,严重影响了产品的电磁兼容性(EMC)。本文将围绕开关电源系统产品 EMC 展开...

关键字: 开关电源 电磁干扰 EMC

在直流电机驱动系统中,电磁兼容性(EMC)设计是保障设备稳定运行的核心环节。电机启停、换向及负载突变产生的瞬态过电压和浪涌电流,可能通过电源线或信号线传导至控制电路,引发器件损坏或误动作。TVS二极管与压敏电阻作为两种主...

关键字: 直流电机驱动 EMC

在医疗设备高度依赖电子系统的当下,电磁兼容性(EMC)风险评估已成为保障患者生命安全的核心环节。生命维持系统(如呼吸机、体外循环机、心脏起搏器)的电磁抗扰度直接决定其在复杂电磁环境中的可靠性,而失效模式与影响分析(FME...

关键字: 医疗设备 EMC
关闭