微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > 移植到BLE 1.4.2.2后出现的堆栈溢出问题

移植到BLE 1.4.2.2后出现的堆栈溢出问题

时间:10-02 整理:3721RD 点击:

去年在BLE 1.4.0的SensorTag代码基础上完成了一个小项目,一直运行正常。前几天打算移植到BLE 1.4.2.2,依然是在V1.4.2.2范例SensorTag的基础上进行修改。现在出现问题,运行之后出现堆栈溢出问题,提示信息有两种情况,第一种情况是按照提示选择Debug>Break后Log窗口除了下面的,没有其他信息。

Fri Sep 16, 2016 21:11:17: Warning: Possible IDATA stack overflow detected. To see the instruction that caused the possible overflow, choose Debug>Break and close this message box. To continue execution, just close 

第二种情况是,除了这条信息后,还有一条这个信息:

Fri Sep 16, 2016 21:22:27: The stack pointer for stack 'IdataStack' (currently IData:0x0C) is outside the stack range (IData:0x40 to IData:0x100)

第一种情况的屏幕截图如下:

可见SP=0x47,其实并没有超出堆栈范围。但是IDATA窗口中所有值都已变化,也就是说这些空间的确被使用过了。Call Stack有完整的痕迹,没见有啥异常。

第二种情况的屏幕截图如下:

可见此时SP值的确已经溢出,IDATA窗口中可以看到所有区域都有更改的痕迹,也就是stack的确都被使用过了,Call Stack窗口中只有一条记录,不过每次都不一样的。

对比用BLE 1.4.0编译时候的map信息,跟用1.4.2.2的基本差不多,如下

请问是什么原因导致这种情况?有何办法跟踪分析?

那两张大图点击后可以放大看详细内容。谢谢!

忘记说明了,芯片是CC2541,现在用的是IAR for 8051 V9.30.1。跟IAR版本有关系吗?

找到原因了。

重新移植。原来是把所有文件全部改完再调试,现在改一个文件调试通了再改下一个文件。是一个数组长度定义错了。

不错,定义出错能自己找回来

挖坑后能填坑,善莫大焉!:)

1.版本还是需要注意下。因为,相应版本的栈只在相应的IAR下测试过。从如下网址可以得到对应的版本。

https://www.iar.com/iar-embedded-workbench/partners/texas-instruments/ti-wireless/

2.对照下面的porting指导看一下,1.4.1相对1.4.0变化有不少地方。仔细对照看看。

http://processors.wiki.ti.com/index.php/LPRF_BLE_Porting_Projects

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top