580.lds.s错误?

6个帖子/ 0新
最后一篇
MAX44
离线
最后一次露面:10个月1周前
加入:2016-02-08 15:58
580.lds.s错误?

你好对话框,

我一直在寻找运行GNU ARM编译器,我一直在运行生成的580.lds脚本的链接器中获得错误:

/ *检查数据+堆+堆栈是否超过RAM限制* /
断言(__ StackLimit> = __heaplimit,“Region Ram用堆叠溢出”)

看着脚本,我认为条件__stacklimit> = __heaplimit通常是真的。__stacklimit被设置为RAM的顶部减去堆栈大小,而__图像从RAM基地寻址向上移动,因为添加代码和数据。所以不是__stacklimit总是大于__heaplimit,直到RAM溢出到堆栈中?

我将其更改为serrert(__ stacklimit <= __heaplimit,“覆盖堆栈的区域Ram”),并且根据地图文件,内存分配看起来正确......加上与同一示例的Keil映射文件进行视觉比较。

谢谢,最大

设备:
mt_dialog.
离线
最后一次露面:3个月1周前
职员
加入:2015-06-08 11:34
嗨max44,

嗨max44,

我没有在GNU链接器脚本上有太多的经验,但是,你提到的条件通常是真实的,通常是_stacklimit大于_heaplimit。当条件假时,应打印出误差“带堆叠的区域RAM”:

断言(exp,消息)确保exp是非零。如果为零,则使用错误代码和打印消息退出链接器。

谢谢mt_dialog.

MAX44
离线
最后一次露面:10个月1周前
加入:2016-02-08 15:58
公吨,

公吨,

很抱歉将您拖入链接脚本。我这里没有太多的体验,通常依靠IDE我正在使用它来正确生成一个。

您提供的断言定义与我所采用的相反,如果表达式为true,则会获得错误....并且似乎是我得到的行为。我必须进一步调查这一点。我接受答案,但如果你离开这个打开,我会添加我的发现。正如我上面所说的那样,地图文件似乎指示内存分配是正确的。最终证明将获得在硬件上执行的生成的十六进制文件,我还没有。

我决定只看这一点,因为随着我的应用程序增加了我的应用程序,内存用途最多30kb,导致我们可能超过Keil 32 KB限制。幸运的是,现有的应用程序固件有一些空间备用,正在做我们想要的一切(现在!)。

再次感谢,最大

mt_dialog.
离线
最后一次露面:3个月1周前
职员
加入:2015-06-08 11:34
嗨max44,

嗨max44,

我将把这篇文章表明完成,您将能够发布任何相关评论。

关于580上的GNU支持,我想让您知道我们在580上完全支持GNU工具,有一个文档,指示人们如何使用GNU工具将Keil项目移植到Eclipse,但我提到我们提到我们不要完全支持它。

谢谢mt_dialog.

MAX44
离线
最后一次露面:10个月1周前
加入:2016-02-08 15:58
公吨,

公吨,

我知道你不支持580的GNU工具,我很欣赏你花时间回复了我的问题。我甚至只问,因为与SDK中提供的文件有关的问题。您提供的答案非常有用,让我追踪问题。

我一直在遵循将Keil项目移植到GNU Tools AN-B-024的指南。这似乎已经在Linux平台上完成,结果文件在Windows下没有完全工作(除非您从Cygwin中的命令行运行)。你提到了Eclipse,这是我目前正在尝试设置的东西。我已经使用了GNU Arm Toolchain的Eclipse用于其他基于ARM的项目。是否有另一个文档可以专门解决Eclipse设置?

我发现的断言错误是startup_armcm0中使用的一些定义未设置调用GNU汇编程序,导致堆栈大小不正确。纠正此后,生成的链接器脚本中的断言条件正常定义正常工作。所以我认为这个问题已经完成。

最佳,最大

mt_dialog.
离线
最后一次露面:3个月1周前
职员
加入:2015-06-08 11:34
嗨max44,

嗨max44,

我们对GNU Toolchain的移植580项目的唯一可用文档是AN-B-024,不幸的是,没有其他文档。

谢谢mt_dialog.