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.

[参考译文] LAUNCHXL-CC2640R2:TI#39的 CC2640 BLE MCU 可能存在 RAM 问题

Guru**** 2534260 points
Other Parts Discussed in Thread: CC2640, CC2640R2L

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1015156/launchxl-cc2640r2-potential-ram-issue-with-ti-s-cc2640-ble-mcu

器件型号:LAUNCHXL-CC2640R2
主题中讨论的其他器件:CC2640CC2640R2L

您好!

这一职位是我在2个月前发布的相关职位的延续。 当时、我通过禁用项目零示例代码中的开箱即用 UART 日志实现并实施自己的已拆分版本的代码、能够节省一些内存。 但是、似乎我再次面临类似的问题、因为从那时起、我在我的固件中又添加了一些内容。

目前、我的 SRAM 使用率为~12、900 KB、我观察到以下异常情况:
1.无法一次发送大小为100字节的数据包。 我必须将数据包拆分为最大60字节的部分
2.蓝牙连接在立即随机发送数据包时断开。
3.设备蓝牙无线电停止响应,移动设备由于超时而断开连接。
我不确定如何调试这些问题、因为它们不一致且不可重现。

下面是我们使用的软件驱动程序列表:
UART
2. ADC
用于 RTC 的秒模块
4.蜂鸣器的 PWM
5.看门狗
6. SPI

今天、我添加了固件代码、以使用 SDK 提供的 PWM 驱动器来控制蜂鸣器。 当我添加 PWM_init()和 PWM_open()函数时,RAM 的使用增加了600字节。 我目前的 RAM 使用率为12、900字节。 只要我在~12、300字节上、我就看不到上述问题。 只是在为蜂鸣器添加 PWM 驱动器之后。

除此之外,对于我们使用的每个软件驱动程序,其各自的*_init()和*_open()函数会占用大量 RAM。 我假设这是因为他们的单个软件实例占用了大部分内存。

例如,我没有使用 PIN_Init()和 PIN_open() API 来使用 GPIO。 我直接使用 PINCC26XX_setOutputValue()和 PINCC26XX_getInputValue() API。 我认为这会将内存保存在 RAM 中、因为我不必为 PIN_Handle 或 PIN_TABLE 保存实例。 是否可以使用 SPI、ADC、UART、看门狗、PWM、 秒模块?

我的问题是:是否有任何方法可以直接连接这些驱动程序而不为它们创建一个保存内存的软件实例?
我们可以找到与此相关的任何文档吗?
如果是、则我们可能能够减少 RAM 使用并确认是否是 RAM 问题。

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

    您好!

    我已指派一名专家就这一问题发表意见。 同时、您能否提供您正在使用的 SDK 版本? 此外、您是否正在使用 CC2640或 CC2640R2?

    此致、

    1月

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

    您好!

    除了 Jan 的问题、您是否正在使用 BLE5? CC2640R2和 BLE5的存储器限制更为严重。 此外、您似乎有一个外设、是这样吗? 如果是、您是连接到多个中央设备还是仅连接一个? 这些将会产生影响。

    一般而言、较高的 RAM 使用率可能会影响正常执行期间的动态缓冲区分配、这会产生延迟操作直到其他操作运行完成的副作用、同时会丢弃数据包。 您可以查看下面的 RAM 优化应用手册

    https://www.ti.com/lit/an/swra537a/swra537a.pdf

    下面的参考文献中还提到了一些 RAM 调试技术:

    https://dev.ti.com/tirex/explore/content/simplelink_cc2640r2_sdk_5_10_00_02/docs/blestack/ble_user_guide/html/ble-stack-3.x-guide/debugging-index.html#dynamic-allocation-errors

    这显然不考虑在 PWM 运行时对其他外设进行任何抢占、但我将探讨上述存储器选项。

    绕过驱动程序 API、尤其是 PIN 驱动程序、可能会对其他驱动程序产生其他后果、如 PIN 驱动程序文档顶部的注释所述:

    大多数其他驱动程序依赖于 PIN 驱动程序中的功能。

    https://dev.ti.com/tirex/content/simplelink_cc2640r2_sdk_5_10_00_02/docs/tidrivers/doxygen/html/_p_i_n_8h.html

    希望这对您有所帮助、

    拉斐尔

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

    我的设置的详细信息如下:

    SDK 版本:4.40.0.10
    MCU:CC2640R2L
    我不使用 BLE5、我使用的是 BLE v4.2
    我将其用作外围设备(在自定义 PCB 上)、并且仅将其连接到1个中央设备(iOS 设备、iPhone X)

    关于引脚驱动程序、我现在无法返回使用引脚句柄、因为我已经处于 RAM 使用的边缘。 无论、

    [引用 userid="463492" URL"~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1015156/launchxl-cc2640r2-potential-ram-issue-with-ti-s-cc2640-ble-mcu ]\n 下面是我们使用的软件驱动程序列表:
    UART
    2. ADC
    用于 RTC 的秒模块
    4.蜂鸣器的 PWM
    5.看门狗
    6. SPI[/报价]

    以上是我使用的唯一驱动器、其中没有一个驱动器与我使用的3个 LED 和3个按钮引脚通过引脚驱动器重叠。 我检查了板级配置文件。 无论如何、我描述的问题不应由 GPIO 引脚重叠引起。

    感谢这些文档、我将通过这些文档来找到具体的内容、以便减少 RAM 的使用。 但是、在过去的两个月中、我面临着这个问题、我已经浏览过很多文档、尤其是 blestack 用户指南。 我将尝试在您共享的其他2个链接中找到有用的内容。

    同时、请分享任何建议、因为我已经分享了我的设置的详细信息。 此外、如果您有任何疑问、请告诉我、我会尽快将其清除。