Keil C51是如何支持双数据指针,有哪些特别的要求

在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的变化。


梁斌针对5G千兆网产业的发展提出三点建议
新版UL 1973认证标准:关于钠离子电芯详解
MAX9867 超低功耗立体声音频编解码器
福禄克发布全新Fluke 562和Fluke 563手持式红外测温仪
用于工业AI的Jetson AGX Xavier模块
Keil C51是如何支持双数据指针,有哪些特别的要求
理想汽车2020财报解读:首次实现季度盈利
监控摄像机产品的分辨率和清晰度的选择
人工智能在精神病学的应用,能比人类更好
无线技术如何改变预测性维护
区块链给税收征纳带来了哪些影响
iPhone 15将会有多少款?
浅谈通信设备内部的三种接地
霍尔电流传感器在电网无功功率自动补偿中的应用
研究人员研发新型电子植入物涂层,AI和人类融合或将实现
金源照明披露了招股书,公司拟在深交所创业板上市
华为mate10上市在即!搭载最强麒麟970处理器,华为mate9已经开始降价,买不买?
Microchip并购Atmel后整并计划开始 主力产品线原封不动
高压继电器的型号规格和使用满足要求有哪些
苹果携手三星进行合作,为了互提业绩