嗨
我试图将我的583项目的构建从Keil移植到GCC。
我已经取得了很大的进步,但仍停留在一个点上。
1.我得到了很多链接错误,即:
./../../../../../.. / ... / bly_stack/profiles/prf_utils.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_sec/app_security.o: (..rodata.cust_prf_funcs+0x0):worws`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,所以这个帮助将会有很长的路要走。
--
致以最亲切的问候
嗨
我设法取得了更多的进步,并设法建立了一个。通过手动比较.map文件中的符号表,我注意到rom_symdef.txt中的许多符号被注释掉了,这些符号出现在由Keil生成的映射中。我取消了它们的注释,构建成功了。
然而,可执行大小无处可靠地接近Keil生成的。KEIL生成的十六进制文件是78.9 kB,而GCC仅为6.4 kB。我猜测很多东西丢失了(因为某处一些缺少的配置线?)
你觉得我应该试试什么?(我使用的是DA14583)
我做了一些更多的挖掘,我意识到,随着SDK提供的符号定义文件将无法正常工作,并且需要为项目动态地生成符号表。
我已经尝试了半天多的事情,包括尝试使用nm打印出符号表,但大多数符号被标记为未定义,甚至没有地址。所有的符号都有一个地址0000 0000。我不确定那是否正确。
你能帮忙从这里开始建吗?我想我需要创建一个动态符号表,并使用它进行链接。
我可以与您分享我在makefile中所做的更改
请帮助,谢谢!
嗨
我检查了由构建生成的.map文件,注意到所有的应用程序代码都被丢弃了。
在.map文件中,有一个“丢弃的输入部分”条目,下面是所有用户定义的函数等。
有链接时间优化还是这样弄乱?
我试图删除-ffunction-sections和-fdata-sections,但它没有帮助,它只显示出溢出错误。
可以是链接文件缺少583的东西,导致链接器忽略所有用户代码?
我认为拥有正确的583.lds.s文件,其中包括ROM符号以及特定于583的内存容量可能是使应用程序工作所需的最终事项
我花了一些时间。
请Dialog的GCC专家在这里帮我弄清楚为什么应用程序代码被完全丢弃了?跟580。lds有关系吗。文件吗?还是
与链接器标志有关吗?我使用的是gcc-arm-none-eabi 5.4
谢谢
我也一直试图通过使用gcc-arm- non- wabi 5.4将我的Keil 5项目移植到gcc项目中,但仍然没有运气。我首先使用uvproj2Makefile得到一个Makefile,然后我对580.lds做了一些更改。S和Makefile。我已经成功编译了所有的文件,但是没有将它们全部连接起来。我也在寻求帮助,以将其移植到gcc。谢谢。
我注意到,如果uvprojx文件包含对多个设备的支持,源文件将被多次复制到Makefile中。
删除重复的文件后,我能够消除多个定义错误。
flags - functions -sections和-fdata-sections在对象文件中为每个函数和数据生成单独的部分,以便链接器只包含被引用的部分。
这听起来像是引用应用程序的代码没有包含在您的构建中。
我也遇到过重叠部分的问题,但是还没有解决。
我添加了这一行:
*(。constdata *)
在580.lds中的*(.rodata*)行之后。这解决了.constdata不适合ER_IROM2的问题。
我正在寻找缺失的插件,导致我的ARM-None-EABI-GCC的6.2.1版,打包为GCC-ARM嵌入式:https://launchpad.net/~team-gcc-arm-embedded/+archive/ubuntu/ppa
这个版本的gcc包含了使用标志-ftree-switch-conversion的开关优化,并生成更小的二进制文件。
我还没有测试任何这段代码,我的开发模块是有序的。
我现在有一个python脚本,用于将keil项目文件转换为makefiles。它的工作更好,但它并不完全自动化。