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/DRA746:SysBIOS 的正确默认堆配置

Guru**** 2589280 points
Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/639784/rtos-dra746-proper-default-heap-configuration-for-sysbios

器件型号:DRA746
Thread 中讨论的其他器件:SYSBIOS

工具/软件:TI-RTOS

我有一位客户 正在努力解决在 SYSBIOS 上运行的程序中的一些堆问题  

可以在 SMP 中配置的 IPU 内核上观察到该问题。 当他们执行大量内存分配时、会发生内核崩溃的情况。

他们 通过设置 HeapMem 的以下门(用作默认堆)设法解决了这个问题:

/*将 Gate 实例分配给 Heaps */

VAR Gate = xdc.useModule('ti.sysbios.family.arm.ducati.GateSmp');
VAR gateParams = new Gate.Params;
VAR gateInstance = Gate.create (gateParams);
HeapMem.common$.gate = gateInstance;

他们的问题是 、这是否是该堆的正确栅极配置? 在 SMP 模式中、它们是否可以使用其他堆、如 HeapStd 或 HeapBuf、这些堆没有栅极配置?

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

    我已将您的问题转交给一位专家征求意见。

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

    您的解决方案是正确的。 默认情况下、HeapMem 使用单核互斥量来提供互斥。 使用 SMP、您还需要排除其他内核。 这可以通过将 GateSmp 设置为栅极模块(而不是 GateMutex)来实现。

    Todd
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Todd、
    他们感谢您的回答、并提出后续问题:

    他们只在堆中发现了'Gat'配置问题、是否还有其他需要适当的门配置的组件、如任务、信标?
    它们设置了以下参数:
    BIOS.smpEnabled = true;
    它们在我们的 SYSBIOS 配置中使用以下"MP":
    •xdc.useModule('ti.sysbios.smp.SysStd');
    •xdc.useModule('ti.sysbios.family.arm.ducati.GateSmp');
    它们是否缺少一些附加配置?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 John:

    GateMutex 应在 SMP 设置中提供跨内核的互斥。 如果从中断上下文中完成堆分配、则可能会失败(SMP 和非 SMP 情况下均为 true)。 也许这里就是这样吗? 如果是、则使用 GateSmp 作为栅极提供器是合理的。 不过、我建议使用 GateHwi 而不是 GateSmp。

    最棒的
    Ashish