一種嵌入式系統(tǒng)的日志管理方法
【專利摘要】一種嵌入式系統(tǒng)的日志管理方法,涉及嵌入式系統(tǒng)的調試診斷【技術領域】,包括步驟:S1.從系統(tǒng)內存中獲取日志內存塊,記錄日志內存塊的起始地址、占用內存空間的總大??;S2.將日志內存塊分為等大且連續(xù)的日志記錄區(qū),每個日志記錄區(qū)分為不同的分區(qū),每個日志記錄區(qū)還包含一個總控制頭,每個分區(qū)還包括一個分區(qū)控制頭;S3.按照上述步驟為每種類型的日志分配日志記錄區(qū);S4.根據(jù)日志記錄區(qū)的起始地址和當前日志記錄位置,獲取日志記錄區(qū)當前分區(qū)中用于記錄日志信息的內存首地址,將需要記錄的日志信息寫入該內存首地址所在區(qū)域。本發(fā)明減少了對存儲介質的讀寫,提高了日志記錄信息的高效管理,實現(xiàn)系統(tǒng)的快速、準確的診斷和定位。
【專利說明】一種嵌入式系統(tǒng)的日志管理方法
【技術領域】
[0001]本發(fā)明涉及嵌入式系統(tǒng)的調試診斷【技術領域】,具體來講是一種嵌入式系統(tǒng)的日志
管理方法。
【背景技術】
[0002]日志為嵌入式系統(tǒng)診斷提供重要依據(jù),詳細的日志記錄為監(jiān)視、跟蹤、定位或管理系統(tǒng)運行提供重要的線索,特別是針對一些BUG不易再現(xiàn)的嵌入式設備的跟蹤和定位,提供有力的依據(jù)。
[0003]目前嵌入式系統(tǒng)通用的日志管理,是將系統(tǒng)所有歷史和當前的任務發(fā)送的日志記錄信息,通過申請內存來保存,并拷貝該日志記錄信息,保存在一個位于存儲介質中的日志文件內。當調試人員需要查看日志記錄信息時,獲取日志文件內所有的日志記錄信息。這種方法針對日志記錄信息的讀寫,都需要對存儲介質進行一次讀寫,實現(xiàn)效率低;且讀取到的所有日志記錄信息,龐大而無序,無法區(qū)分日志是屬于當前系統(tǒng)運行時的日志,還是系統(tǒng)歷史的日志記錄信息,難于實現(xiàn)系統(tǒng)的快速、準確的診斷和定位。
【發(fā)明內容】
[0004]針對現(xiàn)有技術中存在的缺陷,本發(fā)明的目的在于提供一種嵌入式系統(tǒng)的日志管理方法,減少了對存儲介質的讀寫,提高了日志記錄信息的高效管理,實現(xiàn)系統(tǒng)的快速、準確的診斷和定位。
[0005]為達到以上目的,本發(fā)明采取一種嵌入式系統(tǒng)的日志管理方法,包括步驟:S1.從系統(tǒng)內存中獲取一塊日志內存塊,記錄所述日志內存塊的起始地址、占用內存空間的總大小;S2.將所述日志內存塊分為等大且連續(xù)的日志記錄區(qū),每個日志記錄區(qū)又分為不同的分區(qū),每個分區(qū)用于存儲同一層的歷史記錄日志信息,每個日志記錄區(qū)還包含一個描述該日志記錄區(qū)的總控制頭,每個分區(qū)還包括一個分區(qū)控制頭;S3.按照上述步驟為每種類型的日志分配日志記錄區(qū);S4.根據(jù)日志記錄區(qū)的起始地址和當前日志記錄位置,獲取所述日志記錄區(qū)當前分區(qū)中用于記錄日志信息的內存首地址,將需要記錄的日志信息寫入該內存首地址所在區(qū)域。
[0006]在上述技術方案的基礎上,當嵌入式系統(tǒng)復位或日志記錄區(qū)有改動時,將所述日志內存塊的日志記錄區(qū)中所有二進制數(shù)據(jù)保存到存儲介質。
[0007]在上述技術方案的基礎上,所述S3中為某種類型的日志分配日志記錄區(qū),首先根據(jù)輸入的分區(qū)數(shù)、記錄數(shù)和記錄長度,計算該類型日志占用內存的大小,在沒有超過日志內存塊內存的情況下,獲取此次申請的日志記錄區(qū)的起始地址,重新設置已使用的日志內存塊大小,新創(chuàng)建日志記錄區(qū)的內存首地址,初始化該日志記錄區(qū)的總控制頭以及該記錄區(qū)內的各分區(qū)控制頭,獲取日志記錄區(qū)當前分區(qū),并初始化該分區(qū)。
[0008]在上述技術方案的基礎上,根據(jù)所述日志占用內存的大小+已使用日志記錄區(qū)的內存大小,與日志內存塊的總大小進行比較,若小于日志內存塊的總大小,獲取此次申請的日志記錄區(qū)的起始地址,并且作為該日志類型的標識ID。
[0009]在上述技術方案的基礎上,所述日志記錄區(qū)的內存首地址,通過日志記錄區(qū)起始地址+日志記錄區(qū)已使用的地址獲取到。
[0010]在上述技術方案的基礎上,所述總控制頭記錄其所在日志記錄區(qū)的有效標識、CRC校驗值、各分區(qū)和該日志記錄區(qū)創(chuàng)建成功后不再改變的值。
[0011]在上述技術方案的基礎上,根據(jù)不同的日志類型,分配與日志類型對應的日志記錄區(qū),并將所有該類型的日志保存在該日志記錄區(qū)內的當前分區(qū)。
[0012]在上述技術方案的基礎上,當前分區(qū)記錄已滿時,若有新的記錄需要保存,有兩種記錄方式:一種是采用滾動覆蓋最原始的記錄,從而保存新的記錄;另一種是放棄此次新的記錄,維持原有的記錄。
[0013]在上述技術方案的基礎上,當需要查看某類型日志的詳細記錄信息時,首先獲取該類型日志對應的分區(qū)的有效記錄總數(shù),遍歷該類型日志對應的分區(qū),獲取所有的記錄數(shù)據(jù)。
[0014]本發(fā)明的有益效果在于:
[0015]1、系統(tǒng)在初始化的時候一次性為日志記錄分配整塊且連續(xù)的日志內存塊,且如果當前分區(qū)沒有記錄數(shù)據(jù)時,復位后重復將該分區(qū)設置為當前分區(qū),減少了系統(tǒng)內存的浪費。新日志記錄區(qū)內存地址,通過日志記錄區(qū)起始地址+日志記錄區(qū)已使用的地址獲取到,提高了日志記錄區(qū)的內存分配效率。
[0016]2、只有在嵌入式系統(tǒng)復位或定時檢測到日志記錄區(qū)有改動時,將所述日志內存塊的日志記錄區(qū)中所有二進制數(shù)據(jù)保存到存儲介質,例如FLASH、CF卡、遠程調試主機的硬盤內,減少了對存儲介質的讀寫。
[0017]3、本發(fā)明提供當前日志和歷史日志的快速查看方式,例如:可以根據(jù)調試人員的要求查看不同歷史時期的具體日志,為系統(tǒng)的診斷提供更加清晰、系統(tǒng)性的信息;日志記錄的存儲地址可以通過簡單的計算獲取,日志的記錄不需要任務發(fā)送日志信息,也不需要為每條日志申請內存、拷貝等復雜操作,提高了日志記錄的讀寫效率。
【專利附圖】
【附圖說明】
[0018]圖1為本發(fā)明嵌入式系統(tǒng)的日志內存塊的示意圖;
[0019]圖2為創(chuàng)建新日志記錄區(qū)的流程圖。
【具體實施方式】
[0020]以下結合附圖及實施例對本發(fā)明作進一步詳細說明。
[0021]本發(fā)明嵌入式系統(tǒng)的日志管理方法,包括步驟:
[0022]S1.從系統(tǒng)內存中獲取一塊日志內存塊,即從系統(tǒng)內存中申請一整塊連續(xù)的內存塊,用于存儲系統(tǒng)的日志信息。記錄該日志內存塊起始地址、占用內存空間的總大小,初始化已使用的日志內存大小為O。如圖1所示,為本發(fā)明嵌入式系統(tǒng)的日志內存塊示意圖。
[0023]S2.將所述日志內存塊分為等大且連續(xù)的日志記錄區(qū),每一個日志記錄區(qū)用于存儲相同類型的日志記錄,每個日志記錄區(qū)還包含一個描述該日志記錄區(qū)的總控制頭。每個日志記錄區(qū)又分為不同的分區(qū),每個分區(qū)用于存儲同一層的歷史記錄日志信息,每個分區(qū)還包括一個分區(qū)控制頭,詳細的日志信息存儲在不同的分區(qū)中。
[0024]S3.按照上述步驟為每種類型的日志分配日志記錄區(qū)。當開發(fā)人員需要記錄某類型的日志時,例如需要保存系統(tǒng)消息處理時間過長的相關記錄,首先需要為消息處理時間過長類型的日志,從系統(tǒng)日志內存塊中申請內存,即創(chuàng)建日志記錄區(qū),且保存申請到的日志類型的標識ID。所述日志記錄區(qū)的內存首地址,通過日志記錄區(qū)起始地址+日志記錄區(qū)已使用的地址獲取到。
[0025]S4.記錄特定類型的日志,即向指定類型的日志記錄區(qū)內寫該類型的日志信息。先要根據(jù)日志記錄區(qū)的起始地址和當前日志記錄位置,在發(fā)生指定類型日志的代碼處,根據(jù)記錄長度、日志記錄區(qū)的首地址、總控制頭的大小等值,通過簡單的計算,獲取所述日志記錄區(qū)當前分區(qū)中用于記錄日志信息的內存首地址,將需要記錄的日志信息寫入該內存首地址所在區(qū)域。當日志記錄區(qū)的分區(qū)已滿且記錄方式為滾動覆蓋時,則刪除最原始的日志信息,保存此次新產生的日志信息;當日志記錄區(qū)的分區(qū)已滿,且記錄方式為非滾動覆蓋時,則放棄保存此次新產生的日志信息。
[0026]如圖2所示,為步驟S3中創(chuàng)建新日志記錄區(qū)的具體流程:
[0027]S31.開發(fā)人員需要輸入所要記錄的類型日志的名稱、分區(qū)數(shù)、每個分區(qū)存儲的記錄總數(shù)(記錄數(shù)),每條記錄的長度(記錄長度)以及記錄的方式。根據(jù)輸入的分區(qū)數(shù)、記錄數(shù)和記錄長度,計算該類型日志占用內存的大小。如圖1所示,分區(qū)數(shù)表示保存歷史記錄的層數(shù),若選擇分區(qū)數(shù)為3,則系統(tǒng)最多保存復位2次內所有歷史記錄,其中分區(qū)O表示當前記錄分區(qū),分區(qū)I表示最近一次系統(tǒng)復位前使用的分區(qū),分區(qū)2表示上上一次復位前使用的分區(qū),依此類推。記錄方式是指當前分區(qū)記錄已滿時,若有新的記錄需要保存時,有兩種記錄方式:一種是系統(tǒng)采用滾動覆蓋最原始的記錄,從而保存新的記錄;另一種是放棄此次新的記錄,維持原有的記錄。
[0028]S32.判斷申請的日志內存是否越界。根據(jù)步驟S31中獲得的日志占用內存總大小+日志內存塊中已使用的日志內存大小,與日志內存塊的總大小進行比較,若大于日志內存塊的大小,則為越界,直接結束。若小于日志內存塊的總大小,則為沒有越界,進入S33。
[0029]S33.若有日志內存塊中有足夠的日志內存空間使用,則根據(jù)日志內存塊的起始地址、已使用的日志記錄區(qū)的內存大小、需要申請的日志內存大小,獲取此次申請的日志記錄區(qū)的的起始地址,并且作為該日志類型的標識ID。
[0030]S34.重新設置已使用的日志內存塊大小,為原有已使用的日志內存塊大小+新創(chuàng)建日志記錄區(qū)的大小。
[0031]S35.判斷申請到的日志記錄區(qū)是否有效,若否,即該日志記錄區(qū)是第一次被創(chuàng)建還未使用,進入S36 ;若是,進入S37。
[0032]S36.初始化該日志記錄區(qū)的總控制頭以及該記錄區(qū)內的各分區(qū)控制頭,即保存申請到的日志記錄區(qū)的相關信息,其中設置總控制頭包括該日志記錄區(qū)的有效標識、CRC校驗值、名稱、起始地址、日志記錄數(shù)據(jù)的偏移地址、分區(qū)數(shù)、記錄數(shù)、記錄長度、控制頭占用空間的長度、用戶記錄數(shù)據(jù)的總長度、有效分區(qū)數(shù)、分區(qū)隊列頭、尾指針等信息。日志記錄區(qū)中各分區(qū)控制頭設置分區(qū)有效標識、記錄方式、該分區(qū)的記錄頭、尾指針、有效記錄數(shù)等。
[0033]S37.獲取日志記錄區(qū)當前分區(qū),若上次復位前未記錄任何信息,則當前分區(qū)為上次復位前的當前分區(qū)。[0034]S38.初始化當前分區(qū),獲取該日志記錄區(qū)的CRC校驗值并保存,獲取當前分區(qū)標識,方便頻繁的引用。
[0035]當需要獲取指定類型的日志記錄時,即獲取指定類型的日志內存塊中的某條記錄的詳細信息。根據(jù)指定的日志記錄區(qū)首地址、分區(qū)號、控制頭大小,通過簡單的計算,獲取指定分區(qū)中記錄數(shù)據(jù)的基地址;根據(jù)記錄編號、記錄長度和基地址,通過簡單的計算,獲取指定記錄的起始地址;打印該記錄的內容。如果要查看當前分區(qū)內所有記錄,則需要根據(jù)當前分區(qū)記錄數(shù)據(jù)的基地址、當前分區(qū)有效記錄數(shù)和記錄長度,遍歷當前分區(qū)所有的記錄數(shù)據(jù)。若要查看復位前的歷史日志信息,則需要根據(jù)對應分區(qū)記錄數(shù)據(jù)的基地址,然后根據(jù)該分區(qū)內有效記錄數(shù),遍歷該分區(qū)內有所有日志記錄數(shù)據(jù)。
[0036]當嵌入式系統(tǒng)復位或定時檢測日志記錄區(qū)有改動時,將嵌入式系統(tǒng)中日志內存塊中所有二進制數(shù)據(jù)保存到存儲介質,例如FLASH、CF卡、遠程調試主機的硬盤內,為嵌入式系統(tǒng)的離線診斷提供重要信息。
[0037]本發(fā)明不局限于上述實施方式,對于本【技術領域】的普通技術人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也視為本發(fā)明的保護范圍之內。本說明書中未作詳細描述的內容屬于本領域專業(yè)技術人員公知的現(xiàn)有技術。
【權利要求】
1.一種嵌入式系統(tǒng)的日志管理方法,其特征在于,包括步驟: 51.從系統(tǒng)內存中獲取一塊日志內存塊,記錄所述日志內存塊的起始地址、占用內存空間的總大??; 52.將所述日志內存塊分為等大且連續(xù)的日志記錄區(qū),每個日志記錄區(qū)又分為不同的分區(qū),每個分區(qū)用于存儲同一層的歷史記錄日志信息,每個日志記錄區(qū)還包含一個描述該日志記錄區(qū)的總控制頭,每個分區(qū)還包括一個分區(qū)控制頭; 53.按照上述步驟為每種類型的日志分配日志記錄區(qū); 54.根據(jù)日志記錄區(qū)的起始地址和當前日志記錄位置,獲取所述日志記錄區(qū)當前分區(qū)中用于記錄日志信息的內存首地址,將需要記錄的日志信息寫入該內存首地址所在區(qū)域。
2.如權利要求1所述的嵌入式系統(tǒng)的日志管理方法,其特征在于:當嵌入式系統(tǒng)復位或日志記錄區(qū)有改動時,將所述日志內存塊的日志記錄區(qū)中所有二進制數(shù)據(jù)保存到存儲介質。
3.如權利要求1所述的嵌入式系統(tǒng)的日志管理方法,其特征在于:所述S3中為某種類型的日志分配日志記錄區(qū),首先根據(jù)輸入的分區(qū)數(shù)、記錄數(shù)和記錄長度,計算該類型日志占用內存的大小,在沒有超過日志內存塊內存的情況下,獲取此次申請的日志記錄區(qū)的起始地址,重新設置已使用的日志內存塊大小,新創(chuàng)建日志記錄區(qū)的內存首地址,初始化該日志記錄區(qū)的總控制頭以及該記錄區(qū)內的各分區(qū)控制頭,獲取日志記錄區(qū)當前分區(qū),并初始化該分區(qū)。
4.如權利要求3所述的嵌入式系統(tǒng)的日志管理方法,其特征在于:根據(jù)所述日志占用內存的大小+已使用日志記錄區(qū)的內存大小,與日志內存塊的總大小進行比較,若小于日志內存塊的總大小,獲取此次申請的日志記錄區(qū)的起始地址,并且作為該日志類型的標識ID0
5.如權利要求3所述的嵌入式系統(tǒng)的日志管理方法,其特征在于:所述日志記錄區(qū)的內存首地址,通過日志記錄區(qū)起始地址+日志記錄區(qū)已使用的地址獲取到。
6.如權利要求1所述的嵌入式系統(tǒng)的日志管理方法,其特征在于:所述總控制頭記錄其所在日志記錄區(qū)的有效標識、CRC校驗值、各分區(qū)和該日志記錄區(qū)創(chuàng)建成功后不再改變的值。
7.如權利要求1所述的嵌入式系統(tǒng)的日志管理方法,其特征在于:根據(jù)不同的日志類型,分配與日志類型對應的日志記錄區(qū),并將所有該類型的日志保存在該日志記錄區(qū)內的當前分區(qū)。
8.如權利要求7所述的嵌入式系統(tǒng)的日志管理方法,其特征在于:當前分區(qū)記錄已滿時,若有新的記錄需要保存,有兩種記錄方式:一種是采用滾動覆蓋最原始的記錄,從而保存新的記錄;另一種是放棄此次新的記錄,維持原有的記錄。
9.如權利要求1所述的嵌入式系統(tǒng)的日志管理方法,其特征在于:當需要查看某類型日志的詳細記錄信息時,首先獲取該類型日志對應的分區(qū)的有效記錄總數(shù),遍歷該類型日志對應的分區(qū),獲取所有的記錄數(shù)據(jù)。
【文檔編號】G06F11/34GK103927251SQ201410100327
【公開日】2014年7月16日 申請日期:2014年3月18日 優(yōu)先權日:2014年3月18日
【發(fā)明者】劉應江, 徐鑫 申請人:烽火通信科技股份有限公司