專利名稱:一種程序動態(tài)加載方法
技術(shù)領(lǐng)域:
本發(fā)明涉及通信領(lǐng)域,尤其涉及對芯片陣列進(jìn)行程序的動態(tài)加載。
為了簡化設(shè)計,很多芯片陣列采用業(yè)務(wù)接口和程序加載接口共用一套物理總線的實現(xiàn)方案,即業(yè)務(wù)數(shù)據(jù)流和加載程序的數(shù)據(jù)流都通過同一套總線進(jìn)行傳遞和通訊。因此,為了避免總線爭用對業(yè)務(wù)數(shù)據(jù)通訊的影響,加載程序必須在芯片陣列不傳遞業(yè)務(wù)數(shù)據(jù)的情況下才能進(jìn)行,否則,將引起總線競爭,導(dǎo)致混亂和錯誤的出現(xiàn)。即使對芯片陣列中的某一個芯片進(jìn)行加載,也勢必中斷或嚴(yán)重影響整個芯片陣列的業(yè)務(wù)通訊。
所述的程序動態(tài)加載方法,還包括設(shè)置一個主控程序,在加載所述程序之前,需要先加載該主控程序,所述主控程序攜帶程序加載所需的配置信息,并完成對加載過程的控制和消息處理。
所述的加載,是通過主機(HOST)完成輸入的。
所述的程序動態(tài)加載方法,還包括為各段程序設(shè)置一個段頭標(biāo)識,所述的段頭標(biāo)識中包含段序列號信息和程序的分段信息,可以根據(jù)當(dāng)前段序列號信息索引下一個分段,當(dāng)程序段加載到芯片陣列之后,將段頭標(biāo)識拆掉。
所述的程序動態(tài)加載方法,可以通過段頭中段序列號等相關(guān)信息判斷加載的段是否合法、是否正確。
所述的程序動態(tài)加載方法,可以通過段頭中程序的分段信息判斷整個程序是否加載完畢。
所述的程序動態(tài)加載方法,在段頭中可以加入差錯控制信息,通過主機(HOST)與被加載芯片之間的握手信息將程序段是否加載正確的信息告知主機(HOST),如果某一段加載正確時,主機(HOST)繼續(xù)加載下一段,否則重新加載本段。
所述的重新加載,可以是重新發(fā)送部分段,也可以是重新加載全部段。
所述的程序動態(tài)加載方法,該時間間隔可以通過設(shè)置定時機制來控制。
所述的程序動態(tài)加載方法,該定時機制可以是通過主機(HOST)上的定時機制來控制,當(dāng)時間一到時開始加載下一段程序。
所述的程序動態(tài)加載方法,該定時機制可以通過被加載的芯片上的定時機制來控制,當(dāng)被加載芯片判斷時間到時被加載的芯片向主機(HOST)發(fā)送消息要求加載下一段,主機(HOST)接收到這個消息后開始加載下一段。
所述的程序動態(tài)加載方法,可根據(jù)每一種加載失敗設(shè)置一個計數(shù)器記錄重新加載的次數(shù),如果超過一定的閾值,則停止加載,則作為錯誤事件處理。
所述的程序動態(tài)加載方法,還包括設(shè)置一個超時機制,在加載過程中如果一定時間內(nèi)沒有相應(yīng)的響應(yīng),則作為錯誤事件處理。
本發(fā)明通過將加載的程序分割成段,通過段頭中段序列號信息標(biāo)識索引各段,加載程序時按照一定時間間隔逐一加載各段的方法避免程序加載對總線的長時間占用,可以消除對正常業(yè)務(wù)通訊的影響,從而實現(xiàn)程序的動態(tài)加載,即程序加載時可以不中斷正常業(yè)務(wù)通信。
如
圖1所示,是一個常見的單板模型,在通信領(lǐng)域,在該單板上布置芯片陣列已經(jīng)成為較為普及的技術(shù)。
本發(fā)明的核心思想,是通過將加載的程序分割成段,通過段頭中段序列號信息標(biāo)識索引各段,加載程序時按照一定時間間隔逐一加載各段的方法避免程序加載業(yè)務(wù)對總線的長時間占用,以消除對業(yè)務(wù)通訊的影響,當(dāng)加載完成后,重新組合成完整的程序文件,從而實現(xiàn)程序的動態(tài)加載,即程序加載時可以不中斷業(yè)務(wù)通信。
如圖2所示,是本發(fā)明加載的流程圖。
本發(fā)明在加載前,可以加載一個很短的主控程序,此主控程序攜帶程序加載所需的配置信息,比如需要加載哪些文件,程序啟動地址等等,并主要完成對加載的過程的控制和消息處理功能。
該程序的加載,是通過主機(HOST)完成輸入的,該主機可以是是芯片陣列單板上的LOCAL CPU,也可以是系統(tǒng)中的主控單板,甚至可以是一個系統(tǒng)的后臺。
在加載該主控程序時,除了使用主機加載外,還可以通過BIOS加載。
在主控程序加載的過程中,如果主控程序加載成功,則返回正確消息,否則返回錯誤消息并要求重新加載。如果重新加載的次數(shù)超過一定閾值時,則停止加載并上報錯誤事件消息。比如,我們將閾值設(shè)置為3,則超過3次時,停止加載并上報錯誤時間消息。
對于欲加載的程序,我們先將其分段,將大的程序進(jìn)行分割,以利于數(shù)據(jù)傳送,段的大小與正常的業(yè)務(wù)數(shù)據(jù)包的大小相似,可以根據(jù)具體的業(yè)務(wù)不同而定。
然后對將分好的數(shù)據(jù)段進(jìn)行處理,在每一個數(shù)據(jù)段之前加上段頭,該段頭中包含段序列號信息,段頭中還包含整個文件分段的信息,在數(shù)據(jù)傳送的過程中,可以根據(jù)當(dāng)前段的段序列號信息索引下一個分段。
然后向芯片加載該程序,在加載時,要逐段加載,保證段和段之間有一定的時間間隔,該時間間隔大小與業(yè)務(wù)數(shù)據(jù)包的時間間隔類似,這也是為了避免總線競爭帶來的影響。該時間間隔,可以通過設(shè)置一個定時機制,通過該定時機制來控制時間間隔。比如可以通過HOST上的定時器來控制,當(dāng)時間一到,則開始加載下一段文件;該定時機制也可以通過被加載的芯片定時器來控制,當(dāng)時間到時,被加載的芯片向HOST發(fā)送消息要求加載下一段,HOST接收到這個消息后開始加載下一段程序。
在加載的過程中,可以通過段頭中段序列號等信息來判斷加載的數(shù)據(jù)段是否合法,是否連續(xù)等。
當(dāng)欲加載的文件分段都加載到芯片上時,拆掉段頭標(biāo)識并重組成完整的程序文件。該段頭標(biāo)識的拆掉,可以根據(jù)實際情況的不同而確定,可以在全部程序分段都加載完畢之后拆掉,也可以邊加載邊拆掉,加載一段程序后即拆掉該段程序的段頭標(biāo)識,這樣當(dāng)加載所有程序段后,直接組合即可。
整個程序文件加載成功后,向HOST發(fā)送加載文件加載成功消息;反之則上報文件加載失敗消息,并要求重新加載。
實際使用中,該加載成功消息的發(fā)送,并不一定是必須的步驟,即不一定非要通過成功加載消息上報,還可以通過查詢寄存器等方式來檢測是否加載成功,同樣的道理,上述的失敗消息,也不一定通過消息發(fā)送的方式得到。
在實際操作中,可根據(jù)每一種加載失敗的情況,設(shè)置一個計數(shù)器,用來記錄重新加載的次數(shù),如果超過一定的閾值,則停止加載,并上報錯誤信息。一面產(chǎn)生循環(huán)錯誤。該閾值的設(shè)立可以靈活掌握,在重新加載計數(shù)器的閾值也是可改變設(shè)置的。
當(dāng)芯片陣列的業(yè)務(wù)模型(包括業(yè)務(wù)數(shù)據(jù)包的大小、業(yè)務(wù)數(shù)據(jù)包的發(fā)送時間間隔等)發(fā)生改變時,可以隨之調(diào)整段的大小和段的加載時間間隔。
以上所述,只是加載一個程序的過程,在實際應(yīng)用中,可能需要加載許多個程序,這時,可以按照本發(fā)明的上述方法分段、加載、控制,原理相同。
下面看一個具體的加載實例。
如圖1所示,是一個語音處理單板方案,可以實現(xiàn)分組語音通訊。此方案由一個HOST、若干片語音處理芯片組成的芯片陣列、匯聚邏輯和分組處理單元組成。其中,芯片陣列通過業(yè)務(wù)總線匯聚到匯聚邏輯,HOST也有一個與匯聚邏輯相連接的配置和加載接口。每個語音處理芯片的語音包通過業(yè)務(wù)總線傳遞到匯聚邏輯,再傳遞到分組處理單元;HOST通過配置加載接口經(jīng)由匯聚邏輯對芯片陣列進(jìn)行加載,加載數(shù)據(jù)也是通過業(yè)務(wù)總線傳遞到每一個語音處理芯片。
本實施例的加載包括以下步驟1.將需要加載的程序文件分成段,分為每段長度為300BYTES的程序段,與30ms的G.711語音數(shù)據(jù)包長度相仿(240 BYTES),不足300BYTES的段可以填充無效字節(jié)。
然后在每一段增加段頭,其格式為
其中
段標(biāo)識01111110文件尾標(biāo)識0非文件尾;1文件尾段序列號每一個文件的第一個段的段序列號為0,以后依次增加1。
CRC校驗;使用CRC-8校驗多項式段內(nèi)容需要加載的程序文件內(nèi)容填充字節(jié)0XFF,如果不足300字節(jié)時,用以填充。
2.加載前先加載一個長度約250字節(jié)的主控程序,此主控程序攜帶程序加載所需要的配置信息,并主要完成對加載的過程的控制和消息處理功能。如果主控程序加載成功,則返回主控程序加載成功消息,否則返回主控程序加載失敗消息并要求重新加載。
3.根據(jù)段序列號逐段加載程序,并且每30ms加載一段。在語音處理芯片中設(shè)置一個定時器,每30ms向HOST發(fā)送一個消息,當(dāng)HOST檢測到這個消息時即發(fā)送下一段。
4.語音處理每接收一段則根據(jù)段標(biāo)識、段序列號、段有效長度和CRC校驗判斷本段加載是否正確,如果正確,則反饋段加載成功消息;如錯誤,則反饋段加載失敗消息。當(dāng)HOST接收到加載成功消息時,則繼續(xù)加載下一段;否則重新加載上一段。
5.語音處理根據(jù)文件尾標(biāo)識判斷是否加載完畢整個程序文件,如果整個文件加載正確,則反饋文件加載成功消息;如錯誤,則反饋文件加載失敗消息。當(dāng)HOST接收到文件加載成功消息時,則繼續(xù)加載下一文件;否則重新加載上一文件。
6.所有文件加載完畢后,開始運行程序,如果運行正常,則反饋程序加載正常消息;如錯誤,則反饋程序加載失敗消息。當(dāng)HOST接收到程序加載成功消息時,則開始正常運行;否則重新加載一遍。
7.當(dāng)因段加載、文件加載和程序失敗導(dǎo)致的重新加載的次數(shù)超過3次后,則停止加載,并上報錯誤事件消息。
8.當(dāng)芯片陣列使用5ms G.711語音編解碼業(yè)務(wù)時,將每個文件分段的大小定為50字節(jié)(與5ms G.711語音數(shù)據(jù)大小40字節(jié)相似),并修改段有效長度信息;將段加載間隔變?yōu)?ms。
本發(fā)明通過將加載的程序分割成段,通過段頭中段序列號信息標(biāo)識索引各段,加載程序時按照一定時間間隔逐一加載各段的方法避免程序加載業(yè)務(wù)對總線的長時間占用,消除了程序加載對業(yè)務(wù)通訊的影響,從而實現(xiàn)程序的動態(tài)加載,程序在加載時可以不中斷業(yè)務(wù)通信,效果非常明顯。
以上所述,僅為本發(fā)明較佳的具體實施方式
,但本發(fā)明的保護范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護范圍之內(nèi)。因此,本發(fā)明的保護范圍應(yīng)該以權(quán)利要求書的保護范圍為準(zhǔn)。
權(quán)利要求
1.一種程序動態(tài)加載的方法,其特征在于包括將欲加載的程序分割成段,在加載時按照一定時間間隔逐一加載各段程序,當(dāng)所有程序都加載完成后,重新組合成完整的程序文件,從而實現(xiàn)程序的動態(tài)加載。
2.如權(quán)利要求1所述的程序動態(tài)加載方法,其特征在于還包括設(shè)置一個主控程序,在加載所述程序之前,需要先加載該主控程序,所述主控程序攜帶程序加載所需的配置信息,并完成對加載過程的控制和消息處理。
3.如權(quán)利要求2所述的程序動態(tài)加載方法,其特征在于,所述的加載,是通過主機(HOST)完成輸入的。
4.如權(quán)利要求1、2或3所述的程序動態(tài)加載方法,其特征在于還包括為各段程序設(shè)置一個段頭標(biāo)識,所述的段頭標(biāo)識中包含段序列號信息和程序的分段信息,可以根據(jù)當(dāng)前段序列號信息索引下一個分段,當(dāng)程序段加載到芯片陣列之后,將段頭標(biāo)識拆掉。
5.如權(quán)利要求4所述的程序動態(tài)加載方法,其特征在于可以通過段頭中段序列號等相關(guān)信息判斷加載的段是否合法、是否正確。
6.如權(quán)利要求4所述的程序動態(tài)加載方法,其特征在于可以通過段頭中程序的分段信息判斷整個程序是否加載完畢。
7.如權(quán)利要求5所述的程序動態(tài)加載方法,其特征在于在段頭中可以加入差錯控制信息,通過主機(HOST)與被加載芯片之間的握手信息將程序段是否加載正確的信息告知主機(HOST),如果某一段加載正確時,主機(HOST)繼續(xù)加載下一段,否則重新加載本段。
8.如權(quán)利要求7所述的程序動態(tài)加載方法,其特征在于所述的重新加載,可以是重新發(fā)送部分段,也可以是重新加載全部段。
9.如權(quán)利要求1、2或3所述的程序動態(tài)加載方法,其特征在于該時間間隔可以通過設(shè)置定時機制來控制。
10.如權(quán)利要求9所述的程序動態(tài)加載方法,其特征在于,該定時機制可以是通過主機(HOST)上的定時機制來控制,當(dāng)時間一到時開始加載下一段程序。
11.如權(quán)利要求9所述的程序動態(tài)加載方法,其特征在于,該定時機制可以通過被加載的芯片上的定時機制來控制,當(dāng)被加載芯片判斷時間到時被加載的芯片向主機(HOST)發(fā)送消息要求加載下一段,主機(HOST)接收到這個消息后開始加載下一段。
12.如權(quán)利要求1、2或3所述的程序動態(tài)加載方法,其特征在于可根據(jù)每一種加載失敗設(shè)置一個計數(shù)器記錄重新加載的次數(shù),如果超過一定的閾值,則停止加載,則作為錯誤事件處理。
13.如權(quán)利要求1、2或3所述的程序動態(tài)加載方法,其特征在于還包括設(shè)置一個超時機制,在加載過程中如果一定時間內(nèi)沒有相應(yīng)的響應(yīng),則作為錯誤事件處理。
全文摘要
本發(fā)明涉及對芯片陣列進(jìn)行程序的動態(tài)加載的方法。一種程序動態(tài)加載的方法,其特征在于包括將欲加載的程序分割成段,在加載時按照一定時間間隔逐一加載各段程序,當(dāng)所有程序都加載完成后,重新組合成完整的程序文件,從而實現(xiàn)程序的動態(tài)加載。本發(fā)明通過將加載的程序分割成段,通過段頭中段序列號信息標(biāo)識索引各段,加載程序時按照一定時間間隔逐一加載各段的方法避免程序加載對總線的長時間占用,消除對正常業(yè)務(wù)通訊的影響,從而實現(xiàn)程序的動態(tài)加載,即程序加載時可以不中斷正常的業(yè)務(wù)通信。
文檔編號G06F9/445GK1467631SQ02141179
公開日2004年1月14日 申請日期2002年7月8日 優(yōu)先權(quán)日2002年7月8日
發(fā)明者周亮, 喬志新, 周 亮 申請人:華為技術(shù)有限公司