历史上的今天
返回首页

历史上的今天

今天是:2025年06月21日(星期六)

2018年06月21日 | Keil C51对C语言的关键词扩展之三: bdata

2018-06-21 来源:eefocus

使用bdata定义的变量即可字寻址,也可比特位寻址。


Keil C51编译器把使用bdata定义的变量放置在8051内部RAM可位寻址区。


bdata定义的变量必须为全局变量,不能在任一函数内部定义bdata类型的变量。


bdata关键词使用方法:


int bdata x1;        /* 定义可位寻址的整型变量*/


char bdata bary [4];    /* 定义可位寻址的数组*/


此时,x1,bary均可按比特位寻址。使用sbit关键词定义可操作其任一比特位的变量。


sbit mybit0 = x1 ^ 0;      /* x1的比特0*/

sbit mybit15 = x1 ^ 15;    /* x1的比特15 */


sbit Ary07 = bary[0] ^ 7;     /* bary[0]的比特7*/

sbit Ary37 = bary[3] ^ 7;     /* bary[3]的比特7 */



Keil C51编译器总是像对sfr16那样把可位寻址的变量视为little endian字节序,标准C类型如int ,long则以big endian方式存储。

调用其他源文件中定义的sbit变量,以如下方式声明:


extern bit mybit0;      

extern bit mybit15; 

extern bit Ary07;       

extern bit Ary37;       


操作bdata声明的对象,方式如下:


Ary37 = 0;        /* 对bary[3]的比特7清零*/

bary[3] = 'a';    /* bary[3]直接赋值*/

x1 = -1;       /* x1直接赋值 */

mybit15 = 1;      /* 对x1的比特15置一*/


也可声明结构体和联合体的sbit变量,示例:


union lft

  {

    float mf;

    long ml;

  };


bdata struct bad /*注意 bdata*/

  {

    char m1;

    union lft u;

  } tcp; /*注意tcp位于位寻址区*/


sbit tcpf31 = tcp.u.ml ^ 31;        

sbit tcpm10 = tcp.m1 ^ 0;

sbit tcpm17 = tcp.m1 ^ 7;

须要注意的是,使用sbit定义针对非bdata类型变量的某一比特位,毫无意义。


推荐阅读

史海拾趣

Amphenol Aerospace公司的发展小趣事

Amphenol Aerospace 是一家在电子行业中知名的公司,专注于设计、制造和销售航空航天领域的连接器和电缆组件。以下是关于 Amphenol Aerospace 公司发展的五个相关故事:

  1. 创立与早期发展:Amphenol Aerospace 公司的历史可以追溯到1932年,当时在美国新泽西州的Linden市成立了Amphenol公司。最初,该公司主要致力于生产无线电连接器和电缆组件。随着航空航天行业的发展和壮大,Amphenol Aerospace 公司开始专注于航空航天领域,成为该行业的关键供应商之一。

  2. 技术创新与产品多样化:Amphenol Aerospace 公司不断进行技术创新,推出了一系列先进的连接器和电缆组件产品。这些产品具有高可靠性、高耐用性和优良的性能特点,广泛应用于航空航天领域的飞机、卫星、导弹、航天器等设备中。Amphenol Aerospace 公司的产品包括圆形连接器、矩形连接器、光纤连接器等,满足了不同客户的需求。

  3. 客户合作与定制化解决方案:Amphenol Aerospace 公司与航空航天领域的客户建立了紧密的合作关系,共同开发定制化的连接器和电缆组件解决方案。公司的工程团队与客户密切合作,根据客户的需求和规格要求,设计和制造符合特定应用要求的产品。这种定制化解决方案为客户提供了更加个性化和专业化的服务。

  4. 质量控制与认证标准:Amphenol Aerospace 公司注重产品质量控制,并严格遵循行业标准和认证要求。公司的生产工艺和质量管理体系符合ISO 9001质量管理体系认证标准,以确保产品质量稳定可靠。此外,Amphenol Aerospace 公司的产品还通过了航空航天领域的相关认证,如AS9100质量管理体系认证等,确保产品符合行业标准和规定。

  5. 全球布局与市场拓展:除了在美国的生产基地外,Amphenol Aerospace 公司还在全球范围内设有多个生产工厂和销售办事处,为客户提供全面的服务和支持。公司在欧洲、亚洲和其他地区建立了广泛的销售网络,拓展了国际市场份额。通过全球布局和市场拓展,Amphenol Aerospace 公司不断扩大业务规模,增强了在航空航天领域的市场竞争力。

这些故事展示了 Amphenol Aerospace 公司从成立初期到如今在技术创新、产品多样化、客户合作与定制化解决方案、质量控制与认证标准以及全球布局与市场拓展等方面取得的重要进展。

乐鑫(espressif)公司的发展小趣事

乐鑫科技在发展过程中,与百度、亚马逊等全球知名企业建立了紧密的合作关系。通过与这些合作伙伴的共同努力,乐鑫科技成功开发了一系列具有市场影响力的语音框架和物联网解决方案,进一步提升了其品牌影响力和市场竞争力。

泰科天润(GPT)公司的发展小趣事

