完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我有一些关于默认链接器GLD文件的问题。我使用MPLAB-X 3.20和XC16V1.25。我的微芯片U/C是PIC24FJ64 GA44,“原点”这个词是做什么的?记录在哪里?下面是一个片段。这个芯片应该是64K的代码空间。配置比特是源于地址0xABFC的吗?参见下面的片段。我正试图从5年前获得好的源代码项目来构建。作者在AuART自更新例程中,源代码在高内存中写入代码更新。作者有一些关于内存管理的注释,并对需要修改的链接器脚本文件发出强烈警告。我想用最新的MPLLAB实现这个功能。[PIC24FJ64GA004.GLD]...OUTPUT_ARCH(“24FJ64GA004”)CRT0_STARTUP(crt0_..o)CRT1_STARTUP(crt1_..o)OPtiONAL(-lpPIC24Fxx)OPTIONAL(-lfx)/***Memory Regions*/MEMORY{data(a!(xr):ORIGIN=0x800,LENGTH=0x2000reset:ORIGIN=0x0,LENGTH=0x4ivt:LeNGTH=0x4ivt:OrIGIN=0x800,LENGTH=0x000复位=0x2000复位:ORIGIN=0x800,LENGTH=0x2000复位:ORIGIN=0x000ReseIGIN=0x000复位:ORx0,LENGTH=0x4iv4 ivt:OrIGIN=0x4,LeNGTH=0xx4iv4 iviv4 iivFC_ReseIGIN=0x100,LeNGTH=0xFC_xFC_reseIGIN=0xFOIGIN=0FIG1:ORIGIN=0xABFE,长度=0x2}
|
|
相关推荐
3个回答
|
|
Microchip有一个“有趣”的方案,用于定义和编号16位设备的程序地址空间,如PIC24系列。查看数据表的图4-1的PIC24FJ64 GA列。指令出现在程序存储器的指令空间的偶数字节地址上。一些指令采用一个指令字(两个字节),一些指令采用两个指令字(四字节)。指令空间中的第一个“项”是地址为0x00亿的指令。如果用PIC24设备创建一个项目,您可能会在地址0看到“Goto 0x200”。至少这就是我所看到的。“真正的”程序素材开始于0x200。它在图4-1中没有明确地说明,但是指令空间中的最后一个“项”是地址“0x00 ABFEFE”的配置字,在最后一个“item”中,指令空间是地址0x00 ABFC中的一个配置字。程序存储器E具有0x00 AC0NOW 0xAC00=十进制44032的长度,因此指令(包括配置字)的数目为22016。(表显示为22K指令。足够近,对吧?)好吧,你说(或者我可以想象你说),这里到底发生了什么?我的意思是指令字占用三字节(24位),而不是两字节,对吗?嗯……这是我看待它的方式:每个指令的高位字节在一个单独的空间中。不在表4-1所示的指令空间中计数。我不记得Microchip的文档提到过这一点,也许那不是唯一的方法,但这是单向的(我的方法)。gram Memory space)在Program Memory中设置和检索用户数据的上位字节有单独的(而且有些痛苦)方法。r比给出指令的数量,这对我们仅仅是工程师来说可能更有意义)也就是说:22016条指令乘以每条指令三个字节,就得到66048字节。所以他们称之为PIC24FJ64GA002。如果他们在计数指令而不是“总字节”,那么这个指定可能在某处是22而不是64。但是22并不像64那么令人印象深刻,对吧?现在我们来谈谈关于GLD文件的第一个问题(这里有个小双关语)。了解了?地址?不?哦,好…)在.gld文件中,ORIGIN和LENGTH值在指令空间地址中,没有考虑每个指令的上位字节。例如:.gld文件中内存的“重置”部分从地址0开始,长度为4,或者两个指令字。将PIC24项目中MPLABX程序内存显示的内容与我上面的评论进行比较。
|
|
|
|
戴夫,谢谢你提供的信息。所以,如果我得到正确的结果,配置字节不是起源于代码空间的末尾吗?你知道链接GLD文件中的关键字变量是否被记录?如果是,他们在哪里记录?丹
|
|
|
|
您的设备的闪存配置字(PIC24FJ64 GA04,对吗?)位于该芯片的用户闪存部分的末尾,如数据表的图4-1所示。我看到那个家族中的其他设备也有类似的组织,即Flash配置字的位置取决于用户Flash内存的数量。这些地址也列在数据表的表24-1中。注意:每个设备的数据表都有一个关于内存的部分,它显示“特殊”东西的地址。并非所有16位设备的组织都完全相同,所以如果知道确切的地址很重要,请查看数据表。例如,对于dsPIC33FJXXXMCX06设备,八个配置字都具有相同的(偶数字节编号)地址,0xF80000到0xFF8000E,XXX等于64、128和256。不管你使用什么设备。时期。(这不仅仅是配置寄存器的地址,对吗?)我的意思是,仅仅因为一个人在某个特定设备上取得了成功,并不意味着他在那个项目中学到的所有东西都传给了另一个设备。我从来没查过它。对我来说,链接器宏的命名和长度排序使它们能够自我记录。当我不久前开始为16位设备执行引导加载程序时,唯一让我头疼的是语义(数值的含义)。字节?指令词?什么?通过检查Data Sheet,查看.lst文件中的编译代码,在某些情况下查看MPLABX中的Program Memory显示,最后查看编译的.hex文件,我得出了结论(并且在实现上没有遇到任何问题)。在微芯片库中的应用程序使我对我的解释有信心。
|
|
|
|
只有小组成员才能发言,加入小组>>
5210 浏览 9 评论
2018 浏览 8 评论
1944 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3190 浏览 3 评论
请问电源和晶体值之间有什么关系吗?PIC在正常条件下运行4MHz需要多少电压?
2245 浏览 5 评论
760浏览 1评论
647浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
566浏览 1评论
PIC Kit3出现目标设备ID(00000000)与预期的设备ID(02c20000)不匹配。是什么原因
658浏览 0评论
557浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-11 06:41 , Processed in 1.192990 second(s), Total 81, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号