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.
工具/软件: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++应用中使用链接器符号的子章节。
谢谢、此致、
乔治