完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛| 
 
使用和谐1.06.我试图让我的应用程序代码链接,所以它只生活在程序闪存位置。启动代码应用程序将启动部分并跳转到我的应用程序代码。当我选择使用默认的应用程序链接器脚本时,它无法与这个error..reset链接到[9d001000,9d00120b]加载的.reset与[9d000200,9d001f07]加载的..vectors重叠。一旦我可以让我的应用程序独立链接,我想我可以尝试通过可加载的方式混合我的启动代码。我已经尝试了混合我的启动代码,它只是有其他的重叠。
 
 | 
|
相关推荐
 
 19个回答 
 
 | 
|
| 
 
项目中使用的链接器脚本与“应用程序链接器脚本”的主要区别是什么?使我的项目使用链接器脚本的简单行为使它失败链接。唯一的区别应该是在重置所在的地方。我不希望对链接器脚本进行重大更改。有趣的是:如果我将_ebase_address从0x9d001000更改为0x9d002000,就可以获得成功的链接。更有趣的是,两个例程仍然位于0x9d001000范围内,即vprintf例程和USART_Hardware……例行公事。这些是固定代码还是什么?我很快就在这个兔子洞里迷路了……有人给我扔了一块骨头,或者是胡萝卜。
  
 | 
|
| 
 | 
|
| 
 
更多猜测我的部分……为什么链接脚本脚本定义?如果我理解这个正确的话,提供链接的链接脚本不能工作,因为这两个部分实际上被定义为向量太冗长的重叠。将eBaseX地址设置为0x9dMun.Reals= 0x9D01000,并且我认为一个长度为0x20b.向量=0x9D000 0200,并且如果重新定义,我相信扩展到0x1D07的长度。似乎不管我做什么事情都是重叠的。给出了什么?
  
 | 
|
| 
 | 
|
| 
 
解决方案!!!!我昨天在我的.Read节上展示了向量重叠问题。见附图。转到Project属性,并在XC32 LD链接器下从选项中选择库并检查“不链接启动代码”框。完成。然后,您将从构建中得到一个无法找到“重置”的警告。这将从构建中移除.Read,假设它将提供一些其他方式,例如Bootloader。
  
 | 
|
| 
 | 
|
| 
 
不,这不是“不链接启动代码”选项是如何使用的。如果没有C运行时启动模块,您的代码几乎肯定会失败。
  
 | 
|
| 
 | 
|
| 
 
那么它是怎么做到的呢?这是通过微芯片支持向我展示的。我的启动代码包含启动代码,对吗?
  
 | 
|
| 
 | 
|
| 
 
由于链接器抱怨.reset和.vector之间的重叠,我们知道.reset和.reset.startup部分转到kseg1_boot_mem,而所有.vector部分转到._mem,那么您看到kseg1_boot_mem和._mem之间的内存重叠了吗?你应该考虑上传你的链接器脚本作为附件,这样我们就能得到你正在做的事情的完整图片。
  
 | 
|
| 
 | 
|
| 
 
reset从0x9d001000开始,其中kseg1_boot_mem开始并将其设置为0x480的长度。vectors从0x9d000000+0x200开始,除非vectors超过不应该有重叠的3584字节。这是Harmony 1.06提供的默认链接器脚本。我附上了我在项目中使用的脚本。
  
 | 
|
| 
 | 
|
| 
 
附加的是当它失败时的MAP文件。只是检查。重置和向量。我没有看到重叠。
  
 | 
|
| 
 | 
|
| 
 
要改变的事情有:1。将KSG00BooToMeMm(线α107)的尺寸从0改为0x10002。将行#131、135、139和665从kseg0_._mem更改为kseg0_boot_mem您可以在这里看到冲突-ebase是9D00_0000,这是kseg0_boot_mem的开始,并且它不是kseg0_._mem的一部分,但是您需要所有异常向量和中断向量,它们的位置基于uPON的EBASE,去KSG00SUPLE程序MEM。
  
 | 
|
| 
 | 
|
| 
 
我做了您建议的更改,并从链接器中得到同样的错误。我可以看到如何使这些变化分组的东西,或至少应该,并提供无重叠输出。这里是所有内容在此之后所在的位置:***************************************************************************************************************************************************************kseg0_boot_mem*-。*0x9d00_0000**************************************************************************所以,在检查了很多其他内存位置之后,我试着将这些段从mcu数据表中放入它们指定的内存位置。这实际上是链接的,如果我使用这些placements.kseg0_._mem=0x9D000000+0x1000+0x480kseg0_boot_mem=0x9fc00000,并且保持0x1000lengthkseg1_boot_mem=0xbfc0100000。因为μBaseX地址被直接使用来定位向量。现在使用:PROVIDE(_ebase_address=0x9fc00000)kseg0_._mem=0x9D000000+0x1000+0x480kseg0_boot_mem=0x9d000000,并保持0x1000lengthkseg1_boot_mem=0x9d000000来构建。1。现在我的应用程序向量位于引导闪存中,这很糟糕,因为第一次更新固件时,我的向量将不会与应用程序在同一程序空间中。2。当我将引导代码项目作为可加载文件添加时,它可能不会很好地适应引导闪存而不会破坏我的向量。我还尝试给kseg0_boot_mem更多的空间,长度为0x2000,并调整其他部分使之匹配。这也失败了同样的错误。kSe00BooToMeMm可以在内存保持向量、异常和启动中的任何地方吗?如果我把KSG00BooToMeMm放在0x9D010000,项目也会成功链接。
  
 | 
