你好
我正在尝试将我的583项目的构建从Keil移植到GCC。
我已经取得了很大的进步,但仍停留在某一点上。
1.我收到很多链接器错误,即:
./../../../sdk/ble_stack/profiles/prf_utils.o:(.rodata.cust_prf_funcs+0x0): multiple definition of ' cust_prf_funcs'
../../../../../../sdk/platform/arch/main/arch_system.o:(.rodata.cust_prf_funcs+0x0):首先在此处定义
/../../../sdk/app_modules/src/app_sec/app_security.o:(.rodata.cust_prf_funcs+0x0):多个定义' cust_prf_funcs'
../../../../../../sdk/platform/arch/main/arch_system.o:(.rodata.cust_prf_funcs+0x0):首先在此处定义
../../../../../../../sdk/app_modules/src/app_common/app.o:(.rodata.cust_prf_funcs+0x0)`cust_prf_funcs'的多个定义
../../../../../../sdk/platform/arch/main/arch_system.o:(.rodata.cust_prf_funcs+0x0):首先在此处定义
等等我认为有一些开关是不正确的,但我找不到它是什么。有什么建议吗?
---
2.我遇到内存溢出错误
arm none eabi/bin/ld:out/full\u emb\u sysram.axf节“.constdata”将不适合区域“RAM\u IROM4”
arm none eabi/bin/ld:堆栈溢出的区域RAM
arm none eabi/bin/ld:在[00000000 2000044000000020006E33]处加载的段ER_IROM5与在[00000000 200003E400000000200005EB]处加载的段重叠
arm none eabi/bin/ld:区域“RAM_IROM4”溢出428字节
collect2:错误:ld返回了1个退出状态
我怀疑这与内存设置不正确有关。580.lds文件是否仍然适用?你能帮我查一下583.lds文件吗?或者我如何开始移植这个?
我已经完成了申请说明中的步骤,但要让我的583正常工作还有一段路要走,如您所见:)
我打算在主流商业产品中使用583,因此这一帮助将大有帮助。
--
顺致敬意,
你好
我设法取得了一些更大的进步,并设法积累了经验。通过手动比较.map文件中的符号表,我注意到rom_symdef.txt中有相当多的符号被注释掉,这些符号出现在由Keil生成的映射中。我取消了它们的注释,构建成功了。
然而,可执行文件的大小与Keil生成的文件大小相差甚远。Keil生成的hex文件大小为78.9 KB,而gcc生成的hex文件大小仅为6.4 KB。我猜有很多东西丢失了(因为某些地方丢失了一些配置行?)
你认为我应该试试什么(我正在使用DA14583)
我做了更多的挖掘,我意识到SDK提供的符号定义文件不能工作,符号表需要为项目再次动态生成。
我已经尝试了半天多的各种事情,包括尝试使用nm打印符号表,但是大多数符号都被标记为未定义,甚至没有地址。所有符号的地址都是0000 0000。我不确定这是否正确。
你能从这里帮助完成构建吗?我想我需要创建一个动态符号表,并使用它进行链接。
我可以与您共享我在makefile中所做的更改
请帮忙,谢谢!
你好
我检查了生成生成的.map文件,注意到所有的应用程序代码都被丢弃了。
在.map文件中,有一个“丢弃的输入部分”条目,下面是所有用户定义的函数等。
有链接时间优化或一些这样的混乱?
我试图删除- functions -sections和-fdata-sections,但没有帮助,它只显示溢出错误。
可能是链接文件缺少了583的某些内容,导致链接器忽略了所有用户代码?
我想有正确的583.lds。S文件,其中包括rom符号以及特定于583的内存容量可能是使应用程序工作所需的最后一件事
我花了更多的时间在这上面。
一位来自Dialog的GCC专家能在这里帮我弄清楚为什么应用程序代码被完全丢弃吗?它是否与580.lds.S文件有关?还是这样
与链接器标志有关吗?我正在使用gcc arm ONE eabi 5.4
谢谢
我也一直在尝试使用gcc arm none wabi 5.4将我的Keil 5项目移植到gcc项目中,但仍然没有成功。我首先使用uvproj2Makefile来获取一个Makefile,然后分别对580.lds.S和Makefile进行了一些更改。我已成功编译了所有文件,但未能链接所有文件。我还寻求帮助将其移植到gcc。谢谢。
我注意到,如果uvprojx文件包含对多个设备的支持,那么源文件将被多次复制到Makefile中。
在删除重复的文件之后,我能够消除多个定义错误。
标志-ffunction节和-fdata节在对象文件中为每个函数和数据生成单独的节,以便链接器可能只包含引用的部分。
听起来您的构建中没有包含引用应用程序的代码。
我也遇到了重叠部分的问题,但尚未解决。
我加了一行:
* (.constdata *)
在580.lds.S中的*(.rodata*)行之后,这解决了.constdata不适合ER_IROM2的问题。
我正在寻找丢失的插件,这让我找到了arm- noneabi -gcc的6.2.1版本,打包为gcc-arm-embedded:https://launchpad.net/~team gcc arm embedded/+archive/ubuntu/ppa
此版本的gcc包括使用flag-ftree开关转换的开关优化,并生成较小的二进制文件。
我还没有测试过这些代码,我的开发模块正在订购中。
我现在有一个python脚本,用于将Keil项目文件转换为makefile。它工作得更好,但不是完全自动化的。