580.摩门教。年代错误呢?

6个职位/ 0个新职位
最后发表
Max44
离线
最后看到:11个月2天前
加入:2016-02-08等等
580.摩门教。年代错误呢?

你好,对话框,

我一直在查看运行GNU ARM编译器时,总是从运行生成的580的链接器中得到一个错误。LDS脚本行:

/*如果数据+堆+堆栈超过内存限制*/
ASSERT(__StackLimit >= __HeapLimit, "区域内存溢出与堆栈")

查看脚本,我认为条件__StackLimit >= __HeapLimit通常是true。__StackLimit被设置为RAM的顶部减去堆栈大小,而__HeapLimit从RAM基地地址向上移动作为代码和数据被添加。所以__StackLimit不是总是大于__heapllimit,直到RAM溢出到堆栈?

我将此更改为ASSERT(__StackLimit <= __HeapLimit,“区域内存溢出与堆栈”),根据地图文件....,内存分配看起来是正确的并在视觉上与相同示例的Keil地图文件进行比较。

谢谢你,马克斯

设备:
MT_dialog
离线
最后看到:4个月1天前
工作人员
加入:2015-06-08 34
嗨Max44,

嗨Max44,

我没有太多GNU链接器脚本的经验,但是是的,你提到的条件通常是正确的,通常_StackLimit大于_HeapLimit。当条件为false时,错误“region RAM溢出with stack”应该被打印出来:

ASSERT(exp, message)确保exp不为零。如果为零,则使用错误代码退出链接器,并打印消息。

由于MT_dialog

Max44
离线
最后看到:11个月2天前
加入:2016-02-08等等
太,

太,

抱歉把你拖进链接器脚本。我在这方面也没有太多经验,通常依赖于我使用的IDE来正确地生成一个。

您提供的ASSERT定义与我的假设相反,即如果表达式为真,则会得到错误....这似乎就是我现在的行为。我得进一步调查一下。我接受这个答案,但如果你不确定的话,我会加上我所发现的。正如我上面所说的,映射文件似乎表明内存分配是正确的。最后的证明将得到十六进制文件在硬件上执行,我还没有到那里。

我之所以决定考虑这个问题,是因为在我的应用程序中添加了SUOTA之后,内存使用增加到了大约30KB,这可能会导致我们担心超过Keil 32kb的限制。幸运的是,现有的应用程序固件有一些空闲空间,并且可以做我们想做的一切(现在!)

再次感谢,马克斯

MT_dialog
离线
最后看到:4个月1天前
工作人员
加入:2015-06-08 34
嗨Max44,

嗨Max44,

我将指出这一张贴作为完成,你将能够张贴任何相关的评论对此。

关于GNU支持在580我想让你知道,我们不完全支持GNU工具在580年,有一个文档,表明可以港口凯尔一个eclipse项目使用GNU工具但我已经提到过我们不完全支持它。

由于MT_dialog

Max44
离线
最后看到:11个月2天前
加入:2016-02-08等等
太,

太,

我知道您不支持580的GNU工具,我很感激您花时间回答我的问题。我之所以问这个问题,是因为这个问题与SDK中提供的文件有关。你提供的答案很有帮助,让我找到了这个问题。

我一直遵循将Keil项目移植到GNU工具AN-B-024的指南。这似乎是在Linux平台上完成的,结果文件在Windows下不能完全工作(除非您可能在Cygwin中从命令行运行内容)。但是您提到了Eclipse,这也是我目前正在尝试设置的。我已经为其他基于ARM的项目安装了Eclipse和GNU ARM工具链。是否有另一个文档专门处理Eclipse设置?

对于ASSERT错误,我发现startup_ARMCM0中使用了一些定义。没有设置S调用GNU汇编程序,导致堆栈大小不正确。在纠正这个错误之后,生成的链接器脚本中的ASSERT条件可以按照最初的定义正确工作。我想这个问题解决了。

最好的问候,马克斯

MT_dialog
离线
最后看到:4个月1天前
工作人员
加入:2015-06-08 34
嗨Max44,

嗨Max44,

关于将580个项目移植到GNU工具链,我们唯一可用的文档是AN-B-024,不幸的是没有其他文档。

由于MT_dialog