过关砍bug-(栈溢出)

项目场景:

       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),于是这个问题得以解决。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值