历史上的今天
今天是:2024年08月24日(星期六)
2020年08月24日 | PIC32MX795F512L BootLoader的linker script文档移植过程
2020-08-24 来源:eefocus
本人参照官方资料,做的学习笔记,有理解不对的地方请大神指出。
IDE:MPLAB X IDE v5.35 编译器 MPLAB C32 v2.02
参考材料:PIC32 Bootloader (AN1388)与MPLAB Assembler, Linker and Utilities for PIC32 MCUs User’s Guide(51833A)
链接如下:
PIC32 Bootloader (AN1388)
MPLAB Assembler, Linker and Utilities for PIC32 MCUs User’s Guide(51833A)
1.在工程目录下,新建.txt文本,然后改后缀为* .ld添加到工程中。
2.在编译器目录MPLAB C32 Suitepic32mxlibldscripts中把elf32pic32mx.x的内容复制到新创建的* .ld中。
3.将2所复制内容的17行INCLUDE procdefs.ld用编译器目录下pic32mxlibproc32MX795F512Lprocdefs.ld文件的内容替换。
4.复制两份,一份作为bootloader的linker script,一份作为app的linker script,然后添加到相应的工程中。
下图分别为PIC32MX5XX/6XX/7XX手册中FIGURE 4-6的KSEG1部分与KSEG0部分。

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。
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中
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。
ps
重点是根据自己的工程大小设置好地址范围,使各区域地址不重叠,所以不一定要这样分,可以看看btl_32MX795F512L_uart.ld。
如果你用的PICkit 3,有了linker script则PICkit 3 第一项默认配置就可以。这里如果选自定义烧写位置,又有linker script,PICkit 3不会管linker script中的地址,烧的是自定义烧写位置。如果想用烧写器自定义位置烧写bootloader与app,是不行的,好像烧写前全部擦除了,第一次烧的代码也被擦了。
下一篇:PICC 编译器的安装与使用方法
史海拾趣
|
请问AVR m8和m16的区别,今天在淘宝上买到一块板,上面有M8芯片,请问可以练习论坛上位M16编制的程序吗? 谢谢朋友的热心解释。 [ 本帖最后由 hizzx 于 2009-4-12 20:54 编辑 ]… 查看全部问答> |
|
请问各路大仙大侠,mplayer的解码和flash的解码是不是不同的?有没有遵循H.264标准? 比如说swfplay播放器,能否将mplayer的解码部分代码移植到swfplay这解码部分呢? … 查看全部问答> |
|
知道windows 平台下面有CryptoAPI库,专门用来进行数字签名,加密解密;但是发现并没有DSA签名,只有RSA签名 但在wince下面能进行DSA签名吗?CryptoAPI在msdn上的大部分例子,都是引入数字证书进行签名,有没有直接对数据进行DSA数字签名的函数? ...… 查看全部问答> |
|
按我的周计划,看了下WEBENCH。 web指明了只能在网上使用。我大致看了下 其实也不简单,入门级比较简单,那我就从入门级来吧。 其还可以选择语言,这点对我来说比较爽唉! 入门级工具进阶工具其它语言 WEBENCH 电源设计工具 WEBENCH LED 设计 ...… 查看全部问答> |
|
晒WEBENCH设计的过程+SallenKeyButterworth10KhzLPF Required: Cutoff Frequency: 10Khz,Stop band Frequency: 50Khz,The minimum stop-band attenuation : -45dB;The maximum pass-band attenuation: -25dB;Step1: Step2: Step3:Run simulation for step2’s schematic by Matlab .M co ...… 查看全部问答> |




