历史上的今天
返回首页

历史上的今天

今天是:2024年10月28日(星期一)

正在发生

2021年10月28日 | keil c51中的data idata xdata code详解

2021-10-28 来源:eefocus

51单片机采用哈佛结构。内存空间编址有重叠。可以在不同总线(本文称其为总线域,简称域)上定义不同的变量。在keilc51中定义了data idata xdata code几种域修饰符。这些修饰符决定了变量访问方式。


data:用mov直接访问的内部RAM

idata:用mov @间接访问的内部RAM

xdata:用movx访问的外部RAM

code:用movc访问的rom

这些假定以上以及类型为where。数据类型为type。



干货:

变量(包括指针)默认存储在data中。指针能够智能的指向所有的域。

指定变量(包括指针)在某个域时,域修饰符写在变量类型后面。type where value,type* where point。


想让指针只能指向某个域type where* point

指定指针的域并指定指针本身的存储域 type where* where point

const写在前面const type where* where point

声明struct类型不用where。定义变量时候用。struct变量不能跨域。


以下是干货来源

一下是实验结果

type value :data中的变量

where type value :where中的变量

type where value :where中的变量

where type where value 是的,没错,这种神经病写法也是在where中的变量

type * point data中的跨域指针,

where type * point 存储在where中的跨域指针

type * where point 存储在where中的跨域指针

where type * where point 这种更神经病的写法也是存储在where中的跨域指针

type where* point 存储在内部RAM中只能指向where的指针

where type where* point 存储在where中指向where的指针

type where* where point 存储在where中指向where的指针

很乱是吧?我们整理一下

聪明的同学已经发现规律了,是不是?

作为c不得不提的一种变量——指针。keil c51中还存在一个指针,这个指针实际上是sizeof(type*) + 1的。有一个字节来存储指针指向的区域。访问*point时对于不同区域的数据使用不同的指令。也就是说这中指针可以访问所有的总线。暂且称其跨域指针。


既然指针也是变量“指向什么东西”是指针变量的类型。那么互忽略类型,把这些写法调换顺序。

发现规律了么?data,idata,xdata,code可以在类型前,也可以在类型之后,或者前后都有。


定义变量时,c类型最前面最着最后面添加(或者前后都有)总线域修饰符,可以决定该变量存储的位置。前后都不加,默认是data。


我们在单独关心一下指针。

发现规律了么?type *是可以指向任何区域的指针。决定指针指向位置时候域修饰符必须在type和*之间。


至于const struct,呵呵自己试试就知道了。

推荐阅读

史海拾趣

Helium_Systems__Inc.公司的发展小趣事

随着市场竞争的加剧,海曼电子意识到仅凭自身力量难以快速实现跨越式发展。因此,公司开始积极寻求与行业内外的合作伙伴建立战略合作关系。通过技术共享、市场互补等方式,海曼电子不仅提升了自身的竞争力,还成功进入了多个新的市场领域。此外,公司还通过并购具有核心技术和市场资源的中小企业,进一步巩固了其在电子行业的地位。

Entegris公司的发展小趣事

在晶圆盒传输业务上,Entegris与台湾的家登精密之间发生了一场长达数年的专利侵权诉讼。Entegris最终获得了胜诉,家登被要求赔偿超过3,000万美元。这一胜利不仅保护了Entegris的知识产权,也进一步巩固了其在半导体材料市场的地位。

Fanstel公司的发展小趣事

在市场竞争日益激烈的情况下,Fanstel公司意识到市场拓展的重要性。公司制定了一套精准的市场营销策略,针对不同行业和地区的客户需求,推出了定制化的产品和解决方案。同时,Fanstel还积极开拓国际市场,通过参加国际展会、建立海外销售网络等方式,成功将产品打入全球市场。这些举措不仅提升了公司的知名度,也大大增加了公司的销售额。

HM International公司的发展小趣事

在市场竞争日益激烈的情况下,Fanstel公司意识到市场拓展的重要性。公司制定了一套精准的市场营销策略,针对不同行业和地区的客户需求,推出了定制化的产品和解决方案。同时,Fanstel还积极开拓国际市场,通过参加国际展会、建立海外销售网络等方式,成功将产品打入全球市场。这些举措不仅提升了公司的知名度,也大大增加了公司的销售额。

