C语言数据对齐是个坑

背景

最近在做升级这一块的项目,所以就遇到一个很坑的问题,就是数据一直写不到Flash中去。检查了所有语法,并对比了之前的程序,发现调用都没有问题,但是就是没法写Flash,很无语!

问题描述

首先定义了一个结构体

typedef struct{   U8 Soh;   U8 Pn;   U8 Pn_R;   U8 Data[1024];   U8 Crc[2];}XMODEMBUFFER;

然后定义了一个结构体变量

XMODEMBUFFER Xmodem_Buf;

中间有一段对该变量的赋值过程

…………..

最后写入Flash中

FLASH_ProgramSectionByLongs((U32)(CODE_FLASH_ADDR + (Xmodem_Buf.Pn-1)*1024), (U32 *)(&(Xmodem_Buf.Data[0])), 256)

上面的数据没法写入。

解决方法

把结构定义为

typedef struct{   U8 Soh;   U8 Stx;   U8 Pn;   U8 Pn_R;   U8 Data[1024];   U8 Crc[2];}XMODEMBUFFER;

多了U8 Stx;。然后就解决了!

之前的定义在数据之前是有3个字节,现在变成有4个字节了!

变成4个字节就变成数据对齐了。

总结

这里我就不给大家讲什么是数据对齐了,大家可以上 找,写得很详细。希望大家可以自己去学习,这样会理解得更深入!^_^

喜欢这篇文章,欢迎点赞,分享,关注

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年10月1日
下一篇 2021年10月1日

相关推荐