0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

牵手一起梦 来源:单片机与嵌入式系统应用 作者:易涛,朱容钊 2020-09-19 16:47 次阅读

在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块拷贝。对照表如下:

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

看起来似乎使用库函数就可以大幅度提高程序性能,但实际上这样做并不能保证一定可以提高程序性能。首先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的变化。

责任编辑:gt

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    30

    文章

    5025

    浏览量

    117697
  • 函数
    +关注

    关注

    3

    文章

    3863

    浏览量

    61303
  • 编译器
    +关注

    关注

    1

    文章

    1575

    浏览量

    48606
收藏 人收藏

    评论

    相关推荐

    Keil C51 vs 标准C

    =in0;***it bit15=I^15; ***it arr07=arr[0]^7;***it arr15=arr^7; 第七节 Keil C51指针 C51
    发表于 09-17 15:31

    Keil C51中变量的使用方法详解

    A、B等)中的一部分。因此,在Keil C51中使用变量就和标准C很大不同。2 Keil C51
    发表于 11-30 17:21

    Keil C51中对双数据指针的直接利用

    Keil C51双数据指针支持情况  作为一个常用的C51编译器,
    发表于 11-30 17:30

    Keil同时支持C51和ARM的方法

    本帖最后由 haozilucky 于 2015-9-15 23:37 编辑 今天从网上搜了下,如何同时让Keil支持ARM和C51的编译。我试了下,成功了。但是方法没有网上的那么复杂,也许
    发表于 09-15 23:33

    请问KEIL C51 支持C++ 吗?

    不知道,KEIL C51 支持C++ 不啊?有没有哪位大虾用过???
    发表于 07-09 08:46

    请问XP 32位操作系统最高能支持Keil C51的哪个版本?

    如题,问一下,XP 32位操作系统最高能支持Keil C51的哪个版本?官网上已更新到Keil C51 V9.56 版本。
    发表于 08-05 04:35

    轻松上手单片机编程软件——keil单片机编程软件双数据指针+二进制

    直接支持。如果要在C51程序中使用双数据指针一些特别的
    发表于 12-28 08:00

    请问KEIL5下的支持C51的相关文件吗?

    目前发烧友提供的,KEIL5不支持C51,要编译 C51只能用KEIL4。谁有KEIL5下的
    发表于 03-16 02:00

    如何通过一个简单的INC AUXR1指令来回切换两个数据指针

    Keil C51双数据指针支持情况Keil C
    发表于 04-26 06:11

    如何安装Keil C51详细步骤

    科技.二、安装仅将默认盘符C改为D即可。三、pojie右键单击,以管理员身份运行Keil,打开File→License Management,复制CID,打开crack注册机,……四、添加STC库打开STC-ISP将STC系列单片机的
    发表于 07-15 08:03

    与标准c语言比较,c51特有的数据类型哪些?

    第五章单片机C语言程序设计概述§5.1 C语言与Keil C51§5.2 Keil C51
    发表于 07-15 09:00

    IAR 8051与Keil C51的代码差异是什么

    节选自Migrating from Keil μVision® for 8051 to IAR Embedded Workbench® for 8051基本代码差异以下几节说明了IAR C51
    发表于 11-30 07:23

    Keil C51使用详解教程

    Keil C51使用详解教程 第一章 Keil C51开发系统基本知识... 6第一节 系统概述... 6第二节 Keil
    发表于 03-29 14:06 279次下载

    Keil C51中对双数据指针支持情况及代码生成

    在8051体系中,数据指针DPTR作为一个特殊的16位寄存器,用于寻址64 KB的XDATA或CODE空间,通常它被当作一个16位指针,指向一个常数表。双数据
    发表于 07-20 17:36 1290次阅读
    <b class='flag-5'>Keil</b> <b class='flag-5'>C51</b>中对<b class='flag-5'>双数据</b><b class='flag-5'>指针</b>的<b class='flag-5'>支持</b>情况及代码生成

    Keil C51语言使用技巧及实战

    Keil C51语言使用技巧及实战Keil C51语言使用技巧及实战
    发表于 12-28 11:57 0次下载