移植到BLE 1.4.2.2后出现的堆栈溢出问题
去年在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
.