你好
我正在尝试从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,所以这种帮助将走很长的路。
-
此致
你好
我设法取得更多进步并设法获得积累。我通过手动比较了.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的内存容量可能是使应用程序工作所需的最终事项
我花了一些时间。
来自对话的GCC专家可以帮助我在这里找出为什么应用程序代码完全丢弃?它是否与580.LDS.S文件有关?或者做
与链接器标志有什么关系?我正在使用gcc-arm-none-eabi 5.4
谢谢
我也试图通过使用GCC-ARM-None-Wabi 5.4将我的Keil 5项目搬入GCC项目,但仍然没有运气。我首先使用uvproj2makefile来获取makefile,然后我分别对580.lds.s和makefile进行了一些更改。我有成功编译的所有文件,但无法将它们链接到所有。我也在寻求帮助将它移到GCC。谢谢。
我注意到,如果UVProjx文件包含对多个设备的支持,则源文件将多次复制到Makefile中。
删除重复的文件后,我能够消除多个定义错误。
标志 - 函数 - 部分和-Fdata-部分为每个函数和数据生成对象文件中的单独部分,使得链接器仅包括所引用的那些。
它听起来像引用应用程序未包含在构建中的代码。
我也遇到了重叠部分问题,但尚未解决它。
我加了这一行:
*(。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。它的工作更好,但它并不完全自动化。