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.

[参考译文] CC2640:优化堆栈利用率、减少闪存大小消耗

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1449923/cc2640-optimize-stack-utilization-for-reducing-the-flash-size-consumption

器件型号:CC2640

工具与软件:

您好!

我将使用 SDK 2.2.8版本来在 CC2640中实施安全通道、并将参考项目作为 simpleperipheral。

在 BUILD_CONFIG.OPT (-dble_v42_features=secure_conns_CFG)和(-DGAP_BOND_Mgr)中启用安全通道功能后、我可以观察到闪存空间消耗增加到62970字节。

simple_peripheral 示例应用的占用40308字节。

其中、我们有引导加载程序项目、耗用近5KB 的闪存。  

总体而言、在总共128KB 的可用闪存中、似乎消耗了110KB 的闪存大小、约为85%。

此消耗不会增加应用程序开销(根据我们的定制要求)。  

是否有可能减少或优化堆栈或 simple_peripheral 示例应用使用的存储器。?

谢谢/

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

    您好!  

    感谢您联系我们。  

    我想问你想释放多少闪存?

    我建议查看以下文档、看看是否可以确定一些闪存节省: https://software-dl.ti.com/simplelink/esd/simplelink_cc2640r2_sdk/5.30.01.11/exports/docs/blestack/ble_user_guide/html/ble-stack-3.x/creating-a-custom-bluetooth-low-energy-application.html#optimizing-bluetooth-low-energy-flash-and-ram-memory-usage (它不直接适用于您的案例、但应该会为您提供一些线索)。

    请告知我们您的进度。

    此致、  

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

    您好、Clement、

    如果可能、我想释放大约5KB - 10KB、以便我的应用可以适当容纳、同时保留10KB 的剩余缓冲区空间(仅在添加完整的应用代码后消耗90%)。

    我已经尝试了上述链接中的所有步骤。

    对于我们的应用、我们需要使用安全通道、OAD 库(还包括引导加载程序)。  

    添加 OAD 库后、闪存的总消耗、包括 Flash+App=113,994字节(这没有任何自定义)。  

    并且仅剩余10KB 用于包含可能不适用的应用。  

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

    您好!  

    谢谢您告诉我。  

    在我共享的链接之后、您管理保存了多少闪存?  

    下一步、找出 SDK 中提供的文件节省的内容。 默认情况下、这些文件旨在处理各种各样的用例、您可以删除未使用的代码。  

    使用一个驱动程序删除 fxnTable (适用于 I2C、SPI、UART、看门狗-不适用于 I2S、PDM、PIN)
    下面介绍了如何针对 I2C 驱动器的一项特定功能执行此操作(同样适用于其他驱动器和其他功能)

    • 位置
      • 添加#include
      • 将 handle->fxnTablePtr->cancelFxn (handle);替换为 I2CCC26XX_cancel (handle);
    • I2CCC26XX.c 中
      • 在 I2CCC26XX_fxnTable 中将 I2CCC26XX_CANCEL 替换为 NULL
      • 如果删除了 fxnTable 中的所有函数、然后可以将完整的 fxnTable 设置为 NULL
    • I2CCC26XX.h
      • 添加外部 void I2CCC26XX_CANCEL (I2C_Handle handle)

    这将有助于假定应用中未使用某些驱动器功能  

    =>为使这起作用、应使用驱动程序的源文件(而不是预编译的库)建立应用程序。 确保在项目中拉取您优化的驱动程序的源文件。

    2.确定未使用的驱动程序的某些功能。 合适的备选驱动程序可能是同时提供阻止和回调模式的驱动程序(通常仅使用这两种模式中的一种模式、即 UART、I2C、SPI 驱动程序)。 其他优化的可能在于驱动器提供多种采样频率(如 I2C 和 PDM)或配置(SPI)。
    有时、删除这些功能可能会通过从对象中删除某些使用的元素(例如在阻塞模式下使用的信号量)而导致 RAM 的使用量有所减少。

    =>和之前的注释相同

    3.通过删除未使用的模式来优化电源驱动程序

    4.引脚驱动程序:删除非 CC2640R2器件的初始化

    5.不要链接堆栈不需要的加密驱动程序模式。

    • 可以移除 AES CBC =>
    • 可以移除 AES CTR =>
    •  如果器件从未配对且未使用 RPA、则可以移除 AES-ECB =>
    • ECDH =>可以在只使用传统配对的情况下删除

    6.射频驱动器可以进行优化。 在 BLE3示例中、使用了射频单个信号。 RFCC26XX_singlemode.c 提供仅在 BLE 模式下不使用的代码。  

    =>我修改了一个文件,你可能想查看它 e2e.ti.com/.../RFCC26XX_5F00_singleMode_5F00_modified_5F00_not_5F00_tested.c

    7.切换到 HeapMem (而不是 OSAL HeapMgr)
    将 HEAPMGR_CONFIG 更改为0x81的应用程序 cfg 文件中

    8. 清除 devinfoservice.c =>验证函数 Info_Get contraceer()和 Info_Set contraceer()是否使用不同的参数调用(或仅使用一个参数)

    9.如果未使用、请确保 完全禁用 GATT_CLIENT。

    10、删除所有"开关"中未使用的分支,您可以找到

    我希望这将有所帮助、

    此致、  

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

    您好、Clement、  

    感谢挑选樱桃和提供建议。

    已尝试上述步骤、其中一些步骤已经到位。 我们只能额外节省1KB。

    请您澄清以下几点:

    -第6点、您是指 CC2640或 CC2640R2 SDK 中的 RFCC26XX_singlemode.c 文件。 因为当我比较你提供的文件和一个没有修改的文件时,我看到了巨大的差异。

    -第7点,你是指在 app_ble.cfg 中进行更改,然后调用 cc2640.cfg 文件。 但我在该文件中没有看到提到 HEAPMGR_CONFIG。  

    此外、关于 RAM:

    -我们可以利用高速缓存8kB 来减少闪存或 RAM 消耗吗?

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

    您好!  

    [报价 userid="318303" url="~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1449923/cc2640-optimize-stack-utilization-for-reducing-the-flash-size-consumption/5573600 #5573600"]

    -第6点、您是指 CC2640或 CC2640R2 SDK 中的 RFCC26XX_singlemode.c 文件。 因为当我比较你提供的文件和一个没有修改的文件时,我看到了巨大的差异。

    -第7点,你是指在 app_ble.cfg 中进行更改,然后调用 cc2640.cfg 文件。 但我在该文件中没有看到提到 HEAPMGR_CONFIG。  

    [报价]

    很抱歉、由于混淆、这两点实际上仅适用于 CC2640R2。  

    -我们是否可以利用可用的高速缓存8kB 来降低闪存或 RAM 消耗?

    高速缓存可用作 RAM -提供额外的8kB RAM。  
    对 RAM 和闪存使用总量的影响预计将是有限的。  

    若要添加我之前的建议、您还可以考虑更改编译器设置以 查看是否可以进一步优化。  

    此致、