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/TMS320C6670:处理多个堆

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

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/647619/rtos-tms320c6670-handling-multiple-heaps

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

工具/软件:TI-RTOS

您好!

我们正在 C6670上开发系统。 在开发的某个阶段、我们意识到需要有多个堆。 在此之前,malloc()和 free()可以方便地路由到它们的实际实现,而开发人员并没有为此而烦恼。 现在、正如我们所希望的、除了默认堆、我们还需要使用一些其他 API。

据我所知、DSP/BIOS 中的 MEM_alloc 和 MEM_FREE 现在被 SYSBIOS 的 Memory_alloc 和 Memory_free 所取代。

我知道如何通过配置脚本创建其他堆。 我想知道 Memory_alloc 和 Memory_free 的目标用法是什么。 前面的内容相对清晰、堆句柄、块大小和对齐看起来都是相关的、也是合理的。 使我卡住的是无内存的预期用途。 我可以理解显式传递堆句柄参数、但为什么该 API 需要显式指定块大小才能释放? 使用 malloc()的人员很少会被请求跟踪块大小。 这是否意味着、使用多个堆、从而使用 Memory_free 必须保留已分配块的记录?

当然、我知道、在指针返回之前、存在有关此分配的"隐藏"记录、并在那里进行窥探、我可以找到块大小。 但是、我感觉不是 API 的预期用途。

我知道我要问的问题非常简单和基本,但请引导我了解 Memory_free ()的一些实际用法指南或示例。

提前感谢。

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

    嗯、之前的问题似乎是"为什么我们需要将 size 作为 Memory_free 的最后一个参数"

    据我所知,映射到 XDC_RAuntime_Memory_alloc()的 Memory_alloc()不会生成有关请求的块大小的隐藏记录。 同时,如果我遵循 malloc()的定义,它会将我分配到一些 proj_h_pe66.c,这看起来与我生成的差不多。 我看到了

    void 属性*malloc (SizeT 大小)
    {
    标头*packet;
    XDC_RAuntime_Error_Block EB;
    
    xdc_runtime_Error_init (&EB);
    
    如果(size = 0){
    返回(NULL);
    }
    
    数据包=(标头*) XDC_RAuntime_Memory_alloc (NULL、
    (SizeT)(size + sizeof (Header))、0、&EB);
    
    if (packet == NULL){
    返回(NULL);
    }
    
    packet->header.actualBuf =(ptr) packet;
    packet->header.size = size + sizeof (Header);
    
    返回(数据包+ 1);
    } 

    因此,我认为 malloc()实现在 XDC_runtime_Memory_alloc()之上添加了这个额外的隐藏记录函数。

    我只是好奇,是否可以创建类似的实现,例如 Other_malloc(),并在其他堆中内部实现该隐藏记录。