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.

[参考译文] RTOS/CC2640R2F:SimpleLink CC2640R2F 可能超出数据存储器?

Guru**** 2595800 points


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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/608521/rtos-cc2640r2f-simplelink-cc2640r2f-maybe-out-of-data-memory

器件型号:CC2640R2F

工具/软件:TI-RTOS

你好!

基于 SimpleLink CC2640R2 SDK 版本1.35.0.33的 simple_peripheral 示例、我的 SimpleLink 应用有一些问题。
编译器版本 TI v16.9.1.LTS、优化级别关闭(用于调试)。
固件在具有 CC2640R2的定制硬件上运行、无需32kHz 晶体。
我创建了一个额外的任务(任务 B)、堆栈大小为600字节。
在此任务中、我与 I2C 器件通信、因此我添加了 I2C 驱动程序。 该 I2C 器件的应用框架的尺寸令人印象深刻

(很抱歉、我无法告诉您我在这里使用的 I2C 器件的类型、因为这是机密信息)、如果我查看 Code Composer 的"Memory Allocation"窗口、我会得到以下结果:

simple_peripheral_cc2640r2lp_app:16368字节中的 SRAM 15721字节(96%)
simple_peripheral_cc2640r2lp_stack:SRAM 1040字节(5%)(共17408字节)

问题是、这个完整的大固件映像不能按预期工作、尽管似乎有一些可用的存储器。
如果我在运行代码时没有调用大型 I2C 器件框架(但它的附加任务仍然存在)、则没有任何内容

从其中链接、代码和数据大小会重新计算、剩余功能(蓝牙广播、配对连接等)按预期工作。
如果我取消注释对 SimpleBLEPeripheral_createTask()的调用,但调用较大的 I2C 器件框架,则情况相同。 现在、I2C 器件按预期工作、但当然没有蓝牙功能。
我想这与固件映像使用的数据大小有关。
我对 Code Composer 的"Memory Allocation"窗口的输出感到困惑。 它显示了100% SRAM、其中16368字节分别为17408字节、而在中则为

数据表 CC2640R2的整体物理 SRAM 存储器为20KB。
也许某些数据存储器会被覆盖? 如何解读这些 SRAM 数据读数? 20kBytes 的其余部分在哪里?

可疑堆叠峰值尺寸的 ROV 输出:

感谢您的帮助!

Andreas

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

    根据您的问题描述和 SRAM 的整体使用情况、我猜您的问题是由 ICall 堆无法分配内存造成的。

    在正常构建中、通常情况下、ICall 堆是最后分配的东西-它获取剩余的 RAM 并调用 ICall 堆。 这是堆栈中所有使用的堆、TX 缓冲区、Rx 缓冲区等 如果没有足够的 RAM、那么您将会遇到所描述的问题。 (堆栈任务运行时从未挂起)

    无论如何-我们在软件用户指南中有一节关于如何启用 HEAPMgr 指标的内容、我会给它一个快照、看看两件事-首先堆的大小是多少? 如果分配有任何失败、则为第二个。

    software-dl.ti.com/.../gen-debugging.html

    此致、
    反叛分子
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢、这样我就发现了堆故障。