您好、欢迎来到现金彩票网!
当前位置:手机棋牌游戏平台 > 位域 >

嵌入式开发中C语言位结构体有哪些用途详细分析讲解

发布时间:2019-07-22 03:11 来源:未知 编辑:admin

  在嵌入式开发中,经常需要表示各种系统状态,位结构体的出现大大方便了我们,尤其是在进行一些硬件层操作和时。但是在使用位结构体的过程中,是否深入思考一下它的相关属性?是否真正用到它的便利性,来提高系统效率?

  分析:这里定义了一个位结构体类型SYMBOL_STRUCT,那么用该类型定义的变量都哪些属性呢?

  开始以为:reserved_1和SYMBOL_TYPE不在一个地址上,因为他们5+4共9位,超过了1个字节地址,但实际他们共用首地址了;而且reserved_2只定义了8位,竟然实际占用了4个字节(0x1fff0834 - 0x1fff0830),我本来是想让他占用1个字节的。WORDS整体占了8个字节(0x1fff0834 - 0x1fff082c),设计时分析占用5个字节

  同理,上面的5个变量,共用一个地址就不足为奇了。而且有效位的分配不是连续进行的,例如SYMBOL_TYPE+reserved_1 共9位,超过了一个字节,索性系统就分配两个字节给他们,每人一个;SYMBOL_NUMBER+SYMBOL_ACTIVE 共8位,一个字节就能搞定。

  当换成uint_8后,可以看到地址空间占用大大减小,reserved_2只占用1个字节(0x1fff069f - 0x1fff069e),其他变量也都符合上面的结论猜想。但是,注意看上面黄色和红色的语句,总感觉有些勉强,那么我又会想,前两个变量数据域是9位,那么他们实际上是不是真正的独立呢?虽然在uint_8上面他们是不同的地址,在uint_32的时候是不是也是不同的地址空间呢?

  本来假设:由前2次试验的结论,一共占用8个字节,节空间占用:(2+4)+(4+4)+(2+2+4)+(2+2)+(6)。可是,实际效果并不是想的那样。实际只占用了4个字节,系统并没有按照预想的方式,为RESERVED变量分配4个字节。

  这些数据域,整体相加一共32位,占用4个字节(不考虑数据对齐问题)。而实际确实是占用了4个字节,唯一的原因就是:这些数据域以紧凑的方式链接,没有任何空闲位。实际是不是这样呢?

  这里为了验证是否紧凑链接,用到了一个union数据,后面会讲到用union不会对数据组织方式有任何影响,看实际与上次的一样,也能分析出来。

  主要是分析第2和第3个数据域是否紧密链接的。OBJECT_ACTIVE_PRE赋值0b00001111,NUMBER_ACTIVE赋值0b00000101,其他变量都是0,看到WORD数值0b00。分析WORD数据,可以看到这款MCU还是小端格式(高位数据在高端,低位数据在低端,这里不对大小端进行讨论),断开数据变成(0)10111 11000000,正好是0101+1111,OBJECT_ACTIVE_PRE数据域,跨越了两个字节,并不是刚开始设想的那样。这就印证了上面的紧密链接的结论,也符合数据结果输出。

  可以看到,RESERVED数据域已经不再属于4个地址空间内了(0x1fff0518 - 0x1fff051b),但是他们整体加起来还是32个位域。这说明数据中间肯定有“空隙”存在了,空隙在哪?看一下NUMBER_STATE,如果紧密的话它应该跟NUMBER_ACTIVE在同一个字节地址上,可是他们并不在一块,“空隙”就存在这里。

  这两个结构体有什么不一样?数据类型不一致,一个是uint_32,一个是uint_8。综上所述:数据类型影响的是编译器在分配物理空间时的大小单位,uint_32是以4个字节为单位,而后面的位域则是指在已经分配好的物理空间内部再紧凑的方式分配数据位,当物理空间不能满足位域时,那么系统就再次以一定大小单位进行物理空间分配,这个单位就是上面提到的uint_8或者uint_32。

  举例:上面uint_32时,这些位域不管是不是在一个字节地址上,如果能够紧凑的分配在一个4字节空间大小上,就直接紧凑分配。如果不能则继续分配(总空间超过4字节),则再次以4字节空间分配,并把新的位域建立在新的地址空间上(条目1上的就是)。当uint_8时,很明显如果位域不能紧凑的放在一个字节空间上,那么就从新分配新的1字节空间大小,道理是一样的。

  可以看到,系统并没有因为位结构体上面有uint_4的4字节变量或者共用体类型,就改变分配策略把位域都挤到4字节之内,看来他们是没有什么实质性联系的。这里把uint_32改成uint_8,或者把位结构体也替换掉,经我试验证明,都是没有任何影响的。

  1、在操作位结构体时,要关注变量的位域是否在一个变量类型(uint_32或者uint_8)上,判断占用空间大小

  2、除了位域,还要关注变量定义类型,因为编译器空间分配始终是按类型分配的,位域只是指出了有效位(小于类型占用空间),而且如果位域大于类型空间,编译器直接报错(如 uint_8test  :15,可自行实验)。

  3、这两个因素都影响变量占用空间大小,具体可以结合调试窗口,通过地址分配分析判断

  4、最重要的一点:上面的所有结果,都是基于我自己的CodeWarrior10.2和MQX3.8分析出来的,不同的编译环境和操作系统,都可能会有不同的结果;而且即便是环境相同,编译器的配置和优化选项都有可能影响系统处理结果。结论并不重要,主要想告诉大家这一块隐藏陷阱,在以后处理类似问题时,要注意分析避让并掌握方法。

  文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式ARM】欢迎添加关注!文章转载请注明出处。

  目前国内公认的最好的视频教程,通俗易懂,容易上手,非常适合初学者,被大量的培训机构采用。只要你认真看,认真听,保证让你学

  经常用Saber的朋友都清楚,Saber有一个让人感觉不方便的地方,就是仿真过程中会生成一大堆各种后....

  在对话框中可输出各种仿真命令,如:直接输入dc然后回车,可以执行DC分析。 这种逐条输入分析命令的方....

  如何使用Trochili RTOS的各种功能Trochili RTOS试验指导手册免费下载

  TROCHILI RTOS 是一个全新的适用于嵌入式领域的实时操作系统,主要用C语言开发,支持多任务....

  每个程序员、或者说每个工作者都应该有自己的职业规划,如果你不是富二代,不是官二代,也没有职业规划,希望你可以思考一下自己...

  照明技术的发展及趋势 照明发展历程 首先,回顾照明技术的发展历史,第一代以白炽灯为代表,优点是价格便宜,低温启动特性...

  CAN Bus(Controller Area Network),控制器区域网,起源于80年代,由国际标准化组织(ISO)所发布,因为利用双线差动(tw...

  本文档的主要内容详细介绍的是cadence教程的工程文件的资料合集免费下载包括了:cadence应用....

  TI的工程师Dan Otell是三个女儿的父亲,和很多有小孩的家庭一样,Dan总是在半夜或者凌晨从温暖的被窝中起来,照料三个因为“...

  随着对家用电器消费观念的不断变化,消费者对抽油烟机的要求也越来越高。通常吸抽油烟机转速靠人工调节,因此为了达到最佳排油效...

  刘宗德 应用工程师,世强电讯 在伺服系统中,由于交流永磁同步电机具备十分优良的低速性能、可以实现弱磁高速控制,调速范围宽...

  3D打印将精准的数字技术、工厂的可重复性和工匠的设计自由结合在一起,解放了人类创造东西的能力。本文是对当下3D打印技术带...

  随着汽车市场重心逐渐向发展中国家转移,技术重心向电子技术倾斜,势必影响到汽车电子发展的方向。而且,其技术本身也将面临着来...

  在移动互联时代,32位已成主流,为什么8位MCU出货量仍然不断攀升,甚至在某些特定领域依然被设计者们作为首选?8位MCU...

  随着汽车电子技术的飞速发展,传统的车用机械仪表盘已呈现出向数字仪表过度的趋势,与之对应的全部功能显示也将被渲染后的高清画...

  《C程序设计语言》是由C语言的设计者Dennis M. Ritchie和著名计算机科学家Brian ....

  本文档的主要内容详细介绍的是51单片机快速学习的预备知识资料免费下载包括了:1.学单片机需要什么基础....

  我记得我读过Scott Meyer著名的《Effective C ++》,这本书其实更多讲的是指出低....

  JM12864M-2汉字图形点阵液晶显示模块,可显示汉字及图形,内置8192个中文汉字(16X16 ....

  MDK 源自德国的 KEIL 公司,是 RealView MDK 的简称。在全球 MDK 被超过 1....

  高级语言(如C,Java 和 C++)都以更抽象的方式即我们人的思维来实现代码。

  涌与5G的逐渐落地,如今上到IC设计下到终端集成的全产业链也都闻风而动,掀起了一股“AIoT化”的技....

  事实上,MCU对有些任务来说是很适合的,但对其它一些任务来说可能做的并不好。举例来说,当需要并行执行....

  有关saber中template加密功能的问题,部分原文如下:domono兄,官方网站上说saber....

  MCU市场近几年保持着增长的态势,32位及以上的MCU、DSP等保持了相对较大的增长势头,其他领域则....

  近日,瑞萨开始了新一轮的产品巡回研讨会,首站厦门,随后在南京和西安三地巡回举办,在研讨会上瑞萨全系列....

  基于学习的目的,详细讲解关于标准外设库中的定时器的 17 个示例项目函数文件。本次介绍 OnePul....

  虽然IC产品众多,但规模上千亿元、销售上百亿颗的IC仍屈指可数,而MCU(微控制器)就荣列其中。毕竟....

  Real Time Executive for Multiprocessor Systems (RT....

  6月25日,在北京王府井希尔顿酒店的NXP新闻发布会上,NXP 资深副总裁、微控制器事业部总经理Ge....

  DSP C2000程序员高手进阶教程之C语言是如何生成的段和CMD文件

  本章讲述COFF格式、C语育生成的段、连接命令文件(CMD文件)和复杂的st段。虽然这些东西....

  CCS的全称是Code Composer Studio,它是美国德州仪器公司(Texas Instr....

  本文档的主要内容详细介绍的是Python3.2.3官方文档中文版免费下载包括了:第一章 Python....

  本文档的主要内容详细介绍的是嵌入式开发教程之SCPI命令参考的详细资料说明。

  本文档的主要内容详细介绍的是MSP430单片机的C语言例题资料合集免费下载。

  恩智浦公司的90nm工艺ARM926EJ-S核(包括矢量浮点联合处理器),以及大量的标准片上外围.C....

  通过Cube.AI软件功能包,现在可以用STM32微控制器产品来支持机器的人工智能/深度学习。传感器....

  家电行业的智能化风潮在几年前就开始了,这几年变得更加明显和快速。不论是传统的黑电、白电,还是近年来发....

  家电行业的智能化风潮在几年前就开始了,这几年变得更加明显和快速。不论是传统的黑电、白电,还是近年来发....

  锦锐F2系列CA51F251L2 CA51F252L2 CA51F253L2 CA51F251L3 ....

  在主要为工业市场开发系统的增长推动下,物联网(IOT)是嵌入式系统和设备开发的主要焦点。

  CA51F3 系列芯片是基于 1T 8051 内核的 8 位微控制器,通常情况下,运行速度比传统的 ....

  具有片内VDD监视器、看门狗定时器和时钟振荡器的C8051F020是真正能独立工作的片上系统。所有模....

  反相器电路原理图解如下:此电路的IN=OUT,似乎和省略掉该电路,将IN\OUT端短接的效果是一样的....

  什么是PPM,PPM是英文PulsePosition Modulation的缩写,中文意思是脉冲位置....

  目前在嵌入式开发领域比较常见的编程语言是C,另外C++、Python、JavaScript等语言也可....

  华为的嵌入式系统做得非常棒,这个是毋庸置疑。做嵌入式的C开发人员一般都会想进华为,看看华为的嵌入式系....

  本文档的主要内容详细介绍的是一些相关示例程序资料合集免费下载包括了:1.BST-V51学习板常用函数....

  选择结构相当于文本语言中的条件语句。LabVIEW 8 中新增加的 Diagram Disable ....

  LabVIEW中的循环结构有 for 循环和 while 循环。其功能与文本语言的循环结构的功能类似....

  LPCXpresso51U68开发板旨在采用MCU器件提供的高性能Cortex-M0+内核、节能和成....

  只读存储器(Read-only memory, ROM),当然从广义上来讲,也有一些器件,例如Fla....

  灵动微电子:MM32W无线MCU系列产品应用笔记——功耗BLE蓝牙应用

  开启蓝牙广播时MM32W0的控制模块有三种工作模式:正常模式、睡眠模式和停机模式。

  搞过产品的朋友都有体会,一个设计看似简单,硬件设计和代码编写很快就搞定,但在调试过程中却或多或少的意....

  “国内厂商发展FPGA有两大难点,一是突破国外巨头的专利壁垒,二是解决人才储备匮乏。安路科技将知识产....

  Linux 是在1991 年发展起来的与UNIX 兼容的操作系统,可以免费使用,它的源代码可以自由传....

  TMS320F28076 TMS320F2807x Piccolo 微控制器

  C2000™32位微控制器在处理,传感和驱动方面进行了优化,可提高实时控制应用中的闭环性能,例如工业电机驱动,光伏逆变器和数字电源,电动车辆与运输,电机控制以及传感和信号处理.C2000产品线包括Delfino™高端性能系列和Piccolo™入门级性能系列。 TMS320F2807x微控制器平台属于Piccolo™系列,适用于高级闭环控制应用,例如工业电机驱动,光伏逆变器和数字电源,电动车辆与运输以及传感和信号处理。数字电源和工业驱动器的完整开发包作为powerSUITE和DesignDRIVE方案的一部分提供。 F2807x是基于TI行业领先的C28x内核的32位浮点微控制器。此内核的性能通过三角运算硬件加速器得到了提升,该加速器利用CPU指令(如正弦,余弦和反正切函数)提高了转矩环路和位置计算中常见的基于三角运算的算法性能。 F2807x微控制器系列采用一个CLA实时控制协处理器.CLA是一款独立的32位浮点处理器,运行速度与主CPU相同。该CLA会对外设触发器作响响应,并与主C28x CPU同时执行代码。这种并行处理功能可有效加倍实时控制系统的计算性能。通过利用CLA执行时间关键型功能,主C28x CPU可以得到释放,以便用于执行通信和诊断等其...

  CC3200MOD SimpleLink Wi-Fi CC3200 片上因特网无线 MCU 模块

  使用业界首款可编程FCC,IC,CE和Wi-Fi认证无线微控制器(MCU)模块,内置Wi-Fi,开始您的设计连接。 SimpleLink CC3200MOD专为物联网(IoT)而创建,是一个集成了ARM Cortex-M4 MCU的无线MCU模块,允许客户使用单个设备开发整个应用程序。凭借片上Wi-Fi,互联网和强大的安全协议,无需先前的Wi-Fi体验即可加快开发速度。 CC3200MOD将所有必需的系统级硬件组件(包括时钟,SPI闪存,RF开关和无源元件)集成到LGA封装中,以便于组装和低成本PCB设计。 CC3200MOD作为完整的平台解决方案提供,包括软件,样本应用,工具,用户和编程指南,参考设计以及TI E2E支持社区。 应用MCU子系统包含行业标准的ARM Cortex- M4内核以80 MHz运行。 该器件包括各种外设,包括快速并行相机接口,I2S,SD /MMC,UART,SPI,I2C和四通道ADC。 CC3200系列包括用于代码和数据的灵活嵌入式RAM;带外部串行闪存引导程序和外设驱动程序的ROM;用于Wi-Fi网络处理器服务包,Wi-Fi证书和凭证的SPI闪存。 Wi-Fi网络处理器子系统具有Wi-Fi片上网络,并包含一个附加功能专用的ARM...

http://lake-macquarie.com/weiyu/483.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有