乐鑫科技深知,物联网的发展离不开一个完善的生态系统。因此,公司积极构建了一个集硬件、软件、开源社区于一体的物联网生态系统。通过提供丰富的软件资源和技术支持,乐鑫科技为购买其硬件的客户实现了更优的使用体验,推动了物联网应用的普及和落地。

Display Engineering Services公司的发展小趣事

乐鑫科技在发展过程中,与百度、亚马逊等全球知名企业建立了紧密的合作关系。通过与这些合作伙伴的共同努力,乐鑫科技成功开发了一系列具有市场影响力的语音框架和物联网解决方案,进一步提升了其品牌影响力和市场竞争力。

Hind Rectifiers Ltd公司的发展小趣事

乐鑫科技自创立之初,就致力于物联网(IoT)领域的芯片设计和技术创新。公司凭借其独特的芯片设计能力和连接技术,成功开发了一系列具有竞争力的产品,为全球开发者提供了高效、可靠的物联网解决方案。乐鑫科技始终坚持以技术创新为核心,通过自主研发和持续投入,不断提升产品的性能和竞争力。

Axon' Cable公司的发展小趣事

品质是Axon' Cable公司的生命线。公司始终坚持以客户需求为导向,不断提升产品品质和服务水平。Axon' Cable建立了完善的质量管理体系,并通过了多项国际认证。同时,公司还注重持续改进和创新,不断优化生产流程和提高生产效率。这些努力使得Axon' Cable的产品在品质上始终保持领先地位,赢得了客户的信任和好评。

这些故事虽然无法涵盖Axon' Cable公司发展的全部细节,但试图展现了其在电子行业中的成长轨迹和取得的成就。通过这些故事,我们可以看到Axon' Cable公司凭借其坚定的信念、不懈的努力和创新精神,在电子行业中不断发展壮大,成为了一家具有全球影响力的知名企业。

问答坊 | AI 解惑

汽车内串行通信总线

越来越多的电子系统都需要更可靠的互连解决方案,  而LIN总线正成为汽车串行通信的新兴标准。 对于汽车制造商来说,非常重要的三大问题就是燃料效率、可靠性和成本。随着汽车设计中电子系统越来越多,问题也变得越来越复杂。这些子系统每个都 ...…

查看全部问答>

请教Altium Designer 6.9原件库的问题

我在学习Altium Designer 6.9时在原件库这里有的原件有封装图样而又的却没有(如图1;2)。我也尝试在网上找出答案,但没有结果;我又尝试阅读软件自带的help也没能找出答案。谁有好主意能告诉我,我应查些什么资料或是这个问题应怎样解决。谢谢大 ...…

查看全部问答>

windows ce 5.0 购买问题 请求各位大侠了

windows ce 5.0 购买问题 急求 偶想买windows ce 卖方说里面有bsp pb5.0 evc 我想知道我只够买windows ce bsp pb5.0 evc 这些在网上可以免费下载么 请求各位大侠帮帮在下了…

查看全部问答>

編譯時的ERROR

<Linking>  undefined first referenced                              &nb ...…

查看全部问答>

“symbol referencing errors”的解决方法(转)

原文出处 http://www.hellodsp.com/bbs/viewthread.php?tid=16417&highlight=ERROR   经常看到朋友有问到这一个错误,\"error: symbol referencing errors\",下面我们以一个会员朋友遇到的问题为例讲述解决方法,其实非常简单。首先我们 ...…

查看全部问答>

TI 8962中的字库是怎么算出来的,有字模软件吗

static const unsigned char g_pucFont[96][5] ={    { 0x00, 0x00, 0x00, 0x00, 0x00 }, // \" \"    { 0x00, 0x00, 0x4f, 0x00, 0x00 }, // !    { 0x00, 0x07, 0x00, 0x07, 0x00 }, // \" &n ...…

查看全部问答>

从用户态的open到内核驱动实现流程

作者:李强,华清远见嵌入式学院讲师。转载自http://www.embedu.org/Column/Column338.htm问题来源:在讲授Linux初级驱动的时候,我发现困惑很多同学的是不真正理解从应用层到我们自己所写的驱动层的调用过程,所以写此文章来大概描述。首先我们知道 ...…

查看全部问答>

电源开关设计秘笈30例(全30例)pdf下载

电源设计一直是工程师面对的一个难题,随着全球节能环保意识的提升, 设计简捷、高效、轻巧的绿色电源成为工程师的首要任务,为了帮助工程师解决这方面的难题,TI推出了一本电子书叫做《电源开关设计秘笈30例》,对电源开关设计技巧做出了详细的说 ...…

查看全部问答>

关于LPC1768数组溢出问题,请高手帮忙解答一下。

const UART_DCM_TBL tbl[72] = { {1.000,  0,  1}, {1.067,  1, 15}, {1.071,  1, 14}, {1.077,  1, 13}, {1.083,         1, 12}, {1.091,  1, 1 ...…

查看全部问答>

flash 擦除例程中语句疑问,请高手帮忙解决,谢谢!

flash擦除例程如下,其中             /* Wait for erase to complete */为什么if (*pdata & 0x80)就能判断擦除完成?             while (1)    & ...…

查看全部问答>