Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Embedded GreenHills-小数据区溢出_Embedded_Real Time_Linker Errors_Integrity_Greenhills - Fatal编程技术网

Embedded GreenHills-小数据区溢出

Embedded GreenHills-小数据区溢出,embedded,real-time,linker-errors,integrity,greenhills,Embedded,Real Time,Linker Errors,Integrity,Greenhills,我希望有人能快速回答这个问题,但本质上,当我打开优化时,会出现以下错误: [elxr](错误)小数据区 溢出:0xfff9f6fc(已签名)没有溢出 在执行时放入16位 文件test_main.o中的重新定位 在位置uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 当我输入此链接器指令时,也会发生类似错误: -自动驾驶 他们的手册没有提到这个链接器错误

我希望有人能快速回答这个问题,但本质上,当我打开优化时,会出现以下错误:

[elxr](错误)小数据区 溢出:0xfff9f6fc(已签名)没有溢出 在执行时放入16位 文件test_main.o中的重新定位 在位置uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

当我输入此链接器指令时,也会发生类似错误:

-自动驾驶


他们的手册没有提到这个链接器错误。我正在使用Integrity 5.10

在做了一些研究之后,链接所有不使用SDA选项的库可能会有这种冲突。由于我无法控制这些库的构建方式,目前我已将以下标志应用于我的GPJ,似乎解决了这个问题:

-Onolink
-no_auto_sda
-nothreshold
请注意,这些选项禁用所有链接器优化并完全禁用SDA选项。

此链接器错误通常与
-Olink
优化
-auto\u SDA
无关。链接器会看到您的整个程序,并会尝试通过自动发送超过64K的数据来避免把它搞砸。(这可能仍然是一个链接器错误,但这不太可能。)

这种错误通常发生的原因是,在链接器有机会尝试之前,没有链接器那么敏锐的人已经将超过64K字节放入SDA部分。如果你做了类似的事情,不易接受的人可能就是你

#pragma startsda
int small_data[10000];  // 40Kbytes
int small_data_also[10000];  // another 40Kbytes
#pragma endsda
(可能分割成多个文件;事实上,我认为如果您试图在一个文件中创建超过64K的SDA,您将得到一个编译器或汇编程序诊断)

但是,如果您正在传递选项,例如
-sda=4
(这就像您在整个文件中的每个4字节或更小的全局变量周围抛出一个
#pragma startsda
),并且您有大量全局变量,那么不易接受的个体也可能是编译器。编译器会很高兴地在20个单独的文件中分别对10000字节进行SDA,然后链接器会抱怨您正在处理200000字节的SDA。(链接器足够聪明,可以将常规数据引用重写为SDA引用,但从未教过如何以相反方向重写。)


最后,即使您认为自己没有通过
-sda=
,您也可能会感到惊讶。使用
-#
-v
选项运行驱动程序。IIRC,
ccintppc
默认情况下秘密传递
-sda=4
。你可以让司机停止“帮助”你;只需通过
-sda=none
-sda=0
,即可覆盖驾驶员的默认设置。您可能希望以文件为基础传递此选项,从您的开始。

我也有同样的问题,这也应该为您解决:


编译器选项
-large_sda
将允许23位sda重定位,而不是16位。然后你也应该能够毫无问题地使用
-sda=all

顺便说一句,我遇到的唯一一件事是提到使用sda构建的库与未使用sda构建的库之间可能存在某种不兼容。注意,起初,我不接受这个答案,因为它不是最好的,我欢迎任何仍然允许优化的改进想法。我想我已经发布了真正的答案,尽管我知道已经晚了两年。;)我不能确认它=),我换了工作,但它的根本原因听起来比我的高级修复更详细。@Quuxplusone我已禁用SDA,但它没有解决问题。我不是从命令行使用GHS Multi IDE。你知道如何使用-v选项吗。Thanks@Frankenstein:如果您的错误消息与Gary的有任何不同,请在此处发布新问题并通过评论链接到该问题。如果您收到的错误消息是完全相同的(一直到对
oe\u init\u intconn
的引用),那么(a)我不相信您,并且(b)您只需将
-v
添加到编译器选项中,就够了。@quoxplusone ready done=D不完全相同的错误消息。但我也在使用GHS Multi-wich,它是一个GUI界面,不是来自命令行