历史上的今天
今天是: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) //恢复默认的内存对齐
上一篇:STM32之I2C模块调试总结
下一篇:STM32 结构体对齐规则
史海拾趣
|
微波射频方向研究生毕业所必要具备的基本知识、技能有: 就说软件吧,根据课程学习的不同,可能会用到Matlab、ADS、CST、HFSS、MWO等等,每种软件针对的方向都有不同,但每种软件的使用都是仿真,楼主在学习过程中还要加强动手能力的培养,从最基 ...… 查看全部问答> |
|
内核模式中怎么调用LoadLibrary 我想在驱动里恢复ssdt表。但是找原始表的方法是把ntoskrnl.exe载入内存 然后找原始表。 但是在内核模式下怎么把这个文件 载入内存?… 查看全部问答> |
|
求在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(), ...… 查看全部问答> |
|
导师现在有项目:关于ARM+LINUX和关于FPGA的。不知道哪一个就业前景好? 因为做ARM+LINUX可以好好学学LINUX以及软件编程,如果学好了可以进百度、IBM之类的大型企业……做一个嵌入式程序员 而做FPGA不知道有什么好单位,除中兴、华为…… 希望这 ...… 查看全部问答> |




