首先说明项目是基于MDK
接手了项目代码,但是项目的目录架构很乱,没调理,于是就想着整理一下(代码反正要重写)。
。。。。。。
整理完了,烧录到板子上运行,太意外了,前几秒都还好好的,突然就死了。
麻烦了,我没有直接去检查原因,而是通过之前的备份按照现在的目录一个文件一个文件的转移,看到底是哪个文件的改变造成的。
。。。。。。
找到了,于是进行调试检查原因,当死了的时候打开Fault Reports面板,发现UNALIGNED的勾被打上了,按照以前的经验判断
这个是字节未对齐,一般出在结构体上,凭直觉初步判断大概在哪个位置,然后再进行断点调试,果不其然,是执行一个向结构体
变量拷贝内存时出现的。
定位到那个变量的结构体定义,发现内部定义基本满足4字节对齐,纳闷儿了,在网上搜答案,这里又吐槽一下狗屎B度,我用关键字
stm32 unaligned 搜索,尽是些无用信息,切换google,第一个就是想要的结果,一个论坛里的,大概看了一下,说是要加
__packed关键字,于是试着加在结构体定义的typedef前面,再次编译运行。
。。
很神奇,顺利通过,再测试最之前改的那个目前架构,也顺利通过了。