ESA2GJK1DH1K升级篇: 移植升级程序到自己的项目(APP用户程序制作)

前言

  用户程序比较简单,但是起着至关重要的作用

  用户程序是和BootLoader程序相互配合的

拷贝文件到自己的项目

  APP用户程序的 stmflash.c stmflash.h 和 上一节的BootLoader 是一样的.

  只有IAP有点差别

  

  

用户程序需要做两件事情

  一.获取更新的信息(版本号,更新的状态)

    

    

  二,在认为APP用户程序运行没有问题以后写上以下执行函数.

    

    

  

  现在就完成了APP用户程序的处理工作.

现在我说明一下为啥会有如此操作

  在前面的BootLoader程序里面就有很多的状态判断,

    

  在APP用户程序里面可以获取到这些状态

  大家可以在用户程序里面 通过 IAPStructValue.UpdateStatusValue的值来知道上次更新的状态

  为了更直观,大家直接可以调用  printf("%s",IAPStructValue.UpdateStatusStr); 打印对应的字符串

  也可以在认为程序没有问题的时候,把这些状态发给上位机,这样就直观的知道更新的状态

    

   然后

    

  BootLoader下载好程序以后呢,写入状态为:0x01 然后重启了

  重启以后当然还是先运行 BootLoader

  然后 BootLoader 判断是0x01以后 写入 0xFF

  然后运行新的用户程序

  用户程序里面才有了

    

  如果执行了新的用户程序,而大家没有调用上面的那个函数做处理

  那么单片机重启以后 就会执行BootLoader 

  BootLoader一判断还是 0xFF 就会认为,新程序没有正确运行

  然后便会 切换到上一套程序运行

  所以我才会让大家感觉用户程序运行没有问题了再调用

   IAPUpdateDispose() 函数

  许多人说这个升级相当繁琐,但是足够稳定!

  因为我提供的源码是为大家参考或者直接应用做项目的

  怎么说呢!我要保证万无一失!!

用户程序定时询问程序版本信息

生成第一份用户程序

  还记得上一节BootLoader打印的不

    

  所以第一份用户程序的配置

  

  生成bin文件

  

   编译一下工程

    

生成第二份用户程序

    

     

    

修改数据校验

  格式  {"version":"1.0.456","SumBin1":"125","SumBin2":"23"}

  SumBin1 代表第一份用户程序的校验和

  SumBin2 代表第二份用户程序的校验和

  大家生成了两份bin文件以后用这个软件计算

    

    

    

     {"version":"1.0.456","SumBin1":"68","SumBin2":"188"}

  不过校验和字段不是强制性的,大家如果想使用校验和

  则在这个信息里面加上校验和字段就可以 {"version":"1.0.456","SumBin1":"68","SumBin2":"188"}

  BootLoader程序里面如果获取到了校验和,就计算判断,如果没有就不计算判断

  主要是面向不同的用户.

测试

1.下载上一节的BootLoader程序

2.打开串口调试助手,发送  {"version":"1.0.456","SumBin1":"68","SumBin2":"188"}

3.发送第二份程序文件

打印说明

当前程序运行的第二份程序文件,版本是1.0.456

接着测试

1.修改版本号,发给当前运行的用户程序

用户程序里面判断版本不一样就重启了!

上面是运行在 BootLoader 里面 

再发送一次版本信息

然后发送第一份程序文件

当前程序运行的第一份程序文件,版本是1.0.888

结语

  升级篇的移植教程就给大家做好了铺垫.

  希望大家能够举一反三!

  

  通过对 升级的封装,以后只要遇到想实现升级的,只需要把升级文件往里面一放,

  然后根据自己使用的模块把从模块获取的数据按照说明调用我提供的函数即可

  对于开发而言,很迅速的提高了效率.

  

原文地址:https://www.cnblogs.com/yangfengwu/p/12021870.html