项目场景:
4G 智能家居产品
问题描述
app端下发指令后,设备收到并处理,重启设备出现恢复默认值状态,比如:app给设备发送指令arr[49] = 0x0A;并写入flash中,重启后a恢复默认值a[49] = 0x00;
#define DEFAULT_CFG_LEN 50
void func()
{
uint8_t arr[DEFAULT_CFG_LEN];
arr[49] = 0x0A ;
WirteFlash(Addr,arr,DEFAULT_CFG_LEN);
//断电
ReadFlash(Addr,arr,DEFAULT_CFG_LEN);
}
原因分析:
可能出现的问题:
1、并没有成功写入flash
2、并没有成功读出上一次保存的数据
3、数组空间定义不够大
解决方案:
经过keil中调试发现:
该数据可以写入也可以正常读出flash中的数据,但是数组中并没有存在最后一个数的值,如图所示。
我把数组的长度增加了一个字节后发现改数组的值出现错乱,考虑到堆栈溢出可能会导致出现无法解释的莫名其妙的现象。于是修改了启动.s文件的栈区大小(由0x00000800 修改为0x00000840),于是这个问题得以解决。