亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種提高單片機更新程序后運行穩(wěn)定性的方法及單片機與流程

文檔序號:29809590發(fā)布日期:2022-04-27 02:45閱讀:316來源:國知局
一種提高單片機更新程序后運行穩(wěn)定性的方法及單片機與流程

1.本發(fā)明涉及單片機技術領域,特別涉及一種提高單片機更新程序后運行穩(wěn)定性的方法及單片機。


背景技術:

2.顯示中mcu(單片機)會在一些惡劣的場景中使用,例如海底試驗、地址勘探及車載運行等,某些單片機的運行環(huán)境不僅要求系統(tǒng)能夠連續(xù)穩(wěn)定運行,而且系統(tǒng)極有可能因為碰撞或遭到極大導致數(shù)據(jù)部分丟失,為了防止電路板進水或減輕碰撞對其造成的損害,電路板均封裝地很嚴實。在現(xiàn)有技術中,可以通過通信技術對單片機的系統(tǒng)程序進行在線更新,若更新后的程序可以穩(wěn)定運行,則可以避免拆機,但單片機的運行系統(tǒng)經(jīng)常會有新的需求出現(xiàn),頻繁的更新難免會因為操作人員的失誤或其他隨機錯誤等原因導致系統(tǒng)升級后不能穩(wěn)定地運行,無法正常啟動,如果系統(tǒng)啟動異常,導致系統(tǒng)需要長時間停機或者需要拆機更新系統(tǒng),不僅會浪費人力物力以及時間成本,還既有可能丟失重要的數(shù)據(jù)。
3.因此,現(xiàn)有技術還有待改進和提高。


技術實現(xiàn)要素:

