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.

[参考译文] CC2340R5:将 MAX_NUM_BLE_CONns 设置为8会导致链接器失败

Guru**** 2351620 points
Other Parts Discussed in Thread: CC2541, SYSCONFIG
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1416002/cc2340r5-set-max_num_ble_conns-to-8-results-in-linker-fail

器件型号:CC2340R5
主题中讨论的其他器件:CC2541SysConfig

工具与软件:

你好

我´m 根据设置为 Central 的基本 BLE 工程(在 syscfg 文件中)开发一个应用、并´m 使用 simplelink_lowpower_f3_sdk_8_10_01_02中提供的示例。

我从 CC2541出来是因为它不能同时接受3个以上的连接、如 本主题中所示

SDK 中的默认基本 BLE 工程将 MAX_NUM_BLE_CONns 设置为1

当我将其更改为8、这是我要有效的目标时、链接器失败、并显示以下消息:

错误[Lp015]:段放置失败:[0x2000'0460-0x2000'8fff]中的过量内容

  我可以在不发生此链接器故障的情况下设置的 MAX_NUM_BLE_CONNS 为7。

我还需要一个。 如何改进内存管理以处理至少8个(甚至更多)连接?

感谢您发送编修
 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Alexandre、

    感谢您的咨询。

    我能够将示例构建为8个连接的中央器件、而不会出现链接器错误、您是否进一步修改了代码?

    您是如何增加连接数量的?

    添加更多连接会使用更多 RAM、并且可能需要增加堆大小(在 SysConfig 中-> FreeRTOS)。

    BR、

    David。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、David

    感谢您花时间提供帮助。

    我在此文件中增加连接数: TI_utils_build_compiler.opt

    -DHOST_CONFIG=CENTRAL_CFG
    -DHCI_TL_NONE
    -DATT_DELAYED_REQ
    -DSYSCFG
    -DMAX_NUM_BLE_CONNS=8
    -DGATT_MAX_PREPARE_WRITES=5
    -DEXTENDED_STACK_SETTINGS=EXTENDED_STACK_SETTINGS_DEFAULT
    -DGAP_BOND_MGR
    -DGAP_BONDINGS_MAX=1
    -DPOWER_SAVING
    -DSTACK_LIBRARY
    -DONE_BLE_LIB_SIZE_OPTIMIZATION
    -DICALL_EVENTS
    -DICALL_JT
    -DICALL_LITE
    -DICALL_STACK0_ADDR
    -DUSE_ICALL
    -DICALL_MAX_NUM_ENTITIES=6
    -DICALL_MAX_NUM_TASKS=3
    -DOSAL_CBTIMER_NUM_TASKS=1
    -DDeviceFamily_CC23X0R5

    将 MAX_NUM_BLE_CONns 设置为7时、链接器不显示任何错误。

    堆大小是此 SDK 工程(0x4D50)在 FreeRTOSConfig.h 文件中定义的默认堆大小。

    我更改了代码中的某些内容、但没有占用大量 RAM 空间的内容。 例如,我确实创建了一些全局 var 缓冲区和结构来保存有关8个连接的数据。

    我确实减少了一些缓冲区、在将堆从0x4D50增加到0x4D80后、现在链接似乎没有错误

    如果我将堆大小增加到0x4D80以上、我会得到以下错误:

    错误[Lp015]:段放置失败:[0x2000'0460-0x2000'8fff]中的过量内容

    我´m 开始开发我的应用、我肯定需要创建更多会消耗 RAM 内存的变量。 当我´m 为我的目标创建完整的应用程序时、我很确定这会回到困扰我的地方。

    要避免此问题、应遵循哪些建议或良好做法?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Alexandre、

    我们是否可以进行快速测试并使用 SysConfig (按照上一个答案中提供的示例图像进行操作)?

    BR、

    David。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、David、我的确按照您在前一张图片中展示的设置进行了操作。

    上述帖子中的结果是在修改 syscfg 文件后得出的。

    您是否还需要我做其他事情来进行测试?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Alexandre、

    「我明白了。 然后将堆设置为0x4D80可让您建立8个连接的项目。 如果您将在不修改项目的情况下消耗的 RAM 与在添加修改后获得的 RAM 相比、您需要多少 RAM? 您可以在此处查看在 CCS 中构建后的存储器分配。

    此外、您能否尝试运行运行运行运行运行 时对象查看器 (调试模式)来测量应用程序使用的最大堆是多少?

    BR、

    David。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、David

    我修改了 App_connInfo 结构、以保存更多数据、从而可以更快地重新连接。

    由于我确实将最大连接增加到了8、这消耗了更多的 RAM、因此我不得不将堆大小取消分配为0x4C40

    我现在可以构建它并同时连接8个器件。

    PACKED_ALIGNED_TYPEDEF_STRUCT
    {
      uint16_t              connHandle;             // Connection Handle
      BLEAppUtil_BDaddr     peerAddress;    // The address of the peer device
      uint16_t              svcUUID16[MAX_SEVICES];  // Services UUID
      uint16_t              svcStartHdl[MAX_SEVICES];
      uint16_t              svcEndHdl[MAX_SEVICES];
      uint16_t              charUUID16[MAX_CHARACTERISTICS];
      uint16_t              charCCCDWeight[MAX_CHARACTERISTICS];
      uint8                 indexWeightService;
      uint8                 servicesCounter;
      uint8                 charsCounter;
      int8_t                rssi;
      long                  pesoBruto;
      long                  pesoTara;
      long                  pesoLiq;
      uint8                 batLevel;
      uint8                 pFlags;
      uint8                 unidade;
      uint8                 dpto;
    } App_connInfo;

    我相信这个话题现在可以结束了。