历史上的今天
返回首页

历史上的今天

今天是:2025年02月07日(星期五)

正在发生

2021年02月07日 | STM32 编译指令 #pragma pack 的配对使用

2021-02-07 来源: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)   //恢复默认的内存对齐


推荐阅读

史海拾趣

DBLECTRO公司的发展小趣事

1997年,迪贝电子在上海正式成立,标志着这家专注于环境感知技术和气体检测及分析领域的创新企业正式进入中国市场。当时,中国的环保法规日益严格,对气体排放的监控和管理要求也不断提高。迪贝电子凭借其在该领域的深厚积累和技术实力,迅速在市场上推出了一系列高质量的气体检测和分析仪器。这些产品以其准确性、稳定性和易用性受到了用户的广泛好评,为迪贝电子在中国市场的快速发展奠定了坚实的基础。

Elcos AG公司的发展小趣事

随着全球对环保和可持续发展的重视,Elcos AG也开始注重自身的环保责任和可持续发展战略。公司采用环保材料和生产工艺,减少了对环境的污染和资源的浪费。同时,Elcos AG还积极参与社会公益事业和环保活动,通过捐款、赞助和志愿服务等方式回馈社会。这些举措不仅提升了公司的社会形象和品牌价值,也为公司的长期发展奠定了坚实的基础。

Changzhou Galaxy Century Microelectronics Co.,Ltd公司的发展小趣事

在发展过程中,银河微电积极寻求与行业内外的合作伙伴建立战略合作关系。通过与晶通半导体(深圳)有限公司等企业的合作,银河微电在技术研发、市场拓展等方面取得了显著成效。这些战略合作不仅提升了公司的综合实力,还为公司的未来发展奠定了坚实的基础。

General Instrument Optoelectronics公司的发展小趣事
改进驱动电路,减少失真和杂音。
ATOP_Technologies公司的发展小趣事

ATOP Technologies自1989年创立以来,以创新、智能、整合、坚持为核心价值观,初期主要专注于工业自动化领域的产品研发。在创立初期,公司面临着资金紧张、市场竞争激烈等挑战。然而,凭借着对技术的深刻理解和对市场的敏锐洞察,ATOP Technologies逐步在工业自动化领域站稳脚跟,并开始积累起一批忠实的客户。

歌普(GEPU)公司的发展小趣事

ATOP Technologies自1989年创立以来,以创新、智能、整合、坚持为核心价值观,初期主要专注于工业自动化领域的产品研发。在创立初期,公司面临着资金紧张、市场竞争激烈等挑战。然而,凭借着对技术的深刻理解和对市场的敏锐洞察,ATOP Technologies逐步在工业自动化领域站稳脚跟,并开始积累起一批忠实的客户。

问答坊 | AI 解惑

【EEWORLD模块整理】+tlc2543(A/D)

今年我用的模块资料 已经证实好用     …

查看全部问答>

综合后出现的警告!!!

WARNING:Xst:37 - Detected unknown constraint/property \"BLACK_BOX\". This constraint/property is not supported by the current software release and will be ignored. WARNING:Xst:1814 - Core does not contain any logic. WARNING:Xst ...…

查看全部问答>

at89s51电子时钟

大大们谁给个电子时钟设计。在单片机应用系统中,常需要一个实时时钟供定时、测控之用。单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格 ...…

查看全部问答>

串口 数据位

为什么我把串口调试助手的数据位设为8、7,结束位设为1、2都可以正常通行呢?…

查看全部问答>

pic io配置问题

pic16F506 io配置为普通的io口。不是只配置TRISB为1为输入 0输出。 我的IO怎么不听话啊。送高低电平不能控制。…

查看全部问答>

单片机定时器有几种方法,分析这几种的优缺点

单片机定时器有几种方法,分析这几种的优缺点…

查看全部问答>

哪位大侠考过嵌入式系统工程师?

大四毕业,考上中国科学院研究生,专业方向是信号处理 想利用暑假和开学后的几个月系统的学习下嵌入式系统的原理和开发 考个认证。 我觉得最权威的是 全国计算机技术与软件专业技术资格(水平)考试 中级资格的嵌入式系统设计师。 不知道是不 ...…

查看全部问答>

为什么步长只能为1?

顶层模块为—— module ramout(input          clkin,input   [7:0]  addr_read,output  [11:0] data_read ); reg  [ 7:0] cnt;reg  [ 1:0] status; reg  ...…

查看全部问答>

                                 问题已解决…

查看全部问答>