<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/ESA2GJK1DH1K_B/" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>
說明
當前的程序,版本號是用一個數組記錄在了用戶程序里面

每次升級固件的時候,需要修改這個版本號,然后info.txt文件里面的版本號也需要跟着修改

用戶程序運行的時候,獲取info.txt文件里面的版本號.
然后和自己程序里面的 char FirmwareVersion[FirmwareVersionLen] = "0.0.2";
進行對比,如果不一致就說明有新版本.
問題
如果開發人員疏忽,本身用戶程序里面寫的是 0.0.2
但是info.txt里面寫的是0.0.3

就是說,沒有對應起來,就會出現問題!
用戶程序里面是0.0.2,而從info.txt一直得到的是0.0.3所以就會檢測出來一直有新版本,
導致一直在升級程序.
為什么要把版本號寫到用戶程序里面
如果用戶看過我老版本的教程,會發現並沒有把版本寫在用戶程序里面
而是每次升級完成的時候把info.txt文件里面的版本號保存到Flash記錄下來.
檢測升級的時候是拿着本地記錄的版本號和雲端的info.txt文件里面的版本號做對比
這種方式完全避免了上面說的那種問題!
后期的教程之所以改了方案,是因為要兼容各大物聯網平台!
有些平台只提供了上傳固件到服務器的功能,然后上傳的時候設置一下版本號
然后如果單片機想升級,就上報一下自己程序的版本號,雲平台去判斷版本如果不一致
就把程序或程序下載鏈接發給單片機.最后單片機去下載,下載完成以后上報一下最新的版本號.
用戶會發現,物聯網平台並沒有提供獲取雲端版本號的接口.
如果不把固件版本寫到用戶程序里面,那么就接入不了某些物聯網平台了!
當時我考慮由於操作人員疏忽而造成反復升級的比重太小.
一次編寫到處運行占的比重更大!
所以我才定的這個方案.
當然有些用戶確實擔心這個問題,所以我預期提供下面解決的方式
方式1:由OTA Tools軟件生成info.txt文件
{"version":"0.0.3","size":16120,"url":"http://mnif.cn/ota/hardware/STM32ESP8266BK/user_crc.bin","info":"1.解決了部分BUG
2.優化了部分程序"}
現在主要解決的是info.txt里面的版本號和程序文件里面版本號容易修改錯的問題.
那就不讓用戶去修改.直接用軟件生成info.txt
version ,size 和 url 的字段的值都由軟件提取bin文件信息生成.
最后 info 字段的值弄幾個對話框,讓用戶填寫.
這樣子即提高了效率也降低了失誤的可能.
