jz2440裸机开发与分析:串口编程4之struct内存占用介绍

发布者:DreamBig123最新更新时间:2021-09-14 来源: eefocus关键字:串口编程  struct  内存占用 手机看文章 扫描二维码
随时随地手机看文章

由于在x86(32位机器)平台下,GCC编译器默认按4字节对齐,

如:结构体4字节对齐,即结构体成员变量所在的内存地址是4的整数倍。


可以通过使用gcc中的__attribute__选项来设置指定的对齐大小。


1):

attribute ((packed)),让所作用的结构体取消在编译过程中的优化对齐,

按照实际占用字节数进行对齐。


2):

__attribute((aligned (n))),让所作用的结构体成员对齐在n字节边界上。

如果结构体中有成员变量的字节长度大于n,

则按照最大成员变量的字节长度来对齐。

代码如下:


struct  person{

char *name;

int  age;

char score;

int  id;

};


struct  person1{

char *name;

int  age;

char score;

int  id;

}__attribute__ ((packed));


struct  person2{

char *name;

int  age;

char score;

int  id;

}__attribute((aligned (4)));


int main(int argc,char **argv)

{

struct  person per={"www.100ask.org",10,'A',123};

printf("sizeof(char   )=%dn",sizeof(char   ));

printf("sizeof(int    )=%dn",sizeof(int    ));

printf("sizeof(char  *)=%dn",sizeof(char  *));

printf("sizeof(char **)=%dn",sizeof(char **));

printf("sizeof(struct  person)=%dn",sizeof(struct  person));

printf("sizeof(struct  person1)=%dn",sizeof(struct  person1));

printf("sizeof(struct  person2)=%dn",sizeof(struct  person2));


printf("&per.name  =%p,per.name  =%sn",&per.name ,per.name);

printf("&per.age   =%p,per.age   =%dn",&per.age  ,per.age);

printf("&per.score =%p,per.score =%dn",&per.score,per.score);

printf("&per.id    =%p,per.id    =%dn",&per.id   ,per.id);

return 0;

}


结果为:


sizeof(char   )=1

sizeof(int    )=4

sizeof(char  *)=4

sizeof(char **)=4

sizeof(struct  person)=16

sizeof(struct  person1)=13

sizeof(struct  person2)=16

&per.name  =0xbfe6bf60,per.name  =www.100ask.org

&per.age   =0xbfe6bf64,per.age   =10

&per.score =0xbfe6bf68,per.score =65

&per.id    =0xbfe6bf6c,per.id    =123

关键字:串口编程  struct  内存占用 引用地址:jz2440裸机开发与分析:串口编程4之struct内存占用介绍

上一篇:jz2440裸机开发与分析:串口编程3之printf解析
下一篇:jz2440裸机开发与分析:串口编程5之串口实现printf

推荐阅读最新更新时间:2024-11-01 20:37

jz2440裸机开发与分析:内存控制器3之时序图分析
根据前两节课,我们明白不同内存类设备与2440的连接 2440与NOR flash的连接图 由上图NOR flash 读的时序图可知,Taa即当输出地址的70ns之后数据有效;Tce即当CE处于低电平大于70ns之后数据有效;Toe即当OE处于低电平大于30ns之后数据有效;Trc即为读周期的时间为70ns;Tdf即为OE和CE处于高电平大于30ns之后,数据输出稳定;综上,我们要让2440同时发出CE,OE,addr信号。 寄存器的配置: 综上,通过配置寄存器BANKCON0使其发出可以满足控制NOR flash读的时序 代码 init.c #include s3c2440_soc.h void b
[单片机]
<font color='red'>jz2440</font><font color='red'>裸机</font>开发与分析:<font color='red'>内存</font>控制器3之时序图分析
JZ2440 串口裸机编程
ARM裸机1期加强版视频课程配套WiKi第11课_串口(UART)的使用, 共2节:第001节_辅线1_硬件知识_UART硬件介绍和第002节_S3C2440_UART编程,讲的是JZ2440 UART裸机编程。 文字不能完全替代视频,所以如果你看了这些文章感觉不错却不太懂,建议购买视频进一步学习。 第001节_辅线1_硬件知识_UART硬件介绍 1. 串口的硬件介绍 UART的全称是Universal Asynchronous Receiver andTransmitter,即异步发送和接收。串口在嵌入式中用途非常广泛: 打印调试信息 外接各种模块:GPS、蓝牙 串口因为结构简单、稳定可靠,广受欢迎。通过三根线即
[单片机]
<font color='red'>JZ2440</font> 串口<font color='red'>裸机</font>编程
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved