This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

RAM不够用 cache_as_ram的问题

Other Parts Discussed in Thread: LAUNCHXL-CC2640R2

硬件:LAUNCHXL-CC2640R2

IDE:IAR 8.11.3

SDK:simplelink_cc2640r2_sdk_1_40_00_45

例程:ble5stack\simple_peripheral

请大家帮忙分下下问题,谢谢。

问题1:

从map文件分析heap大小,不同手机为什么对heap空间需求不一样?

问题现象:

建立连接 :小米手机heap小于3.5KB即可   荣耀手机heap需要大于3.5KB

蓝牙配对:小米手机heap需要5KB   荣耀手机heap需要6KB

heap空间不足,则会出现连接失败或者配对失败的现象

问题2:

使用8KB的CACHE作为RAM用,按照文档操作后,查看map文件,bss段已经分配到cache空间地址,RAM空间已经扩大,但是程序运行不会进入main函数,会卡死在ROM中如下代码:

0x1001b986: 0x2a00 CMP    R2, #0
0x1001b988: 0xd0fd BEQ.N  0x1001b986

文档提示ble5stack\multi_role工程中有现成的CACHE_AS_RAM的代码,运行效果现象相同。

  • 1.你将Heap改为多少了,我使用SDK4.40使用默认的heap连接手机没有出现问题
    2.map文件中ram还剩多少空间
    建议你升级到最新的SDK中再试试
  • 1.heap设置使用的示例工程默认配置,自动计算的,示例工程原始代码编译后,map文件中看heap有8KB,此时使用任何手机都能连接配对成功。加入user代码后,heap低于6KB(测试的大概值)的时候,荣耀X10手机配对就是出现失败的问题,此时小米手机配对可以成功。

    2.开启CACHE_AS_RAM功能后,map文件中 heap_start = 0x20000e18,heap_end = 0x20003fff


    84 933 bytes of readonly code memory
    10 671 bytes of readonly data memory
     9 098 bytes of readwrite data memory

    3.尝试使用SDK4.40,SDK解压后,打开C:\ti\simplelink_cc2640r2_sdk_4_40_00_10\examples\rtos\CC2640R2_LAUNCHXL\ble5stack\simple_peripheral工程,编译报错,提示:Fatal Error[Pe1696]: cannot open source file "xdc/std.h"

  • 对于不同的手机设备所需的heap,没有具体的说明,可能和设备自身有关系.e2e.ti.com/.../cc2640r2f-heap-size-required-for-le-secure-connections-pairing

    看下C:/ti/simplelink_cc2640r2_sdk_4_40_00_10/release_notes_simplelink_cc2640r2_sdk_4_40_00_10.html中的CCS和编译器版本要求
  • 也可以参考分析heap问题Debugging Common Heap Issues dev.ti.com/.../node
  • 总结一下该问题:

    1. 不同手机的配对连接确实会出现heap空间大小不一样的情况。原因在于不同手机的PDU的长度会不同,越新越高档的手机通常PDU也会越大。PDU大会导致在连接之后协议栈分配的内存就大,以维持连接所需要的资源。所以你可以通过控制本设备可以支持的PDU的大小来控制内存的使用量。

    2. 使用最新SDK4.40完美实现CACHE_AS_RAM功能

    3. 如果不会用到BLE5的特殊功能,比如long range, high speed,可以不要使用ble5stack 而使用blestack。这个在功能上除开BLE5的特殊功能以外是一样的,但是flash 和ram会富余的更多。