历史上的今天
返回首页

历史上的今天

今天是:2025年04月01日(星期二)

正在发生

2019年04月01日 | STM32 编译指令 #pragma pack 的配对使用

2019-04-01 来源:eefocus

#pragma pack 可以用来指定数据结构的成员变量的内存对齐数值。


可选值为:


1、2、4、8、16。

使用 pack 指令要配对使用,以避免意外影响项目中其他源文件的结构成员的内存对齐。


如果影响了其他源文件的结构成员内存对齐,那么在你按照默认对齐来计算那些结构成员占用内存大小或者使用指针移动计算结构成员偏移位置的时候,就可能会出现意料之外的异常。


主要可能的异常是内存定位错误或非法内存访问,结果可能导致错误的定位或数值,极端的情况下可能导致程序崩溃。


下面的例子用来展示基本的配对使用方式。


1)#pragma pack(n)的配对使用


#pragma pack(1) //内存对齐设置为1个字节

 

struct s1

{

  int i;

  char c;

  bool f;

}

 

struct s2{...}

 

//...

 

#pragma pack()   //恢复默认的内存对齐

2)#pragma pack(push|pop,n)的配对使用


#pragma pack(push,1) //内存对齐设置为1个字节

 

struct s3

{

  int i;

  char c;

  bool f;

}

 

struct s4{...}

 

//...

 

#pragma pack(pop)   //恢复默认的内存对齐


推荐阅读

史海拾趣

Concurrent Logic公司的发展小趣事

Concurrent Logic公司的创立源于一群工程师对并行计算和逻辑设计的热爱。在公司成立初期,他们面临着巨大的挑战。由于资金有限,他们不得不在狭小的办公室内开始他们的创新之旅。初创团队的成员们夜以继日地工作,开发并优化他们的第一个产品——一款高性能的并行处理芯片。尽管条件艰苦,但他们的努力和热情为公司的未来奠定了坚实的基础。

C&K公司的发展小趣事

通过不断的努力和创新,C&K在90年代中期已经成为世界领先的开关制造商之一,也是业内最受信赖的品牌之一。这一成就的取得离不开公司对产品质量的严格把控和对技术创新的持续追求。同时,C&K还积极与全球各地的客户合作,根据他们的需求量身定制开关产品,赢得了广泛的赞誉。

Aydin Corp公司的发展小趣事

Aydin Corp公司诞生于电子行业的初期,当时的市场充满了机遇与挑战。创始人凭借对电子技术的深厚理解和对市场需求的敏锐洞察,决定投身于这一领域。初创时期,公司面临着资金短缺、技术瓶颈和市场竞争等多重困难。然而,通过不懈的努力和持续的创新,Aydin Corp逐渐在市场中站稳了脚跟。

ZTE高新兴(Gosuncn)公司的发展小趣事

随着电子技术的快速发展,Aydin Corp意识到只有不断创新才能在市场中立于不败之地。公司投入大量资源用于研发,不断推出具有创新性和竞争力的产品。这些产品不仅性能卓越,而且设计独特,迅速赢得了消费者的青睐。同时,Aydin Corp还注重产品升级和迭代,以满足市场不断变化的需求。

Cicoil公司的发展小趣事

Cicoil公司的创立可以追溯到电子行业的快速发展时期。创始人看到了扁平电缆在电子设备中的巨大潜力,于是决定专注于这一领域的研究和开发。他们投入大量资源,研发出具有独特技术的柔性扁平电缆,为电子设备提供了更为灵活和可靠的连接方案。这一创新产品在市场上引起了轰动,为Cicoil公司赢得了良好的声誉和市场份额。

固驰(GUERTE)公司的发展小趣事

随着产品质量的不断提升和技术的持续创新,固驰电子开始积极拓展国内外市场。公司产品不仅畅销国内市场,为美的、格力、艾美特等知名企业配套,还大量出口至韩国、俄罗斯、美国、加拿大、德国等国家和地区。这一过程中,固驰电子凭借其优良的品质、满意的价格和完善的服务赢得了国内外客户的一致好评,品牌影响力显著提升。

问答坊 | AI 解惑

《AVR单片机应用系统开发典型实例》代码

《AVR单片机应用系统开发典型实例》代码…

查看全部问答>

请问下如何在PADS中修改封装?

在PADS中我想把0603封装的几个电阻改成0402封装的排阻?应该如何改呢?请各位前辈指教!谢谢!…

查看全部问答>

微波射频方向的基本知识、技能

微波射频方向研究生毕业所必要具备的基本知识、技能有: 就说软件吧,根据课程学习的不同,可能会用到Matlab、ADS、CST、HFSS、MWO等等,每种软件针对的方向都有不同,但每种软件的使用都是仿真,楼主在学习过程中还要加强动手能力的培养,从最基 ...…

查看全部问答>

有没有wince下的 flashplay7.0或8.0的播放器啊

rt,望高人指点,网上找了N久没头绪…

查看全部问答>

内核模式中怎么调用LoadLibrary

内核模式中怎么调用LoadLibrary 我想在驱动里恢复ssdt表。但是找原始表的方法是把ntoskrnl.exe载入内存 然后找原始表。 但是在内核模式下怎么把这个文件 载入内存?…

查看全部问答>

想学习Win CE,高手引路!

最近看到大家都在讨论Win CE,我也想学习学习,但不知道从那里开始,请大家推荐点好的学习资料,感激!…

查看全部问答>

求在Freescale的ColdFire52233上嵌入IPSEC的源代码,急!

目前正在做往52233上嵌入IPSEC的设计,目的是将IPSEC协议嵌入到32位单片机52233中,实现两个单片机板子之间IPSEC的加密保护。改板子自带MINI-TCP/IP协议栈,以及一个NicheLite的RTOS,目前网上找到的与IPSEC有关的代码大部分是在LINUX下实现的,我 ...…

查看全部问答>

嵌入式爱好者的学习笔记连载(三)

嵌入式爱好者的学习笔记连载(三)     1 U-Boot简介 U-Boot,全称Universal Boot Loader,是遵循GPL条款的开放源码项目。从FADSROM、8xxROM、PPCBOOT逐步发展演化而来。其源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot ...…

查看全部问答>

基于PPC860,VxWorks系统加载IRQ中断时,加不上,为什么?

我用的是intConnect(IV_IRQ7,(VOIDFUNCPTR)(int)Irq7_Isr, 0); 挂载该中断后还需要使能该中断吗? 直接以上使用,我发现该中断产生(这个我确认,用示波器量过了)后,中断服务程序没有执行。然后发现还有一些使能中断的函数,例如:intEnable(), ...…

查看全部问答>

现在是基于Linux的嵌入式就业较好,还是FPGA好

导师现在有项目:关于ARM+LINUX和关于FPGA的。不知道哪一个就业前景好? 因为做ARM+LINUX可以好好学学LINUX以及软件编程,如果学好了可以进百度、IBM之类的大型企业……做一个嵌入式程序员 而做FPGA不知道有什么好单位,除中兴、华为…… 希望这 ...…

查看全部问答>