背景
最近在做升级这一块的项目,所以就遇到一个很坑的问题,就是数据一直写不到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进行处理,非常感谢!