鉴于大家都希望升级的时候加入数据校验,所以就满足大家的要求.
其实我也希望自己做的足够的稳定可靠,让大家使用起来放心.
上一节测试了一节加入校验以后的操作方式,这节来详细的说一下校验部分的代码.
数据校验方式是 每个数据做累加
注意哈,单片机程序是 char 型的数据类型,然后像下面做数据累加.
char sum;
sum= sum + 数据;
数据呢就是升级的时候接收的一个字节一个字节的数据.
我还是多说一句吧!
问一下就像是上面 假设现在 sum = 255; 然后接着数据是 0x03
我问下执行 sum= sum + 0x03; 现在sum等于多少?
等于 0x02
我只做下提醒
int a = 0x0102
char b = a;
b = 0x02;
上位机呢,和单片机那边计算方式一样
上位机源码在这里大家自己去看哈
其实加入了校验就相当于多了一个判断而已!!!!
大家记得哈,云端的数据是这样的
SumBin1是第一份用户程序bin文件的数据校验和
SumBin2是第二份用户程序bin文件的数据校验和
先说下 BootLoader程序改变了哪些
增加了3个状态标志,两个变量
SumBin初始化为 -1 ,是因为校验值的范围是0-255,所以这个变量不能让它初始化为0
以前的程序只是获取版本,现在需要再获取下bin文件的校验值,放到下图位置
然后写上获取云端的校验值程序.
刚才定义的SumBin和UpdateStatus_SumBinRangeErr 派上用场了
接收数据的时候开始累加数据,计算数据的和
上面定义的Sum就用上了
然后呢其实有个状态变量是优化以前的一个地方
以前为了少定义一些状态,就把下面的错误设置成了 UpdateStatus_DataAddressError
其实UpdateStatus_DataAddressError 这个状态是判断的下面的
这次呢,想了想,换个新标志 UpdateStatus_MissingData
然后加上最终的判断校验
加上
其实呢,就是多加了个判断而已...
升级的时候弄了好多状态,实际上就是为了保证万无一失.
写上新添加的升级状态.
把升级状态,转为字符串的地方需要加上新状态了.
然后就移植上了数据校验了
我是这样想的,我先写完文章教程以后再录制视频
其实大家应该看出来了,每一节教程都是很复杂的教程
涉及的知识点很多.我现在录制视频教程不敢打包票一次就录制好
我不想像前几次似的录制了以后发现出问题了,一旦有问题,就必须重新录制
文章有了问题好修改,修改的没有问题了,再遵循着文章录制视频教程
这样才能保证一次性就成了!
大家如果对代码上的思路不明白就问我哈,我正好可以总结大家的问题
然后再整理整理文章.
原文:https://www.cnblogs.com/yangfengwu/p/11939465.html