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

 

 

前言

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

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

 

拷贝文件到自己的项目

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

  只有IAP有点差别

  ESA2GJK1DH1K升级篇: 快速的移植升级程序到自己的项目(APP用户程序制作)_第1张图片

 

 

  ESA2GJK1DH1K升级篇: 快速的移植升级程序到自己的项目(APP用户程序制作)_第2张图片

 

 

 

 

 

 

用户程序需要做两件事情

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

    ESA2GJK1DH1K升级篇: 快速的移植升级程序到自己的项目(APP用户程序制作)_第3张图片

 

 

    ESA2GJK1DH1K升级篇: 快速的移植升级程序到自己的项目(APP用户程序制作)_第4张图片

 

 

 

 

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

 

    ESA2GJK1DH1K升级篇: 快速的移植升级程序到自己的项目(APP用户程序制作)_第5张图片

 

 

 

 

 

 

    ESA2GJK1DH1K升级篇: 快速的移植升级程序到自己的项目(APP用户程序制作)_第6张图片

 

 

  

 

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

 

 

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

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

    ESA2GJK1DH1K升级篇: 快速的移植升级程序到自己的项目(APP用户程序制作)_第7张图片

 

 

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

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

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

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

    ESA2GJK1DH1K升级篇: 快速的移植升级程序到自己的项目(APP用户程序制作)_第8张图片

 

   然后

    ESA2GJK1DH1K升级篇: 快速的移植升级程序到自己的项目(APP用户程序制作)_第9张图片

 

 

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

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

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

  然后运行新的用户程序

 

  用户程序里面才有了

 

    ESA2GJK1DH1K升级篇: 快速的移植升级程序到自己的项目(APP用户程序制作)_第10张图片

 

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

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

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

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

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

   IAPUpdateDispose() 函数

 

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

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

 

生成第一份用户程序

  还记得上一节BootLoader打印的不

    ESA2GJK1DH1K升级篇: 快速的移植升级程序到自己的项目(APP用户程序制作)_第11张图片

 

 

 

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

    ESA2GJK1DH1K升级篇: 快速的移植升级程序到自己的项目(APP用户程序制作)_第12张图片

 

  生成bin文件

    ESA2GJK1DH1K升级篇: 快速的移植升级程序到自己的项目(APP用户程序制作)_第13张图片

 

 

    ESA2GJK1DH1K升级篇: 快速的移植升级程序到自己的项目(APP用户程序制作)_第14张图片

 

 

 

 

生成第二份用户程序

    ESA2GJK1DH1K升级篇: 快速的移植升级程序到自己的项目(APP用户程序制作)_第15张图片

    ESA2GJK1DH1K升级篇: 快速的移植升级程序到自己的项目(APP用户程序制作)_第16张图片

 

 

    ESA2GJK1DH1K升级篇: 快速的移植升级程序到自己的项目(APP用户程序制作)_第17张图片

 

 

 

现在看数据校验

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

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

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

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

    ESA2GJK1DH1K升级篇: 快速的移植升级程序到自己的项目(APP用户程序制作)_第18张图片

    ESA2GJK1DH1K升级篇: 快速的移植升级程序到自己的项目(APP用户程序制作)_第19张图片

 

 

    ESA2GJK1DH1K升级篇: 快速的移植升级程序到自己的项目(APP用户程序制作)_第20张图片

 

 

    ESA2GJK1DH1K升级篇: 快速的移植升级程序到自己的项目(APP用户程序制作)_第21张图片

 

 

 

 

 

     然后就和上一节的BootLoader的计算校验和联系起来了

      ESA2GJK1DH1K升级篇: 快速的移植升级程序到自己的项目(APP用户程序制作)_第22张图片

      ESA2GJK1DH1K升级篇: 快速的移植升级程序到自己的项目(APP用户程序制作)_第23张图片

 

 

 

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

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

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

  主要是面向不同的用户.

  

用户程序里面如果想升级怎么办?

  我的原则还是交由BootLoader处理

  APP用户程序里面只需要  IAPSetUpdateFlage();

  ESA2GJK1DH1K升级篇: 快速的移植升级程序到自己的项目(APP用户程序制作)_第24张图片

 

结语

通过对 升级的封装,以后只要遇到想实现升级的,只需要把升级文件往里面一放,然后根据说明调用即可

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

你可能感兴趣的:(ESA2GJK1DH1K升级篇: 快速的移植升级程序到自己的项目(APP用户程序制作))