你好
我正在尝试从Keil到GCC的583个项目的构建。
我已经设法取得了很大的进步,而是卡住了一点。
1.我得到了很多链接错误,即:
./../../../../../sdk/ble_stack/profiles/prf_utils.o:(.rodata.cust_prf_funcs+0x0): multiple definition of `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): multiple definition of `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,所以这种帮助将走很长的路。
-
此致
你好
我设法取得更多进步并设法获得积累。我通过手动比较了.map文件中的符号表来完成此操作,我注意到rom_symdef.txt中的相当几个符号被评论出来,它存在于从keil生成的地图中存在。我取消了解他们,构建成功了。
然而,可执行文件大小是离that generated by Keil. The hex file generated by Keil is 78.9 KB whereas the one by gcc is only 6.4 KB. I am guessing a lot of stuff is missing (because of some missing configuration lines somewhere ?)
你觉得我应该尝试什么?(我正在使用da14583)
我做了更多的挖掘,我realise that the symbol definition file provided with the SDK won't work, and that the symbol table will need to be generated again dynamically for the project.
我现在一直在尝试各种各样的事情,包括尝试使用NM打印符号表,但最多的符号被标记为未定义,甚至没有地址。所有符号都有0000 0000的地址。我不确定这是否是正确的。
你能从这里帮助完成建筑吗?我想我需要创建一个动态符号表,并使用它来链接。
我可以与您分享我在Makefile中制作的更改
Please help, thanks !
你好
我检查了构建生成的.map文件,我注意到丢弃所有应用程序代码。
在.map文件中,下面有一个“丢弃的输入部分”条目,这是所有用户定义的功能等。
Is there a Link time optimisation or some such messing with this ?
I tried to remove the -ffunction-sections and -fdata-sections but it did not help, it only showed overflow errors.
Could it be that the link file is missing something for the 583, causing the linker to ignore all the user code ?
I think having the correct 583.lds.S file which includes the rom symbols as well as memory capacity specific to the 583 might be the final thing needed to make the application work
我花了一些时间this.
来自对话的GCC专家可以帮助我在这里找出为什么应用程序代码完全丢弃?它是否与580.LDS.S文件有关?或者做
与链接器标志有什么关系?我正在使用gcc-arm-none-eabi 5.4
Thanks
我也试图通过使用GCC-ARM-None-Wabi 5.4将我的Keil 5项目搬入GCC项目,但仍然没有运气。我首先使用uvproj2makefile来获取makefile,然后我分别对580.lds.s和makefile进行了一些更改。我有成功编译的所有文件,但无法将它们链接到所有。我也在寻求帮助将它移到GCC。谢谢。
我注意到,如果UVProjx文件包含对多个设备的支持,则源文件将多次复制到Makefile中。
After removing the duplicated files, I was able to eliminate the multiple definition errors.
标志 - 函数 - 部分和-Fdata-部分为每个函数和数据生成对象文件中的单独部分,使得链接器仅包括所引用的那些。
它听起来像引用应用程序未包含在构建中的代码。
我也遇到了重叠部分问题,但尚未解决它。
我加了这一行:
*(.constdata*)
在580.lds中的*(。rodata *)行之后,并解决了问题.Constdata不适合ER_IROM2。
I was looking for the missing plugin, which led me to version 6.2.1 of arm-none-eabi-gcc, packaged as gcc-arm-embedded:https://launchpad.net/~team-gcc-arm-embedded/aityArchive/ubuntu/ppa.
此版本的GCC包括使用Flag -Ftree-Switch-Constrible的交换机优化,并生成较小的二进制文件。
我还没有测试任何此代码,我的Dev模块是按顺序进行的。
I have a python script now for converting the Keil project files to makefiles. It works better but it's not quite fully automated.