BK3266遇到的内存溢出的问题

项目场景:

BK3266双模BLE开发。


问题描述:

在3266的开发中,使用sprintf进行蓝牙广播地址动态设置的时候,遇到了溢出的问题

sprintf((char*)&EQ_CONFIG_adv_data[sizeof(EQ_CONFIG_adv_data)-4], "%02X%02X",LEconfig_device_address[2],LEconfig_device_address[1]);

原因分析:

最开始的现象,是LEconfig_device_address[0]的初始值不管设置的是多少,最后都变为了00.通过跟原始的SDK代码逐一对比,才跟踪到了这里的问题。sprintf按道理是不会出现这样的溢出问题,应该是库文件重写了。


解决方案:

新建一个临时数组,先把转换的数据存到临时数组,再拷贝到目标数组。

调试经验

查看了整个代码,没有代码对LEconfig_device_address进行修改。所以初步推测是其他地方溢出覆盖到了这里。可以先用dump工具生成map文件,定位LEconfig_device_address存储的位置,然后看一下相临的变量,再去推测问题产生的可能性。这样疑点范围就能大大的缩小,较快问题排查速度。
BK3266的map文件格式大概如下:

004018fc G EQ_CONFIG_adv_data

第一个数字是地址。第二个标记,这里猜测是指全局变量。第三个,是变量名。

这个文件里面还有很多其他标记,目前能猜测到的,g应该表示的是临时变量,T是代码段。剩下的标记,暂时还不是很明确,以后用到了再去研究。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值