新版数采仪问题解决全记录-升级失败问题
生活随笔
收集整理的這篇文章主要介紹了
新版数采仪问题解决全记录-升级失败问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
現象描述:
數采儀通過網口升級,以前已經通過測試都是成功的。但是這次卻一直失敗,升級完成后,數采儀重新啟動后,就死機了。
尋找問題:
1 觀察收到的升級包,發現確實和發出的升級包有差異。
2 仔細對比發出的升級包,和收到的升級包,最終找到了第一個出錯的地方。如下:
注意:上圖中的26正好是某個升級數據包的最后一個數據,而升級包經過加上包尾(即“&&”)之后應該是
這樣的“26 26 26”(因為&的ascii編碼是26)。
3 程序的處理中,在尋找包尾時,是這樣的:
??? //這樣處理以保證所找到的"&&" 是最后一個
?? ?//因為在升級時傳輸的是二進制數據,難免在數據段中有"&&"出現
?? ?while (1)
?? ?{
?? ??? ?iTemp = Common_FindSubStr(cpTemp, cpDataPack+iDataPackSize-cpTemp,"&&",2);
?? ??? ?if (iTemp < 0)
?? ??? ?{
?? ??? ??? ?break;
?? ??? ?}
?? ??? ?else
?? ??? ?{
?? ??? ??? ?iEndCPTag = cpTemp+iTemp-cpDataPack;
?? ??? ??? ?cpTemp = cpTemp + iTemp + 2;?? ??? ??? ?
?? ??? ?}
?? ?}
這樣的話,只會認出前面的兩個26,即把前面的兩個26當作了包尾,但是實際的包圍應該是后面的兩個26,這樣就少了最后一個字節的數據。
結論:
1 這樣的問題出現的幾率很小,這次能夠測試出來,實在是有些幸運。
2 程序中的處理,一定要嚴謹,小心再小心。
數采儀通過網口升級,以前已經通過測試都是成功的。但是這次卻一直失敗,升級完成后,數采儀重新啟動后,就死機了。
尋找問題:
1 觀察收到的升級包,發現確實和發出的升級包有差異。
2 仔細對比發出的升級包,和收到的升級包,最終找到了第一個出錯的地方。如下:
注意:上圖中的26正好是某個升級數據包的最后一個數據,而升級包經過加上包尾(即“&&”)之后應該是
這樣的“26 26 26”(因為&的ascii編碼是26)。
3 程序的處理中,在尋找包尾時,是這樣的:
??? //這樣處理以保證所找到的"&&" 是最后一個
?? ?//因為在升級時傳輸的是二進制數據,難免在數據段中有"&&"出現
?? ?while (1)
?? ?{
?? ??? ?iTemp = Common_FindSubStr(cpTemp, cpDataPack+iDataPackSize-cpTemp,"&&",2);
?? ??? ?if (iTemp < 0)
?? ??? ?{
?? ??? ??? ?break;
?? ??? ?}
?? ??? ?else
?? ??? ?{
?? ??? ??? ?iEndCPTag = cpTemp+iTemp-cpDataPack;
?? ??? ??? ?cpTemp = cpTemp + iTemp + 2;?? ??? ??? ?
?? ??? ?}
?? ?}
這樣的話,只會認出前面的兩個26,即把前面的兩個26當作了包尾,但是實際的包圍應該是后面的兩個26,這樣就少了最后一個字節的數據。
結論:
1 這樣的問題出現的幾率很小,這次能夠測試出來,實在是有些幸運。
2 程序中的處理,一定要嚴謹,小心再小心。
轉載于:https://www.cnblogs.com/gaotaozhaolei/archive/2008/06/06/1215041.html
總結
以上是生活随笔為你收集整理的新版数采仪问题解决全记录-升级失败问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 代理(Proxy)模式
- 下一篇: 系统诊断概述-如何通过windbg来du