Green Hills Sw小数据区溢出

时间:2014-03-06 07:36:21

标签: c embedded powerpc greenhills

我正在尝试编译嵌入式C代码,但会发生小数据区溢出。我知道这意味着什么,但我不知道如何解决它。有人可以提出建议吗?

所以,问题是r13寄​​存器是sda的基指针,它是16位长。它被签名,因此它指向sda的中间,它可以用作偏移量来获取给定的变量值。

如果通过#pragma ghs startsda告诉变量放入sda,那么它将由sda_base + r13寻址,如果变量位于无法通过此基址+寄存器偏移量寻址的地址,则sda溢出据报道。

如何找到导致溢出的原因?如果我还没有地图文件,我不知道变量地址。

2 个答案:

答案 0 :(得分:0)

您需要检查以查看编译器配置。编译器可以自动将数据放入.sda区域。我忘记了确切的标志,但您可以从.sda中排除大于特定大小的数据。例如,你可以说大于64位的东西不会进入sda。这样,您定义的大缓冲区不会浪费您的所有sda空间。

答案 1 :(得分:0)

请在此处查看我对前一个问题的回答:https://stackoverflow.com/a/12305862/1424877

基本上,您应该使用链接时-auto_sda而不是编译时#pragma ghs startsda;如果链接器(elxr)可以为您执行SDA化,则后者不是非常有用,如果所有.o文件一起总计在SDA部分中放置超过64K,则可能导致链接器错误。

Green Hills的链接器可以自动“SDAize”编译器分配给.data的数据;但无法自动“解SDAize”编译器已分配给.sdata的数据。 (至少,它不能在2011年,我怀疑自2014年以来发生了变化。)