Westbrook
认证:VIP会员
所在专题目录 查看专题
dsPIC33 BootLoader(1)-简介
dsPIC33 BootLoader(2)-Flash程序存储空间
dsPIC33 BootLoader(3)-构建中断重映射表
dsPIC33 BootLoader(4)-基于MCC配置Boot区
dsPIC33 BootLoader(5)-基于MCC生成应用程序
Bootloader演示
作者动态 更多
10分钟教你快速完成数字电源的闭环控制
2022-04-02 17:26
数字电源学习板演示
2022-02-19 13:36
手把手教你学数字电源系列视频(22)- 数字控制的软件流程
2022-02-19 13:28
手把手教你学数字电源系列视频(21)- 设计数字补偿器(LDE执行)
2022-02-19 13:28
手把手教你学数字电源系列视频(20)- 设计数字补偿器(AB系数计算)
2022-02-19 13:27

dsPIC33 BootLoader(4)-基于MCC配置Boot区

前面了解了一些Flash结构和中断重映射之后,现在我们来用MPLAB X IDE自带插件MCC生成Boot代码。

打开MPLAB X IDE开发环境,点击Tools->Embeded ->MPLAB Code Configurator,打开MCC插件,“System Module”设置系统时钟和仿真口,根据需求自行选择。在“Device Resources”下面的Libraries找到16-bit Bootloader,点击“16-bit Bootloader”前面的“+”,添加到"Project Resources"。


Bootloader Settings

(1)设置通信方式(UART1)

前面有提到过,目前暂时只提供UART通信,后续会提供I2C/CAN的通信方式,在这里我们选择UART1,点击它之后会自动的弹出UART1外设的设置,采用默认的波特率或者自己选择都可以。在这里我设置38400,配置完之后在"Pin Manager"里面配置TX和RX端口,将U1RX配置为input,U1TX配置为output。

(2)分配Flash空间和中断重映射表

下图是配置Bootloader地址界面。

Bootloader End Address

此字段允许用户定义引导加载程序的最大大小,包括地址0x0和0x100处的中断表,实际代码从地址0x200开始。 Bootloader程序的大小必须是DSC闪存页面大小的倍数,具体取决于DSC型号,通常为512或1024。 应用程序代码的开始将放置在Bootloader结束之后的位置。 有关确定Bootloader大小的更多信息,请参见前面篇章介绍的Flash内存空间结构。

例如这里给Bootloader分配2页,所以选择Bootloader结束地址为0x001800,在这里一定要是0x800的倍数,如果不是则会报错。

Application Section Range Addresses

这些字段显示用户应用程序代码的计算出的开始和结束地址,该地址将始终紧随引Bootloader结束地址之后,且两者之间没有空格。 结束地址将是物理闪存的倒数第二页。 最后一页包含设备配置字。 Bootloader将不会修改此页面。

那么Application的开始地址就是0x1800,由于最后一页是配置字,所以结束地址为0x2B7FE。

Remapped Interrupt Vector Address

此字段显示计算出的用户的地址重新映射中断向量表的起始地址。 这里选择中断向量表的重映射地址从0x1A00开始。

Enable/Disable Bootloader Command

MCC提供了在Bootloader中提供启用或禁用4个引导程序命令生成的功能。启用后,将添加基本代码以在引导程序中执行命令。禁用后,命令将被完全删除,如果尝试执行这些命令,将导致“命令不支持”响应。

Enable RESET command:允许bootloader命令发出设备重置信息。这样,Bootloader在下载完命令后即可重置设备。某些情况下可能不希望启用此操作,而只允许开机复位。

Enable READ command:允许Bootloader和外部Bootloader应用程序读取用户代码的内容。这可能会对某些用户造成安全风险。

Enable CHECKSUM command:允许Bootloader和外部Bootloader应用程序对用户代码执行校验和。这可能会对某些用户造成安全风险。


Bootloader Verification

选择用于验证应用程序二进制文件的方法,后续会对改部分内容进行单独说明,在这里我们选择Not Blank这一选项。


Interrupt Vetor Table Remapping

remap_to_application-将中断直接跳转至用户应用程序。 跳转的每个中断将在用户重映射表中需要2条GOTO指令,因此每条占用6个字节的程序存储器。 对于以硬件实现的所有中断,这是最安全的选择。但是这种成本高,需要的内存空间大。

keep_in_bootloader-此选项会将中断保留在引导程序中。 如果定义了中断功能,它将仅作用于该功能。 如果未定义,它将跳转到默认中断处理函数。

remap_to_application_default-将中断直接跳转到用户应用程序的默认中断处理程序,而不是指定的唯一中断向量。 该选项对于应用程序不希望使用的中断很有用。 由于通过remap_to_application选项跳转的每个中断都占用2个指令字,因此跳转所有可能的中断的成本可能很高。 使用此选项跳转的中断不会占用任何其他代码空间来进行跳转。 由于多个中断将被跳转到同一向量,因此用户代码必须检查触发了哪个中断以进行相应的处理。

作为示例,此处采用默认的配置,后续会针对不用的配置进行单独说明,比如在Boot区产生中断。


进行完上述的配置,点击“Generate”产生代码,如下:

为了验证Boot区的程序执行,增加一个LED闪烁的代码, 在main.c里面增加。

同时在boot_demo.c文件RunBootLoader()函数里面进行调用。

编译OK后将整个代码烧录到MCU里面,会发现LED再进行闪烁,说明程序运行成功。

在Bootloader程序中加入按键的操做,当MCU上电或者复位后如果按键有效,则会进入bootloader程序运行,否则会进入application程序运行。设置bootloader程序运行时的闪烁频率和application运行的不一致,以此来判断在哪个区间运行程序。

至此,采用MCC配置的Bootloader程序产生完成,接下来是进行Application的配置。

声明:本内容为作者独立观点,不代表电子星球立场。未经允许不得转载。授权事宜与稿件投诉,请联系:editor@netbroad.com
觉得内容不错的朋友,别忘了一键三连哦!
赞 3
收藏 4
关注 815
成为作者 赚取收益
全部留言
0/200
  • dy-wt1XAWRX 2023-03-22 17:32
    你好,麻烦问一下,我将此处按键改成定时器,但是上位机下载APP程序时会失败,求指导?
    回复
  • 王超的小站 2020-11-22 08:36
    跟大姥学习了
    回复