为了以后项目升级方便的需要,在原始程序添加CanBoot下载功能;
1、 把Bootloader安排在高地址区间 (比如0xEE00~0xFFAF),然后固化NVC寄存器的值,将这块Flash区域保护起来;
2、中断向量的搬移,将原来0xFFC0所对应的中断向量搬移到0xEDC0;

Bootloader的代码无非就是启动、查找用户程序入口,跳转至用户程序,从用户程序跳转至bootloader,与上位机通信(UART或者CAN),擦除Flash,写入Flash等功能;

具体操作就是修改两部分;

1、修改Project.prm文件,重新划分分区。我划分的分区如下所示:

SEGMENTS /* Here all RAM/ROM areas of the device are listed. Used in PLACEMENT below. */
    Z_RAM                    =  READ_WRITE   0x0080 TO 0x00FF;
    RAM                      =  READ_WRITE   0x0100 TO 0x107F;
    APP_ROM_ENTRY            =  READ_ONLY    0xEDB0 TO 0xEDBF; 
    APP_ROM                  =  READ_ONLY    0x1900 TO 0xEB00; 
    DATA_ROM                 =  READ_ONLY    0xEB00 TO 0xEDAF;   
    APP_ROM1                 =  READ_ONLY    0x1080 TO 0x13FF;   
    BOOT_ROM                 =  READ_ONLY    0xEE00 TO 0xF8FF;
    BOOT_ROM1                =  READ_ONLY    0xF900 TO 0xFFAD;
    EEPROM                   =  READ_ONLY    0x1400 TO 0x17FF;
/*  INTVECTS                 =  READ_ONLY    0xFFC0 TO 0xFFFF; Reserved for Interrupt Vectors */
/*  INTVECTS_REL             =  READ_ONLY    0xEDC0 TO 0xEDFF; Reserved for Relocated Interrupt Vectors */

END

2、修改中断向量表,如下所示:

#include "Interrupt.h"
#if (0 == DEBUG_ON)
const char NVPROT_INIT@0xFFBD = 0xFC; //4.5K保护0xEE00~0xFFFF
const char  NVOPT_INIT@0xFFBF = 0x20; //中断向量重映射
#endif
extern void _Startup(void);
#pragma CODE_SEG APP_ENTRY
void AppEntry(void)
{
    _Startup();
}
#pragma CODE_SEG DEFAULT

extern void ISR_RTC(void);
extern void ISR_Key(void);

void DummyISR(void)
{
    for(;;);
}

/*** 重定向的中断向量表 ***/
#if (0 == DEBUG_ON)
const void (* const _VectRedirection[])( ) @0xEDC0 =
#else
const void (* const _VectRedirection[])( ) @0xFFC0 =
#endif
{
    DummyISR,           // 0xFFC0:ACMP2
    DummyISR,           // 0xFFC2:ACMP1
    DummyISR,           // 0xFFC4:MSCAN   Transmit
    DummyISR,          // 0xFFC6:MSCAN    Receive
    DummyISR,           // 0xFFC8:MSCAN    Errors
    DummyISR,           // 0xFFCA:MSCAN    Wake Up
    ISR_RTC,            // 0xFFCC:RTC
    DummyISR,           // 0xFFCE:IIC
    DummyISR,           // 0xFFD0:ADC Conversion
    ISR_Key,           // 0xFFD2:Port A,B,D Pin
    DummyISR,           // 0xFFD4:SCI2 Transmit
    DummyISR,           // 0xFFD6:SCI2 Receive
    DummyISR,           // 0xFFD8:SCI2 Error
    DummyISR,         // 0xFFDA:SCI1 Transmit
    DummyISR,           // 0xFFDC:SCI1 Receive
    DummyISR,           // 0xFFDE:SCI1 Error
    DummyISR,           // 0xFFE0:SPI
    DummyISR,           // 0xFFE2:TPM2 Overflow
    DummyISR,           // 0xFFE4:TPM2 Channel 1
    DummyISR,           // 0xFFE6:TPM2 Channel 0
    DummyISR,           // 0xFFE8:TPM1 Overflow
    DummyISR,           // 0xFFEA:TPM1 Channel 5
    DummyISR,           // 0xFFEC:TPM1 Channel 4
    DummyISR,           // 0xFFEE:TPM1 Channel 3
    DummyISR,           // 0xFFF0:TPM1 Channel 2
    DummyISR,           // 0xFFF2:TPM1 Channel 1
    DummyISR,           // 0xFFF4:TPM1 Channel 0
    DummyISR,           // 0xFFF6:MCG    Loss of Lock
    DummyISR,           // 0xFFF8:Low Voltage Detect
    DummyISR,           // 0xFFFA:IRQ
    DummyISR,           // 0xFFFC:SWI
//  _Startup,           // 0xFFFE:Reset  Cannot be redirected

};

下载并修改BootLoader,此处注意BootLoader下载程序时首先要对dz60进行复位,要根据dz60的供电电源电压设置复位电压,否则可能导致单片机一直处于复位状态。

