代码干货 | 嵌入式开发C语言位结构体用途详解

news/2024/7/12 2:59:55 标签: 编程语言, HTTPS, 数据类型, 嵌入式开发

本文来源于阿里云-云栖社区,原文点击这里。


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


位结构体类型设计


[cpp] view plain copy print?

  1. //data structure except for number structure

  2. typedef struct symbol_struct

  3. {

  4. uint_32 SYMBOL_TYPE :5; //data type,have the affect on "data display type"

  5. uint_32 reserved_1 :4;

  6. uint_32 SYMBOL_NUMBER :7; //effective data number in one element

  7. uint_32 SYMBOL_ACTIVE :1;//symbol active status

  8. uint_32 SYMBOL_INDEX :8; //data index in norflash,result is related to "xxx_BASE_ADDR"

  9. uint_32 reserved_2 :8;

  10. }SYMBOL_STRUCT,_PTR_ SYMBOL_STRUCT_PTR;


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

看下面运行结果:


_1


WORDS是定义的另一个外层类型定义封装,可以把它当作变量来看待。WORDS变量里前5个数据域的地址都是0x1ffff082c,而reserved_2的地址0x1fff0830,紧接着的PressureState变量是0x1fff0834。


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


(SYMBOL_TYPE 1个;reserved_1 1个;SYMBOL_NUMBER+SYMBOL_ACTIVE 1个;SYMBOL_INDEX 1个;reserved_2 1个)。


uint_32 reserved_2 : 8; 占用4个字节,估计是uint_32在起作用,而这里写的8位,只是我使用的有效位数,另外24位空闲,如果在下面再定义一个uint_32 reserved_3 : 8,地址也是一样的,都是以uint_32为单位取地址。


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


>>>展开全文


http://www.niftyadmin.cn/n/1452576.html

相关文章

vc++ ios::in ios::out 含义

fstream fs(“fname”, ios_base::in);// attempt open for read if (!fs) {// file doesnt exist; dont create a new one } else //ok, file exists. close and reopen in write mode {fs.close();fs.open(“fname”, ios_base::out); // reopen for write } You can just do…

Windows环境下用C#编程将文件上传至阿里云OSS笔记

Windows环境下用C#编程将文件上传至阿里云OSS笔记本系列文章由ex_net(张建波)编写,转载请注明出处。http://blog.csdn.net/ex_net/article/details/24962567作者:张建波 邮箱: 281451020qq.com 欢迎来信交流&#xff…

手机软件开发环境种类介绍(转)

现在移动软件开发发展很快,存在着很多机会,希望大家能够把握住其中的机会,成就自己的事业。 下面把手机软件开发环境简单介绍一下,大家可以选择适合自己的开发环境:1、 厂商固化程序在手机出厂以前,厂商会开…

技术文章 | 前端优化:9 个技巧_提高 Web 性能

本文来源于阿里云-云栖社区,原文点击这里。 当今数字世界,存在着无数的网站,每天都需要处理各种不同的原因的访问。然而,这些网站中有很大一部分显得笨重,使用起来也很麻烦。没怎么优化的网站会被各种各样的问题困扰&a…

JAVA 7 中遍历文件目录

2019独角兽企业重金招聘Python工程师标准>>> 在 JAVA 7 中增加了一个方法对于遍历文件十分的方便,在这篇文章中我们将讲到怎样遍历文件以及处理访问前和访问后的事件。 FilVisitor 是nio包的一个新的接口,它为我们在遍历文件目录的时候提供了…

1001经典搜索案例(一)(转)

通用篇(各大主流搜索引擎通用技巧) ◆ 问题:查找关于刘德华各方面的资料 搜索:[刘德华 原名][刘德华 flash][刘德华 mp3][刘德华 rm] [刘德华 小说][ 刘德华 电影][ 刘德华 歌…

Android Init进程分析

之前在看android启动过程总是带着完成工作任务的目的去分析代码,但是对于一些代码的细节并不是很清楚,在这里就分析一下Init进程的执行过程。 Init进程是android系统起来之后启动的第一个进程,对于研究android系统的启动过程很重要。 直接根据…

技术文章 | 越快越好 Linux用户需要赶紧补上glibc漏洞

本文来源于阿里云-云栖社区,原文点击这里。 只需点击一个链接或是连接到服务器,便可导致远程代码执行。攻击者可盗取口令、监视用户,甚至控制计算机。更甚者,任何与网络相连的软件,如果使用glibc的话,都有危…