Advanced Detector Corp公司的发展小趣事

为了进一步提升竞争力,ADC积极寻求与其他企业的战略合作。通过与业界领先的企业建立合作关系,ADC成功整合了各方资源,共同研发新技术、新产品。这些合作不仅加速了ADC的技术创新步伐,也为其带来了更多的商业机会。

Electech Electronics公司的发展小趣事

Electech Electronics公司成立于XXXX年,由几位在电子行业有丰富经验的工程师共同创立。起初,公司主要专注于电子元器件的代理和销售,为本地的小型电子产品制造商提供服务。通过不懈的努力和对市场敏锐的洞察力,Electech Electronics逐渐在本地市场中建立了良好的声誉。

问答坊 | AI 解惑

Intel被迫放宽上网本分辨率规格限制:允许采用1366x768规格

据台湾 PC 业者表示,尽管 Intel 仍无意放宽上网本的 10 寸LCD屏幕尺寸门坎,但却容许采用较高分辨率的面板规格,因此各家厂商将会在短期内推出分辨率更高的上网本产品,无疑令上网本的实用性大大提升。 据了解, Intel 容许业者采用更高的分辨率 ...…

查看全部问答>

贴片三极管上的印字,与真实型号对照表

贴片三极管上的印字,与真实型号对照表…

查看全部问答>

FAN-OUT 警告怎样用编程的方法避免?

如果大家使用Quartus 软件编译VHDL语言或VERILOG语言,使用LEVEL 3 告警层级,将会产生很多FAN-OUT告警,怎样处理。特别是用编程方法,怎样避免?…

查看全部问答>

汇编问题~

MACRO         MOV_PC_LR                 [ THUMBCODE             bx lr         &n ...…

查看全部问答>

国内首个中文“开放源码硬件社区”诞生

开放源码软件Linux是大家广为熟知的,但你听说过“开放源码硬件”吗?中国电子学会和FPGA领域的老大美国赛灵思公司 (Xilinx)联手,最近将“开放源码硬件”这一理念创新地引入了刚刚揭开帷幕的“Xilinx杯中国高校开放源码硬件创新大赛”中,推出了国 ...…

查看全部问答>

highlight:c#中调用EVC开发的.dll问题

http://group.eeworld.net/aawolf_mobile/topic/2aa41dba-eefc-4bc4-8232-ed1191c645b0.aspx 我遇的问题和帖子里面的一样。问题在:CommSend这边没有反应了。代码如下: (原帖问题解决了但没有给出解决方法。请各路高手帮忙) //////////// ...…

查看全部问答>

【MSP430共享】用VB实现PC机与MSP430单片机串行通信的研究

摘 要: 串行通信已经成为计算机与其他设备进行数据交换的最广泛的途径之一。本文主要论述了P C机与 MS P 4 3 0单片机之间实现串行通信的硬 件设计; 以及如何利用MS P 4 3 0的串口通信模块和VB提供的串行通讯控件 MS C o mm来实现 P C机与 Ms P 4 ...…

查看全部问答>

为什么我这个程序下到板子里 会出现跑了一会儿就停止了或者距离远一些也停止了呢?

为什么我这个程序下到板子里 会出现跑了一会儿就停止了或者距离远一些也停止了呢?#include <stm32f10x_lib.h>#include \"sys.h\"#include \"usart.h\"  #include \"delay.h\" #include \"led.h\" #include \"key.h\"  ...…

查看全部问答>

USB的smsc3320的VBUS

在用SMSC3320做Device时,总线供电,线上VBUS=5V,结果一1K电阻,在3320的VBUS输入端测得电压1.5V,是否正常?我用的是Device模式,是否可以不要VBUS? 另外,3320的VDD33输出为0,VBAT=5V,是不是内部LDO损坏? 我在DP脚外界1.5k电阻与3.3V想拉 ...…

查看全部问答>

贴一个12F683AD采集的例程,双通道。

//******************************** #include         \"Use.h\" #include        \"Ver.H\" #include #define MAX_REF                (5000)  &nb ...…

查看全部问答>