專利名稱:設(shè)備啟動(dòng)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及含有控制程序的電子設(shè)備,特別涉及含有控制程序的電子設(shè)備的啟動(dòng)方法。
背景技術(shù):
目前,絕大多數(shù)單板設(shè)備的程序一般至少由兩部分組成引導(dǎo)設(shè)備啟動(dòng)的基本程序和應(yīng)用程序。引導(dǎo)設(shè)備啟動(dòng)的基本程序(BIOS)一般存儲(chǔ)在單獨(dú)的物理芯片中;應(yīng)用程序和其它標(biāo)志信息(如表示應(yīng)用程序可用或不可用的標(biāo)志信息)等存儲(chǔ)在閃速存儲(chǔ)器(FLASH)中。
FLASH是非易失性存儲(chǔ)器中的一種。之所以有這個(gè)名稱,是因?yàn)樾畔⒃谝凰查g像閃電式的被存儲(chǔ)下來之后,即使除去電源,存儲(chǔ)于其中的信息依舊保留。該器件在設(shè)備上一般用來存儲(chǔ)應(yīng)用程序、邏輯等。其特點(diǎn)如下1.讀寫單位是單字節(jié)、雙字節(jié)或4字節(jié);2.擦除只能是對(duì)存儲(chǔ)器內(nèi)的一個(gè)塊(BLOCK)整個(gè)擦除,塊的大小由器件特性決定(如64K,128K等);3.在寫入之前必須先執(zhí)行擦除操作。
引導(dǎo)設(shè)備啟動(dòng)的基本程序負(fù)責(zé)引導(dǎo)設(shè)備啟動(dòng)以及當(dāng)設(shè)備在進(jìn)行基本的初始化后跳轉(zhuǎn)到應(yīng)用程序進(jìn)行啟動(dòng)。為了加快啟動(dòng)速度以及防止當(dāng)存儲(chǔ)在FLASH中的應(yīng)用程序被破壞后無法啟動(dòng),設(shè)計(jì)中一般在引導(dǎo)設(shè)備啟動(dòng)的基本程序跳轉(zhuǎn)到應(yīng)用程序之前先判斷應(yīng)用程序是否可用,如果應(yīng)用程序可用就直接跳到應(yīng)用程序啟動(dòng),如果不可用就向主控板申請(qǐng)加載應(yīng)用程序再進(jìn)行啟動(dòng)。
為了能夠在引導(dǎo)設(shè)備啟動(dòng)的基本程序跳轉(zhuǎn)到應(yīng)用程序之前先對(duì)應(yīng)用程序是否可用進(jìn)行判斷,就需要設(shè)置應(yīng)用程序可用標(biāo)志,該標(biāo)志需要可讀可寫,并且保證在設(shè)備下電后不會(huì)丟失。因此,該標(biāo)志通常存儲(chǔ)在FLASH的某個(gè)塊中。如果該標(biāo)志僅僅簡單設(shè)置為可用或不可用兩種狀態(tài),那么應(yīng)用程序在啟動(dòng)過程中如果由于主控板忙無響應(yīng)等某種原因失敗一次,此標(biāo)志就會(huì)因?yàn)閱?dòng)失敗而變?yōu)椴豢捎脿顟B(tài)??梢?,即使應(yīng)用程序并沒有被破壞,當(dāng)單板下次再啟動(dòng)時(shí)仍要申請(qǐng)加載應(yīng)用程序,這就可能更進(jìn)一步的加重了主控板的負(fù)荷。所以,該標(biāo)志一般設(shè)置為某個(gè)初始數(shù)值,如設(shè)置該標(biāo)志的初始值為7,設(shè)備啟動(dòng)開始時(shí)該標(biāo)志就減1變?yōu)?,如果啟動(dòng)成功,就在啟動(dòng)完成后把該標(biāo)志重新設(shè)為初始值7;如果啟動(dòng)失敗,那么該標(biāo)志就仍然保持啟動(dòng)開始時(shí)設(shè)置的值6。如果再重復(fù)啟動(dòng)6次仍然失敗,該標(biāo)志就變成了0。下次啟動(dòng)時(shí),引導(dǎo)設(shè)備啟動(dòng)的基本程序跳轉(zhuǎn)到應(yīng)用程序前發(fā)現(xiàn)該標(biāo)志為0(標(biāo)志為0或0xff表示應(yīng)用程序不可用),就開始申請(qǐng)加載應(yīng)用程序。這樣的設(shè)計(jì)一方面能夠避免當(dāng)應(yīng)用程序被破壞后設(shè)備反復(fù)不斷的重起并且失??;另一方面可以減少申請(qǐng)加載的次數(shù),有效地減輕了主控單板的負(fù)荷。
在實(shí)際應(yīng)用中,上述方案存在以下問題設(shè)備在每次啟動(dòng)開始和啟動(dòng)成功時(shí)都要改寫存儲(chǔ)器內(nèi)的應(yīng)用程序可用標(biāo)志,降低了設(shè)備的啟動(dòng)速度,也減短了存儲(chǔ)器的使用壽命。另外,應(yīng)用程序可用標(biāo)志的的安全性也不夠高。比如說,如果單板設(shè)備在改寫存儲(chǔ)器內(nèi)的應(yīng)用程序可用標(biāo)志時(shí)突然復(fù)位,該標(biāo)志就會(huì)變成0xff,那么,設(shè)備只能請(qǐng)求重新加載,但實(shí)際上此時(shí)設(shè)備中的應(yīng)用程序可能是正常的。
造成這種情況的主要原因在于,無論設(shè)備啟動(dòng)成功不成功,都要在啟動(dòng)開始時(shí)先將存儲(chǔ)在FLASH內(nèi)的應(yīng)用程序可用標(biāo)志改寫為原來的數(shù)值減1;如果啟動(dòng)成功,還要將該標(biāo)志還原為初始數(shù)值。另外,每次改寫,都要先進(jìn)行擦除的操作,這是因?yàn)镕LASH在寫的時(shí)候?qū)γ恳粋€(gè)比特位只支持從0到1,不支持從1到0。而且,由于FLASH的特性,不可能只對(duì)要寫入的位置進(jìn)行擦除,必須對(duì)該位置所在的整個(gè)塊進(jìn)行擦除。所以,兩次的改寫不僅減短了存儲(chǔ)器的使用壽命,而且還降低了設(shè)備的啟動(dòng)速度。如果在擦除后但尚未寫入應(yīng)用程序可用標(biāo)志時(shí),設(shè)備突然復(fù)位,那么該標(biāo)志就會(huì)變成0xff,要求設(shè)備請(qǐng)求加載應(yīng)用程序,大大影響了應(yīng)用程序可用標(biāo)志的安全性。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明的主要目的在于提供一種設(shè)備啟動(dòng)方法,使得設(shè)備啟動(dòng)速度加快,程序可用標(biāo)志的安全性提高,F(xiàn)LASH的使用壽命延長。
為實(shí)現(xiàn)上述目的,本發(fā)明提供了一種設(shè)備啟動(dòng)方法,該設(shè)備中包含保存程序可用標(biāo)志的第一類存儲(chǔ)器,第一類存儲(chǔ)器在寫入前必須先擦除,而且寫入的最小單位小于擦除的最小單位,所述方法包含以下步驟在所述第一類存儲(chǔ)器中預(yù)先設(shè)置至少一組指定位置;每次啟動(dòng)時(shí),從當(dāng)前組中最后一個(gè)已寫的指定位置讀取程序可用標(biāo)志,從該標(biāo)志中獲取上一次啟動(dòng)的啟動(dòng)計(jì)數(shù),并判斷該計(jì)數(shù)是否達(dá)到預(yù)先設(shè)置的門限,如果是則重新加載程序;更新啟動(dòng)計(jì)數(shù)后向當(dāng)前組中第一個(gè)未寫的指定位置寫入程序可用標(biāo)志,并繼續(xù)啟動(dòng)過程;其中,所述程序可用標(biāo)志中包含啟動(dòng)計(jì)數(shù)的信息。
其中,所述指定位置有多組;并且,當(dāng)每次啟動(dòng)成功時(shí),向下一組的第一個(gè)指定位置寫入代表成功啟動(dòng)的程序可用標(biāo)志。
此外在所述方法中,還包含以下步驟當(dāng)已寫的所述指定位置的組數(shù)達(dá)到預(yù)置門限時(shí)擦除所有已寫的程序可用標(biāo)志。
此外在所述方法中,當(dāng)程序被重新加載時(shí),擦除所有已寫的程序可用標(biāo)志。
此外在所述方法中,每次啟動(dòng)時(shí),寫入的所述程序可用標(biāo)志可以是當(dāng)前啟動(dòng)計(jì)數(shù)的16進(jìn)制數(shù)值;當(dāng)啟動(dòng)成功時(shí),寫入的所述程序可用標(biāo)志可以是16進(jìn)制的“00”。
此外在所述方法中,各組所述指定位置設(shè)置在所述第一類存儲(chǔ)器的同一個(gè)塊內(nèi),擦除時(shí)將該塊內(nèi)容全部擦除。
此外在所述方法中,一組中的所述指定位置可以依次鄰接;各組所述指定位置可以依次鄰接。
此外在所述方法中,每一個(gè)指定位置可以占一個(gè)字節(jié)。
此外在所述方法中,所述第一類存儲(chǔ)器可以是閃速存儲(chǔ)器。
此外在所述方法中,所述設(shè)備可以是單板,所述程序可以是單板中的應(yīng)用程序。
通過比較可以發(fā)現(xiàn),本發(fā)明的技術(shù)方案與現(xiàn)有技術(shù)的主要區(qū)別在于,設(shè)置多個(gè)數(shù)組,每一次啟動(dòng)時(shí)從最后一個(gè)已寫位置讀取上一次啟動(dòng)時(shí)寫的程序可用標(biāo)志,如果啟動(dòng)次數(shù)超過門限則重新加載程序,否則將含有本次啟動(dòng)計(jì)數(shù)信息的程序可用標(biāo)志寫在數(shù)組中下一個(gè)未寫位置;如果啟動(dòng)成功則將表示啟動(dòng)成功的程序可用標(biāo)志寫在下一個(gè)數(shù)組的第一個(gè)位置;如果寫滿了預(yù)置的組數(shù)或者重新加載了程序后統(tǒng)一擦除已寫的各數(shù)組。上述數(shù)組一般設(shè)置在一個(gè)Block中,使擦除的效率最高。
這種技術(shù)方案上的區(qū)別,帶來了較為明顯的有益效果,即大大減少了擦除的次數(shù)。在現(xiàn)有技術(shù)中,對(duì)于一次正常的啟動(dòng),需要有兩次擦除的過程(啟動(dòng)開始和啟動(dòng)成功),如果每個(gè)程序可用標(biāo)志占一個(gè)字節(jié),8個(gè)字節(jié)為一組,共設(shè)置1000組(占8K字節(jié)),則使用本發(fā)明的技術(shù)方案后1000次正常啟動(dòng)才需要擦除1次。也就是說將擦除次數(shù)減少3個(gè)數(shù)量級(jí),幾乎可以忽略不計(jì)。
因?yàn)榻^大多數(shù)在啟動(dòng)時(shí)不再需要擦除,而擦除的時(shí)間很長,所以可以加快設(shè)備啟動(dòng)速度。
因?yàn)榻^大多數(shù)在啟動(dòng)時(shí)不擦除上一次的程序可用標(biāo)志,即使寫入標(biāo)志前單板復(fù)位也可以成功得到上一次的標(biāo)志,所以程序可用標(biāo)志的安全性得到提高。
因?yàn)椴脸螖?shù)大大減少,而FLASH可擦除的次數(shù)是有限的,所以可以延長FLASH的使用壽命。
圖1是根據(jù)本發(fā)明第一實(shí)施例的提高標(biāo)志存儲(chǔ)可靠性的方法流程圖;圖2是程序可用標(biāo)志寫入FLASH中的第一示意圖;圖3是程序可用標(biāo)志寫入FLASH中的第二示意圖;圖4是程序可用標(biāo)志寫入FLASH中的第三示意圖;圖5是程序可用標(biāo)志寫入FLASH中的第四示意圖;圖6是程序可用標(biāo)志寫入FLASH中的第五示意圖。
具體實(shí)施例方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步地詳細(xì)描述。
本發(fā)明通過在第一類存儲(chǔ)器的塊(BLOCK)內(nèi)劃分多個(gè)數(shù)組,并由數(shù)組內(nèi)的不同位來表示設(shè)備的啟動(dòng)次數(shù)和狀態(tài)。設(shè)備每次啟動(dòng)時(shí)要先讀取上一次的啟動(dòng)次數(shù),如果啟動(dòng)次數(shù)達(dá)到一定數(shù)量時(shí)就加載應(yīng)用程序,將該塊擦除,并將表示啟動(dòng)成功的程序可用標(biāo)志寫在該塊第一個(gè)數(shù)組的首字節(jié);否則,就將該啟動(dòng)次數(shù)加1,寫在數(shù)組內(nèi)的下一個(gè)字節(jié)。如果本次啟動(dòng)不成功,就由引導(dǎo)設(shè)備啟動(dòng)的基本程序再次啟動(dòng)設(shè)備;如果本次啟動(dòng)成功,就將表示啟動(dòng)成功的程序可用標(biāo)志寫在下一個(gè)數(shù)組內(nèi)的首字節(jié),如果本數(shù)組為該塊的最后一個(gè)數(shù)組,就同加載程序一樣,將該塊擦除,并將表示啟動(dòng)成功的程序可用標(biāo)志寫在該塊第一個(gè)數(shù)組的首字節(jié)。
本發(fā)明的第一實(shí)施例如圖1所示,在步驟101中,由引導(dǎo)設(shè)備啟動(dòng)的基本程序?qū)υO(shè)備進(jìn)行啟動(dòng)時(shí),在第一類存儲(chǔ)器中讀取程序可用標(biāo)志。其中,第一類存儲(chǔ)器指的是類似于在寫入前必須先擦除,而且寫入的最小單位小于擦除的最小單位的存儲(chǔ)器,如FLASH等。程序可用標(biāo)志是表示應(yīng)用程序被成功啟動(dòng)的標(biāo)志或者是表示應(yīng)用程序啟動(dòng)次數(shù)的標(biāo)志,表示應(yīng)用程序啟動(dòng)次數(shù)的程序可用標(biāo)志其實(shí)就是對(duì)應(yīng)用程序的啟動(dòng)進(jìn)行計(jì)數(shù)。具體的說,程序可用標(biāo)志是從第一類存儲(chǔ)器中一個(gè)塊內(nèi)的一個(gè)數(shù)組中讀取的。也就是說,要將第一類存儲(chǔ)器中專門存放程序可用標(biāo)志的一個(gè)塊劃分成若干個(gè)數(shù)組。數(shù)組中的第一個(gè)字節(jié)用來表示應(yīng)用程序被成功啟動(dòng)的程序可用標(biāo)志,第二至第n個(gè)字節(jié)用來表示含有應(yīng)用程序啟動(dòng)次數(shù)信息的程序可用標(biāo)志??梢?,數(shù)組所占的字節(jié)數(shù)其實(shí)是由含有應(yīng)用程序啟動(dòng)次數(shù)信息的程序可用標(biāo)志所占的字節(jié)數(shù)來決定的。比如說,數(shù)組中的第二個(gè)字節(jié)至第八個(gè)字節(jié)是用來表示含有應(yīng)用程序啟動(dòng)次數(shù)信息的程序可用標(biāo)志,那么,該數(shù)組就要占8個(gè)字節(jié)。在本實(shí)施例中,以每個(gè)數(shù)組占8個(gè)字節(jié)為例。比如說,存儲(chǔ)程序可用標(biāo)志的塊有8k大小,由于每個(gè)數(shù)組占8個(gè)字節(jié),所以該塊有1000個(gè)數(shù)組。每個(gè)數(shù)組的第一個(gè)字節(jié)用來表示應(yīng)用程序啟動(dòng)成功的程序可用標(biāo)志,第二至第八個(gè)字節(jié)用來表示含有應(yīng)用程序啟動(dòng)次數(shù)信息的程序可用標(biāo)志。應(yīng)用程序啟動(dòng)成功的程序可用標(biāo)志可以用16進(jìn)制的“00”來表示;含有應(yīng)用程序啟動(dòng)次數(shù)信息的程序可用標(biāo)志可以用16進(jìn)制的數(shù)值來表示。比如說,啟動(dòng)次數(shù)是2,那么就用16進(jìn)制的“02”來表示。由于第一類存儲(chǔ)器必須先擦再寫,也就是說未寫的部分一定是“1”。所以,讀取程序可用標(biāo)志時(shí)可以有多種處理方法,其中一種處理方法是從后往前讀,讀到第一個(gè)非“ff”的字節(jié),就一定是上一次寫入的程序可用標(biāo)志。比如說,該塊有8k大小,首地址為ff00000000,末地址為ff3fffffff。如果上一次寫入的程序可用標(biāo)志是05,并且寫在第一組的第六個(gè)字節(jié),也就是ff00000005處,那么,從ff0000006開始到ff3fffffff為止都是未寫入部分。所以,從后往前讀時(shí),從地址ff3fffffff到地址ff00000006讀到的都是“ff”,在地址ff00000005處讀到了“05”,那么,可以判定“05”是上一次寫入的程序可用標(biāo)志,并且可以知道上一次是第五次啟動(dòng)應(yīng)用程序。
接著,進(jìn)入步驟102,判斷在程序可用標(biāo)志中的啟動(dòng)次數(shù)是否小于預(yù)置門限。所述的預(yù)置門限是預(yù)先設(shè)定的一個(gè)數(shù)值。如果連續(xù)7次啟動(dòng)應(yīng)用程序都失敗,就要求設(shè)備加載應(yīng)用程序,那么該數(shù)值就應(yīng)設(shè)置為7。其實(shí),由于數(shù)組的第二個(gè)至最后一個(gè)字節(jié)是用來表示對(duì)應(yīng)用程序的啟動(dòng)進(jìn)行計(jì)數(shù)的程序可用標(biāo)志,因此,預(yù)置門限也與數(shù)組的大小有關(guān),預(yù)置門限不能大于數(shù)組中所能計(jì)數(shù)的范圍。比如說,在本實(shí)施例中,數(shù)組的大小設(shè)置為8個(gè)字節(jié),那么對(duì)應(yīng)用程序所能計(jì)數(shù)的范圍就是1至7,因此,預(yù)置門限就不能大于7。由于程序可用標(biāo)志是通過從后往前的方式讀取的,所以,讀取到的程序可用標(biāo)志可能是含有應(yīng)用程序啟動(dòng)次數(shù)信息的程序可用標(biāo)志,如上述例子中的“05”,也有可能是代表應(yīng)用程序啟動(dòng)成功的程序可用標(biāo)志“00”。如果是“05”,并且預(yù)置門限是7的話,就可以判斷出應(yīng)用程序的啟動(dòng)次數(shù)小于預(yù)置門限;如果是“00”,就說明上一次設(shè)備成功啟動(dòng)了應(yīng)用程序,那么就可以認(rèn)為上一次應(yīng)用程序的啟動(dòng)次數(shù)是第0次,自然也小于預(yù)置門限。如果在程序可用標(biāo)志中的啟動(dòng)次數(shù)小于預(yù)置門限,就進(jìn)入步驟103;否則,也就是程序可用標(biāo)志中的啟動(dòng)次數(shù)達(dá)到預(yù)置門限時(shí),進(jìn)入步驟108。
在步驟103中,在指定位置寫入更新后的啟動(dòng)次數(shù)。其中,指定位置指的是上一次寫入程序可用標(biāo)志處的下一個(gè)字節(jié)。由于只有在應(yīng)用程序啟動(dòng)次數(shù)小于預(yù)置門限時(shí)才可能進(jìn)入本步驟,并且數(shù)組中的計(jì)數(shù)范圍一定是大于等于預(yù)置門限,所以,上一次寫入程序可用標(biāo)志處的下一個(gè)字節(jié),也就是當(dāng)前數(shù)組中第一個(gè)未寫的字節(jié)。更新后的啟動(dòng)次數(shù)就是上一次的啟動(dòng)次數(shù)加1。針對(duì)上述案例,如果在ff00000005處讀到了“05”,得知上一次對(duì)應(yīng)用程序的啟動(dòng)是第五次,那么就要將“06”寫入ff00000006處,表示本次對(duì)應(yīng)用程序的啟動(dòng)是第六次。本步驟通過將上一次應(yīng)用程序的啟動(dòng)次數(shù)加1當(dāng)作程序可用標(biāo)志寫入指定位置,達(dá)到在步驟101中所述的讀取的程序可用標(biāo)志含有應(yīng)用程序啟動(dòng)次數(shù)的目的,也就是對(duì)應(yīng)用程序的啟動(dòng)進(jìn)行計(jì)數(shù)。需要說明的是,即使讀取的應(yīng)用程序成功啟動(dòng)的程序可用標(biāo)志“00”,也可以將其視為上一次對(duì)應(yīng)用程序的啟動(dòng)是第0次,那么,本次對(duì)應(yīng)用程序的啟動(dòng)就是第1次。
接著,進(jìn)入步驟104,由引導(dǎo)設(shè)備啟動(dòng)的基本程序來啟動(dòng)應(yīng)用程序。
接著,進(jìn)入步驟105,如果應(yīng)用程序啟動(dòng)成功,就進(jìn)入步驟106;否則,回到步驟101,由引導(dǎo)設(shè)備啟動(dòng)的基本程序啟動(dòng)設(shè)備時(shí),重新讀取程序可用標(biāo)志。
在步驟106中,判斷當(dāng)前數(shù)組是否為最后的一個(gè)數(shù)組。針對(duì)上述案例,用來存儲(chǔ)程序可用標(biāo)志的塊大小為8k,首地址為ff00000000,末地址為ff3fffffff。由于每個(gè)數(shù)組占8個(gè)字節(jié),所以最后一個(gè)數(shù)組的地址是從ff3ffffff8至ff3fffffff,因此,如果在步驟103中寫入的指定位置是在ff3ffffff8至ff3fffffff內(nèi),那么當(dāng)前數(shù)組就是最后一個(gè)數(shù)組。如果當(dāng)前數(shù)組是最后一個(gè)數(shù)組,就說明塊內(nèi)的數(shù)組已全部用完,要寫入應(yīng)用程序的啟動(dòng)成功標(biāo)志就要先將該塊擦除,再在其中第一個(gè)數(shù)組的第一個(gè)字節(jié)中寫入表示應(yīng)用程序啟動(dòng)成功的程序可用標(biāo)志,也就是進(jìn)入步驟109至110。如果當(dāng)前數(shù)組不是最后的一個(gè)數(shù)組,就進(jìn)入步驟107。
在步驟107中,在下一個(gè)數(shù)組的第一個(gè)字節(jié)處寫入程序可用標(biāo)志,該程序可用標(biāo)志指的是表示應(yīng)用程序成功啟動(dòng)的標(biāo)志“00”。針對(duì)上述案例,如果在ff0000005處讀取的程序可用標(biāo)志是“05”,將程序可用標(biāo)志中的計(jì)數(shù)加1,也就是“06”,寫入ff00000006處后,在本步驟中,就要將“00”寫入下一個(gè)數(shù)組的第一個(gè)字節(jié),也就是ff00000008處(由于每個(gè)數(shù)組占8個(gè)字節(jié),所以第一個(gè)數(shù)組是從ff00000000至ff00000007,第二個(gè)數(shù)組就是從ff00000008起始)。
在步驟108中,通過引導(dǎo)設(shè)備啟動(dòng)的基本程序?qū)υO(shè)備加載應(yīng)用程序。因?yàn)楫?dāng)應(yīng)用程序的啟動(dòng)次數(shù)達(dá)到預(yù)置門限時(shí),才會(huì)進(jìn)入本步驟,也就說明應(yīng)用程序已被破壞,所以,在本步驟中要通過引導(dǎo)設(shè)備啟動(dòng)的基本程序來加載應(yīng)用程序。此后進(jìn)入步驟109。
在步驟109中,擦除所有程序可用標(biāo)志。也就是說,設(shè)備一旦加載了應(yīng)用程序或者所有的數(shù)組都已經(jīng)寫完,就要對(duì)用來存儲(chǔ)程序可用標(biāo)志的塊進(jìn)行擦除。從這里可以看到,本發(fā)明大大減少了擦除的次數(shù)。在現(xiàn)有技術(shù)中,對(duì)于一次正常的啟動(dòng),需要有兩次擦除的過程(啟動(dòng)開始和啟動(dòng)成功),如果每個(gè)程序可用標(biāo)志占一個(gè)字節(jié),8個(gè)字節(jié)為一組,共設(shè)置1000組(占8K字節(jié)),則使用本發(fā)明的技術(shù)方案后1000次正常啟動(dòng)才需要擦除1次。也就是說將擦除次數(shù)減少3個(gè)數(shù)量級(jí),幾乎可以忽略不計(jì)。因?yàn)椴脸螖?shù)減少,所以設(shè)備啟動(dòng)速度加快了,F(xiàn)LASH的使用壽命延長了,程序可用標(biāo)志的安全性也提高了。
在步驟110中,寫入程序可用標(biāo)志。該程序可用標(biāo)志指的是代表應(yīng)用程序成功啟動(dòng)的“00”,并且寫入的位置應(yīng)是該塊的第一個(gè)數(shù)組中的第一個(gè)字節(jié)。針對(duì)上述案例,用來存儲(chǔ)程序可用標(biāo)志的塊大小為8k,首地址為ff00000000。那么,該塊的第一個(gè)數(shù)組就是從ff00000000至ff00000007,設(shè)備在加載了應(yīng)用程序后,就要將“00”寫入ff00000000處。
為了使本實(shí)施例更加清楚,下面舉幾個(gè)簡單的例子來說明寫入FLASH中的程序可用標(biāo)志。
在正常情況時(shí),當(dāng)設(shè)備正常啟動(dòng)了兩次后FLASH中的程序可用標(biāo)志如圖2所示。
在正常情況時(shí),當(dāng)設(shè)備兩次啟動(dòng)失敗,第三次啟動(dòng)成功后FLASH中的程序可用標(biāo)志如圖3所示。
在錯(cuò)誤情況時(shí),當(dāng)設(shè)備啟動(dòng)失敗了4次仍未成功后FLASH中的程序可用標(biāo)志如圖4所示。
如果設(shè)備啟動(dòng)失敗了7次以上,發(fā)起加載APP流程時(shí)FLASH中的程序可用標(biāo)志如圖5所示。
當(dāng)設(shè)備在APP加載成功后FLASH中的程序可用標(biāo)志如圖6所示。
需要說明的是,本實(shí)施例中所述的設(shè)備可以是單板設(shè)備。
雖然通過參照本發(fā)明的某些優(yōu)選實(shí)施例,已經(jīng)對(duì)本發(fā)明進(jìn)行了圖示和描述,但本領(lǐng)域的普通技術(shù)人員應(yīng)該明白,可以在形式上和細(xì)節(jié)上對(duì)其作各種改變,而不偏離本發(fā)明的精神和范圍。
權(quán)利要求
1.一種設(shè)備啟動(dòng)方法,該設(shè)備中包含保存程序可用標(biāo)志的第一類存儲(chǔ)器,第一類存儲(chǔ)器在寫入前必須先擦除,而且寫入的最小單位小于擦除的最小單位,其特征在于,所述方法包含以下步驟在所述第一類存儲(chǔ)器中預(yù)先設(shè)置至少一組指定位置;每次啟動(dòng)時(shí),從當(dāng)前組中最后一個(gè)已寫的指定位置讀取程序可用標(biāo)志,從該標(biāo)志中獲取上一次啟動(dòng)的啟動(dòng)計(jì)數(shù),并判斷該計(jì)數(shù)是否達(dá)到預(yù)先設(shè)置的門限,如果是則重新加載程序;更新啟動(dòng)計(jì)數(shù)后向當(dāng)前組中第一個(gè)未寫的指定位置寫入程序可用標(biāo)志,并繼續(xù)啟動(dòng)過程;其中,所述程序可用標(biāo)志中包含啟動(dòng)計(jì)數(shù)的信息。
2.根據(jù)權(quán)利要求1所述的設(shè)備啟動(dòng)方法,其特征在于,所述指定位置有多組;并且,當(dāng)每次啟動(dòng)成功時(shí),向下一組的第一個(gè)指定位置寫入代表成功啟動(dòng)的程序可用標(biāo)志。
3.根據(jù)權(quán)利要求2所述的設(shè)備啟動(dòng)方法,其特征在于,還包含以下步驟當(dāng)已寫的所述指定位置的組數(shù)達(dá)到預(yù)置門限時(shí)擦除所有已寫的程序可用標(biāo)志。
4.根據(jù)權(quán)利要求3所述的設(shè)備啟動(dòng)方法,其特征在于,當(dāng)程序被重新加載時(shí),擦除所有已寫的程序可用標(biāo)志。
5.根據(jù)權(quán)利要求4所述的設(shè)備啟動(dòng)方法,其特征在于,每次啟動(dòng)時(shí),寫入的所述程序可用標(biāo)志可以是當(dāng)前啟動(dòng)計(jì)數(shù)的16進(jìn)制數(shù)值;當(dāng)啟動(dòng)成功時(shí),寫入的所述程序可用標(biāo)志可以是16進(jìn)制的“00”。
6.根據(jù)權(quán)利要求3所述的設(shè)備啟動(dòng)方法,其特征在于,各組所述指定位置設(shè)置在所述第一類存儲(chǔ)器的同一個(gè)塊內(nèi),擦除時(shí)將該塊內(nèi)容全部擦除。
7.根據(jù)權(quán)利要求1至6中任一項(xiàng)所述的設(shè)備啟動(dòng)方法,其特征在于,一組中的所述指定位置可以依次鄰接;各組所述指定位置可以依次鄰接。
8.根據(jù)權(quán)利要求7所述的設(shè)備啟動(dòng)方法,其特征在于,每一個(gè)指定位置可以占一個(gè)字節(jié)。
9.根據(jù)權(quán)利要求1至6中任一項(xiàng)所述的設(shè)備啟動(dòng)方法,其特征在于,所述第一類存儲(chǔ)器可以是閃速存儲(chǔ)器。
10.根據(jù)權(quán)利要求9所述的設(shè)備啟動(dòng)方法,其特征在于,所述設(shè)備可以是單板,所述程序可以是單板中的應(yīng)用程序。
全文摘要
本發(fā)明涉及含有控制程序的電子設(shè)備,公開了一種設(shè)備啟動(dòng)方法,使得設(shè)備啟動(dòng)速度加快,程序可用標(biāo)志的安全性提高,F(xiàn)LASH的使用壽命延長。本發(fā)明中,設(shè)置多個(gè)數(shù)組,每一次啟動(dòng)時(shí)從最后一個(gè)已寫位置讀取上一次啟動(dòng)時(shí)寫的程序可用標(biāo)志,如果啟動(dòng)次數(shù)超過門限則重新加載程序,否則將含有本次啟動(dòng)計(jì)數(shù)信息的程序可用標(biāo)志寫在數(shù)組中下一個(gè)未寫位置;如果啟動(dòng)成功則將表示啟動(dòng)成功的程序可用標(biāo)志寫在下一個(gè)數(shù)組的第一個(gè)位置;如果寫滿了預(yù)置的組數(shù)或者重新加載了程序后統(tǒng)一擦除已寫的各數(shù)組。上述數(shù)組一般設(shè)置在一個(gè)Block中,使擦除的效率最高。
文檔編號(hào)G06F9/445GK1858703SQ20051011310
公開日2006年11月8日 申請(qǐng)日期2005年10月13日 優(yōu)先權(quán)日2005年10月13日
發(fā)明者韓富榮 申請(qǐng)人:華為技術(shù)有限公司