|
| 
 | 
|
| 
 
你需要设置一个基地址= 0x9d00亿。换句话说,你的应用程序的向量表是9d00万。您的应用程序的入口是在9D00 1000。
  
 | 
|
| 
 | 
|
| 
 
将μBaseX地址设置为0x9d00百万,它与重置重叠向量不连接。
  
 | 
|
| 
 | 
|
| 
 
我使用PIC32 MZ2048 EFG064。
  
 | 
|
| 
 | 
|
| 
 
是的,我也是。我来看看这些脚本,看看会发生什么。谢谢。
  
 | 
|
| 
 | 
|
| 
 
哇,你的应用程序脚本中有很多不同之处,只有和声单独提供。在我真正修改矿井之前,我有几个问题。1。是否手动添加所有这些配置文件BFC?声明以及BFC部分?如果你不知道这一切是从哪里来的?我的剧本没有那样的内容。我假设这是由于您已经将引导加载程序内置到整个项目中,但是这是我最终必须掌握的大量信息,并且不可能知道我需要脚本中添加的那些内容。你使用的是什么地址?我看到了在链接器选项中用宏注入的引用。3。我假设您手动添加了Y-BeViExpPTIAdDR和Y-DbGyExpPTIAdDADR以及支持段定义。我的脚本丢失了所有这些。4。这是什么选项(“LBMCHPUPUREARALLY32 MZ2048 EFG064?”)语句?我也错过了。我和你用的是同一个MCU。5。你使用的是什么和声版本?
  
 | 
|
| 
 | 
|
| 
 
我根本不使用和声。链接器脚本是基于编译器安装目录中的一个。对于PIC32MZ2048EFG064,默认链接器脚本可以在:C:Program Files(x86)Micro.xc32v1.40pic32-libsproc32MZ2048EFG064;4找到
  
 | 
|
| 
 | 
|
| 
 
这些是V1.40编译器提供的微芯片链接器脚本。Harmony是一个很短很缩略的脚本。如果Harmony是基于运输链接器文件的,那么快速比较一下就可以知道需要修改什么。像PIC24 Bootloader示例一样,不可能看到通过检查改变了什么和声。
  
 | 
|
| 
 | 
|
| 
 
AsCH0866,好吧。是的,和谐至少是有趣的。到目前为止,我的经验是,它使得艰巨的任务变得简单容易。感谢链接器脚本。我有希望(不是一个计划),我可以找到一个工作解决方案,通过比较两个。是的,缩写是一种很好的表达方式。不知何故,和谐消除了大量的规范在引导闪存区域。我现在想知道这会影响我的下一步,一旦我能找到这个应用程序脚本。因为一旦我知道如何使它工作,我会尝试嫁给一个引导代码项目到它。
  
 | 
|
| 
 | 
|
| 
 
现在我放弃了,试图让引导加载程序与我的V1.0.3脚本一起工作。我有我无法比较的脚本。和谐方面的零文档。散落在我头上的Linker方面的文档。没有EFH板来查看和谐脚本是否工作。然后,为了在MPLab X的顶部,我想看看启动代码,看看代码是否是我认为的。我了解了MIPS。内存布局。和谐的问题是框架这个词。这并不意味着他们认为这意味着什么。它并不意味着阻止和隐藏硬件的O/S。它并不意味着样本代码的快速原型环境,甚至不需要文档。现在我又在咆哮了。
  
 | 
|
| 
 | 
|
只有小组成员才能发言,加入小组>>
5248 浏览 9 评论
2036 浏览 8 评论
1956 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3218 浏览 3 评论
请问电源和晶体值之间有什么关系吗?PIC在正常条件下运行4MHz需要多少电压?
2264 浏览 5 评论
787浏览 1评论
678浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
604浏览 1评论
PIC Kit3出现目标设备ID(00000000)与预期的设备ID(02c20000)不匹配。是什么原因
685浏览 0评论
582浏览 0评论
 /7 
            小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-27 15:56 , Processed in 1.797161 second(s), Total 112, Slave 96 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
        关注我们的微信
         下载发烧友APP
          电子发烧友观察
          版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

                            
淘帖
1713