从Keil移植到gcc

8个职位/ 0个新职位
最后发表
ankitdaf
离线
最后看到:2年9个月前
加入:2015-09-03 20:14
从Keil移植到gcc

我试图将我的583项目的构建从Keil移植到GCC。

我已经取得了很大的进步,但仍停留在一个点上。

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

./../../../sdk/ble_stack/profiles/prf_utils.o:(.rodata.cust_prf_funcs+0x0): multiple definition of ' cust_prf_funcs'
./../../../../../ sdk /平台/ arch /主/ arch_system.o: (.rodata.cust_prf_funcs + 0 x0):首先定义
/../../../sdk/app_modules/src/app_sec/app_security.o:(.rodata.cust_prf_funcs+0x0):多个定义' cust_prf_funcs'
./../../../../../ sdk /平台/ arch /主/ arch_system.o: (.rodata.cust_prf_funcs + 0 x0):首先定义
./../../../../../ sdk / app_modules / src / app_common / app.o: (.rodata.cust_prf_funcs + 0 x0):多个“cust_prf_funcs”的定义
./../../../../../ sdk /平台/ arch /主/ arch_system.o: (.rodata.cust_prf_funcs + 0 x0):首先定义

等等。我认为有一些开关是错误的,但我找不到是什么。任何建议吗?
---
2.我得到一个内存溢出错误

/ full_emb_sysram arm-none-eabi / bin / ld:。axf节”。constdata'将不适合区域' RAM_IROM4'
arm-none-eabi/bin/ld:区域内存溢出与堆栈
arm-none-eabi/bin/ld: section ER_IROM5 loaded at [0000000020000440,0000000020006e33]与section .constdata loaded at [00000000200003e4,00000000200005eb]重叠
arm-none-eabi/bin/ld: region ' RAM_IROM4' overflow by 428 bytes .日志含义
Collect2: error: ld returned 1 exit status

我怀疑这与内存设置不正确有关。是580年的。LDS文件还适用吗?你能帮我弄一下吗?摩门教的文件?或者我该如何开始移植?
我已经完成了应用说明中的步骤,但仍有一段路要走,使我的583工作,如您所见:)

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

--
致以最亲切的问候

设备:
ankitdaf
离线
最后看到:2年9个月前
加入:2015-09-03 20:14

我设法取得了更多的进步,并设法建立了一个。通过手动比较.map文件中的符号表,我注意到rom_symdef.txt中的许多符号被注释掉了,这些符号出现在由Keil生成的映射中。我取消了它们的注释,构建成功了。

然而,可执行文件的大小与Keil生成的文件大小相差甚远。Keil生成的hex文件大小为78.9 KB,而gcc生成的hex文件大小仅为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文件中,有一个“丢弃的输入部分”条目,下面是所有用户定义的函数等。

有链接时间优化或一些这样的混乱?
我试图删除- functions -sections和-fdata-sections,但没有帮助,它只显示溢出错误。

可能是链接文件缺少了583的某些内容,导致链接器忽略了所有用户代码?

我想有正确的583.lds。S文件,其中包括rom符号以及特定于583的内存容量可能是使应用程序工作所需的最后一件事

ankitdaf
离线
最后看到:2年9个月前
加入:2015-09-03 20:14
我花了更多的时间

我花了更多的时间在这上面。

请Dialog的GCC专家在这里帮我弄清楚为什么应用程序代码被完全丢弃了?跟580。lds有关系吗。文件吗?还是
与链接器标志有关吗?我使用的是gcc-arm-none-eabi 5.4

谢谢

raohuaming
离线
最后看到:4年6个月前
加入:2016-07-01 00:49
我也一直在努力

我也一直试图通过使用gcc-arm- non- 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中。

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

flags - functions -sections和-fdata-sections在对象文件中为每个函数和数据生成单独的部分,以便链接器只包含被引用的部分。

这听起来像是引用应用程序的代码没有包含在您的构建中。

我也遇到过重叠部分的问题,但是还没有解决。

jamey.hicks.cmt
离线
最后看到:3年5天前
加入:2017-03-03 14:21
我添加了这一行:

我添加了这一行:

* (.constdata *)

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

我正在寻找丢失的插件,这让我找到了arm- noneabi -gcc的6.2.1版本,打包为gcc-arm-embedded:https://launchpad.net/~team-gcc-arm-embedded/+archive/ubuntu/ppa

这个版本的gcc包含了使用标志-ftree-switch-conversion的开关优化,并生成更小的二进制文件。

我还没有测试任何这段代码,我的开发模块是有序的。

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