gpt4 book ai didi

embedded - GreenHills - 小数据区域溢出

转载 作者:行者123 更新时间:2023-12-02 21:37:07 25 4
gpt4 key购买 nike

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

[elxr] (error) small data area overflow: 0xfff9f6fc (signed) didn't fit in 16 bits while performing relocation in file test_main.o at location __sti___13_test_main_cpp_252229d3+0xc, to reference symbol oe_init_intconn

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

-auto_sda

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

最佳答案

此链接器错误通常-Olink优化-auto_sda无关。链接器会看到您的整个程序,并且会尽量避免通过 autoSDAizing 超过 64K 的数据来搞砸它。 (它可能仍然是一个链接器错误,但这不太可能。)

发生此错误的原因通常是,在链接器有机会读取数据之前,那些不如链接器敏锐的人已经将超过 64K 字节的数据放入 SDA 节中。尝试一下。如果你做了类似的事情,那么没有洞察力的人可能就是你

#pragma startsda
int small_data[10000]; // 40Kbytes
int small_data_also[10000]; // another 40Kbytes
#pragma endsda

(可能分为多个文件;事实上,如果您尝试在单个文件中创建超过 64K 的 SDA,我认为您将获得编译器或汇编器诊断)。

但是,如果您传递诸如 -sda=4 之类的选项(其作用就好像您抛出了 #pragmastartsda整个文件中每个 4 字节或更小的全局变量),并且您有大量的全局变量。编译器会很乐意在 20 个单独的文件中的每个文件中 SDAize 10,000 字节,然后链接器会提示您正在向它传递 200,000 字节的 SDA。 (链接器足够聪明,可以将常规数据引用重写为 SDA 引用,但从未被教导如何以相反的方向重写内容。)

最后,即使您认为您没有通过-sda=,您也可能会感到惊讶。使用 -#-v 选项运行驱动程序。 IIRC,ccintppc 默认 secret 传递 -sda=4。你可以让司机停止“帮助”你;只需传递 -sda=none-sda=0,这应该覆盖驱动程序的默认值。您可能希望逐个文件地传递此选项,从 coldest code 开始。 .

关于embedded - GreenHills - 小数据区域溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2788188/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com