mc9s08dz60添加BootLoader实现CANboot下载更新功能相关推荐

  1. 使用shell脚本实现在liunx上进行svn的上传下载更新功能

    最近有个功能,是需要从在liunx上拉取svn地址,并创建一个新文件进行提交,shell脚本如下 #!/bin/bash echo "Hello World !" myFile=& ...

  2. STM32CbueMX之 USB下载更新固件Download Firmware Update(DFU)之一BootLoader程序编写

    声明: STM32CbueMX之 USB下载更新固件Download Firmware Update(DFU)之一BootLoader程序编写https://blog.csdn.net/sudaroo ...

  3. android自动更新demo,Android程序自动更新功能模块的实现方法【附完整demo源码下载】...

    本文实例讲述了Android程序自动更新功能模块的实现方法.分享给大家供大家参考,具体如下: 在程序启动的时候检测服务器上有没有对应版本更新,如果有更新,提示用户是否更新. 在程序启动的时候首先调用更 ...

  4. Winform窗体应用程序的自动更新功能

    本文将演示一种桌面程序自动更新方案,其步骤比较多,但原理非常简单,通用性尚可,对于小型应用来说,直接拿去就可以用了. 原理 服务器端的结构是这样的: 其工作原理如下: Update.asmx 仅提供一 ...

  5. Android 程序自动更新功能模块实现

    2019独角兽企业重金招聘Python工程师标准>>> Android 程序自动更新功能模块实现 在程序启动的时候检测服务器上有没有对应版本更新,如果有更新,提示用户是否更新. 在程 ...

  6. Fusion APP-添加检查软件更新功能

    最新文章:Fusion APP-检查软件更新-远程公告 点击软件更新按钮后弹出新版本更新通知及更新渠道 效果图: 准备工作: 1:讯飞语记APP(各大应用商店都有) 2:Fusion APP 3:功能 ...

  7. 安卓APP自动更新功能实现

    安卓APP自动更新功能实现 前言 代码实现 前言 安卓App自动更新基本上是每个App都需要具备的功能,接下来介绍一下实现自动更新的步骤. 代码实现 App自动更新主要分为新版本检测.升级弹窗.下载升 ...

  8. 仿新浪微博的ListView下拉更新功能

    由于最近做的项目中也用到了这个功能,今天刚好实现了下,就趁现在有时间写篇博客分享下.在做的时候也参考了下别人的代码,毕竟站在巨人的肩膀上才会是自己更加强大.哈哈!先看看新浪的下拉更新是什么样的吧! O ...

  9. 蒲公英分布平台下载更新实现

    1.使用蒲公英平台上传app,能够自动检测版本,进行更新提示,以及下载app.同时能够摇一摇进行反馈意见,对app下载数量进行统计,错误日志的反馈等实现. 2.蒲公英地址:https://www.pg ...

最新文章

  1. chrome 悬停大图插件_Google Chrome浏览器的悬停卡:我不想要的我最喜欢的新东西
  2. 【NIO】之IO和NIO的区别
  3. android网络框架
  4. Chrome图标的来历。
  5. Facebook: 亿级向量相似度检索库Faiss 原理+应用
  6. java jtextpane_java – 从JTextPane获取原始文本
  7. RAM格式与JPG对比
  8. Lonlife-ACM 1005 - Spoon Devil's RP Test(同余定理)——“玲珑杯”acm比赛-试运行赛
  9. IAR在写结构体时不提示_如何写好个人事迹?
  10. PyTorch实现Word2Vec
  11. 英伟达RTX 4070 Ti显卡正式发布!你会买吗?
  12. 【离散数学】 SEU - 29 - 2021/06/16 - Review (in Chinese)
  13. dos脚本批量更改照片命名(文字变更数字)
  14. 笔记本RTX3060比2060性能高多少 RTX3060和2060笔记本差距多大
  15. 2022软件测试技能 APP自动化测试 Python+Appium+Uiautomator2 实战教程
  16. 远程视频监控之构思篇
  17. 局域网-无法访问网上邻居-终极解决办法
  18. Python 分析 9 万条数据告诉你复仇者联盟谁才是绝对 C 位!
  19. 矿井人员定位与车辆定位管理解决方案
  20. 使用百度翻译api制作自己的字典

热门文章

  1. Jenkins+Gitlab+Ansible自动化部署(四)
  2. agd插值算法_多目标自适应和声搜索算法
  3. python修改电脑桌面壁纸_python实现桌面壁纸切换功能
  4. 怎么给MP4加密、选用隐大师U盘
  5. 哈哈!12万行代码堆出来个「蔡徐坤」
  6. 以太坊:Web3.js 0.20 使用说明
  7. 华为OD机试真题 C++ 实现【预订酒店】【2022.11 Q4 新题】
  8. 20170604第四讲
  9. ​Au 入门系列之三:波形编辑器操作基础
  10. 网络摄像机镜头毫米数如何选择