国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

嵌入式系統(tǒng)中實時事件日志記錄的實現(xiàn)

2014-10-10 17:46:39許璟鋒
電腦知識與技術(shù) 2014年24期
關(guān)鍵詞:嵌入式系統(tǒng)數(shù)據(jù)結(jié)構(gòu)日志

許璟鋒

摘要:在嵌入式系統(tǒng)開發(fā)中,用戶都希望能有一個日志文件能監(jiān)控、記錄系統(tǒng)的運行狀況,在出現(xiàn)問題時能在日志文件中記錄下相應(yīng)的信息。該文提供了一種可行的日志文件的開發(fā)方法。在文章中,筆者提供了日志文件的總體開發(fā)思想、相應(yīng)的數(shù)據(jù)結(jié)構(gòu),并指出的開發(fā)過程中一些需要注意的問題。

關(guān)鍵詞:嵌入式系統(tǒng);日志;數(shù)據(jù)結(jié)構(gòu)

中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2014)21-5687-02

An Implementation of Real-Time Event Logging

XU Jing-feng

(Department of Basic Research, Nanjing Institute of Politics, Nanjing 210003, China)

Abstract: In the process of developing an embedded system,the users want a log to monitor ,record the system and find out the errors when the system corrupt.The paper provides the readers with the general developing methods,data structure and the operation in the background.

Key words: Embedded System; log; Data Structure

在嵌入式系統(tǒng)中,日志文件既可以用來監(jiān)視設(shè)備運行狀況,也可以用來進行查找錯誤。很多情況下,我們無法判斷是什么造成系統(tǒng)出了問題,更無法準(zhǔn)確說出是什么時間出了問題。因為很多問題如引腳彎曲所造成的情況往往是間歇性的甚至根本無法再重復(fù)出現(xiàn)的,如果有了日志文件,用戶就可以通過它的成功/失敗率來確定情況,同時也有一份將所有的問題都詳細(xì)記錄下來的報告,對于那些很難隔離的錯誤也可以詳細(xì)的記錄下來方便識別。但由于各種原因,它的開發(fā)和應(yīng)用并不普及。本文介紹了怎樣在一個嵌入式系統(tǒng)中開發(fā)成本較低的日志文件系統(tǒng)。

1 硬件要求

對于一個由中央微處理器控制的設(shè)備來說,添加了日志文件就可以在半導(dǎo)體內(nèi)存記錄中保存時間、日期和關(guān)鍵事件的運行結(jié)果。通過它,用戶就能將特定事件記錄下來,以便于監(jiān)控、改進今后的設(shè)備運行。本方法的硬件成本很低,只需要增加一個用來保存日志文件的EEPROM和一個實時時鐘。由于這很容易實現(xiàn),本文不做介紹。

2 軟件實現(xiàn)

我們的方法是將日志信息記錄在日志文件中,在EEPROM中保存。一旦一個事件被記錄下來后,相應(yīng)事件的代碼就會調(diào)用日志事件函數(shù),這個函數(shù)會與實時時鐘的信息一起將相應(yīng)的信息存儲到EEPROM中。由于EEPROM的空間有限,當(dāng)空間滿了后,最老的數(shù)據(jù)會被最新的數(shù)據(jù)代替。

對于日志記錄,我們將它們劃分為4個級別,分別是無、低級、中級、高級。日志文件可以在同一時間保存不同級別的日志信息。日志信息的級別越高,在EEPROM中所占空間越大,保留的記錄條數(shù)就越少,同時也要花更多的時間來寫入。

設(shè)置不同的日志級別是為了方便用戶對任一事件改變記錄的數(shù)目。例如,在使用設(shè)備過程中,通常其級別是處于低級的狀態(tài),這時用戶可以得一些諸如設(shè)備何時啟動、何時關(guān)閉、總體成功/失敗率等較為概略性的信息。而當(dāng)用戶希望監(jiān)控某一特定socket的成功/失敗率信息時,就需將級別提升為中級了。而當(dāng)一個錯誤反復(fù)出現(xiàn)卻很難確定時,可將級別調(diào)整至高級,這時日志文件會將相應(yīng)socket的信息、有關(guān)的地址和數(shù)據(jù)都記錄下來。

下面列出的是對同一事件的不同記錄級別的信息進行記錄的代碼:

/* 將日志數(shù)據(jù)從EEPROM復(fù)制到RAM中進行更新*/

uint get_log(Log_File_*log_ptr, ushort log_rec_num){

Log_File *find_ptr;

if ((find_ptr =find_log_rec(log_rec_num)) == NULL) return FAIL;

memcpy(log_ptr,find_ptr,find_ptr-<;>log_low.rec_len);

return PASS;

}

一旦一個事件發(fā)生,它會被記錄到相應(yīng)級別的數(shù)據(jù)末尾。由于事件發(fā)生所花費的時間通常是在整個事件發(fā)生后才結(jié)束,所以這不會降低相系統(tǒng)對相應(yīng)事件的反應(yīng)時間。

