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程序都正常运行了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/959756.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

电脑办公技巧之如何在 Word 文档中添加文字或图片水印

Microsoft Word是全球最广泛使用的文字处理软件之一,它为用户提供了丰富的编辑功能来美化和保护文档。其中,“水印”是一种特别有用的功能,它可以用于标识文档状态(如“草稿”或“机密”)、公司标志或是版权信息等。本…

程序诗篇里的灵动笔触:指针绘就数据的梦幻蓝图<1>

大家好啊,我是小象٩(๑ω๑)۶ 我的博客:Xiao Xiangζั͡ޓއއ 很高兴见到大家,希望能够和大家一起交流学习,共同进步。 这一节我们来学习指针的相关知识,学习内存和地址,指针变量和地址,包…

WPS计算机二级•幻灯片的页面布局

听说这是目录哦 设置PPT页面尺寸🖼️PPT母版怎么用🎨巧用PPT母版统一修改 字体颜色与背景🎡如何快速更改应用 幻灯片中的不同母版👑能量站😚 设置PPT页面尺寸🖼️ 在制作PPT时,我们需要先选定一…

攻防世界bad_python

文件名pyre.cpython-36.pyc,说明是在python3.6环境下编译的,要把pyc反编译成py 但是显示失败了,结合题的名字文件的应该是文件头部被破坏 把第一行改为33 0D 0D 0A 0C 63 4A 63 61 02 00 00 E3 00 00 00 之后就能反编译了,得到源…

Windows系统Tai时长统计工具的使用体验

Windows系统Tai时长统计工具的使用体验 一、Tai介绍1.1 Tai简介1.2 安装环境要求 二、下载及安装Tai2.1 下载Tai2.2 运行Tai工具 三、Tai的使用体验3.1 系统设置3.2 时长统计3.3 分类管理 四、总结 一、Tai介绍 1.1 Tai简介 Tai是一款专为Windows系统设计的开源软件&#xff…

相同的树及延伸题型(C语言详解版)

从LeetCode 100和101看二叉树的比较与对称性判断 今天要讲的是leetcode100.相同的树,并且本文章还会讲到延伸题型leetcode101.对称二叉树。本文章编写用的是C语言,大家主要是学习思路,学习过后可以自己点击链接测试,并且做一些对…

微信小程序-点餐(美食屋)02开发实践

目录 概要 整体架构流程 (一)用户注册与登录 (二)菜品浏览与点餐 (三)订单管理 (四)后台管理 部分代码展示 1.index.wxml 2.list.wxml 3.checkout.wxml 4.detail.wxml 小结优点 概要…

计算机工程:解锁未来科技之门!

计算机工程与应用是一个充满无限可能性的领域。随着科技的迅猛发展,计算机技术已经深深渗透到我们生活的方方面面,从医疗、金融到教育,无一不在彰显着计算机工程的巨大魅力和潜力。 在医疗行业,计算机技术的应用尤为突出。比如&a…

OS Copilot功能测评:智能助手的炫彩魔法

简介: OS Copilot 是一款融合了人工智能技术的智能助手,专为Linux系统设计,旨在提升系统管理和运维效率。本文详细介绍了在阿里云ECS实例上安装和体验OS Copilot的过程,重点评测了其三个核心参数:-t(模式…

随机变量的变量替换——归一化流和直方图规定化的数学基础

变量替换是一种在统计学和数学中广泛应用的技术,它通过定义新的变量来简化问题,使得原本复杂的随机变量变得更加容易分析。 变量替换的公式,用于将一个随机变量 X X X 的概率密度函数 f X f_X fX​ 转换为其经过函数 g g g 变换后的随机变…

新电脑安装系统找不到硬盘原因和解决方法来了

有不少网友反馈新电脑采用官方u盘方式装win10或win100出现找不到硬盘是怎么回事?后来研究半天发现是bios中开启了rst(vmd)模式。如果关闭rst模式肯定是可以安装的,但这会影响硬盘性能,有没有办法解决开启rst模式的情况安装win10或win11呢&…

Maui学习笔记-SignalR简单介绍

SignalR是ASP.NET Core中的一个库,支持服务器与其连接的客服端之间的双象通信,它允许服务器立即将更新的消息推送到客服端,而不是要求客户端轮询服务器来获取更新 创建项目 使用SignalR在服务器实时发送消息给客服端,客服端拿到消息后在UI页面更新 首先创建一个Web API项目 …

接口(完)

大家好,今天我们着重来总结一下接口的知识,并且将接口和抽象类的区别罗列一下,帮助我们更好的认识抽象类和接口。 2.7 抽象类和接口的区别. 抽类和接口都是Java中多态的常见使用方式,都需要重点掌握,同时又要认清两者的区别(重要!!&#xf…

机器学习-线性回归(参数估计之经验风险最小化)

给定一组包含 𝑁 个训练样本的训练集 我们希望能够 学习一个最优的线性回归的模型参数 𝒘 现在我们来介绍线性回归的一种模型参数估计方法:经验风险最小化。 我们前面说过,对于标签 𝑦 和模型输出都为连续的实数值&…

77,【1】.[CISCN2019 华东南赛区]Web4

有句英文,看看什么意思 好像也可以不看 进入靶场 点击蓝色字体 我勒个豆,百度哇 所以重点应该在url上,属于任意文件读取类型 接下来该判断框架了 常见的web框架如下 一,Python 框架 1.Flask URL 示例 1:http://…

c语言中的数组(上)

数组的概念 数组是⼀组相同类型元素的集合; 数组中存放的是1个或者多个数据,但是数组元素个数不能为0。 数组中存放的多个数据,类型是相同的。 数组分为⼀维数组和多维数组,多维数组⼀般⽐较多⻅的是⼆维数组。 数组创建 在C语言…

景联文科技加入AIIA联盟数据标注分委会

2025年1月16日,中国人工智能产业发展联盟(简称AIIA)数据委员会数据标注分委会(以下简称“分委会”)正式成立。景联文科技成为第一批AIIA联盟数据标注分委会委员单位。 数据标注分委会的成立旨在搭建数据标注领域产学研…

[笔记] 极狐GitLab实例 : 手动备份步骤总结

官方备份文档 : 备份和恢复极狐GitLab 一. 要求 为了能够进行备份和恢复,请确保您系统已安装 Rsync。 如果您安装了极狐GitLab: 如果您使用 Omnibus 软件包,则无需额外操作。如果您使用源代码安装,您需要确定是否安装了 rsync。…

消息队列篇--通信协议篇--AMOP(交换机,队列绑定,消息确认,AMOP实现实例,AMOP报文,帧,AMOP消息传递模式等)

AMQP(Advanced Message Queuing Protocol,高级消息队列协议)是一种开放的、跨平台的消息传递协议,旨在提供一种标准化的方式在不同的消息代理和客户端之间进行消息传递。AMQP不仅定义了消息格式和路由机制,还规定了如何…

小利特惠源码/生活缴费/电话费/油卡燃气/等充值业务类源码附带承兑系统

全新首发小利特惠/生活缴费/电话费/油卡燃气/等充值业务类源码附带U商承兑系统 安装教程如下 图片: