SDK版本: 2.20.00.49
硬件: CC2640R2F LaunchPad
IDE : IAR
我的project是在SDK Example: simple_peripheral_oad_offchip 的基础上来添加自己的应用.
异常现象:连接后有时会无法收发数据(目前我测试的project会有一半以上的的概率会出现这种现象)
我有用sniffer看了一下出现异常时的通信情况:连接之后, 在更新连接参数或LL_Channel_Map_Req时会开始出现异常, CC2640返回的空包中序列号一直是错的, 造成APP会不断重发. 出现这种现象之后,连接是一直保持着的, 连接不会断开, 但是一直在重发, 造成无法读写特征.
AndyChen:
这个问题从十一前到现在一直卡着 ,联系了 TI 业务 FAE帮忙查 , 但一直没有反馈 .
还请各位帮忙看一下 , 拜托拜托 , 被这问题整的心力交瘁了 .
AndyChen:
回复 AndyChen:
急在线等
AndyChen:
回复 AndyChen:
在线等
AndyChen:
回复 Viki Shi:
是的, 基本上连接后5秒内就会出现 .heap设置的是自动分配模式, 我从map文件中看到heap大小是3856 Byte. 是否有方法可以在debug时查看heap使用情况 ?
Viki Shi:
回复 AndyChen:
可以使能HEAPMGR_METRICS,并在板子上连接debugger跑代码,一出现问题,就停下来查看heap matrics
参考这边: dev.ti.com/…/ble-common_heap.html
AndyChen:
回复 Viki Shi:
Hi Viki,
确实可能是Heap的原因 .
当连接后出现所述的异常后 , IAR debug看heapmgrMemFail的值一般都 大于100 .
程序中删除一点代码 , 连接后不会出现异常 , 此时看 heapmgrMemFail 的值一般是 0 – 十几 .
heap设置的是OSAL Heap & auto-size 模式 ,我自己应用代码中变量应该只用了1KB左右 , 不过我有使用一些外设(比如: SPI, UART, I2C, ADC, PWM, RTC, Clock) , 然后我再map文件中查看到最终heap分配的大小约4KB .
当用APP连接CC2640之后 , 通过IAR debug查看到heap被使用了3K+ , 剩余200 Byte左右 . 所以感觉如果heap大小只有4K , 很容易会溢出 .
我的第①个问题 : 连接后heap使用会接近4K是否是正常的 ? ( 我自己的应用代码中并没有使用到heap , 不过UART和SimplePeripheral_enqueueMsg()会有少量使用到heap, 但肯定不会很多 , 而且应该是用完就释放了 )
如果CC2640 SDK的层确实会用到这么大的heap , 那我就必须想办法增大heap size 了 , 但目前我的应用代码使用的RAM其实并不多 , 只使用了1K左右 , 无法挤出太多的RAM给heap , 所以还是要从SDK配置着手 .
我的第②个问题 : 一般有哪些方法来缩减SDK中RAM的占用 ?
了解到似乎有8 KB Cache可以设置作为GPRAM使用 , 但有两个弊端: 1. 设置作为GPRAM后会增大sleep功耗, 约1-2uA( 可以接受 );2 . 会降低处理器运行速度
我的第③个问题: Cache作为GPRAM后 , 处理器运行速度会降低多少 ?