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.

[参考译文] 内存分配形式 HWI/SWI 上下文

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/839437/memory-allocation-form-hwi-swi-context

主题中讨论的其他器件:TM4C1294KCPDT

您好!

 我们能否在 HWI/SWI 上下文中使用"std::new "调用来分配存储器?

此致、

Sandhya

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

    不、您不能。

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

    感谢您的回答。

    但我不明白为什么 HWI/SWI 上下文中不允许使用"std::new"。

    我正在使用 TM4C1294KCPDT 控制器并使用 TI-RTOS 2.16版本。 出于项目目的、我想在计时器中创建一个硬件计时器

    回调需要分配内存以更新某些缓冲区,同样需要通过 Mailbox_post ()发送。

    此内存分配是否会造成任何问题 ?

    此致、

    Sandhya

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

    Sandhya、

    默认情况下、TI-RTOS 提供"malloc"函数。 它调用 HeapMem_alloc (默认情况下再次调用)。 默认情况下、HeapMem 使用信标(实际上是基于信标的门)。 由于"新建"调用"malloc"、您的 Hwi (或 Swi)可以调用具有非零超时(非零超时)的 Semaphore_pend 函数

    您可以通过提供不使用门的不同默认堆(例如使用 HeapBuf 或 HeapMultiBuf)来更改 malloc 的行为、但您必须对堆的桶大小有一个好的想法。

    您可以在 HeapMem 中使用一个 Hwi 友好型门(例如 GateHwi)、但要意识到这将影响中断延迟、因为 HeapMem 自由译员的内部访问将在禁用中断的情况下完成。

    Todd  

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

    感谢 Todd 的详细信息。

    我想知道从哪里可以获得这些信息,比如 TI-RTOS 的“new ”内部调用 HeapMem_alloc(),

    这样我们就可以在将来避免这种使用。

    此致、

    Sandhya

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

    您好!

    我想知道从哪里可以获得这些信息,比如在内部 调用 TI-RTOS 的 HeapMem_alloc()。

    此致、

    Sandhya

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

    您好、Sandhya、

    Todd 目前不在办公室,因此可能会延迟答复。

    同时、我建议您查看 TI-RTOS (SYSBIOS) API 文档

    Derrick

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

    Sandhya、

    这在 SYS/BIOS 用户指南中进行了介绍: