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:OAD iCall_malloc()堆运行问题

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/607115/rtos-cc2640r2f-oad-icall_malloc-heap-runout-problem

器件型号:CC2640R2F

工具/软件:TI-RTOS

这个主题可能早已讨论过、但我看不到有关这个问题的任何修复或进一步讨论。

基于当前的 CC2640R2F 1.35 SDK、OAD 如何处理接收到的写入块数据:

  1. 中央系统将块写入数据到 OAD_IMG_BLOCK_UUID
  2. oadWriteAttrCB()接收块数据  
  3. oadWriteAttrCB()将接收到的数据块发送到 SimpleBLEPeripheral_processOadWriteCB()
  4. SimpleBLEPeripheral_processOadWriteCB()调用 iCall_malloc()以从堆获取内存并将其存储到堆中
  5. 应用任务从堆中获取数据并将其保存到闪存中

问题很明显。 如果中央和外设之间的速度真的很快。 如果闪存写入需要更多的时间、iCall_malloc()可能会从堆内存中运行。 我看不到当前 SDK 会处理这种情况。

Samson

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

    在发送下一个块之前、您的客户端(OAD 下载程序)是否正在等待确认(通知 OAD 映像块特征)?

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

    您好、JXS、

    客户端是 TI 的 SensorTag 应用程序(iOS)、标记为"Starter"。 它表示默认情况下、每12个数据包发送通知的延迟为10ms、但我怀疑确实如此。 Android Starter 应用程序甚至根本不起作用。

    Samson