当前位置: 首页 > article >正文

PIC单片机设置bootloader程序和app程序地址方法

在调试bootloader和app程序的时候通常都需要设置程序的偏移地址,下面就总结一下使用MPLAB X IDE 设置程序地址的方法。

打开bootloader工程
在这里插入图片描述

工程上单击鼠标右键,选择Properties,打工工程属性窗口。
在这里插入图片描述
此时会打开项目属性对话框
在这里插入图片描述

左边类别选择XC8 Liner,Option categories 选择Memory,然后在ROM ranges 后面输入0-1FFF, 这个地址就是设置bootloader程序的存储范围。设置完成之后,点击应用。然后编译下载代码。
这里的ROM ranges就是设置boot loader代码的存放地址,这个地址的范围也可根据自己代码的情况设置。如果不知道代码占用地址有多大,可以打开生成的hex文件查看。
在这里插入图片描述
蓝色的数据表示数据存储的地址值,这里要注意。PIC单片机生成的hex文件地址值不是连续的。是由编译器自动分配的。
在这里插入图片描述
HEX文件中最大的地址值是0x1806,编译器中设置的地址最大值为1FFF,所以地址空间是足够用的。

接下来配置APP工程,这里使用LED程序作为APP,打开LED工程
在这里插入图片描述
工程上单击鼠标右键,选择Properties,打工工程属性窗口。

在这里插入图片描述
左边类别选择XC8 Liner,Option categories 选择Additional options,然后在Codeoffset 后面输入0x2000 这个地址就是设置app程序的起始地址。设置完成之后,点击应用。然后编译代码。

在这里插入图片描述
APP的地址地址为0x2000,芯片的最大地址是0xFFFF,所以代码的存储范围就是0x2000到0xFFFF,可以打开编译好的hex文件查看。
在这里插入图片描述
第一行的数据存储地址是 0x2000,第2行的数据的存储地址就跳到了0xFF74,这个地址是由编译器自动分配的。在STM系列的单片机中,代码的存储地址都是连续的。而在PIC单片机中,代码的存储地址是不连续的。所以在PIC单片机IAP升级时,一定要注意这个问题。

关于hex文件中数据的含义可以查看 PIC单片机HEX文件格式分析 这篇文章。
关于编译器生成代码的地址存储问题可以查看 PIC单片机生成HEX文件中代码地址问题分析 这篇文章。

这样分别配置完bootloader和app的地址之后,bootloader的程序就可以通过烧写器直接下载。但是app的程序就能不能通过烧写器下载了,否则在下载app的程序时,boot loader的程序就会被擦除掉。app的程序需要通过IAP来在线下载。这样在设备出厂的时候下载程序就会比较麻烦,MAPLAB编译器提供了一种简单的方法,可以同时将bootloader和app的程序下载进去。

下面就演示一下这个方法。
再编译器中打开app工程,同时也打开bootloader工程。
在这里插入图片描述
app工程和bootloader工程必须同时添加到编译器中,否则后面的操作就不会成功。

打开app程序的项目属性设置窗口,这里打开的是led工程的属性。在左边类别中选择loading,然后再右边单击 新增可加载的项目
在这里插入图片描述

再打开的对话框中选择bootloader 工程路径。

在这里插入图片描述
这个bootloader必须是工程中已经打开的这个bootloader。
在这里插入图片描述
添加成之后就可以看到额外的可加载文件中底下就会显示加载的bootloader生成的hex文件。点击应用。然后重新编译led工程,并下载程序。此时就会将bootloader程序和app程序同时下载到单片机中去。

不过这个方法有时候成功,有时候失败,具体原因还没找到。比如同样的操作过程,下面的这个工程就成功了。
在这里插入图片描述
但是另一个工程再编译的时候会报错。
在这里插入图片描述
所以这个方法还不是很靠谱,为了保证下载每次成功,这里可以使用另一个方法。既然下载程序是通过hex文件下载的,那么能不能直接将两个程序的hex文件合并成一个文件呢?理论上是可以的。
分别打开led工程和bootloader工程生成的hex文件,左边是led工程的hex文件,右边是bootloader工程的hex文件。
可以直接将led工程hex文件里面的前10行拷贝到 bootloader工程的hex文件中。最后3行不要拷贝,因为最后3行是写配置字的数据,bootloader的hex文件中也有写配置字的数据,拷贝过去会冲突。
在这里插入图片描述
这里led工程和bootloader的工程配置字最好都设置成一样的,否则可能会有问题。
在这里插入图片描述
新建一个hex文件,将led工程和bootloader工程的hex文件合并。
在这里插入图片描述
然后使用MPLAB IPE下载软件将合并后的hex文件下载到开发板中
在这里插入图片描述
在这里插入图片描述
下载成功后,断开烧写器,复位单片机,就可以看到bootloader程序和led程序都正常运行了。


http://www.kler.cn/a/513816.html

相关文章:

  • Hadoop•搭建完全分布式集群
  • StarRocks 3.4 发布--AI 场景新支点,Lakehouse 能力再升级
  • github汉化
  • [德州扑克]
  • Linux-C/C++--深入探究文件 I/O (下)(文件共享、原子操作与竞争冒险、系统调用、截断文件)
  • kafka学习笔记4-TLS加密 —— 筑梦之路
  • 海康C++开发面试题及参考答案
  • Flink 的核心特点和概念
  • 基于Redis实现短信验证码登录
  • 解决 Django 5.1 中的 TemplateSyntaxError 错误
  • 基于微信小程序的手机银行系统
  • 32V/4A,降压DCDC转换器CP8384百分百占空比输出ESOP8封装,可适用HUB等电路设计
  • 物联网网关Web服务器--CGI开发实例BMI计算
  • C# 以管理员方式启动程序全解析
  • 如何在oracle关闭情况下如何修改spfile的参数
  • 三分钟内快速完成MySQL到达梦数据库的迁移
  • 深度学习中的通道(Channel)概念详解
  • H3CNE-17-DHCP动态主机配置协议
  • CapsNet :用于图像识别的神经网络结构,包含胶囊层
  • 用edge浏览器追剧音量太小?安装音量增强器可解忧
  • 【Java计算机毕业设计】基于SSM圣宠宠物领养网站【源代码+数据库+LW文档+开题报告+答辩稿+部署教程+代码讲解】
  • Word2Vec如何优化从中间层到输出层的计算?
  • 逐笔成交逐笔委托Level2高频数据下载和分析:20250121
  • Next.js 实战 (十):中间件的魅力,打造更快更安全的应用
  • 【时时三省】(C语言基础)文件的打开和关闭
  • 数据库-多表关系