打印
[PIC®/AVR®/dsPIC®产品]

PIC32MX795F512L BootLoader的linker script文档移植过程

[复制链接]
1095|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wiba|  楼主 | 2021-6-6 10:44 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
1.在工程目录下,新建.txt文本,然后改后缀为* .ld添加到工程中。
2.在编译器目录MPLAB C32 Suite\pic32mx\lib\ldscripts中把elf32pic32mx.x的内容复制到新创建的* .ld中。
3.将2所复制内容的17行INCLUDE procdefs.ld用编译器目录下pic32mx\lib\proc\32MX795F512L\procdefs.ld文件的内容替换。
4.复制两份,一份作为bootloader的linker script,一份作为app的linker script,然后添加到相应的工程中。
下图分别为PIC32MX5XX/6XX/7XX手册中FIGURE 4-6的KSEG1部分与KSEG0部分。


使用特权

评论回复
沙发
wiba|  楼主 | 2021-6-6 10:44 | 只看该作者
linker script部分内容说明

KSEG0可缓存,KSEG1不可缓存。
_ebase_address与exception_mem的ORIGIN一致,是中断向量地址。exception_mem必须在4K地址上对齐。
kseg1_boot_mem的ORIGIN与_RESET_ADDR 一致。C启动代码将映射到kseg1_boot_mem中。
所有C文件(文本和数据)都映射到kseg0_program_mem中。
_RESET_ADDR、 _BEV_EXCPT_ADDR与_DBG_EXCPT_ADDR 在 kseg1_boot_mem范围内。
官方btl_32MX795F512L_uart.ld有些地址范围重叠,建议看btl_32MX795F512L_generic.ld。


使用特权

评论回复
板凳
wiba|  楼主 | 2021-6-6 10:45 | 只看该作者
bootloader的linker script

kseg1_boot_mem取值在第一幅图KSEG1的Boot Flash中。 kseg0_boot_mem、 exception_mem的ORIGIN在第二幅图KSEG0的Boot Flash内。
kseg0_program_mem (rx) 在KSEG0的Program Flash中


使用特权

评论回复
地板
wiba|  楼主 | 2021-6-6 10:46 | 只看该作者
app的linker script

APP的linker script地址都是相邻的,比如下面的官方例程的代码或者下图官方手册AN1388的举例。取值在KSEG0的Program Flash范围内。注意bootloader中kseg0_program_mem在KSEG0的Program Flash的范围,app的不要与之重叠。

kseg0_boot_mem             : ORIGIN = 0x9D006000, LENGTH = 0x0 /* This memory region is dummy */
exception_mem              : ORIGIN = 0x9D006000, LENGTH = 0x1000 /* Interrupt vector table */
kseg1_boot_mem             : ORIGIN = (0x9D006000 + 0x1000), LENGTH = 0x490 /* C Startup code */
kseg0_program_mem    (rx)  : ORIGIN = (0x9D006000 + 0x1000 + 0x490), LENGTH = 0x81000 - (0x6000 + 0x1000 + 0x490) /* All C Files will be located here */



最后,烧写时在app的loadables中加上bootloader的工程,也可以把app加到bootloader中,生成一个HEX。也可以先烧bootloader,再用其他方法烧app。


使用特权

评论回复
5
wiba|  楼主 | 2021-6-6 10:47 | 只看该作者
ps
重点是根据自己的工程大小设置好地址范围,使各区域地址不重叠,所以不一定要这样分,可以看看btl_32MX795F512L_uart.ld。
如果你用的PICkit 3,有了linker script则PICkit 3 第一项默认配置就可以。这里如果选自定义烧写位置,又有linker script,PICkit 3不会管linker script中的地址,烧的是自定义烧写位置。如果想用烧写器自定义位置烧写bootloader与app,是不行的,好像烧写前全部擦除了,第一次烧的代码也被擦了。



使用特权

评论回复
6
STMING| | 2023-1-29 11:08 | 只看该作者
你这不就是AN1388 pic32自举程序的文档吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

77

主题

3305

帖子

3

粉丝