本人参照官方资料,做的学习笔记,有理解不对的地方请大神指出。
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,是不行的,好像烧写前全部擦除了,第一次烧的代码也被擦了。
上一篇:PIC32入门篇-----环境搭建
下一篇:PICC 编译器的安装与使用方法
推荐阅读
史海拾趣
随着国内市场的日益饱和,博众电气开始将目光投向国际市场。公司制定了国际化发展战略,积极参与国际竞争与合作。通过在国外设立分支机构、参加国际展会等方式,博众电气成功打开了国际市场的大门。如今,公司的产品已经远销海外多个国家和地区,国际市场份额逐年攀升。
ACP Optoelectronic Technology Co Ltd,在创立初期便专注于光电技术的研发。某年,公司研发团队成功开发出一种新型光电传感器,其性能远超当时市场上的同类产品。这一技术突破迅速吸引了行业内的关注,公司因此获得了大量订单,业绩迅速攀升。随着技术的不断完善和市场的不断拓展,ACP Optoelectronic Technology Co Ltd逐渐在光电领域崭露头角。
随着市场的不断发展和竞争的加剧,Cygnal意识到需要通过收购来加速其技术和市场的布局。经过一系列谈判和协商,Cygnal成功收购了另一家专注于嵌入式系统技术的公司。这次收购不仅为Cygnal带来了更多的技术和市场资源,还使其能够更好地满足客户的需求并提供更全面的解决方案。收购后,Cygnal通过内部整合和优化,将两家公司的优势融合在一起,形成了更强大的市场竞争力。
在稳固了印度市场后,EOS开始积极拓展国际市场。公司参加了多个国际电子展会,与全球各地的客户和合作伙伴建立了广泛的联系。通过与国际知名企业的合作与交流,EOS不断吸收先进的管理经验和技术理念,并将其应用到自己的产品和服务中。这些举措不仅提升了EOS的国际知名度,还为公司带来了更多的商业机会。
EOS POWER INDIA Pvt公司成立于1991年,由美国加利福尼亚州几位电力电子领域的先驱创立。成立之初,EOS就致力于电力电子技术的研发与应用,特别是在电源解决方案方面。通过引进先进的技术和工艺,EOS在印度市场上逐步建立起自己的品牌形象,并开始为本地客户提供优质的电源产品和服务。
在竞争激烈的电子行业中,杜因特始终将创新作为公司发展的核心动力。公司不断投入大量资源进行新产品的研发和技术创新,特别是在Super-Junction MOSFET和Super-Trench MOSFET等高端产品领域取得了显著成果。这些创新产品不仅满足了市场对高品质MOSFET的日益增长需求,还进一步巩固了杜因特在电子行业的技术领先地位。
Abstract: Automotive Electronics is a hotpot of the development of automotive industry, and there are many special requirements in this ...… 查看全部问答∨ |
我以一个参观者的身份参加了今年(2007年)的中国机器人大赛暨RoboCup中国赛区的活动,该活动在山东济南大学科技园(山东师范大学新校区体育馆)举行,时间是从10月26日至29日。下面就尽可能的详细的描述一下我此次参观机器人大赛的感受和思考 ...… 查看全部问答∨ |
硅谷动力 手机频道 编辑 3000+500奖金 IT168 硬件频道 编辑 2500 无奖金 硅谷动力 数字家庭频道 主编 5500 新浪 试用期 4000+车马费 TOM 回归社区 无经验的应届毕业生2000起 sohu it频道 编辑 6000+车马费3000 硅谷动 ...… 查看全部问答∨ |
新批准的 ZigBee Health Care 标准现可供公众下载 面向能源管理、住宅、商业和消费电子应用产品创造无线解决方案的全球企业联盟 ZigBee(R) 联盟 (ZigBee(R) Alliance) 今天宣布,董事会已经批准 ZigBee Health Care(ZigBee 医疗保健标准),并向公众发布标准。ZigBee Health Care 带来了新方法,帮 ...… 查看全部问答∨ |
比如: #include <reg51.h> main() { sbit p11=P1^1; p11=0; } 编译时出现错误; 有些用80X5 ...… 查看全部问答∨ |
|
一个键盘过滤驱动支持动态卸载: // 原作者 : sinister VOID KeyDriverUnload( PDRIVER_OBJECT KeyDriver ) { PDEVICE_OBJECT KeyFilterDevice ; PDEVICE_OBJECT KeyDevice ; PDEVICE_EXTENSION KeyExtension; P ...… 查看全部问答∨ |
|
急,重开一帖,讨论wince是否能支持512M内存问题????? 重开一帖方便大家讨论,我用的是s3c6410,arm11的核,可以支持2Gbit即512M内存,以前是128M的,完全可以使用,现在改成512M(没办法,要做移动pc之类的东西。。。),使用两个bank: bank0: 0x50000000 - 0x60000000 bank1: 0x60000000 - 0x7000000 ...… 查看全部问答∨ |
我按照网上写的 采用cygwin 交叉编译的方法 编译ffmpeg 但是 在。/configure 后 就出现 arm-wince-mingw32ce-gcc is unable to create an executable file. C compiler test failed. 这个错误,高手请指点一下。 … 查看全部问答∨ |