今天在看代码的时候看到以下代码:

[cpp] view plaincopy
  1. struct dsi_ctrl_hdr {
  2. char dtype; /* data type */
  3. char last;  /* last in chain */
  4. char vc;    /* virtual chan */
  5. char ack;   /* ask ACK from peripheral */
  6. char wait;  /* ms */
  7. short dlen; /* 16 bits */
  8. } __packed;

结构体的末尾用__packed进行限定。因为不懂其用法,于是通过百度整理了__packed的作用及用法。

__packed 限定符将所有有效类型的对齐边界设置为 1。这就意味着:

1、不会插入填充以对齐压缩对象

2、使用未对齐的访问读取或写入压缩类型的对象。

使用 __packed 限定符声明结构或联合后,__packed 将应用于该结构或联合的所有成员。成员之间或结构末尾均没有填充。必须使用 __packed 声明压缩结构的所有子结构。可以单独压缩非压缩结构的整型子字段。

用法
若要将结构映射到外部数据结构或访问未对齐数据,__packed 限定符非常有用;但由于访问开销相对较高,通常对节省数据大小并没有什么帮助。通过仅对需要压缩的结构中的字段进行压缩,可以减少未对齐访问的数量。

限制
以下限制适用于使用 __packed 的场合:

1、__packed 限定符不能用于以前未使用 __packed 声明的结构。

2、与其他类型限定符不同,不能同时具有同一结构类型的 __packed 版本和非 __packed 版本。

3、__packed 限定符不影响整型局部变量。

4、压缩结构或联合与相应的非压缩结构的分配不兼容。由于这些结构具有不同的内存布局,因此,将压缩结构分配给非压缩结构的唯一办法是逐个字段进行复制。

5、没有定义对 __packed 进行类型转换所产生的影响。也没有定义将非压缩结构类型转换为压缩结构类型所产生的影响。可以合法地将指向整型的指针类型显式或隐式转换为指向压缩整型的指针类型。也可以对 char 类型进行 __packed 类型转换。

6、不存在压缩数组类型。压缩数组是指具有压缩类型的对象数组。数组中没有进行填充。

arm编程中__packed的使用相关推荐

  1. ARM编程中B指令与BL指令的区别

    ARM汇编程序中B指令和BL指令都是会跳转到某个标号处运行,类似于C语言中的goto 命令,例如利用B指令实现一个循环(每次对r0 寄存器中的值加1): .textmov r0, #1 //将r0寄存 ...

  2. ARM编程中的警告和错误处理

    转载自:(以后补充) KEIL 中 warning解决方法 在做数据处理的时候,出现warning: #223-D: function "abs" declared implici ...

  3. ARM汇编和C语言混合编程中数组的数组的操作

    ARM汇编和C语言混合编程中数组的数组的操作 此示例描述a数组中的元素累加的结果,c和b交换的实例: 代码块 例如: #include <stdio.h>int main (int arg ...

  4. IP地址的三种表示格式及在Socket编程中的应用

    转自:http://blog.csdn.net/hguisu/article/details/7449955 使用TCP/IP协议进行网络应用开发的朋友首先要面对的就是对IP地址信息的处理.IP地址其 ...

  5. ARM处理器中“8位位图”

    在ARM处理器的汇编语言中,对指令语法格式中的<shifter_operand>的常数表达式有这样的规定:"该常数必须对应8位位图,即常数是由一个8位的常数循环移位偶数位得到的. ...

  6. IP地址的三种表示格式 及 在Socket编程中的应用

    关于windows中的INADDR_ANY这个宏 头文件winsock.h中定义#define INADDR_ANY              (u_long)0x00000000 它是用于多IP机器 ...

  7. S5PV210体系结构与接口02:ARM编程模型 汇编指令

    目录 1. ARM的基本设定 1.1 ARM数据类型 1.1.1 基本数据类型 1.1.2 浮点数据类型 1.1.3 存储器大小端 1.2 支持的指令集 2. Cortex-A8编程模型 2.1 处理 ...

  8. arm汇编中DCB、DCW、DCD、DCQ指令

    背景 在ida中进行分析so文件,就是elf文件,它所对应的arm汇编,在汇编中会时常碰到一些下面的汇编指令.DCB是arm汇编中的伪指令,下面就针对这个指令相关做下小记录. 伪指令及DC系列指令 A ...

  9. 函数式编程中的战斗机--elm编写实例(薛定鄂的猫

    函数式编程中的战斗机--elm编写实例(薛定鄂的猫) 1.初始设置 2.薛定谔的猫 3.定义规则 4.建立模型 5.建立更新模型的逻辑 6.构建前端界面 7.连接代码 8.运行程序 1.初始设置 今天 ...

最新文章

  1. 订单系统开发(仿淘宝和美团网) 之 项目总结(降低数据库并发量)
  2. 如何用 Nacos 构建服务网格生态
  3. 万网mysql中文乱码_Linux下MySQL出现乱码的解决方法-阿里云开发者社区
  4. 【遥感数字图像处理】实验:遥感图像显示与数据输入/输出(Erdas版)
  5. 【git】如何在github上推送并部署自己的项目
  6. flutter android 和 ios 发布
  7. 机器学习算法之手撕SVM-线性(理论)
  8. HDU 1407 测试你是否和LTC水平一样高 枚举、二分、hash
  9. extjs 表格数据重新加载_将【金数据】实时获取到Excel的小技能
  10. 计算机管理器鼠标不见了怎么办,电脑的鼠标光标消失了
  11. 卸载office2010安装包时提示语言不受系统支持
  12. 无光驱安装原版 windows server2008,win7 的方法,64位的
  13. eclipse32位和64位的区别
  14. LeetCode871.Minimum Number of Refueling Stops
  15. RGB和YUV颜色对比,使用ffmpeg颜色处理,视频混合,透明度处理
  16. 圣诞树代码,c语言编程,基于graphics.h
  17. 腾讯云音视频互动课堂trtc,实现逻辑,服务端混流逻辑
  18. 1、从软件开发角度看待PCI和PCIe
  19. ios有什么ssr_飞猪营销域SSR总结 - 双十一会场再加速
  20. 大数据在金融行业的价值

热门文章

  1. 计算机应用专业可以考教师资格证不,教育部规定,这三类人不能当老师,拿到教师资格证也是白考...
  2. 关于.net向sql插入数据被截断的问题
  3. Linux下并行计算库OpenMPI的配置和使用
  4. 总裁演说思维:口才训练方法留言评论法
  5. 从乡镇副镇长辞职到入职互联网大厂,我走了一条反方向路
  6. php两个时间戳相隔多少天
  7. 基于目标检测的无人机航拍场景下小目标检测实践
  8. Error resolving template
  9. 设计模式之——门面模式
  10. (附源码)springboot 社区疫苗接种管理系统 毕业设计 281442