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.

[参考译文] 编译器/TMS570LC4357:为不带 MEMORY 的堆创建.sysmem

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/809977/compiler-tms570lc4357-sysmem-creation-for-heap-without-memory-c

器件型号:TMS570LC4357

工具/软件:TI C/C++编译器

尊敬的 TI 专家:

这与下面提供的先前查询有关

https://e2e.ti.com/support/microcontrollers/hercules/f/312/p/805194/2994497#2994497

我正在正确获取的堆开始和结束地址、我的理解是错误的。
我对此还有另一个问题、我正在使用来自 ti 的 memory.c 文件。
如果我将 memory.c 文件从我的编译中排除、我可以看到.sysmem 段未在映射文件中创建。
堆的起始地址和结束地址显示保存值。
当我查看 memory.c 文件时、我观察到 memory.c 中的以下部分代码正在创建.sysmem。
您能否在不进行这些更改的情况下解释为什么不会创建.sysmem、这与其他段不同、以及_sys_memory 将容纳什么内容。

typedef 结构包

size_t packet_size;/*字节数*/
struct pack * size_ptr;//自由列表中的下一个 elem *
}数据包;
#pragma DATA_SECTION (_SYS_MEMORY、".sysmem")
数据包_sys_memory[1];

此致、
Somesh

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

    下面是它的通常工作方式。  主应用程序调用 malloc 或一个类似函数、该函数从堆动态分配内存。  这会导致链接器搜索 RTS 库。  它会找到文件 memory.obj (从 memory.c 构建)、提供函数 malloc 的定义。  链接器会从 RTS 库引入 memory.obj。  文件 memory.obj 定义.sysmem 段和符号_sys_memory。  如果主应用程序不调用 malloc、则.sysmem 段或符号_sys_memory 没有定义。

    默认情况下不会创建符号 heap_start 等。  链接器命令文件必须创建它们。

    谢谢、此致、

    乔治

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

    尊敬的乔治:

    尽管我在代码中添加了 malloc 调用、但如果我注释掉以下行、则不会创建.sysmem。

    数据包_sys_memory[1];

    此致、

    Somesh

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

    是的、没错。  但我不明白为什么它有意义。  如果您对 RTS 源代码进行任何更改、则可能会导致这样的问题。

    谢谢、此致、

    乔治

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

    尊敬的乔治:

    我们不使用 RTS 库、而是希望直接从链接器命令中导出堆起始地址和结束地址。

    请就此提供帮助。

    此致、

    Somesh

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

    请告诉我您想要解决的首要问题。  现在、请忘记您所了解的有关链接器命令文件、符号等的一切内容。  尽可能简单地描述您想要做的事情。  我需要这种背景。  我可能能够建议一种更好的方法来实现它。

    谢谢、此致、

    乔治

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

    尊敬的乔治:

    根据 spnu151t.pdf 文档、  

    --heap_size=size [-]-heap 将堆大小(用于 C 中的动态存储器分配)设置为大小字节并定义 a
    指定堆大小的全局符号。 默认值= 2K 字节。

    您能否向我们提供上述的全局名称、以便我们在代码中引用该名称?

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

    [引用 user="Sreenivasan m"]您能否按上述方式向我们提供全局名称

    _SYSMEM_SIZE

    谢谢、此致、

    乔治

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

    谢谢 George。 您能否分享一个有关如何使用这些符号的示例?

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

    请在 ARM 汇编语言工具手册中搜索 标题为 在 C/C++应用中使用链接器符号的子章节。

    谢谢、此致、

    乔治