專(zhuān)利名稱(chēng):嵌入式計(jì)算機(jī)系統(tǒng)的啟動(dòng)信息輸出方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,特別是指一種嵌入式計(jì)算機(jī)系統(tǒng)的啟動(dòng)信息輸出方法。
背景技術(shù):
嵌入式操作系統(tǒng)一般與特定的嵌入式中央處理器(CPU)系統(tǒng)硬件緊密結(jié)合,構(gòu)成實(shí)時(shí)多任務(wù)的嵌入式計(jì)算機(jī)系統(tǒng),例如vxWorks操作系統(tǒng)與PowerPC系列CPU結(jié)合構(gòu)成嵌入式計(jì)算機(jī)系統(tǒng)。
這種計(jì)算機(jī)系統(tǒng)在啟動(dòng)時(shí),一般需要經(jīng)過(guò)如圖1所示的初始化過(guò)程,包括如下步驟步驟101,系統(tǒng)上電后,CPU內(nèi)部寄存器初始化。
步驟102,外掛存儲(chǔ)器,即內(nèi)存初始化。
步驟103,外掛存儲(chǔ)器自檢。
步驟104,將啟動(dòng)程序從閃存(FLASH)中拷貝到內(nèi)存指定位置。
其中,如果需要的話(huà),啟動(dòng)程序也可先解壓縮再拷貝到內(nèi)存指定位置。
步驟105,程序指針跳轉(zhuǎn)到搬移后的指定位置開(kāi)始執(zhí)行啟動(dòng)程序。
啟動(dòng)程序的執(zhí)行過(guò)程,具體包括步驟105~108步驟106,系統(tǒng)硬件初始化。
步驟107,操作系統(tǒng)初始化。
步驟108,I/O系統(tǒng)初始化。
等等。
與個(gè)人計(jì)算機(jī)(PC)等計(jì)算機(jī)設(shè)備類(lèi)似,嵌入式計(jì)算機(jī)系統(tǒng)的上述啟動(dòng)過(guò)程也是由設(shè)置在基本輸入輸出系統(tǒng)(BIOS)中的程序引導(dǎo)。目前的嵌入式操作系統(tǒng)只有I/O系統(tǒng)初始化完成后,才能通過(guò)嵌入式計(jì)算機(jī)系統(tǒng)上調(diào)試用的串行口打印一些信息,以供用戶(hù)了解系統(tǒng)的啟動(dòng)過(guò)程,因此如果在I/O系統(tǒng)初始化之前的啟動(dòng)過(guò)程中嵌入式計(jì)算機(jī)系統(tǒng)出現(xiàn)故障,則整個(gè)嵌入式計(jì)算機(jī)系統(tǒng)就處于一種“死機(jī)”狀態(tài),用戶(hù)無(wú)法得知系統(tǒng)到底出了什么故障,更無(wú)從得知系統(tǒng)故障的具體位置。
為解決這一問(wèn)題,目前主要采取的解決方案是采用點(diǎn)燈方式輸出啟動(dòng)信息。一般情況下,在嵌入式計(jì)算機(jī)系統(tǒng)中都設(shè)置有運(yùn)行指示燈,在系統(tǒng)啟動(dòng)過(guò)程中可以通過(guò)運(yùn)行指示燈的閃爍頻率或者多個(gè)指示燈的組合來(lái)獲得系統(tǒng)的啟動(dòng)狀態(tài)。
但是,這種點(diǎn)燈的方式只能有限地指示出嵌入式計(jì)算機(jī)系統(tǒng)的啟動(dòng)狀態(tài)信息,在啟動(dòng)出現(xiàn)問(wèn)題時(shí),用戶(hù)很難準(zhǔn)確定位出故障的位置,并對(duì)故障的情況進(jìn)行分析。特別是對(duì)于啟動(dòng)過(guò)程復(fù)雜的嵌入式系統(tǒng),或者需要獲知更多的啟動(dòng)信息的場(chǎng)合,更加難以適應(yīng)。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明的主要目的在于提供一種優(yōu)化的嵌入式計(jì)算機(jī)系統(tǒng)的啟動(dòng)信息輸出方法,在嵌入式計(jì)算機(jī)系統(tǒng)啟動(dòng)過(guò)程中,盡可能早地詳細(xì)輸出用戶(hù)所需的啟動(dòng)信息,豐富啟動(dòng)信息輸出內(nèi)容,提高啟動(dòng)問(wèn)題定位的效率。
本發(fā)明的一種嵌入式計(jì)算機(jī)系統(tǒng)的啟動(dòng)信息輸出方法,應(yīng)用于嵌入式計(jì)算機(jī)系統(tǒng)的啟動(dòng)過(guò)程,設(shè)置嵌入式計(jì)算機(jī)中輸出串口的每個(gè)串口寄存器地址和串口寄存器初始化值的對(duì)應(yīng)關(guān)系,并包括以下兩個(gè)步驟a)嵌入式計(jì)算機(jī)系統(tǒng)啟動(dòng)過(guò)程中,在完成CPU基本寄存器的初始化后,根據(jù)所述串口寄存器地址和串口寄存器初始化值的對(duì)應(yīng)關(guān)系初始化所述輸出串口;b)取出系統(tǒng)啟動(dòng)過(guò)程的相應(yīng)信息,發(fā)送至所述輸出串口的串口發(fā)送寄存器。
該方法所述初始化輸出串口的過(guò)程具體包括將每個(gè)串口寄存器初始化值寫(xiě)入對(duì)應(yīng)的串口寄存器地址中。
該方法所述設(shè)置輸出串口的每個(gè)串口寄存器地址和串口寄存器初始化值的對(duì)應(yīng)關(guān)系為設(shè)置輸出串口的串口寄存器初始化表格,串口寄存器初始化表格中保存有每個(gè)串口寄存器地址和串口寄存器初始化值,并且每個(gè)串口寄存器地址和該串口寄存器初始化值一一對(duì)應(yīng)。
該方法所述串口寄存器初始化表格中的串口寄存器地址和串口寄存器初始化值的最后一項(xiàng)均為表格結(jié)束標(biāo)識(shí)。
該方法所述初始化輸出串口過(guò)程進(jìn)一步包括a1)按順序從串口寄存器初始化表格中取出一個(gè)寄存器地址;a2)從串口寄存器初始化表格中取出當(dāng)前寄存器地址對(duì)應(yīng)的寄存器初始化值;a3)判斷取出的當(dāng)前寄存器地址和寄存器的初始化值是否都為結(jié)束標(biāo)識(shí),如果是,則結(jié)束該輸出串口初始化流程;否則,將當(dāng)前寄存器的初始化值寫(xiě)入當(dāng)前寄存器地址中,返回a1)。
該方法進(jìn)一步包括為需要獲知啟動(dòng)信息的每個(gè)啟動(dòng)步驟,設(shè)置用于表示該啟動(dòng)步驟執(zhí)行成功的字符串;所述步驟b)具體為在需要獲知啟動(dòng)信息的啟動(dòng)步驟執(zhí)行完成后,按順序取出表示該啟動(dòng)步驟執(zhí)行成功的字符串中的字符,并發(fā)送至串口發(fā)送寄存器。
該方法所述步驟b)具體包括b1)按順序取出需要獲取啟動(dòng)信息的啟動(dòng)步驟所涉及設(shè)備的寄存器的值,將獲取的值送到串口發(fā)送寄存器。
該方法所述獲取啟動(dòng)步驟所涉及設(shè)備的寄存器的值后進(jìn)一步包括對(duì)獲取的值進(jìn)行篩選處理,選擇其中的有用信息,執(zhí)行將獲取的值送到串口發(fā)送寄存器的步驟。
該方法步驟b)在需要獲知啟動(dòng)信息的啟動(dòng)步驟執(zhí)行完成后或啟動(dòng)步驟執(zhí)行當(dāng)中進(jìn)行。
該方法所述步驟b)具體包括通過(guò)訪(fǎng)問(wèn)需要獲取啟動(dòng)信息的啟動(dòng)步驟所涉及的設(shè)備,獲取該設(shè)備的啟動(dòng)信息,將所獲啟動(dòng)信息的值送到串口發(fā)送寄存器。
該方法所述將獲取的值送到串口發(fā)送寄存器之前進(jìn)一步包括將獲取的值轉(zhuǎn)化為ASCII碼的字符形式。
該方法步驟b)所述將啟動(dòng)過(guò)程的相應(yīng)信息發(fā)送至串口發(fā)送寄存器前進(jìn)一步包括b1)判斷串口發(fā)送寄存器當(dāng)前是否可以發(fā)送字符,如果是,則執(zhí)行將字符發(fā)送至串口發(fā)送寄存器的步驟,否則,返回步驟b1)。
該方法步驟b1)所述判斷串口發(fā)送寄存器當(dāng)前是否可以發(fā)送字符的過(guò)程包括讀取串口狀態(tài)寄存器,根據(jù)當(dāng)前串口狀態(tài)寄存器的值判斷串口發(fā)送寄存器當(dāng)前是否可以發(fā)送字符。
該方法所述輸出串口為嵌入式計(jì)算機(jī)CPU的串口。
從上面所述可以看出本發(fā)明提供的嵌入式計(jì)算機(jī)系統(tǒng)的啟動(dòng)信息輸出方法,通過(guò)預(yù)先建立串口寄存器初始化表格的方式,使嵌入式計(jì)算機(jī)系統(tǒng)的串口初始化過(guò)程在CPU完成基本的寄存器初始化后,就可以完成,進(jìn)而可以開(kāi)始輸出系統(tǒng)的啟動(dòng)過(guò)程信息,從而使用戶(hù)盡可能早和更詳細(xì)地獲得啟動(dòng)信息。并且,通過(guò)在啟動(dòng)步驟執(zhí)行完成后,立刻輸出表示該步驟執(zhí)行成功的字符的簡(jiǎn)單形式,以及直接輸出啟動(dòng)步驟執(zhí)行過(guò)程中相關(guān)信息的形式,使啟動(dòng)信息的輸出過(guò)程更加簡(jiǎn)單靈活,內(nèi)容更加豐富,從而大大提高嵌入式操作系統(tǒng)啟動(dòng)過(guò)程的可視性以及啟動(dòng)問(wèn)題定位的效率。
圖1為現(xiàn)有嵌入式計(jì)算機(jī)系統(tǒng)的啟動(dòng)流程示意圖;圖2為本發(fā)明實(shí)施例中串口寄存器初始化流程示意圖;圖3為本發(fā)明從串口輸出啟動(dòng)信息第一種較佳實(shí)現(xiàn)方式的流程示意圖;圖4為本發(fā)明從串口輸出啟動(dòng)信息第二種較佳實(shí)現(xiàn)方式的流程示意圖;圖5為采用本發(fā)明方案的嵌入式計(jì)算機(jī)系統(tǒng)的啟動(dòng)流程示意圖。
具體實(shí)施例方式
下面結(jié)合附圖及具體實(shí)施例對(duì)本發(fā)明再作進(jìn)一步詳細(xì)的說(shuō)明。
本發(fā)明方案的核心思想為在嵌入式計(jì)算機(jī)系統(tǒng)上電,完成CPU基本寄存器初始化后,增加輸出串口初始化的操作,該輸出串口通常可以是CPU串口,當(dāng)需要獲取嵌入式計(jì)算機(jī)系統(tǒng)啟動(dòng)信息時(shí),將需要的字符和/或寄存器值等相關(guān)的啟動(dòng)信息通過(guò)該初始化后的CPU串口輸出,發(fā)送到PC機(jī)等設(shè)備上打印出來(lái)。
在進(jìn)行啟動(dòng)信息輸出之前,需要對(duì)嵌入式計(jì)算機(jī)系統(tǒng)CPU串口進(jìn)行初始化。
為實(shí)現(xiàn)CPU串口初始化,首先要建立一個(gè)串口寄存器初始化表格,保存串口寄存器初始化值和串口寄存器地址的對(duì)應(yīng)關(guān)系。
假設(shè)串口初始化過(guò)程需要對(duì)相關(guān)的N個(gè)串口寄存器進(jìn)行初始化,則設(shè)置的串口寄存器初始化表格,參見(jiàn)表1所示。
表1表1中,每個(gè)串口寄存器地址對(duì)應(yīng)該串口寄存器的初始化值,初始化值中包括設(shè)定的串口運(yùn)行模式等信息。在表格結(jié)尾處的0xFFFFFFFF表示寄存器初始化表格的結(jié)束,該表示結(jié)束的0xFFFFFFFF也可以采取其它值代替,只要保證該值不會(huì)與表格前面的項(xiàng)相同即可。表1左側(cè)的序號(hào)1~N+1只是為了方便理解,序號(hào)本身不是表格的元素。
實(shí)際保存時(shí),表1中的每個(gè)串口寄存器地址和串口寄存器的初始化值各占32位(bit),將表1的內(nèi)容按串口寄存器地址、該串口寄存器初始化值、下一個(gè)串口寄存器地址、下一個(gè)串口寄存器初始化值......的順序依次進(jìn)行保存。
嵌入式計(jì)算機(jī)系統(tǒng)上電啟動(dòng)過(guò)程中,在完成圖1所示步驟101的CPU基本的內(nèi)部寄存器初始化后,BIOS即可以開(kāi)始執(zhí)行CPU串口初始化,即對(duì)N個(gè)串口寄存器進(jìn)行初始化。串口寄存器的初始化流程參見(jiàn)圖2所示,具體包括以下步驟步驟201,指針指向表1的頭地址,即串口寄存器1的地址。
步驟202,取指針當(dāng)前位置的32bit值,即當(dāng)前的寄存器地址放入通用寄存器R2中。
步驟203~204,指針加4;取指針當(dāng)前位置的32bit值,即當(dāng)前寄存器的值放入通用寄存器R3中。
步驟205~206,比較R2和R3當(dāng)前的值,判斷R2和R3當(dāng)前的值是否均為0xFFFFFFFF,如果是,則跳出流程,串口寄存器的初始化過(guò)程結(jié)束;否則,進(jìn)入步驟207。
步驟207,將R3的值寫(xiě)入R2值對(duì)應(yīng)的地址中。
步驟208,指針加4,返回步驟202。
其中,上述的通用寄存器可以根據(jù)實(shí)際情況進(jìn)行選擇,不一定為這里所舉例的R2和R3。另外,本實(shí)施例中每個(gè)寄存器地址和寄存器值都為32bit,并且依次排列,因此在讀取下一個(gè)寄存器地址或寄存器值時(shí),都需要指針加4。本領(lǐng)域技術(shù)人員不難看出,這里的寄存器地址和寄存器值所占bit位數(shù),以及進(jìn)行存儲(chǔ)時(shí)的排列順序也可以采取其它方式,只要保證寄存器地址和寄存器值的對(duì)應(yīng)關(guān)系不變,每次取值時(shí)指針的指示正確即可。
串口初始化過(guò)程完成以后,嵌入式計(jì)算機(jī)系統(tǒng)即可輸出用戶(hù)所需要的系統(tǒng)啟動(dòng)信息。根據(jù)用戶(hù)所需獲知的內(nèi)容不同,啟動(dòng)信息的輸出可以采取兩種方式一種方式是系統(tǒng)只需在圖1所示每個(gè)步驟的初始化過(guò)程完成后,通過(guò)串口輸出一個(gè)表示該步驟執(zhí)行成功的字符串即可,這樣用戶(hù)就可以根據(jù)嵌入式計(jì)算機(jī)系統(tǒng)在啟動(dòng)的每個(gè)步驟中是否輸出有表示該步驟成功的字符串,確定系統(tǒng)啟動(dòng)過(guò)程中故障發(fā)生的位置;另一種方式是系統(tǒng)直接將當(dāng)前啟動(dòng)所獲得的信息經(jīng)篩選、處理后,轉(zhuǎn)化成ASCII的字符形式通過(guò)串口輸出,以便用戶(hù)通過(guò)輸出的字符進(jìn)行分析。下面分別舉例對(duì)這兩種實(shí)現(xiàn)方式進(jìn)行說(shuō)明。
第一種啟動(dòng)信息輸出方式的較佳方案如下預(yù)先為需要獲知啟動(dòng)信息的每個(gè)步驟,制定表示該步驟執(zhí)行成功的字符串,例如在CPU寄存器初始化完成后可以輸出“Completed to init CPUregisters”,以表示CPU寄存器初始化完成。本領(lǐng)域技術(shù)人員不難看出,字符串的內(nèi)容也可以采用縮寫(xiě)、符號(hào)等多種形式,也允許出現(xiàn)兩個(gè)或兩個(gè)以上步驟采用同一個(gè)字符串表示執(zhí)行成功的情況,只要用戶(hù)可以進(jìn)行識(shí)別區(qū)分即可。
完成串口的初始化后,即可通過(guò)串口輸出表示啟動(dòng)過(guò)程中某個(gè)步驟執(zhí)行成功的字符串。該串口輸出字符的過(guò)程參見(jiàn)圖3所示,具體包括以下步驟步驟301,指針指向表示該步驟執(zhí)行成功字符串的開(kāi)始位置。
步驟302~303,讀取串口狀態(tài)寄存器;根據(jù)串口狀態(tài)寄存器的值判斷是否可以發(fā)送字符,如果是,則進(jìn)入步驟304,否則,返回步驟302。
其中,串口狀態(tài)寄存器用于指示串口發(fā)送寄存器的狀態(tài),在其中保存有表示串口發(fā)送寄存器的狀態(tài)值,因此可以通過(guò)讀取串口狀態(tài)寄存器中數(shù)據(jù)判斷串口發(fā)送寄存器的狀態(tài)。
步驟304,取出指針當(dāng)前位置的字符送至串口發(fā)送寄存器,例如如果在CPU寄存器初始化完成后,從表示CPU寄存器在初始化完成的字符串“Completed to init CPU registers”中按順序先取出當(dāng)前指針指向的字符“C”發(fā)送至串口發(fā)送寄存器。
步驟305,判斷當(dāng)前字符串的字符是否已發(fā)送完,如果是,則結(jié)束流程;否則,進(jìn)入步驟306。
步驟306,指針指向該字符串的下一字符,返回步驟302。
上述步驟301~306的串口輸出字符過(guò)程,可以在計(jì)算機(jī)系統(tǒng)啟動(dòng)過(guò)程中被多次調(diào)用執(zhí)行。比如如果在CPU內(nèi)部寄存器初始化完成以后,即進(jìn)行了串口初始化,則立刻就可以執(zhí)行上述步驟301~306,輸出“Completed toinit CPU registers”表示CPU內(nèi)部寄存器初始化成功;在下一個(gè)啟動(dòng)步驟外掛存儲(chǔ)器初始化過(guò)程完成后,可以再次調(diào)用執(zhí)行上述步驟301~306,輸出表示外掛存儲(chǔ)器初始化執(zhí)行成功的相應(yīng)字符串,以后步驟以此類(lèi)推,這樣如果嵌入式計(jì)算機(jī)系統(tǒng)在啟動(dòng)過(guò)程中發(fā)生“死機(jī)”,則用戶(hù)可以根據(jù)當(dāng)前最后輸出的字符串內(nèi)容,很容易判斷出當(dāng)前發(fā)生故障的位置應(yīng)該是該最后輸出的字符串步驟的下一步。當(dāng)然,不一定每個(gè)啟動(dòng)步驟完成后都輸出表示該步驟執(zhí)行成功的字符串,也可以采取間隔某幾個(gè)步驟后,再輸出一次字符串;或只在某些較為重要或容易發(fā)生故障的步驟后輸出字符串等方式。
串口輸出字符過(guò)程的具體實(shí)施時(shí)的較佳實(shí)現(xiàn)方式是將所述201~208的串口初始化過(guò)程和步驟301~306的過(guò)程,編寫(xiě)成匯編程序的串口初始化接口函數(shù)和串口輸出字符的接口函數(shù),并將該串口初始化接口函數(shù)和至少一個(gè)串口輸出字符的接口函數(shù)嵌入BIOS中計(jì)算機(jī)系統(tǒng)啟動(dòng)程序的相應(yīng)位置。這樣嵌入式計(jì)算機(jī)系統(tǒng)在啟動(dòng)時(shí),系統(tǒng)CPU就可以通過(guò)調(diào)用BIOS中的計(jì)算機(jī)系統(tǒng)啟動(dòng)程序,自動(dòng)執(zhí)行所述的串口輸出字符功能。其中,所述串口輸出字符的接口函數(shù)可以輸出表示每個(gè)步驟完成的字符串,這些字符串可以事先按系統(tǒng)啟動(dòng)順序通過(guò)編譯手段將其作為常量數(shù)據(jù)放在程序的相應(yīng)數(shù)據(jù)段中。
本發(fā)明第二種啟動(dòng)信息的輸出方案,還可以直接將當(dāng)前啟動(dòng)的數(shù)值信息轉(zhuǎn)化成ASCII的字符形式通過(guò)串口輸出出去,例如把啟動(dòng)過(guò)程中某個(gè)步驟涉及啟動(dòng)設(shè)備寄存器的值轉(zhuǎn)化成ASCII的字符形式直接通過(guò)串口輸出。參見(jiàn)圖4所示,該過(guò)程具體包括以下步驟步驟401,取出當(dāng)前啟動(dòng)步驟涉及設(shè)備的寄存器的值。
這里,設(shè)備寄存器的值一般為32bit。
步驟402,將該值通過(guò)移位的方式分為8段,每段4bit。
步驟403,指針指向第一段值。
步驟404~407,取出指針當(dāng)前所在段的4bit二進(jìn)制值轉(zhuǎn)化為十六進(jìn)制值,判斷轉(zhuǎn)化后的值是否小于10,如果是,則把轉(zhuǎn)化后的值加上0x30,轉(zhuǎn)化為ASCII碼的數(shù)值字符;否則,把轉(zhuǎn)化后的值加上0x57,轉(zhuǎn)化為ASCII碼的a、b、c、d、e、f等字母字符。
步驟408~409,將轉(zhuǎn)化后得到的字符送到串口發(fā)送寄存器,判斷是否還有數(shù)值未發(fā)出,如果是,則指針加4,返回步驟404;否則,結(jié)束流程。
如此,通過(guò)本方案可以實(shí)現(xiàn)將計(jì)算機(jī)系統(tǒng)啟動(dòng)各步驟中原來(lái)為數(shù)值形式的各種啟動(dòng)信息進(jìn)行輸出。從而不僅便于用戶(hù)確定故障位置,還可以為用戶(hù)提供更多的信息,有利于用戶(hù)分析故障原因。
采用本方式時(shí),由于通常執(zhí)行從數(shù)值轉(zhuǎn)換為字符的過(guò)程所用的時(shí)間遠(yuǎn)遠(yuǎn)超過(guò)串口發(fā)送寄存器發(fā)送數(shù)據(jù)的時(shí)間,因此,一般不必進(jìn)行如步驟302~303所示的串口發(fā)送寄存器狀態(tài)判斷過(guò)程,當(dāng)然,如果需要,在步驟406/407與步驟408之間,增加步驟302~303所示的串口發(fā)送寄存器狀態(tài)判斷過(guò)程也是可以的。
與所述第一種啟動(dòng)信息輸出的實(shí)現(xiàn)方式類(lèi)似,上述步驟的過(guò)程也可以編寫(xiě)成接口函數(shù),嵌入在BIOS中計(jì)算機(jī)系統(tǒng)啟動(dòng)程序的相應(yīng)位置,與計(jì)算機(jī)系統(tǒng)的啟動(dòng)程序一起執(zhí)行。并且,也可被多次在任意啟動(dòng)步驟后被調(diào)用執(zhí)行,另外該第二種啟動(dòng)信息輸出方式還可以在啟動(dòng)步驟進(jìn)行當(dāng)中被執(zhí)行,從而在執(zhí)行啟動(dòng)步驟的同時(shí),輸出當(dāng)前步驟的動(dòng)態(tài)信息,從而更加體現(xiàn)啟動(dòng)信息輸出的實(shí)時(shí)性,能夠使用戶(hù)獲得更多的啟動(dòng)信息。并且,本方案也可以先對(duì)獲得的啟動(dòng)信息進(jìn)行篩選,只選擇有用的啟動(dòng)信息輸出。
而且,采用該第二種啟動(dòng)信息輸出的方式不僅可以輸出啟動(dòng)設(shè)備寄存器的所有值,還可以只輸出需要關(guān)心的值,如當(dāng)外掛存儲(chǔ)器,即內(nèi)存自檢時(shí),如果自檢錯(cuò)誤,則可通過(guò)調(diào)用上述第二種啟動(dòng)信息輸出的方式,根據(jù)內(nèi)存出錯(cuò)位置的地址,可以只將內(nèi)存自檢出錯(cuò)時(shí)的地址值、及寫(xiě)入和讀出的數(shù)據(jù)值轉(zhuǎn)化為ASCII碼的字符形式輸出。
上述的兩種啟動(dòng)信息輸出的方式也可以結(jié)合起來(lái)共同發(fā)揮作用,比如在有些步驟中只輸出表示該步驟執(zhí)行成功的字符串,在另一些步驟中通過(guò)第二種方式輸出更詳細(xì)的啟動(dòng)信息;或者在某些步驟執(zhí)行當(dāng)中通過(guò)第二種方式將啟動(dòng)的數(shù)值信息轉(zhuǎn)化成字符后輸出,而在這些步驟執(zhí)行完成后,再輸出一次表示該步驟執(zhí)行成功的字符串;還可以在某些步驟執(zhí)行完成后,既輸出啟動(dòng)的數(shù)值信息,又輸出表示該步驟執(zhí)行成功的字符串等。
上述的啟動(dòng)信息輸出過(guò)程中都是以字符形式輸出的,本領(lǐng)域技術(shù)人員應(yīng)該看出,必要時(shí),直接采用數(shù)值的形式輸出所需啟動(dòng)信息也是可以的。
這樣,以圖1所示的嵌入式計(jì)算機(jī)系統(tǒng)啟動(dòng)流程為例,采用本發(fā)明方案后嵌入式計(jì)算機(jī)系統(tǒng)的啟動(dòng)過(guò)程參見(jiàn)圖5所示,在CPU基本寄存器初始化后,即可以進(jìn)行輸出串口的初始化,使之作為信息輸出通道。此后便可在嵌入式計(jì)算機(jī)系統(tǒng)的啟動(dòng)過(guò)程中隨時(shí)輸出所需的啟動(dòng)信息。當(dāng)然,所述輸出串口的初始化過(guò)程也不一定在CPU基本寄存器初始化的步驟后立刻執(zhí)行,在以后的任意兩個(gè)啟動(dòng)步驟之間執(zhí)行也是可以的。
以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則下,所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種嵌入式計(jì)算機(jī)系統(tǒng)的啟動(dòng)信息輸出方法,應(yīng)用于嵌入式計(jì)算機(jī)系統(tǒng)的啟動(dòng)過(guò)程,其特征在于,設(shè)置嵌入式計(jì)算機(jī)中輸出串口的每個(gè)串口寄存器地址和串口寄存器初始化值的對(duì)應(yīng)關(guān)系,并包括以下兩個(gè)步驟a)嵌入式計(jì)算機(jī)系統(tǒng)啟動(dòng)過(guò)程中,在完成CPU基本寄存器的初始化后,根據(jù)所述串口寄存器地址和串口寄存器初始化值的對(duì)應(yīng)關(guān)系初始化所述輸出串口;b)取出系統(tǒng)啟動(dòng)過(guò)程的相應(yīng)信息,發(fā)送至所述輸出串口的串口發(fā)送寄存器。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述初始化輸出串口的過(guò)程具體包括將每個(gè)串口寄存器初始化值寫(xiě)入對(duì)應(yīng)的串口寄存器地址中。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述設(shè)置輸出串口的每個(gè)串口寄存器地址和串口寄存器初始化值的對(duì)應(yīng)關(guān)系為設(shè)置輸出串口的串口寄存器初始化表格,串口寄存器初始化表格中保存有每個(gè)串口寄存器地址和串口寄存器初始化值,并且每個(gè)串口寄存器地址和該串口寄存器初始化值一一對(duì)應(yīng)。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述串口寄存器初始化表格中的串口寄存器地址和串口寄存器初始化值的最后一項(xiàng)均為表格結(jié)束標(biāo)識(shí)。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述初始化輸出串口過(guò)程進(jìn)一步包括a1)按順序從串口寄存器初始化表格中取出一個(gè)寄存器地址;a2)從串口寄存器初始化表格中取出當(dāng)前寄存器地址對(duì)應(yīng)的寄存器初始化值;a3)判斷取出的當(dāng)前寄存器地址和寄存器的初始化值是否都為結(jié)束標(biāo)識(shí),如果是,則結(jié)束該輸出串口初始化流程;否則,將當(dāng)前寄存器的初始化值寫(xiě)入當(dāng)前寄存器地址中,返回a1)。
6.根據(jù)權(quán)利要求1所述的方法,其特征在于,進(jìn)一步包括為需要獲知啟動(dòng)信息的每個(gè)啟動(dòng)步驟,設(shè)置用于表示該啟動(dòng)步驟執(zhí)行成功的字符串;所述步驟b)具體為在需要獲知啟動(dòng)信息的啟動(dòng)步驟執(zhí)行完成后,按順序取出表示該啟動(dòng)步驟執(zhí)行成功的字符串中的字符,并發(fā)送至串口發(fā)送寄存器。
7.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟b)具體包括b1)按順序取出需要獲取啟動(dòng)信息的啟動(dòng)步驟所涉及設(shè)備的寄存器的值,將獲取的值送到串口發(fā)送寄存器。
8.根據(jù)權(quán)利要求7所述的方法,其特征在于,所述獲取啟動(dòng)步驟所涉及設(shè)備的寄存器的值后進(jìn)一步包括對(duì)獲取的值進(jìn)行篩選處理,選擇其中的有用信息,執(zhí)行將獲取的值送到串口發(fā)送寄存器的步驟。
9.根據(jù)權(quán)利要求7所述的方法,其特征在于,步驟b)在需要獲知啟動(dòng)信息的啟動(dòng)步驟執(zhí)行完成后或啟動(dòng)步驟執(zhí)行當(dāng)中進(jìn)行。
10.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟b)具體包括通過(guò)訪(fǎng)問(wèn)需要獲取啟動(dòng)信息的啟動(dòng)步驟所涉及的設(shè)備,獲取該設(shè)備的啟動(dòng)信息,將所獲啟動(dòng)信息的值送到串口發(fā)送寄存器。
11.根據(jù)權(quán)利要求7或10所述的方法,其特征在于,所述將獲取的值送到串口發(fā)送寄存器之前進(jìn)一步包括將獲取的值轉(zhuǎn)化為ASCII碼的字符形式。
12.根據(jù)權(quán)利要求1所述的方法,其特征在于,步驟b)所述將啟動(dòng)過(guò)程的相應(yīng)信息發(fā)送至串口發(fā)送寄存器前進(jìn)一步包括b1)判斷串口發(fā)送寄存器當(dāng)前是否可以發(fā)送字符,如果是,則執(zhí)行將字符發(fā)送至串口發(fā)送寄存器的步驟,否則,返回步驟b1)。
13.根據(jù)權(quán)利要求12所述的方法,其特征在于,步驟b1)所述判斷串口發(fā)送寄存器當(dāng)前是否可以發(fā)送字符的過(guò)程包括讀取串口狀態(tài)寄存器,根據(jù)當(dāng)前串口狀態(tài)寄存器的值判斷串口發(fā)送寄存器當(dāng)前是否可以發(fā)送字符。
14.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述輸出串口為嵌入式計(jì)算機(jī)CPU的串口。
全文摘要
本發(fā)明公開(kāi)了一種嵌入式計(jì)算機(jī)系統(tǒng)的啟動(dòng)信息輸出方法,該方法主要包括以下步驟設(shè)置嵌入式計(jì)算機(jī)中央處理器(CPU)串口的每個(gè)串口寄存器地址和串口寄存器初始化值的對(duì)應(yīng)關(guān)系,在嵌入式計(jì)算機(jī)系統(tǒng)啟動(dòng)過(guò)程中,在完成CPU最基本的寄存器初始化后,根據(jù)所述串口寄存器地址和串口寄存器初始化值的對(duì)應(yīng)關(guān)系初始化所述串口以作為信息輸出通道;取出系統(tǒng)啟動(dòng)過(guò)程中的各種需要信息,通過(guò)所述輸出串口的串口發(fā)送寄存器發(fā)送出去。本發(fā)明方案在嵌入式計(jì)算機(jī)系統(tǒng)啟動(dòng)過(guò)程中,能夠更快、更詳細(xì)地輸出用戶(hù)所需的啟動(dòng)信息,豐富了啟動(dòng)信息輸出內(nèi)容,提高了啟動(dòng)問(wèn)題定位的效率。
文檔編號(hào)G06F9/445GK1713142SQ20041004873
公開(kāi)日2005年12月28日 申請(qǐng)日期2004年6月15日 優(yōu)先權(quán)日2004年6月15日
發(fā)明者鄭朝暉, 周文旻, 鄒桓浩 申請(qǐng)人:華為技術(shù)有限公司