国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      基于Flash的程序分層存儲、運行以及升級的方法和裝置的制造方法_3

      文檔序號:9396703閱讀:來源:國知局
      [0108] 步驟S201 :從Flash中已知的好塊中讀出引導(dǎo)程序至RAM;
      [0109] 步驟S202 :運行引導(dǎo)程序,初始化程序的運行環(huán)境;
      [0110] 步驟S203 :從Flash中讀出預(yù)先存儲的應(yīng)用程序至RAM;其中,若遇到壞塊,則根 據(jù)預(yù)先存儲的壞塊列表,讀出與該壞塊映射的好塊中的數(shù)據(jù),壞塊列表中存儲有壞塊和好 塊的映射關(guān)系;
      [0111] 步驟S204 :運行應(yīng)用程序,實現(xiàn)程序的功能。
      [0112] 本發(fā)明的基于Flash的程序分層運行的方法中,預(yù)先將程序拆分為引導(dǎo)程序和應(yīng) 用程序,引導(dǎo)程序用于初始化程序的運行環(huán)境,應(yīng)用程序用于實現(xiàn)程序的功能,并將它們存 儲在Flash中(具體存儲過程如上述);在運行時,首先將引導(dǎo)程序從Flash中已知的好塊 中讀出至RAM ;然后運行引導(dǎo)程序,初始化程序的運行環(huán)境(包括初始化串口、USB、定時器 以及其他相關(guān)的硬件,并且設(shè)置使能中斷以及USB中斷等);再將應(yīng)用程序從Flash中讀出 至RAM,此時,需要用到壞塊列表,壞塊列表中存儲有壞塊和好塊的映射關(guān)系,在讀取應(yīng)用程 序時,從某一塊開始順序讀取,若遇到壞塊,則通過壞塊列表映射到好塊,讀取存儲在好塊 中的數(shù)據(jù);最后,運行應(yīng)用程序,實現(xiàn)程序的功能。
      [0113] 本發(fā)明的基于Flash的程序分層運行的方法對程序進(jìn)行分層運行,保證了在 Flash中程序運行的可靠性。首先將引導(dǎo)程序從Flash中已知的好塊中讀出至RAM,保證了 引導(dǎo)程序被可靠的讀取到了 Flash中;然后再通過引導(dǎo)程序?qū)?yīng)用程序從Flash中讀出至 RAM,由于壞塊列表的映射關(guān)系,保證了讀取到RAM中的應(yīng)用程序可靠性。
      [0114] 并且,現(xiàn)有技術(shù)中,當(dāng)程序作為一個整體存儲在Flash中的時候,在運行時,系統(tǒng) 上電后,CPU內(nèi)部ROM中固化的啟動程序,會將Flash前幾 K或十幾 K的代碼拷貝到CPU內(nèi) 部的RAM中執(zhí)行,通過這幾 K或十幾 K的代碼將Flash中完整的代碼拷貝到外部RAM中執(zhí) 行。然而,前幾 K或幾十K的程序每次啟動都要掃面該區(qū)域內(nèi)的塊,從好塊中讀出程序數(shù)據(jù), 極大的延緩了程序的啟動速度。本發(fā)明的基于Flash的程序分層運行方法在讀取應(yīng)用程序 時,不需要對Flash進(jìn)行掃描,程序啟動速度快。
      [0115] 故本發(fā)明的基于Flash的程序分層運行方法可靠性高,啟動速度快。
      [0116] 作為本發(fā)明的基于Flash的程序分層運行方法的一種改進(jìn),可以在Flash中預(yù) 先存儲有與應(yīng)用程序相同的備份程序,從Flash中讀出預(yù)先存儲的應(yīng)用程序至RAM(步驟 S203)包括:
      [0117] 步驟S2031 :從Flash中讀出應(yīng)用程序的程序頭至RAM,程序頭中包括程序校驗 值;
      [0118] 步驟S2032 :根據(jù)程序頭,從Flash中讀出應(yīng)用程序至RAM,計算程序校驗值;
      [0119] 步驟S2033 :將計算得到的程序校驗值與程序頭中的程序校驗值比較,若兩者不 一致,則從Flash中讀出備份程序至RAM。
      [0120] 本發(fā)明的基于Flash的程序分層運行方法在應(yīng)用程序和備份程序的前面建立了 一個程序頭,程序頭包括;
      [0121] 程序頭標(biāo)記,用于指示程序頭的后面有程序;
      [0122] 程序的大小,用于指示后面程序的大小,以字節(jié)為單位;
      [0123] 程序的一些描述信息,用于指示該部分程序的一些信息,如該程序是應(yīng)用程序,還 是備份程序等等;
      [0124] 程序校驗值,保存的是后面程序的校驗值,校驗方式可以根據(jù)需要確定,如異或校 驗、奇偶fe驗、CRC校驗等等。
      [0125] 程序頭的一個實施例可以表示為:
      [0126] Struct pro_head{
      [0127] Unsigned char src_exist[4] ; /* 程序頭標(biāo)記 */
      [0128] Unsigned int src_size ; /* 程序的大小,占 4 個字節(jié) */
      [0129] Unsigned char info [16] ; /*程序的一些描述信息,占16個字節(jié)*/
      [0130] Unsigned int check_val ; /* 程序校驗值 */
      [0131] Unsigned char reserve [16] ; /* 其它備用 */
      [0132] }〇
      [0133] 若Flash中出現(xiàn)了新的壞塊,導(dǎo)致應(yīng)用程序無法啟動,則引導(dǎo)程序會根據(jù)預(yù)先存 儲的備份程序的起始地址讀取備份程序并運行,若應(yīng)用程序以及備份程序均被破壞而無法 運行時,可以進(jìn)行報警并進(jìn)入后續(xù)的升級流程;進(jìn)一步保證了程序運行的可靠性。
      [0134] 再一方面,本發(fā)明提供一種基于Flash的程序分層升級的方法,程序由引導(dǎo)程序 和應(yīng)用程序組成,引導(dǎo)程序用于初始化程序的運行環(huán)境,應(yīng)用程序用于實現(xiàn)程序的功能,弓丨 導(dǎo)程序和應(yīng)用程序都存儲在Flash中,如圖11所示,該方法包括:
      [0135] 步驟S301 :從Flash已知的好塊中讀出引導(dǎo)程序至RAM;
      [0136] 步驟S302 :運行引導(dǎo)程序,初始化程序的運行環(huán)境;
      [0137] 步驟S303 :接收升級后的應(yīng)用程序至RAM ;
      [0138] 步驟S304 :從Flash中擦除原有的應(yīng)用程序;其中,若遇到壞塊,則根據(jù)預(yù)先存儲 的壞塊列表,擦除與該壞塊映射的好塊中的數(shù)據(jù),壞塊列表中存儲有壞塊和好塊的映射關(guān) 系;
      [0139] 步驟S305 :將升級后的應(yīng)用程序從RAM寫入Flash ;其中,若遇到壞塊,則根據(jù)預(yù) 先存儲的壞塊列表,寫入與該壞塊映射的好塊中。
      [0140] 本發(fā)明的基于Flash的程序分層升級的方法中,預(yù)先將程序拆分為引導(dǎo)程序和應(yīng) 用程序,引導(dǎo)程序用于初始化程序的運行環(huán)境,應(yīng)用程序用于實現(xiàn)程序的功能,并將它們存 儲在Flash中(具體存儲過程如上述);在升級時,可以只運行引導(dǎo)程序,首先將引導(dǎo)程序 從Flash中已知的好塊中讀出至RAM ;然后運行引導(dǎo)程序,初始化程序的運行環(huán)境(包括初 始化串口、USB、定時器以及其他相關(guān)的硬件,并且設(shè)置使能中斷以及USB中斷等);再通過 USB或者串口以及其他端口接收上位機發(fā)送的升級后的應(yīng)用程序至RAM ;再從Flash中擦除 原有的應(yīng)用程序,此時,需要用到壞塊列表,壞塊列表中存儲有壞塊和好塊的映射關(guān)系,在 擦除應(yīng)用程序時,從某一塊開始順序擦除,若遇到壞塊,則通過壞塊列表映射到好塊,擦除 存儲在好塊中的數(shù)據(jù);最后,將升級后的應(yīng)用程序從RAM寫入Flash,此時也需要用到壞塊 列表,在寫入應(yīng)用程序時,從某一塊開始順序?qū)懭?,若遇到壞塊,則通過壞塊列表映射到好 塊,寫入數(shù)據(jù)至好塊中。
      [0141] 另外,本發(fā)明的基于Flash的程序分層升級的方法可以通過多種端口進(jìn)行升級, 以USB和串口為例:
      [0142] 首先啟動定時器,設(shè)定定時時間(如400ms);然后通過串口以特定的波特率(如 9600bps)發(fā)送升級請求;若在定時時間內(nèi)串口收到回應(yīng)信息,則通過串口進(jìn)行升級,若在 定時時間USB接口收到升級指令,則通過USB接口進(jìn)行升級,若在定時時間未收到任何回 應(yīng),則重新設(shè)定定時時間并發(fā)送升級請求。串口升級以及USB升級的流程與現(xiàn)有技術(shù)相同。
      [0143] 本發(fā)明的基于Flash的程序分層升級的方法對程序進(jìn)行分層升級,保證了在 Flash中程序升級的可靠性。現(xiàn)有技術(shù)中將程序作為一個整體寫入Flash,一但程序升級 失敗,那整個程序就會遭到破壞,而導(dǎo)致整個程序?qū)o法再升級以及運行;本發(fā)明的基于 Flash的程序分層升級的方法在對應(yīng)用程序和/或備份程序升級時,即使升級失敗,由于引 導(dǎo)程序并沒有改變,那還可以進(jìn)行反復(fù)的升級。
      [0144] 上述的基于Flash的程序分層存儲、運行以及升級的方法中,F(xiàn)lash優(yōu)選為Nand Flash。
      [0145] 與上述基于Flash的程序分層存儲的方法對應(yīng)的,本發(fā)明還提供一種基于Flash 的程序分層存儲的裝置,程序由引導(dǎo)程序和應(yīng)用程序組成,引導(dǎo)程序用于初始化程序的運 行環(huán)境,應(yīng)用程序用于實現(xiàn)程序的功能,如圖12所示,該裝置包括:
      [0146] 第一寫入模塊11,用于將引導(dǎo)程序?qū)懭隖lash的已知的好塊中;
      [0147] 第二寫入模塊12,用于將應(yīng)用程序?qū)懭隖lash中;其中,若遇到壞塊,則根據(jù)預(yù)先 建立的壞塊列表,寫入與該壞塊映射的好塊中,壞塊列表中存儲有壞塊和好塊的映射關(guān)系。
      [0148] 與上述基于Flash的程序分層存儲的方法對應(yīng)的,本發(fā)明的基于Flash的程序分 層存儲的裝置可靠性高,便于維護(hù)。
      [0149] 作為本發(fā)明的基于Flash的程序分層存儲的裝置的一種改進(jìn),F(xiàn)lash可以分為基 本空間、預(yù)留空間以及其他空間,基本空間可以從Flash的第0塊開始,壞塊列表可以存儲 在其他空間中;
      [0150] 第一寫入模塊11進(jìn)一步用于將引導(dǎo)程序?qū)懭隖lash的第0塊;
      [0151] 第二寫入模塊12進(jìn)一步用于從Flash的第1塊開始順序?qū)懭霊?yīng)用程序。
      [0152] 與上述基于Flash的程序分層存儲的方法對應(yīng)的,本發(fā)明的基于Flash的程序分 層存儲的裝置保證了壞塊列表存儲和使用的安全性;方便管理Flash,使壞塊列表的映射 更加清楚;使程序在后續(xù)讀取和運行時更加方便。
      [0153] 進(jìn)一步的,如圖13所示,本發(fā)明的基于Flash的程序分層存儲的裝置還包括:
      [0154] 第三寫入模塊13,用于再次將應(yīng)用程序?qū)懭隖lash中,作為備份程序。
      [0155] 與上述基于Flash的程序分層存儲的方法對應(yīng)的,本發(fā)明的基于Flash的程序分 層存儲的裝置進(jìn)一步保證了程序的可靠性。
      [0156] 與上述基于Flash的程序分層運行的方法對應(yīng)的,本發(fā)明還提供一種基于Flash 的程序分層運行的裝置,程序由引導(dǎo)程序和應(yīng)用程序組成,引導(dǎo)程序用于初始化程序的運 行環(huán)境,應(yīng)用程序用于實現(xiàn)程序的功能,引導(dǎo)程序和應(yīng)用程序都存儲在Flash中,如圖14所 示,該裝置包括:
      [0157] 第一讀取模塊21,用于從Flash中已知的好塊中讀出引導(dǎo)程序至RAM ;
      [0158] 第一運行模塊22,用于運行引導(dǎo)程序,初
      當(dāng)前第3頁1 2 3 4 
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1