完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我试图在我的PIC24汇编代码中安排一些特定的数据组在RAM中生存,并在闪存中具有一致的副本,这样我就可以使用运行时工具访问这两个版本。在PIC18项目中,使用GPUtiLS,这是容易的——初始化数据可以按名称定位。据我所知,XC16根本不整理数据段的初始化——它在源文件中找到数据段时,在只能通过复杂算法推断的位置上,将数据段分散成很小的块。和LMA不同的一个部分。手册在9.7.5.11节中指出,“这个特性被设计成使构建ROM映像变得容易”和“用于与由这个链接器脚本生成的程序一起使用的运行时初始化代码将包括将初始化的数据从ROM映像复制到其运行时地址的功能。”这正是我想要的,我想。但它不起作用。我试着把区段类型设置为我能想到的每一个选项。使用“数据”会在映射文件中产生注释,但对十六进制没有更改。初始化数据仍然散布在所有其他init数据的微小碎片中。代码“在组装时失败”。PSV“在链接时间失败”。坚持“根本无法产生任何初始化数据。有人设法做到这一点吗?这个特性只是XC16完全破碎的另一个吗?
|
|
相关推荐
7个回答
|
|
所有运行时数据初始化器都被收集到.DIIT部分中。您可以通过检查链接器生成的MAP文件来检查这一点。最常用的是更改PSV映射。我怀疑这会对你有任何帮助。我不是汇编程序员,但你可以在C语言中相当容易地完成这项工作,而不用改变链接器脚本中的任何内容。
|
|
|
|
我确信链接器正在一个.dinit部分中收集所有片段。这是因为在启动期间通常有一些代码您不知道:一个memcpy()例程从flash初始化RAM。这通常是一个单独的例程,称为一次,复制所有初始化数据。因此,RAM和.dinit.BTW中的1:1偏移量:这就是“成熟”编译器(无意冒犯——我指的是针对“大”CPU的Wind.、Metroworks、Intel等)如何做到这些的。OTS @高科技-它有点“奇怪”在它如何处理事情。无所不知,但有点奇怪:
|
|
|
|
在告诉我“我不知道”之前,我建议你检查一下你自己的事实。我不是一个来自我屁股的新手。我一直是一个专业的嵌入式软件工程师,可能比你活的时间长。在我的主要工作中,我每天都使用Wind./Diab进行PPC,在所有的同事中,我最有可能深入研究得到的汇编代码,或者被问及编译器的怪癖和隐藏的数据结构。我的PIC18F代码是用GPASM构建的,它运行得很好。你似乎完全相信只有一个。DIIT部分导致与RAM的1:1匹配。您显然从未研究过.DIT部分的结构,也没有研究过多个数据段的含义。
|
|
|
|
抱歉,如果我碰触了神经……我误解了XC8——因为你的描述与XC8正在做的事情完全吻合……老实说:如果你比我老了,你得有75+的经验。还得工作吗?[8D]没有战争意图…
|
|
|
|
好的,抱歉,但是你的回答没有显示出什么证据表明你已经读过我所说的和一些重要的赞助,所以感觉就像一个年轻人,认为他们知道这一切。就像我说的,当你有多个数据部分和多个源文件时,检查一下XC16对.dinit到底做了什么。这不是你所期望的,它不是大多数专用的嵌入式系统编译器所做的。gputils(可能还有XC8,但是我没有使用过)在添加控制结构之前对init数据进行整理,以匹配RAM部分。XC16没有,这意味着它每个文件每节放置一个3个字(9个字节的Flash)头。如果您有三个数据部分,每个数据部分包含五个源文件中的内容,那么XC16会在其中放置这些头部分中的十五个(实际上更多,因为还有BSS头部和终止标记)。这不但让我很尴尬,而且浪费了ROM和CPU。我启动这个线程是因为我已经建立了所有这些,而且没有方便的方法来修复它。我曾希望链接器的“AT”指令可以提供解决方案,因为文档暗示它会,但是它似乎最终被破坏了(它只适用于您永远不想要的情况,而不适用于手册建议的情况)。
|
|
|
|
好的,已经阅读了“功能描述”——没有记住工具名(因为我从来没有使用过gputils)。还有什么可用的:把所有这些应用程序数据放在一个文件中。因此,你只有一次解决这个“谜”。不优雅,但仍然是一个实用的解决方案。顺便说一下,到目前为止,我只在汽车行业遇到过这个“动态数据校准”方案。您是在汽车行业还是有其他行业使用这些方案?当做
|
|
|
|
是的,这是一个解决办法。实际上,我在工作中编写的基于PPC的代码采用这种方法,不是因为任何与链接器相关的原因,而是因为那里的遗留工具希望所有校准项在构建之间保持相同的地址,如果将它们定义为使用它们的位置,则实际上不可能。时尚。PIC代码不是汽车的,它是高真空薄膜沉积-但我在汽车行业工作了我的大部分职业生涯。运行时校准工具对于代码必须适应非软件工程师的应用程序的混合的任何部门都非常有用。在成本没有目标的情况下,还有其他方法可以实现这一点,但汽车既具有影响安全的实时性,又具有成本敏感性。
|
|
|
|
只有小组成员才能发言,加入小组>>
5184 浏览 9 评论
2005 浏览 8 评论
1932 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3179 浏览 3 评论
请问电源和晶体值之间有什么关系吗?PIC在正常条件下运行4MHz需要多少电压?
2230 浏览 5 评论
740浏览 1评论
626浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
511浏览 1评论
PIC Kit3出现目标设备ID(00000000)与预期的设备ID(02c20000)不匹配。是什么原因
638浏览 0评论
535浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-28 16:23 , Processed in 1.425014 second(s), Total 88, Slave 72 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号