一種不定幀長結構數據流的存儲方法
2023-10-09 08:30:09
專利名稱:一種不定幀長結構數據流的存儲方法
技術領域:
本發明涉及嵌入式系統,特別是涉及一種適用於存儲局限大的嵌入式產品如移動終端的一種不定幀長結構數據流的存儲方法。
背景技術:
嵌入式產品的存儲局限性大,一直是手機的薄弱環節。目前,特定的幀結構的數據存儲部分使用連續的空間存儲模式,移動終端的空間分配情況固定,分配時由用戶指定存儲空間的大小。圖1示出了現有技術嵌入式產品採用的連續存儲模式的幀結構,其由連續的空間結構表達,具有固定的長度,幀結構的最大長度決定了存儲空間的大小。對於幀長度較小的情況,將在一定程度上產生存儲空間的浪費。由於移動終端的硬體資源限制,無法像PC機那樣提供足夠的空間給用戶平面使用,因此在很多實際的情況中處理問題的方法將有很多區別。上述的連續存儲空間在問題的實現中具有簡易的優點,但是對於幀長度變化頻繁,變化範圍較大的情況,將顯得力不從心。特別是,這種連續的存儲結構對於自增長的數據幀將無法預先估計其數據長度,因此只能根據協議中規定的最大長度為其分配資源。當短幀數據的數量較多時,這種使用方法使得空間資源的利用率下降到50%以下。
發明內容
本發明的目的在於提供一種不定幀長結構數據流的存儲方法,以提高存儲空間的利用率,解決嵌入式產品資源有限問題。
為實現本發明的上述目的,本發明提供了一種不定幀長結構數據流的存儲方法,其中,包括為接收到的所述不定幀長結構的數據流動態分配用於存儲所述不定幀長數據流的數據結構的步驟。
所述的存儲方法,其中,所述動態分配存儲所述不定幀長數據流的數據結構的步驟進一步包括分段存儲所述接收的不定幀長結構數據流的步驟。
所述的存儲方法,其中,所述用於存儲所述不定幀長數據流的數據結構為指針鍊表結構。
所述的存儲方法,其中,所述分段存儲所述接收的不定幀長結構數據流的步驟進一步包括步驟一,檢測數據流的到達,構造幀結構,其中,所述幀結構包括幀頭及幀數據塊;步驟二,接收數據流,將所述數據流存入一幀數據塊,並判斷所述幀數據塊是否已滿;如是,則轉入步驟三;步驟三,追加一個或多個幀數據塊,直至將數據流存儲完畢,其中,前一個幀數據塊中記錄有後續幀數據塊的信息。
所述的存儲方法,其中,所述步驟二進一步包括分離所述接收的不定幀長結構數據流中的數據部分,並用數據指針替代原有的存儲數據的字符數組部分。
所述的存儲方法,其中,所述不定幀長結構數據流為串行數據流。
所述的存儲方法,其中,所述不定幀長結構數據流的數據結構大小具有64位元組至32K字節的變化範圍。
所述的存儲方法,其中,所述幀數據塊具有確定的長度。
本發明針對某些終端實際數據特點採用特定存儲管理模式改善空間利用狀況,有效緩解作為嵌入式產品資源有限的弱點。利用本發明的方法可通過針對特定的模塊使用情況和數據結構特點有針對性的制定數據結構模型提高存儲空間的利用率,並進而提高手機等嵌入式產品晶片的計算處理能力利用率。
以下結合附圖和具體實施例對本發明進行詳細描述,但不作為對本發明的限定。
圖1是現有技術的幀結構圖;圖2是本發明方法構造的幀結構圖;圖3是本發明方法的幀結構生成過程的流程示意圖。
具體實施例方式
本發明的特點在於存儲對象是動態決定,具有串行特點,即在該存儲對象到達時,無法確定其數據結構的大小,並且該數據結構大小具有64bytes至32Kbytes的變化範圍。利用本發明的方法在終端的實時通訊中,每次接收到的數據需要添加到先前分配的數據結構中,而在數據結構分配時採用該分離存儲的模式,以達到優化存儲結構的目的。
本發明的方法並非專注於內存管理,而是在處理動態增長的數據結構中進行格式變化,使得原本內存利用率不高的現象得到改善。例如,晶片通訊中有個接收前不定長幀到達,此時如果按照原始思路要分配最大幀長度的內存用於該不定幀的存儲,而根據本文所述方法,每次分配一個數據塊(block)長度,然後動態的追加新的數據塊(block)為其使用。因此不定幀的實體有多個數據塊(blocks)聯合構成,前一個block記錄後續block的信息,直至結束。
圖2是本發明方法採用的幀結構示意圖。與圖1所示的現有技術採用的幀結構對比,圖2所示的幀結構的長度不固定,其中的數據部分被分離出來用數據的指針替代原有的存儲數據的字符數組部分(即在data info reference部分用指針byte*pBuffer替換原有圖1中Data info部分的一個大於幀長度的用於存儲的字符數組byte Buffer[最大長度值]),用指針替代後再創建內存池,並按照需要進行優化。用一個或多個幀數據塊(block)來存儲幀的數據部分,其中,一個數據塊(block)1包括塊頭部分11(Block Head)、數據部分12(Data Info)及保留部分13(Reserved)前一個數據塊1在其塊頭部分11(Block Head)記錄有後續數據塊(block)2的信息。
圖3是本發明方法的幀結構生成過程的流程示意圖。在圖3中,當不定幀長數據流到達時(步驟301),系統構造幀結構(步驟302) 通常構造出的幀的組成結構為一個幀頭(包含幀的類型、長度、校驗等信息)及若干幀數據塊,其中具體的數據塊的數量由幀長度決定,即幀所佔的空間為數據塊長度的整數倍。判斷數據接收是否結束(步驟303);如是,則返回幀結構(步驟307);如否,則繼續接收數據流(步驟304);判斷數據塊是否已滿(步驟305);如是,則追加存儲的數據塊(步驟306);如否,則轉入步驟303,繼續判斷數據接收是否結束。其中,構造幀結構時,幀頭(Frame header)需要從Header pool(幀頭池)中申請,獲得一個空閒的(Free)的Header結構,根據接收到的前幾個字節(byte)數據確定Header的某些屬性(如幀的類型、長度等屬性),然後陸續填充Blocks,直到幀尾。追加的數據塊的數量根據幀的增長動態添加。其中的數據塊為存儲單元。實際上,本發明的方法不需要預先解讀幀頭信息,它將數據存入指針鍊表中,其具有長度自適應性質,由此避免了使用realloc函數降低允許效率和避免預分配大量內存浪費工具的優點。
本發明的方法擺脫了傳統結構的束縛,充分利用嵌入式軟體的靈活性,利用幀結構的分段式存儲,及內存的統一管理,採用特定存儲管理模式改善空間利用狀況,有效緩解了嵌入式產品資源有限的弱點。
當然,本發明還可有其他多種實施例,在不背離本發明精神及其實質的情況下,熟悉本領域的技術人員當可根據本發明作出各種相應的改變和變形,但這些相應的改變和變形都應屬於本發明所附的權利要求的保護範圍。
權利要求
1.一種不定幀長結構數據流的存儲方法,其特徵在於,包括為接收到的所述不定幀長結構的數據流動態分配用於存儲所述不定幀長數據流的數據結構的步驟。
2.根據權利要求1所述的存儲方法,其特徵在於,所述動態分配存儲所述不定幀長數據流的數據結構的步驟進一步包括分段存儲所述接收的不定幀長結構數據流的步驟。
3.根據權利要求1或2中任一權利要求所述的存儲方法,其特徵在於,所述用於存儲所述不定幀長數據流的數據結構為指針鍊表結構。
4.根據權利要求3所述的存儲方法,其特徵在於,所述分段存儲所述接收的不定幀長結構數據流的步驟進一步包括步驟一,檢測數據流的到達,構造幀結構,其中,所述幀結構包括幀頭及幀數據塊;步驟二,接收數據流,將所述數據流存入一幀數據塊,並判斷所述幀數據塊是否已滿;如是,則轉入步驟三;步驟三,追加一個或多個幀數據塊,直至將數據流存儲完畢,其中,前一個幀數據塊中記錄有後續幀數據塊的信息。
5.根據權利要求4所述的存儲方法,其特徵在於,所述步驟二進一步包括分離所述接收的不定幀長結構數據流中的數據部分,並用數據指針替代原有的存儲數據的字符數組部分。
6.根據權利要求1-5中任一權利要求所述的存儲方法,其特徵在於,所述不定幀長結構數據流為串行數據流。
7.根據權利要求6所述的存儲方法,其特徵在於,所述不定幀長結構數據流的數據結構大小具有64位元組至32K字節的變化範圍。
8.根據權利要求4或7中任一權利要求所述的存儲方法,其特徵在於,所述幀數據塊具有確定的長度。
全文摘要
本發明提供了一種不定幀長結構數據流的存儲方法,其特徵在於,包括為接收到的所述不定幀長結構的數據流動態分配用於存儲所述不定幀長數據流的數據結構的步驟。利用本發明的方法可通過針對特定的模塊使用情況和數據結構特點有針對性的制定數據結構模型提高存儲空間的利用率,並進而提高手機等嵌入式產品晶片的計算處理能力利用率。
文檔編號G06F12/02GK101021846SQ20061001132
公開日2007年8月22日 申請日期2006年2月14日 優先權日2006年2月14日
發明者吳偉 申請人:樂金電子(中國)研究開發中心有限公司