3 日志文件的數(shù)據(jù)結(jié)構(gòu)

日志文件的數(shù)據(jù)結(jié)構(gòu)可根據(jù)自己系統(tǒng)的具體情況來決定,這里列出我們系統(tǒng)的數(shù)據(jù)結(jié)構(gòu):

typedef struct { /* 低級事件的日志記錄數(shù)據(jù)結(jié)構(gòu) */

ushort rec_num;

uchar event_num;

uchar level;

uchar version;

uchar rec_len;

; /* 設(shè)備專用的數(shù)據(jù)塊 */

uchar rec_chksum_med;

uchar rec_chksum_high;

uchar rec_chksum_low;

} Log_Base;

typedef struct{ /* 中級事件的數(shù)據(jù)結(jié)構(gòu) */

; /* 設(shè)備專用的數(shù)據(jù)塊 */

} Log_Med_Detail;

typedef struct{ /* 高級事件的數(shù)據(jù)結(jié)構(gòu) */

; /* 設(shè)備的專用數(shù)據(jù)塊 */

} Log_High_Detail;

typedef struct { /* 日志文件的記錄定義 */

Log_Base log_low;

Log_Med_Detail log_med;

Log_High_Detail log_high;

} Log_File;

我們列出高級事件的記錄,讀讀者可根據(jù)下面的數(shù)據(jù)得出相應(yīng)的數(shù)據(jù)結(jié)構(gòu)來:

Low PV:VERIFY P:5 F:2

TP:5 TF:2 IMI#:003C

SS:1 DW:8 CRC:FOB8

MOD:3 AD:1

Passed Socket(s): 1 3 5 6 7

Failed Socket: 2 Err:Verify

Adx:0 Dev:00 RAM:FF

Failed Socket: 4 Err:Verify

Adx:12 Dev:FA RAM:FF\&]

需要注意的是日志文件的記錄還應(yīng)包含一個校驗字節(jié)和一個狀態(tài)字節(jié),這樣就可以檢查并標(biāo)記出受損的記錄。另外日志文件的不同級別都被設(shè)置成了相應(yīng)的固定大小的塊,這樣在檢查日志文件錯誤或恢復(fù)受損數(shù)據(jù)時比采用動態(tài)大小的塊要容易些。

最后用戶還需要通過鍵盤或終端做如下工作:清理日志文件或刪除損壞的記錄、將日志文件導(dǎo)入計算機、抹掉整個日志文件、讀日志文件記錄、選擇所需的日志事件、放棄選擇所需的日志事件、設(shè)置日志文件層次等等。

參考文獻(xiàn):

[1] 彭蔓蔓,李浪,徐署華.嵌入式系統(tǒng)導(dǎo)論[M].北京:人民郵電出版社,2008.

[2] 懷特.嵌入式系統(tǒng)設(shè)計與實踐[M].余水清,譯.北京:機械工業(yè)出版社,2013.

猜你喜歡
嵌入式系統(tǒng)數(shù)據(jù)結(jié)構(gòu)日志
一名老黨員的工作日志
華人時刊(2021年13期)2021-11-27 09:19:02
扶貧日志
心聲歌刊(2020年4期)2020-09-07 06:37:14
游學(xué)日志
基于物聯(lián)網(wǎng)項目驅(qū)動的嵌入式系統(tǒng)教學(xué)改革的研究與實踐
嵌入式系統(tǒng)課程“中斷、異常與事件”教學(xué)實踐及啟示
計算機教育(2016年7期)2016-11-10 08:31:34
面向?qū)嵺`創(chuàng)新人才培養(yǎng)的嵌入式系統(tǒng)教學(xué)研究
計算機教育(2016年7期)2016-11-10 08:12:11
在DiskOnChip上構(gòu)建VxWorks系統(tǒng)開發(fā)環(huán)境
“翻轉(zhuǎn)課堂”教學(xué)模式的探討——以《數(shù)據(jù)結(jié)構(gòu)》課程教學(xué)為例
高職高專數(shù)據(jù)結(jié)構(gòu)教學(xué)改革探討
中國市場(2016年45期)2016-05-17 05:15:48
TRIZ理論在“數(shù)據(jù)結(jié)構(gòu)”多媒體教學(xué)中的應(yīng)用
黄平县| 宜兰县| 远安县| 彭山县| 凭祥市| 厦门市| 锡林郭勒盟| 万年县| 仪征市| 霍州市| 静宁县| 淮阳县| 临泽县| 昌都县| 长葛市| 禄丰县| 太原市| 广丰县| 兴仁县| 噶尔县| 仪征市| 岳阳县| 四会市| 左贡县| 信宜市| 卫辉市| 东山县| 海盐县| 德州市| 衢州市| 普洱| 德江县| 长沙县| 土默特左旗| 彩票| 定远县| 革吉县| 沁水县| 宁波市| 定陶县| 修文县|