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.

[参考译文] CC2640R2F:malloc 和 iCall_malloc 之间的区别是什么?#39

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1013270/cc2640r2f-what-s-the-difference-between-malloc-and-icall_malloc

器件型号:CC2640R2F

我们正在使用动态内存。 我无法找到是否使用 malloc、文档中 iCall_malloc 和常规 malloc 之间的区别。 您能否详细介绍此主题? 我们可以互换使用 mallocs 吗?

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

    您好!

    我指派了一名专家来帮助您的查询。

    此致、

    1月

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

    尊敬的 Deniz:

    感谢您在 E2E 论坛上发帖、

    [引用 userid="144578" URL"~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1013270/cc2640r2f-what-s-the-difference-between-malloc-and-icall_malloc ]]我无法找到是否使用 malloc、文档中 iCall_malloc 和常规 malloc 之间的区别

    iCall_malloc 处理 TI-RTOS、协议栈和应用之间动态内存分配的管理、而普通 malloc 则不会。   

    [引用 userid="144578" URL"~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1013270/cc2640r2f-what-s-the-difference-between-malloc-and-icall_malloc "]我们是否可以使用 mallocs 进行互换?

    我们建议应用程序使用 iCall API 来分配任何动态内存。  

    您可以在 BLE5用户指南 的 ICall 部分和 动态内存分配 部分中找到有关堆和内存管理的更多信息。

    希望这有所帮助、

    NIMA Behmanesh

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

    尊敬的 Deniz:

    我只是想跟进、我的回复是否有用?

    最棒的

    NIMA Behmanesh

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

    你好、Nima、

    我已经阅读了你提供的文本。  TI 应该扩展这些段、因为堆是一个重要的部分。 TI 还应该详细介绍块分配、它们在实现中使用的取消分配方法、因为有许多堆算法具有不同的性能损失。

    我真正想了解的是、如果我将 malloc 与 iCall_malloc 混合在一起、会发生什么情况。 如果我们使用"新建"运算符、它似乎使用 malloc、而不是 iCall_malloc。 我们是否必须过载新操作员?

    我希望 TI 将 malloc 重定向到 iCall_malloc 以防止误用.. 或者让我们再问一个问题、如果有2个 malloc 函数、我应该何时使用标准 malloc?

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

    尊敬的 Deniz:

    感谢您的反馈! 我将深入了解这些部分、看看我们如何在将来扩展它们。  

    [引用 userid="144578" URL"~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1013270/cc2640r2f-what-s-the-difference-between-malloc-and-icall_malloc/3754486 #3754486"]让我们再问一个问题:如果有2个 malloc 函数、我应该何时使用标准 malloc?

    不应使用标准 malloc(),因为 iCall_malloc()处理所有栈的内存分配。 此外、ICall API 允许您使用 HeapMem 和其他堆跟踪工具、而 ICall 函数是非阻塞的。  

    如果我做了更多的研究、我明天将向您介绍"新"运营商。

    最棒的

    NIMA Behmanesh

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

    尊敬的 Deniz:

    下面是有关“new”运算符和 malloc()不同版本的更新。

    如果您使用的是 BLE 堆栈,则建议使用 iCall_malloc()。 但是、如果您不使用 TI-RTOS 或任何其他堆栈、则可以使用 malloc()。 如果您使用的是 TI-RTOS,而不是整个 BLE 堆栈,那么您将使用 Memory_alloc()和相关的自由函数。 此外、如果你想实现你自己的 malloc()、你可以在 rtos_heapme.h 中定义它 如需更多信息、 请点击此处

    如果要使用“new”运算符,则建议将“new”运算符重载以使用 iCall_malloc()。

    希望这有所帮助、

    NIMA Behmanesh

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

    尊敬的 Deniz:

    只是想跟进、我的回复是否有用?

    最棒的

    NIMA Behmanesh

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

    感谢您的澄清。 最后一个问题:iCall_malloc 中断、 SVC 安全吗? 我看到在中断回调中使用 iCall_malloc 的示例。 用于邮箱等用途.. 在中断回调中使用动态存储器会让我紧张。

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

    尊敬的 Deniz:

    是的、iCall_malloc 中断是线程安全的。 然而、由于时序限制、内存分配例程不会从诸如硬件中断(HWI)或软件中断(SWI)等高优先级线程中调用。 完成这些任务可能需要太长的时间、从而中断其他低优先级任务的实时处理。  

    最棒的

    NIMA Behmanesh

x 出现错误。请重试或与管理员联系。