ESP8266反复重启问题:Fatal exception 9:
-
根据打印信息,提示是字节对齐原因导致:
-
进一步定位到导致重启的代码是:spi_flash_read(Sector_VERIFY_INFO*4096,(uint32 *)&VerifyTest1, 32); 这个向flash读数据导致。
-
这个函数唯一可能引起重启的就是u8类型的变量VerifyTest1,这个变量是用来保存读取的flash的值,这个变量是定义的全局变量,而且是强制转换成uint32型,那和字节对齐的原因就是强制转换后不能4字节对齐,输出变量VerifyTest1的地址是
-
变量VerifyTest1地址并没有4字节对齐,而且这个地址是随机的,多次编译调试发现如果某个时候编译出来的地址刚好是4字节对齐,那么就不会出现反复重启的问题。
-
那么导致重启的原因会不会就是因为变量地址强制转换后不能4字节对齐所致呢,又怎么能让定义的变量能4字节对齐呢,我想到了结构体,我把变量VerifyTest1放在能够4字节对齐的结构体里,可以使变量始终保持4字节对齐。
-
再进行编译,变量地址为ESP8266_Auth_Cmd_Data = 3ffef75c,4字节对齐了,模块也不重启了。