从Keil移植到GCC

8个帖子/ 0新
最后一篇
Ankitdaf.
离线
最后一次露面:2年9个月前
加入:2015-09-03 20:14
从Keil移植到GCC

你好

我正在尝试从Keil到GCC的583个项目的构建。

我已经设法取得了很大的进步,而是卡住了一点。

1.我得到了很多链接错误,即:

./../../../../../.. / ... / bly_stack/profiles/prf_utils.o: (.rodata.cust_prf_funcs+0x0):多个定义`cust_prf_funcs'
./../ ...../../../../../../../../1.. / ....../main/arch_system.o::(..rodata.cust_prf_funcs+0x0):首先在这里定义
../../../../../../../../../../../../sdk/app_modules/src/app_sec/app_security.o: (..rodata.cust_prf_funcs+0x0):worws`cust_prf_funcs'的多个定义
./../ ...../../../../../../../../1.. / ....../main/arch_system.o::(..rodata.cust_prf_funcs+0x0):首先在这里定义
./ ...... / ... /modules/src/app_common/app.o::(.rodata.cust_prf_funcs+0x0):多个定义`cust_prf_funcs'
./../ ...../../../../../../../../1.. / ....../main/arch_system.o::(..rodata.cust_prf_funcs+0x0):首先在这里定义

等等。我想有一些不正确的开关,但我找不到它的东西。有小费吗 ?
---
我收到内存溢出错误

ARM-None-EABI / bin / ld:out / full_emb_sysram.axf部分`.constdata'不适合区域`ram_irom4'
ARM-None-EABI / BIN / LD:Region RAM用堆叠溢出
ARM-None-EABI / BIN / LD:eR_IROM5加载于0000000020000440,000000000020006E33]重叠部分.CONSTDATA加载在[00000000200003E4,0000000000200005EB]
ARM-None-EABI / bin / ld:区域`ram_irom4'溢出428字节
Collect2:错误:LD返回1个退出状态

我怀疑这与内存设置不正确有关。是580.lds文件仍然适用吗?你能帮我一个583.lds文件吗?或者我如何开始移植这个?
我已经从应用程序注意到了这些步骤,但仍然有某种方式可以让我的583工作,如你所见:)

我打算在主流商业产品中使用583,所以这种帮助将走很长的路。

-
此致

设备:
Ankitdaf.
离线
最后一次露面:2年9个月前
加入:2015-09-03 20:14
你好

你好

我设法取得更多进步并设法获得积累。我通过手动比较了.map文件中的符号表来完成此操作,我注意到rom_symdef.txt中的相当几个符号被评论出来,它存在于从keil生成的地图中存在。我取消了解他们,构建成功了。

然而,可执行大小无处可靠地接近Keil生成的。KEIL生成的十六进制文件是78.9 kB,而GCC仅为6.4 kB。我猜测很多东西丢失了(因为某处一些缺少的配置线?)

你觉得我应该尝试什么?(我正在使用da14583)

Ankitdaf.
离线
最后一次露面:2年9个月前
加入:2015-09-03 20:14
我做了更多的挖掘,我

我做了一些更多的挖掘,我意识到,随着SDK提供的符号定义文件将无法正常工作,并且需要为项目动态地生成符号表。

我现在一直在尝试各种各样的事情,包括尝试使用NM打印符号表,但最多的符号被标记为未定义,甚至没有地址。所有符号都有0000 0000的地址。我不确定这是否是正确的。
你能从这里帮助完成建筑吗?我想我需要创建一个动态符号表,并使用它来链接。

我可以与您分享我在Makefile中制作的更改

请帮助,谢谢!

Ankitdaf.
离线
最后一次露面:2年9个月前
加入:2015-09-03 20:14
你好

你好

我检查了构建生成的.map文件,我注意到丢弃所有应用程序代码。

在.map文件中,下面有一个“丢弃的输入部分”条目,这是所有用户定义的功能等。

有链接时间优化还是这样弄乱?
我试图删除-ffunction-sections和-fdata-sections,但它没有帮助,它只显示出溢出错误。

可以是链接文件缺少583的东西,导致链接器忽略所有用户代码?

我认为拥有正确的583.lds.s文件,其中包括ROM符号以及特定于583的内存容量可能是使应用程序工作所需的最终事项

Ankitdaf.
离线
最后一次露面:2年9个月前
加入:2015-09-03 20:14
我花了一些时间

我花了一些时间。

来自对话的GCC专家可以帮助我在这里找出为什么应用程序代码完全丢弃?它是否与580.LDS.S文件有关?或者做
与链接器标志有什么关系?我正在使用gcc-arm-none-eabi 5.4

谢谢

Raohuaming.
离线
最后一次露面:4年6个月前
加入:2016-07-01 00:49
我也在努力

我也试图通过使用GCC-ARM-None-Wabi 5.4将我的Keil 5项目搬入GCC项目,但仍然没有运气。我首先使用uvproj2makefile来获取makefile,然后我分别对580.lds.s和makefile进行了一些更改。我有成功编译的所有文件,但无法将它们链接到所有。我也在寻求帮助将它移到GCC。谢谢。

Jamey.Hicks.cmt.
离线
最后一次露面:3年5天前
加入:2017-03-03 14:21
我注意到,如果UVProjx

我注意到,如果UVProjx文件包含对多个设备的支持,则源文件将多次复制到Makefile中。

删除重复的文件后,我能够消除多个定义错误。

标志 - 函数 - 部分和-Fdata-部分为每个函数和数据生成对象文件中的单独部分,使得链接器仅包括所引用的那些。

它听起来像引用应用程序未包含在构建中的代码。

我也遇到了重叠部分问题,但尚未解决它。

Jamey.Hicks.cmt.
离线
最后一次露面:3年5天前
加入:2017-03-03 14:21
我加了这一行:

我加了这一行:

*(。constdata *)

在580.lds中的*(。rodata *)行之后,并解决了问题.Constdata不适合ER_IROM2。

我正在寻找缺失的插件,导致我的ARM-None-EABI-GCC的6.2.1版,打包为GCC-ARM嵌入式:https://launchpad.net/~team-gcc-arm-embedded/aityArchive/ubuntu/ppa.

此版本的GCC包括使用Flag -Ftree-Switch-Constrible的交换机优化,并生成较小的二进制文件。

我还没有测试任何此代码,我的Dev模块是按顺序进行的。

我现在有一个python脚本,用于将keil项目文件转换为makefiles。它的工作更好,但它并不完全自动化。