4.針對現(xiàn)有技術的上述缺陷,本發(fā)明提供一種提高單片機更新程序后運行穩(wěn)定性的方法及單片機,旨在解決現(xiàn)有技術中單片機系統(tǒng)升級后不能穩(wěn)定運行的問題。
5.為了解決上述技術問題,本發(fā)明所采用的技術方案如下:
6.本發(fā)明的第一方面,提供一種提高單片機更新程序后運行穩(wěn)定性的方法,所述方法包括:
7.運行一級boot區(qū)域內的程序以在第一boot啟動區(qū)域和第二boot啟動區(qū)域中確定目標boot啟動區(qū)域,通過所述目標boot啟動區(qū)域中的程序讀取標志位區(qū)的標志位;
8.當所述標志位區(qū)的程序更新標志位為第一更新標志時,通過所述目標boot啟動區(qū)域中的程序與上位機進行通信,將主程序更新文件寫入至程序運行區(qū),根據(jù)所述主程序更新文件中的運行區(qū)地址跳轉至所述程序運行區(qū)中的主程序,并修改所述標志位區(qū)的運行狀態(tài)標志位為第一運行標志;
9.在所述程序運行區(qū)的主程序初始化后,啟動硬件設備檢測任務,若硬件設備檢測成功,則修改所述運行狀態(tài)標志位為第二運行標志,若硬件檢測失敗,則修改所述運行狀態(tài)標志位為第三運行標志;
10.在主程序正常運行后,通過主程序訪問運行錯誤記錄數(shù)據(jù),若所述程序運行區(qū)的主程序的運行錯誤記錄少于備份區(qū)的主程序的運行錯誤記錄,則將所述程序運行區(qū)的主程序復制到所述備份區(qū),若所述程序運行區(qū)的主程序的運行錯誤記錄多于所述備份區(qū)的主程序的運行錯誤記錄,則切換至所述備份區(qū)的主程序運行。
11.所述的提高單片機更新程序后運行穩(wěn)定性的方法,其中,所述運行一級boot區(qū)域內的程序以在第一boot啟動區(qū)域和第二boot啟動區(qū)域中確定目標boot啟動區(qū)域,包括:
12.運行一級boot區(qū)域內的程序跳轉至所述第一boot啟動區(qū)域中的程序;
13.若所述第一boot啟動區(qū)域中的程序正常運行,則所述第一boot啟動區(qū)域為所述目標boot啟動區(qū)域;
14.若所述第一boot啟動區(qū)域中的程序不能正常運行,則確定所述第二boot啟動區(qū)域為所述目標boot啟動區(qū)域。
15.所述的提高單片機更新程序后運行穩(wěn)定性的方法,其中,所述方法還包括:
16.若所述第一boot啟動區(qū)域中的程序不能正常啟動,則在所述程序運行區(qū)的主程序正常運行后,通過所述程序運行區(qū)的主程序檢查所述第一boot啟動區(qū)域的故障并上報所述上位機;
17.當所述上位機在線時,通過所述程序運行區(qū)的主程序從所述上位機處接收啟動程序更新文件更新所述第一boot啟動區(qū)域的程序;
18.當所述上位機不在線時,通過所述程序運行區(qū)的主程序將所述第二boot啟動區(qū)域中的程序復制到所述第一boot啟動區(qū)域。
19.所述的提高單片機更新程序后運行穩(wěn)定性的方法,其中,所述跳轉至所述程序運行區(qū)中的主程序運行之前,所述方法還包括:
20.根據(jù)所述程序運行區(qū)的主程序文件計算第一校驗碼;
21.將所述第一校驗碼與所述程序運行區(qū)的主程序文件中的第二校驗碼進行匹配;
22.當所述第一校驗碼和所述第二校驗碼一致時,跳轉至所述程序運行區(qū)中的主程序運行。
23.所述的提高單片機更新程序后運行穩(wěn)定性的方法,其中,所述通過所述目標boot啟動區(qū)域中的程序讀取標志位區(qū)的程序更新標志位之后,所述方法還包括:
24.當所述程序更新標志位為第二更新標志時,通過所述目標boot啟動區(qū)域中的程序讀取所述程序運行區(qū)的內容,根據(jù)所述程序運行區(qū)中的運行地址跳轉至所述程序運行區(qū)中的主程序運行。
25.所述的提高單片機更新程序后運行穩(wěn)定性的方法,其中,所述通過所述目標boot啟動區(qū)域中的程序與上位機進行通信之前,包括:
26.接收所述上位機發(fā)送的更新程序命令,根據(jù)所述更新程序命令將所述程序更新標志位設置為所述第一更新標志后復位。
27.所述的提高單片機更新程序后運行穩(wěn)定性的方法,其中,所述將主程序更新文件寫入至程序運行區(qū)之后,所述方法還包括:
28.將所述標志位區(qū)的備份區(qū)標志設置為第一備份標志;
29.所述將所述程序運行區(qū)的主程序復制到所述備份區(qū)之后,所述方法還包括:
30.將所述備份區(qū)標志修改為第二備份標志;
31.所述切換至所述備份區(qū)的主程序運行之后,所述方法還包括:
32.將所述備份區(qū)標志修改為所述第二備份標志。
33.所述的提高單片機更新程序后運行穩(wěn)定性的方法,其中,所述修改所述標志位區(qū)的運行狀態(tài)標志位為第三運行標志后,所述方法還包括:
34.復位后執(zhí)行所述運行一級boot區(qū)域內的程序以在第一boot啟動區(qū)域和第二boot啟動區(qū)域中確定目標boot啟動區(qū)域,通過所述目標boot啟動區(qū)域中的程序讀取標志位區(qū)的
標志位的步驟;
35.當所述運行狀態(tài)標志位為所述第一運行標志,所述備份區(qū)標志為所述第一備份標志時,發(fā)送第一失敗信息給所述上位機,以使得所述上位機重新發(fā)送更新程序命令;
36.當所述運行狀態(tài)標志位為所述第三運行標志,所述備份區(qū)標志為所述第一備份標志時,發(fā)送第二失敗信息給所述上位機,并通過所述目標boot啟動區(qū)域中的程序重新設置所述運行區(qū)地址;
37.當所述運行狀態(tài)標志位為所述第一運行標志,所述備份區(qū)標志為所述第二備份標志時,發(fā)送第三失敗信息給所述上位機,并通過所述目標boot啟動區(qū)域中的程序對所述備份區(qū)進行硬件檢測,在所述備份區(qū)存在硬件故障時,為所述備份區(qū)重新分配flash區(qū)域。
38.所述的提高單片機更新程序后運行穩(wěn)定性的方法,其中,所述主程序更新文件中包括硬件測試對照表,所述啟動硬件設備檢測任務包括:
39.根據(jù)所述硬件測試對照表中的對照關系將驅動模塊api接口和外圍硬件設備一一對應。
40.所述的提高單片機更新程序后運行穩(wěn)定性的方法,其中,在所述程序運行區(qū)的主程序正常運行或切換至所述備份區(qū)的主程序運行之后,所述方法還包括:
41.通過主程序記錄程序運行過程中的錯誤至所述運行錯誤記錄數(shù)據(jù)中;
42.通過主程序根據(jù)所述運行錯誤記錄數(shù)據(jù)更新優(yōu)化配置表,根據(jù)執(zhí)行更新后的所述優(yōu)化配置表后的所述運行錯誤記錄數(shù)據(jù)確定是否保留對所述優(yōu)化配置表的更新。
43.本發(fā)明的第二方面,提供一種單片機,包括:
44.一級啟動模塊,所述一級啟動模塊用于運行一級boot區(qū)域內的程序以在第一boot啟動區(qū)域和第二boot啟動區(qū)域中確定目標boot啟動區(qū)域;
45.目標啟動模塊,所述目標啟動模塊用于通過所述目標boot啟動區(qū)域中的程序讀取標志位區(qū)的標志位,并在所述標志位區(qū)的程序更新標志位為第一更新標志時,通過所述目標boot啟動區(qū)域中的程序與上位機進行通信,將主程序更新文件寫入至程序運行區(qū),根據(jù)所述主程序更新文件中的運行區(qū)地址跳轉至所述程序運行區(qū)中的主程序,并修改所述標志位區(qū)的運行狀態(tài)標志位為第一運行標志;
46.主程序運行模塊,所述主程序運行模塊用于在所述程序運行區(qū)的主程序初始化后,啟動硬件設備檢測任務,若硬件設備檢測成功,則修改所述運行狀態(tài)標志位為第二運行標志,若硬件檢測失敗,則修改所述運行狀態(tài)標志位為第三運行標志;
47.所述主程序運行模塊還用于在主程序正常運行后,通過主程序訪問運行錯誤記錄數(shù)據(jù),若所述程序運行區(qū)的主程序的運行錯誤記錄少于備份區(qū)的主程序的運行錯誤記錄,則將所述程序運行區(qū)的主程序復制到所述備份區(qū),若所述程序運行區(qū)的主程序的運行錯誤記錄多于所述備份區(qū)的主程序的運行錯誤記錄,則切換至所述備份區(qū)的主程序運行。
48.本發(fā)明的第三方面,提供一種提高單片機更新程序后運行穩(wěn)定性的系統(tǒng),所述系統(tǒng)包括處理器、與處理器通信連接的計算機可讀存儲介質,所述計算機可讀存儲介質適于存儲多條指令,所述處理器適于調用所述計算機可讀存儲介質中的指令,以執(zhí)行實現(xiàn)上述任一項所述的提高單片機更新程序后運行穩(wěn)定性的方法的步驟。
49.本發(fā)明的第四方面,提供一種計算機可讀存儲介質,所述計算機可讀存儲介質存儲有一個或者多個程序,所述一個或者多個程序可被一個或者多個處理器執(zhí)行,以實現(xiàn)上
述任一項所述的提高單片機更新程序后運行穩(wěn)定性的方法的步驟。
50.與現(xiàn)有技術相比,本發(fā)明提供了一種提高單片機更新程序后運行穩(wěn)定性的方法及單片機,本發(fā)明提供的提高單片機更新程序后的運行穩(wěn)定性的方法中,設置有一級boot區(qū)域、第一boot啟動區(qū)域和第二boot啟動區(qū)域,一級boot區(qū)域中的程序只用于跳轉至第一boot啟動區(qū)域或第二boot啟動區(qū)域,第一boot啟動區(qū)域和第二boot啟動區(qū)域互為備份,二者中的程序均可以實現(xiàn)系統(tǒng)啟動,進行主程序更新,并跳轉至程序運行區(qū)運行主程序,由于一級boot區(qū)域中只實現(xiàn)程序跳轉,開發(fā)前期只需要保證開發(fā)一個非常短小精悍不容易出錯的程序來實現(xiàn)跳轉,第一boot啟動區(qū)域或第二boot啟動區(qū)域產(chǎn)生故障,都可以通過另外一個boot啟動區(qū)域進行主程序啟動,提升單片機系統(tǒng)運行穩(wěn)定性,并且,本發(fā)明中程序運行區(qū)也設置了備份區(qū),在運行過程中記錄當前運行的程序版本的運行錯誤記錄,如果程序運行區(qū)運行的程序的錯誤記錄少于備份區(qū)的運行錯誤記錄,將程序運行區(qū)的主程序復制到備份區(qū),如果多于備份區(qū)的運行錯誤記錄,則切換至備份區(qū)的主程序運行,這樣可以清晰地比較當前運行版本與歷史版本的運行情況,若版本的迭代更新令錯誤數(shù)不減反增,退回至備份區(qū)的主程序版本運行,進一步保證了進行了程序更新后單片機的運行穩(wěn)定性。
附圖說明
51.圖1為本發(fā)明提供的提高單片機更新程序后運行穩(wěn)定性的方法的實施例的流程圖;
52.圖2為本發(fā)明提供的提高單片機更新程序后運行穩(wěn)定性的方法的實施例中單片機flash分區(qū)示意圖;
53.圖3為本發(fā)明提供的提高單片機更新程序后運行穩(wěn)定性的方法的實施例中主程序更新文件的組成示意圖;
54.圖4為本發(fā)明提供的提高單片機更新程序后運行穩(wěn)定性的方法的實施例中標志位區(qū)的各個標志位的標志含義示例圖;
55.圖5為本發(fā)明提供的提高單片機更新程序后運行穩(wěn)定性的方法的實施例中程序運行區(qū)和備份區(qū)文件組成示意圖;
56.圖6為本發(fā)明提供的提高單片機更新程序后運行穩(wěn)定性的方法的實施例中硬件檢測概念示意圖;
57.圖7為本發(fā)明提供的提高單片機更新程序后運行穩(wěn)定性的方法的實施例中主程序更新過程中上位機的流程圖;
58.圖8為本發(fā)明提供的提高單片機更新程序后運行穩(wěn)定性的方法的實施例中boot啟動區(qū)域的程序運行流程圖;
59.圖9為本發(fā)明提供的提高單片機更新程序后運行穩(wěn)定性的方法的實施例中主程序開始運行階段流程圖;
60.圖10為本發(fā)明提供的提高單片機更新程序后運行穩(wěn)定性的方法的實施例中運行錯誤記錄數(shù)據(jù)示意圖;
61.圖11為本發(fā)明提供的提高單片機更新程序后運行穩(wěn)定性的方法的實施例中主程序正常運行階段流程圖;
62.圖12為本發(fā)明提供的提高單片機更新程序后運行穩(wěn)定性的方法的實施例中優(yōu)化
配置表示意圖;
63.圖13為本發(fā)明提供的提高單片機更新程序后運行穩(wěn)定性的裝置的實施例的結構原理圖;
64.圖14為本發(fā)明提供的本發(fā)明提供的提高單片機更新程序后運行穩(wěn)定性的系統(tǒng)的實施例的原理示意圖。
具體實施方式
65.為使本發(fā)明的目的、技術方案及效果更加清楚、明確,以下參照附圖并舉實施例對本發(fā)明進一步詳細說明。應當理解,此處所描述的具體實施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
66.實施例一
67.如圖1所示,所述提高單片機更新程序后運行穩(wěn)定性的方法的一個實施例中,包括步驟:
68.s100、運行一級boot區(qū)域內的程序以在第一boot啟動區(qū)域和第二boot啟動區(qū)域中確定目標boot啟動區(qū)域,通過所述目標boot啟動區(qū)域中的程序讀取標志位區(qū)的標志位。
69.如圖2所示,在本實施例中,單片機的flash分為多個區(qū),包括一級boot區(qū)域、第一boot啟動區(qū)域(圖2中的bootloader1)和第二boot啟動區(qū)域(圖2中的bootloader2),還包括標志位區(qū),所述第一boot區(qū)域內的程序只用于跳轉至所述第一boot啟動區(qū)域或所述第二boot啟動區(qū)域,所述第一boot啟動區(qū)域和所述第二boot啟動區(qū)域內有單片機的啟動程序,用于跳轉至主程序。由于所述第一boot啟動區(qū)域內的程序只用于跳轉,因此,所述第一boot啟動區(qū)域內的程序可以是一個非常短小精悍不容易出錯的程序,而所述第一boot啟動區(qū)域和所述第二boot啟動區(qū)域內的程序都可以用于實現(xiàn)主程序的啟動,因此所述第一boot啟動區(qū)域和所述第二boot啟動區(qū)域可以互為備份,當所述第一boot啟動區(qū)域或所述第二boot啟動區(qū)域產(chǎn)生硬件故障或程序出錯時,可以通過另一個boot啟動區(qū)域進行啟動。
70.具體地,所述運行一級boot區(qū)域內的程序以在第一boot啟動區(qū)域和第二boot啟動區(qū)域中確定目標boot啟動區(qū)域,包括:
71.運行一級boot區(qū)域內的程序跳轉至所述第一boot啟動區(qū)域中的程序;
72.若所述第一boot啟動區(qū)域中的程序正常運行,則所述第一boot啟動區(qū)域為所述目標boot啟動區(qū)域;
73.若所述第一boot啟動區(qū)域中的程序不能正常運行,則確定所述第二boot啟動區(qū)域為所述目標boot啟動區(qū)域。
74.如圖2所示,所述單片機中還設置有標志位區(qū),如圖4所示,所述標志位區(qū)中存儲有程序更新標志位、運行狀態(tài)標志位、備份區(qū)一致性標志位等。
75.s200、當所述標志位區(qū)的程序更新標志位為第一更新標志時,通過所述目標boot啟動區(qū)域中的程序與上位機進行通信,將主程序更新文件寫入至程序運行區(qū),根據(jù)所述主程序更新文件中的運行區(qū)地址跳轉至所述程序運行區(qū)中的主程序,并修改所述運行狀態(tài)標志位為第一運行標志。
76.所述程序更新標志位用于表示所述單片機的主程序是否需要更新,當所述標志位區(qū)的程序更新標志位為第一更新標志,如0xaa時,表示所述單片機的主程序需要更新,此時
所述目標boot啟動區(qū)域中的程序與上位機進行通信,接收所述上位機發(fā)送的所述主程序更新文件,將所述主程序更新文件寫入至程序運行區(qū)。具體地,如圖7所示,當所述單片機運行時,若接收到上位機發(fā)送的更新程序命令,則根據(jù)所述更新程序命令將所述程序更新標志設置為所述第一更新標志后復位,復位后讀取到所述第一更新標志為所述第一更新標志,則執(zhí)行步驟s200獲取上位機下發(fā)的程序更新文件。即,所述通過所述目標boot啟動區(qū)域中的程序與上位機進行通信之前,包括:
77.接收所述上位機發(fā)送的更新程序命令,根據(jù)所述更新程序命令將所述程序更新標志位設置為所述第一更新標志后復位。
78.如圖3所示,所述主程序更新文件中包括主程序、運行區(qū)地址、硬件檢測對照表和crc校驗碼,所述運行區(qū)地址用于跳轉至主程序運行,當所述主程序更新文件被寫入至所述程序運行區(qū)后,通過所述目標boot啟動區(qū)域中的程序識別其中的所述運行地址,根據(jù)所述運行地址跳轉到所述程序運行區(qū)中的主程序運行。為了保證主程序文件的完整性,在跳轉到主程序運行之前,首先對主程序進行校驗,即所述跳轉至所述程序運行區(qū)中的主程序運行之前,還包括步驟:
79.根據(jù)所述程序運行區(qū)的主程序文件計算第一校驗碼;
80.將所述第一校驗碼與所述程序運行區(qū)的主程序文件中的第二校驗碼進行匹配;
81.當所述第一校驗碼和所述第二校驗碼一致時,跳轉至所述程序運行區(qū)中的主程序運行。
82.如圖5所示,所述主程序更新文件被寫入至所述程序運行區(qū)后,所述程序運行區(qū)內的文件組成包括:主程序、運行區(qū)地址、硬件測試對照表以和crc校驗碼,所述crc校驗碼是預先根據(jù)主程序計算得到的,被包括在所述主程序更新文件中寫入到所述程序運行區(qū),如果所述程序運行區(qū)的主程序文件是完整的,與上位機下發(fā)的主程序文件一致,那么根據(jù)所述程序運行區(qū)的主程序文件計算得到的crc校驗碼應該與所述程序運行區(qū)內的crc校驗碼一致。確定兩個校驗碼一致后,可以根據(jù)運行區(qū)地址跳轉至所述程序運行區(qū)中的主程序運行。
83.如圖8所示,跳轉至所述程序運行區(qū)中的主程序之前,通過所述目標boot啟動區(qū)域內的程序修改所述標志位區(qū)的運行狀態(tài)標志位為第一運行標志,例如是0xaa,所述第一運行標志表示主程序在運行中,修改所述運行狀態(tài)標志位后,啟動1min看門狗并跳轉到所述程序運行區(qū)中的主程序運行。
84.s300、在所述程序運行區(qū)的主程序初始化后,啟動硬件設備檢測任務,若硬件設備檢測成功,則修改所述運行狀態(tài)標志位為第二運行標志,若硬件檢測失敗,則修改所述運行狀態(tài)標志位為第三運行標志。
85.所述程序運行區(qū)中的主程序開始運行后,首先進行初始化,在初始化完成后啟動硬件設備檢測任務,所述主程序更新文件中包括硬件測試對照表,被寫入至所述主程序運行區(qū)。在所述程序運行區(qū)中的主程序初始化后,主程序首先啟動硬件設備檢測任務,具體地,嵌入式系統(tǒng)軟件在結構上有明顯的層次化,板級支持包是介于硬件層和上層操作系統(tǒng)之間的底層軟件程序,板級支持包由不同的驅動模塊單元組成,如圖6所示,硬件檢測任務實現(xiàn)將驅動模塊api接口和系統(tǒng)外圍硬件設備一一對應,在系統(tǒng)對硬件設備初始化完成后,執(zhí)行對硬件設備的檢測,可以快速方便的檢測出系統(tǒng)的硬件異常。即,所述啟動硬件設備檢
測任務包括:
86.根據(jù)所述硬件測試對照表中的對照關系將驅動模塊api接口和外圍硬件設備一一對應。
87.若硬件設備檢測成功,那么主程序啟動成功,系統(tǒng)可以正常運行,如圖9所示,修改所述運行狀態(tài)標志位為第二運行標志(如0x00)并關閉1min看門狗,所述第二運行標志表示主程序運行成功。此時還通過主程序發(fā)送更新成功信息給上位機。
88.s400、在主程序正常運行后,通過主程序訪問運行錯誤記錄數(shù)據(jù),若所述程序運行區(qū)的主程序運行錯誤記錄少于備份區(qū)的主程序的運行錯誤記錄,則將所述程序運行區(qū)的主程序復制到所述備份區(qū),若所述程序運行區(qū)的主程序的運行錯誤記錄多于所述備份區(qū)的主程序的運行錯誤記錄,則切換至所述備份區(qū)的主程序運行。
89.具體地,在本實施例中,為主程序設置備份區(qū),所述備份區(qū)中也有主程序,當更新程序文件被寫入所述主程序運行區(qū)后,所述主程序運行區(qū)的主程序被更新為新的版本,而所述備份區(qū)的主程序是之前的版本,此時將所述標志位區(qū)的備份區(qū)標志設置為第一備份標志,所述第一備份標志用于表示當前運行的主程序與備份區(qū)內的主程序不同。為了避免主程序無效的更新迭代,在本實施例中,如圖2所示,還設置error記錄區(qū),所述error記錄區(qū)中存儲運行錯誤記錄數(shù)據(jù),具體地,如圖10所示,所述運行錯誤記錄數(shù)據(jù)可以按照表格的方式進行存儲。
90.本實施例提供的方法中,所述標志位區(qū)中包括自動替換備份區(qū)標志位,當所述自動替換備份區(qū)標志位為可替換標志時,表示當前版本的主程序可以復制到備份區(qū),當所述自動替換備份區(qū)標志位為不可替換標志時,說明發(fā)生不可抗力導致當前版本無法運行。如圖11所示,在主程序正常運行后,可以先判斷自動替換備份區(qū)標志,當所述自動替換備份區(qū)標志為不可替換時,切換為所述備份區(qū)的主程序運行,當所述自動替換備份區(qū)標志為可替換標志時,則以當前所述程序運行區(qū)的主程序運行。在運行過程中,記錄不影響系統(tǒng)正常運行的程序運行錯誤(error)到所述運行錯誤記錄數(shù)據(jù)中。在運行一段時間后,比較所述程序運行區(qū)的主程序的運行錯誤次數(shù)與所述備份區(qū)的主程序運行錯誤次數(shù),值得說明的是,這里所說的所述備份區(qū)的主程序運行錯誤次數(shù),易于所述備份區(qū)當前的主程序版本相同的主程序運行錯誤次數(shù),不一定是在所述備份區(qū)內運行,也可以是所述程序運行區(qū)前升級前與所述備份區(qū)當前的本本相同的主程序運行時的運行錯誤次數(shù)。若所述程序運行區(qū)的主程序的運行錯誤記錄少于所述備份區(qū)的主程序的運行錯誤記錄,那么說明本次更新后的主程序優(yōu)于前一版本,那么將所述程序運行區(qū)的主程序復制到所述備份區(qū),將所述程序運行區(qū)的主程序復制到所述備份區(qū)后,將所述備份區(qū)標志修改為第二備份標志,所述第二備份標志表示當前運行的主程序與所述備份區(qū)內的主程序相同。若所述程序運行區(qū)的主程序的運行錯誤記錄多于所述備份區(qū)的主程序的運行錯誤記錄,說明主程序版本的迭代更新令錯誤的數(shù)量不減反增,那么本次迭代更新為無效更新,則切換至所述備份區(qū)的主程序運行,切換至所述備份區(qū)的主程序運行之后,將所述備份區(qū)標志修改為所述第二備份標志,即表示當前雨欣的主程序與所述備份區(qū)內的主程序相同。
91.所述運行錯誤記錄數(shù)據(jù)中可以滾動記錄多個版本的運行錯誤情況,有利于對比當前版本與歷史版本。在下一次與所述上位機連接通信時,可以將所述運行錯誤記錄數(shù)據(jù)上報至所述上位機,使得開發(fā)人員能夠獲取到主程序的運行錯誤記錄,進行改進。
92.若在通過所述一級boot區(qū)域中的程序跳轉至所述第一boot啟動區(qū)域后,所述第一boot啟動區(qū)域中的啟動程序不能正常運行,那么所述第一boot啟動區(qū)域中產(chǎn)生了故障,在通過所述第二boot啟動區(qū)域中的程序正常運行后,可以通過主程序對所述第一boot啟動區(qū)域進行故障檢測并上報上位機,以使得所述上位機發(fā)送更新文件對所述第一boot啟動區(qū)域中的程序進行更新。即本實施例提供的方法還包括:
93.若所述第一boot啟動區(qū)域中的程序不能正常啟動,則在所述程序運行區(qū)的主程序正常運行后,通過所述程序運行區(qū)的主程序檢查所述第一boot啟動區(qū)域的故障并上報所述上位機;
94.當所述上位機在線時,通過所述程序運行區(qū)的主程序從所述上位機處接收啟動程序更新文件更新所述第一boot啟動區(qū)域的程序;
95.當所述上位機不在線時,通過所述程序運行區(qū)的主程序將所述第二boot啟動區(qū)域中的程序復制到所述第一boot啟動區(qū)域。
96.這樣,可以保證無論在什么情況下,所述單片機內都存在一套可以保證系統(tǒng)穩(wěn)定運行的啟動程序(bootloader)和主程序。
97.在主程序運行的過程中,本實施例提供的方法還包括:
98.通過主程序記錄程序運行過程中的錯誤至所述運行錯誤記錄數(shù)據(jù)中;
99.通過主程序根據(jù)所述運行錯誤記錄數(shù)據(jù)更新優(yōu)化配置表,根據(jù)執(zhí)行更新后的所述優(yōu)化配置表后的所述運行錯誤記錄數(shù)據(jù)確定是否保留對所述優(yōu)化配置表的更新。
100.在一種可能的實現(xiàn)方式中,所述主程序運行區(qū)中還設置有優(yōu)化配置表,優(yōu)化配置表的格式可以如圖12所示。在主程序運行過程中將運行錯誤記錄后,通過主程序分析運行錯誤與優(yōu)化配置表之間的關系,修改優(yōu)化配置表的數(shù)據(jù),若修改后運行錯誤出現(xiàn)的次數(shù)降低或者不再出現(xiàn),說明修改有效,可以保留修改。
101.若硬件設備檢測失敗,那么系統(tǒng)不能正常運行,此時修改所述運行狀態(tài)標志位為第三運行標志(例如0xxf)。所述第三運行標志表示主程序運行失敗。所述修改所述標志位區(qū)的運行狀態(tài)標志位為第三運行標志后,本實施例提供的方法還包括:
102.復位后執(zhí)行所述運行一級boot區(qū)域內的程序以在第一boot啟動區(qū)域和第二boot啟動區(qū)域中確定目標boot啟動區(qū)域,通過所述目標boot啟動區(qū)域中的程序讀取標志位區(qū)的標志位的步驟;
103.當所述運行狀態(tài)標志位為所述第一運行標志,所述備份區(qū)標志為所述第一備份標志時,發(fā)送第一失敗信息給所述上位機,以使得所述上位機重新發(fā)送更新程序命令;
104.當所述運行狀態(tài)標志位為所述第三運行標志,所述備份區(qū)標志為所述第一備份標志時,發(fā)送第二失敗信息給所述上位機,并通過所述目標boot啟動區(qū)域中的程序重新設置所述運行區(qū)地址;
105.當所述運行狀態(tài)標志位為所述第一運行標志,所述備份區(qū)標志為所述第二備份標志時,發(fā)送第三失敗信息給所述上位機,并通過所述目標boot啟動區(qū)域中的程序對所述備份區(qū)進行硬件檢測,在所述備份區(qū)存在硬件故障時,為所述備份區(qū)重新分配flash區(qū)域。
106.如果主程序不能正常啟動,則隔預設時長,例如1min后,單片機自動復位,復位后通過所述目標boot啟動區(qū)域中的程序重新識別標志位。若識別到所述運行狀態(tài)標志位為所述第一運行標志,所述備份區(qū)標志為所述第一備份標志,說明上一次主程序啟動失敗,那么
通過所述目標boot啟動區(qū)域中的程序發(fā)送第一失敗信息給所述上位機告知主程序啟動失敗,所述上位機接收到所述第一失敗信息后,可以重新發(fā)送更新程序命令更新所述程序運行區(qū)的主程序。若識別到所述運行狀態(tài)標志位為所述第三運行標志,所述備份區(qū)標志為所述第一備份標志,說明上一次硬件檢測失敗,通過所述目標boot啟動區(qū)域中的程序發(fā)送第二失敗信息給所述上位機,所述第二失敗信息中包括硬件檢測結果,發(fā)送所述第二失敗信息給所述上位機后,可以接收所述上位機發(fā)送的新的運行區(qū)地址,在沒有硬件故障的區(qū)域實現(xiàn)主程序運行,或者,所述目標boot啟動區(qū)域中的程序可以自行跳過硬件損壞區(qū)域,修改所述運行區(qū)地址,重新分配flash區(qū)域進行主程序運行。若所述運行狀態(tài)標志位為所述第一運行標志,所述備份區(qū)標志為所述第二備份標志,說明上一次從所述備份區(qū)啟動失敗,此時通過所述目標boot啟動區(qū)域中的程序發(fā)送第三失敗信息給所述上位機,所述第三失敗信息中包括所述備份區(qū)啟動失敗的信息,所述上位機接收到所述第三失敗信息,可以發(fā)送更新程序命令或者發(fā)送啟動命令以使得所述單片機重啟。通過所述目標boot啟動區(qū)域中的程序發(fā)送第三失敗信息后,還可以通過所述目標boot啟動區(qū)域中的程序對所述備份區(qū)進行硬件檢測,若在所述備份區(qū)存在硬件故障,則嘗試跳過損壞區(qū)域,為備份區(qū)重新分配flash區(qū)域并重新運行主程序。本發(fā)明中若flash硬件檢測出現(xiàn)問題,boot可以智能修改主程序中運行區(qū)地址,自動對flash區(qū)域進行合理的劃分,可以有效規(guī)避在野外設備遭受碰撞后flash部分故障導致系統(tǒng)無法啟動的問題。
107.綜上所述,本實施例提供一種提高單片機更新程序后運行穩(wěn)定性的方法,設置有一級boot區(qū)域和第一boot啟動區(qū)域和第二boot啟動區(qū)域,一級boot區(qū)域中的程序只用于跳轉至第一boot啟動區(qū)域或第二boot啟動區(qū)域,第一boot啟動區(qū)域和第二boot啟動區(qū)域互為備份,二者中的程序均可以實現(xiàn)系統(tǒng)啟動,進行主程序更新,并跳轉至程序運行區(qū)運行主程序,由于一級boot區(qū)域中只實現(xiàn)程序跳轉,開發(fā)前期只需要保證開發(fā)一個非常短小精悍不容易出錯的程序來實現(xiàn)跳轉,第一boot啟動區(qū)域或第二boot啟動區(qū)域產(chǎn)生故障,都可以通過另外一個boot啟動區(qū)域進行主程序啟動,提升單片機系統(tǒng)運行穩(wěn)定性,并且,本發(fā)明中程序運行區(qū)也設置了備份區(qū),在運行過程中記錄當前運行的程序版本的運行錯誤記錄,如果程序運行區(qū)運行的程序的錯誤記錄少于備份區(qū)的運行錯誤記錄,將程序運行區(qū)的主程序復制到備份區(qū),如果多于備份區(qū)的運行錯誤記錄,則切換至備份區(qū)的主程序運行,這樣可以清晰地比較當前運行版本與歷史版本的運行情況,若版本的迭代更新令錯誤數(shù)不減反增,退回至備份區(qū)的主程序版本運行,進一步保證了進行了程序更新后單片機的運行穩(wěn)定性。
108.應該理解的是,雖然本發(fā)明說明書附圖中給出的的流程圖中的各個步驟按照箭頭的指示依次顯式,但是這些步驟并不是必然按照箭頭指示的順序依次執(zhí)行。除非本文中有明確的說明,這些步驟的執(zhí)行并沒有嚴格的順序限制,這些步驟可以以其它的順序執(zhí)行。而且,流程圖中的至少一部分步驟可以包括多個子步驟或者多個階段,這些子步驟或者階段并不必然是在同一時刻執(zhí)行完成,而是可以在不同的時刻執(zhí)行,這些子步驟或者階段的執(zhí)行順序也不必然是依次進行,而是可以與其它步驟或者其它步驟的子步驟或者階段的至少一部分輪流或者交替地執(zhí)行。
109.本領域普通技術人員可以理解實現(xiàn)上述實施例方法中的全部或部分流程,是可以通過計算機程序來指令相關的硬件來完成,所述的計算機程序可存儲于一非易失性計算機可讀取計算機可讀存儲介質中,該計算機程序在執(zhí)行時,可包括如上述各方法的實施例的
流程。其中,本發(fā)明所提供的各實施例中所使用的對存儲器、存儲、數(shù)據(jù)庫或其它介質的任何引用,均可包括非易失性和/或易失性存儲器。非易失性存儲器可包括只讀存儲器(rom)、可編程rom(prom)、電可編程rom(eprom)、電可擦除可編程rom(eeprom)或閃存。易失性存儲器可包括隨機存取存儲器(ram)或者外部高速緩沖存儲器。作為說明而非局限,ram以多種形式可得,諸如靜態(tài)ram(sram)、動態(tài)ram(dram)、同步dram(sdram)、雙數(shù)據(jù)率sdram(ddrsdram)、增強型sdram(esdram)、同步鏈路(synchlink)dram(sldram)、存儲器總線(rambus)直接ram(rdram)、直接存儲器總線動態(tài)ram(drdram)、以及存儲器總線動態(tài)ram(rdram)等。
110.實施例二
111.基于上述實施例,本發(fā)明還相應提供了一種提高單片機更新程序后運行穩(wěn)定性的裝置,如圖13所示,所述提高單片機更新程序后運行穩(wěn)定性的裝置包括:
112.一級啟動模塊,所述一級啟動模塊用于運行一級boot區(qū)域內的程序以在第一boot啟動區(qū)域和第二boot啟動區(qū)域中確定目標boot啟動區(qū)域,具體如實施例一中所述;
113.目標啟動模塊,所述目標啟動模塊用于通過所述目標boot啟動區(qū)域中的程序讀取標志位區(qū)的標志位,并在所述標志位區(qū)的程序更新標志位為第一更新標志時,通過所述目標boot啟動區(qū)域中的程序與上位機進行通信,將主程序更新文件寫入至程序運行區(qū),根據(jù)所述主程序更新文件中的運行區(qū)地址跳轉至所述程序運行區(qū)中的主程序,并修改所述標志位區(qū)的運行狀態(tài)標志位為第一運行標志,具體如實施例一中所述;
114.主程序運行模塊,所述主程序運行模塊用于在所述程序運行區(qū)的主程序初始化后,啟動硬件設備檢測任務,若硬件設備檢測成功,則修改所述運行狀態(tài)標志位為第二運行標志,若硬件檢測失敗,則修改所述運行狀態(tài)標志位為第三運行標志,具體如實施例一中所述;
115.所述主程序運行模塊還用于在主程序正常運行后,通過主程序訪問運行錯誤記錄數(shù)據(jù),若所述程序運行區(qū)的主程序的運行錯誤記錄少于備份區(qū)的主程序的運行錯誤記錄,則將所述程序運行區(qū)的主程序復制到所述備份區(qū),若所述程序運行區(qū)的主程序的運行錯誤記錄多于所述備份區(qū)的主程序的運行錯誤記錄,則切換至所述備份區(qū)的主程序運行,具體如實施例一中所述。
116.實施例三
117.基于上述實施例,本發(fā)明還相應提供了一種提高單片機更新程序后運行穩(wěn)定性的系統(tǒng),如圖14所示,所述提高單片機更新程序后運行穩(wěn)定性的系統(tǒng)包括處理器10以及存儲器20。圖14僅示出了提高單片機更新程序后運行穩(wěn)定性的系統(tǒng)的部分組件,但是應理解的是,并不要求實施所有示出的組件,可以替代的實施更多或者更少的組件。
118.所述存儲器20在一些實施例中可以是所述提高單片機更新程序后運行穩(wěn)定性的系統(tǒng)的內部存儲單元,例如提高單片機更新程序后運行穩(wěn)定性的系統(tǒng)的硬盤或內存。所述存儲器20在另一些實施例中也可以是所述提高單片機更新程序后運行穩(wěn)定性的系統(tǒng)的外部存儲設備,例如所述提高單片機更新程序后運行穩(wěn)定性的系統(tǒng)上配備的插接式硬盤,智能存儲卡(smart media card,smc),安全數(shù)字(secure digital,sd)卡,閃存卡(flash card)等。進一步地,所述存儲器20還可以既包括所述提高單片機更新程序后運行穩(wěn)定性的系統(tǒng)的內部存儲單元也包括外部存儲設備。所述存儲器20用于存儲安裝于所述提高單片機
更新程序后運行穩(wěn)定性的系統(tǒng)的應用軟件及各類數(shù)據(jù)。所述存儲器20還可以用于暫時地存儲已經(jīng)輸出或者將要輸出的數(shù)據(jù)。在一實施例中,存儲器20上存儲有提高單片機更新程序后運行穩(wěn)定性的程序30,該提高單片機更新程序后運行穩(wěn)定性的程序30可被處理器10所執(zhí)行,從而實現(xiàn)本技術中提高單片機更新程序后運行穩(wěn)定性的方法。
119.所述處理器10在一些實施例中可以是一中央處理器(central processing unit,cpu),微處理器或其他芯片,用于運行所述存儲器20中存儲的程序代碼或處理數(shù)據(jù),例如執(zhí)行所述提高單片機更新程序后運行穩(wěn)定性的方法等。
120.在一實施例中,當處理器10執(zhí)行所述存儲器20中提高單片機更新程序后運行穩(wěn)定性的程序30時實現(xiàn)以下步驟:
121.運行一級boot區(qū)域內的程序以在第一boot啟動區(qū)域和第二boot啟動區(qū)域中確定目標boot啟動區(qū)域,通過所述目標boot啟動區(qū)域中的程序讀取標志位區(qū)的標志位;
122.當所述標志位區(qū)的程序更新標志位為第一更新標志時,通過所述目標boot啟動區(qū)域中的程序與上位機進行通信,將主程序更新文件寫入至程序運行區(qū),根據(jù)所述主程序更新文件中的運行區(qū)地址跳轉至所述程序運行區(qū)中的主程序,并修改所述標志位區(qū)的運行狀態(tài)標志位為第一運行標志;
123.在所述程序運行區(qū)的主程序初始化后,啟動硬件設備檢測任務,若硬件設備檢測成功,則修改所述運行狀態(tài)標志位為第二運行標志,若硬件檢測失敗,則修改所述運行狀態(tài)標志位為第三運行標志;
124.在主程序正常運行后,通過主程序訪問運行錯誤記錄數(shù)據(jù),若所述程序運行區(qū)的主程序的運行錯誤記錄少于備份區(qū)的主程序的運行錯誤記錄,則將所述程序運行區(qū)的主程序復制到所述備份區(qū),若所述程序運行區(qū)的主程序的運行錯誤記錄多于所述備份區(qū)的主程序的運行錯誤記錄,則切換至所述備份區(qū)的主程序運行。
125.其中,所述運行一級boot區(qū)域內的程序以在第一boot啟動區(qū)域和第二boot啟動區(qū)域中確定目標boot啟動區(qū)域,包括:
126.運行一級boot區(qū)域內的程序跳轉至所述第一boot啟動區(qū)域中的程序;
127.若所述第一boot啟動區(qū)域中的程序正常運行,則所述第一boot啟動區(qū)域為所述目標boot啟動區(qū)域;
128.若所述第一boot啟動區(qū)域中的程序不能正常運行,則確定所述第二boot啟動區(qū)域為所述目標boot啟動區(qū)域。
129.其中,所述方法還包括:
130.若所述第一boot啟動區(qū)域中的程序不能正常啟動,則在所述程序運行區(qū)的主程序正常運行后,通過所述程序運行區(qū)的主程序檢查所述第一boot啟動區(qū)域的故障并上報所述上位機;
131.當所述上位機在線時,通過所述程序運行區(qū)的主程序從所述上位機處接收啟動程序更新文件更新所述第一boot啟動區(qū)域的程序;
132.當所述上位機不在線時,通過所述程序運行區(qū)的主程序將所述第二boot啟動區(qū)域中的程序復制到所述第一boot啟動區(qū)域。
133.其中,所述跳轉至所述程序運行區(qū)中的主程序運行之前,所述方法還包括:
134.根據(jù)所述程序運行區(qū)的主程序文件計算第一校驗碼;
135.將所述第一校驗碼與所述程序運行區(qū)的主程序文件中的第二校驗碼進行匹配;
136.當所述第一校驗碼和所述第二校驗碼一致時,跳轉至所述程序運行區(qū)中的主程序運行。
137.其中,所述通過所述目標boot啟動區(qū)域中的程序讀取標志位區(qū)的程序更新標志位之后,所述方法還包括:
138.當所述程序更新標志位為第二更新標志時,通過所述目標boot啟動區(qū)域中的程序讀取所述程序運行區(qū)的內容,根據(jù)所述程序運行區(qū)中的運行地址跳轉至所述程序運行區(qū)中的主程序運行。
139.其中,所述通過所述目標boot啟動區(qū)域中的程序與上位機進行通信之前,包括:
140.接收所述上位機發(fā)送的更新程序命令,根據(jù)所述更新程序命令將所述程序更新標志位設置為所述第一更新標志后復位。
141.其中,所述將主程序更新文件寫入至程序運行區(qū)之后,所述方法還包括:
142.將所述標志位區(qū)的備份區(qū)標志設置為第一備份標志;
143.所述將所述程序運行區(qū)的主程序復制到所述備份區(qū)之后,所述方法還包括:
144.將所述備份區(qū)標志修改為第二備份標志;
145.所述切換至所述備份區(qū)的主程序運行之后,所述方法還包括:
146.將所述備份區(qū)標志修改為所述第二備份標志。
147.其中,所述修改所述標志位區(qū)的運行狀態(tài)標志位為第三運行標志后,所述方法還包括:
148.復位后執(zhí)行所述運行一級boot區(qū)域內的程序以在第一boot啟動區(qū)域和第二boot啟動區(qū)域中確定目標boot啟動區(qū)域,通過所述目標boot啟動區(qū)域中的程序讀取標志位區(qū)的標志位的步驟;
149.當所述運行狀態(tài)標志位為所述第一運行標志,所述備份區(qū)標志為所述第一備份標志時,發(fā)送第一失敗信息給所述上位機,以使得所述上位機重新發(fā)送更新程序命令;
150.當所述運行狀態(tài)標志位為所述第三運行標志,所述備份區(qū)標志為所述第一備份標志時,發(fā)送第二失敗信息給所述上位機,并通過所述目標boot啟動區(qū)域中的程序重新設置所述運行區(qū)地址;
151.當所述運行狀態(tài)標志位為所述第一運行標志,所述備份區(qū)標志為所述第二備份標志時,發(fā)送第三失敗信息給所述上位機,并通過所述目標boot啟動區(qū)域中的程序對所述備份區(qū)進行硬件檢測,在所述備份區(qū)存在硬件故障時,為所述備份區(qū)重新分配flash區(qū)域。
152.其中,所述主程序更新文件中包括硬件測試對照表,所述啟動硬件設備檢測任務包括:
153.根據(jù)所述硬件測試對照表中的對照關系將驅動模塊api接口和外圍硬件設備一一對應。
154.其中,在所述程序運行區(qū)的主程序正常運行或切換至所述備份區(qū)的主程序運行之后,所述方法還包括:
155.通過主程序記錄程序運行過程中的錯誤至所述運行錯誤記錄數(shù)據(jù)中;
156.通過主程序根據(jù)所述運行錯誤記錄數(shù)據(jù)更新優(yōu)化配置表,根據(jù)執(zhí)行更新后的所述優(yōu)化配置表后的所述運行錯誤記錄數(shù)據(jù)確定是否保留對所述優(yōu)化配置表的更新。
157.實施例四
158.本發(fā)明還提供一種計算機可讀存儲介質,其中,存儲有一個或者多個程序,所述一個或者多個程序可被一個或者多個處理器執(zhí)行,以實現(xiàn)如上所述的提高單片機更新程序后運行穩(wěn)定性的方法的步驟。
159.最后應說明的是:以上實施例僅用以說明本發(fā)明的技術方案,而非對其限制;盡管參照前述實施例對本發(fā)明進行了詳細的說明,本領域的普通技術人員應當理解:其依然可以對前述各實施例所記載的技術方案進行修改,或者對其中部分技術特征進行等同替換;而這些修改或者替換,并不使相應技術方案的本質脫離本發(fā)明各實施例技術方案的精神和范圍。
當前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1