999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于C環境的面向間隙的單片機日志系統開發思想

2020-12-11 09:14:03梁雪濤李升建張延良薛雷宋業棟
中國科技縱橫 2020年13期
關鍵詞:單片機

梁雪濤 李升建 張延良 薛雷 宋業棟

摘 要:本文詳細介紹了一種系統編纂設備日志的方法。通過面向間隙的思想,優化軟件結構,簡便有效的創建一種基于C語言的日志系統。以實現軟件狀態的監測,切實有效的提高故障排查效率,為軟件開發和維護提供一種高效的開發方案。

關鍵詞:面向間隙;單片機;編程思維及方法

中圖分類號:TP311.52 文獻標識碼:A 文章編號:1671-2064(2020)13-0047-02

0引言

近年來,隨著物聯網產業的發展和相關政策的落地,市場對于簡單可靠的單片機數采設備需求量越來越高。而目前對于這種小型硬件,Linux系統占據著無可置疑的統治地位。但是對于更小的硬件,以成本經濟性考慮并未植入Linux系統。在缺少成型操作系統支持的情況下,日志、任務調度等重要功能的缺失使得簡單單片機程序設計思想已無法滿足日益增長的功能需求。而在開發過程中,日志系統在排查bug和程序檢測方面均具有重要意義。本文立足于樸素單片機環境,提出一種簡單有效的日志系統建立方法和編程思想,為此細分領域的程序開發提供一種切實有效的開發方案。

1面向間隙的基本理念

眾所周知,目前的大多數程序,其結構大抵按照OSI七層模型構建[1],如圖1所示。

按照此模型,各代碼層之間通過接口交互,實現彼此間的數據交換和功能實現。如應用層僅會調用底層的功能接口,并由程序員手動對接口的返回結果進行校驗[2]。在此過程中的一切處理皆因調用位置不同而異,調用十次即需重寫十次校驗結果和校驗后的處理代碼。一方面難以生成系統的日志和錯誤警報,另一方面極易缺失結果校驗,造成后期bug排查困難,耗時長,效率低。

在JavaSpringBoot[3]中,存在人為構建切面作為日志監控點的思想。而面向間隙的思想與其類似,只是監控點無需人為特意搭建,而是直接監控接口。在各代碼層發生交互的間隙內組織監控代碼,實現對接口調用的實時監控,并自主生成相應日志,完成對接口反饋的校驗和錯誤報警,最終實現對軟件運行狀況的實時監控。

2間隙層的結構

對于間隙層,其主體結構可分為兩個部分:包裝層、引用層。

2.1包裝層

包裝層主要負責對結構進行額外包裝,包裝內容包括接口反饋校驗、日志主體代碼及其他額外內容。

2.1.1接口反饋校驗

此部分即為對接口返回值的第一次校驗,如接口反饋失敗,應向日志內寫入報錯相關信息。反饋成功則應視其重要性生成相關日志信息。

2.1.2日志主體代碼

此部分負責記錄接口引用位置、引用時間、引用者、接口反饋結果等日志基本信息。

2.1.3其他額外內容

此部分可提供空函數指針,用于后期視需求拓展其他代碼,如回調函數。

2.1.4包裝層的具體示例

下面以GenSend接口為例:

此接口的具體信息如下:

名稱:bool GenSend(u8* Dat,u16 Datlen)

功能:發送數據

輸入: Dat發送數據的地址

Datlen發送數據的長度

返回: ture發送成功

false發送失敗

此接口可被包裝為一個新接口GenSendPacked

新接口的具體信息如下:

名稱:bool GenSendPacked(u8* Dat,u16 Datlen,u8 Sign)

功能:發送數據,生成相關日志

輸入: Dat發送數據的地址

Datlen發送數據的長度

Sign調用標志符

返回: true調用成功

false調用失敗

具體代碼如下:

bool GenSendPacked(u8* Dat,u16 Datlen,u8

Sign,void(*fp)(void))

{

//日志主體部分

LogWrInfor(GENSEND,Sign);

//可擴展函數

fp();

if(GenSend(Dat,Datlen))

{//返回值校驗

LogWrError(GENSEND);

return false;

}

else return true;

}

在GenSendPack接口中,日志主體部分LogWrInfor函數引用了GENSEND宏和Sign變量來描述此接口的引用狀況。GENSEND宏用于描述接口ID,以在日志中說明是哪一個接口被引用。Sign變量則用于描述引用位置,在日志中描述其在程序的哪個位置被引用。

fp()為空置的函數指針,用于之后的擴展內容。

LogWrError的功能為向日志中寫入錯誤信息,使用其引用的接口ID宏(此例中即為GENSEND)描述錯誤狀態。

如上包裝后,每次底層接口被引用時則會在日志中寫入引用記錄和可能存在的報錯信息。但包裝層無法解決另一問題:每次對接口的引用都必須校驗結果。為了解決此問題,本文引入了面向間隙的第二個主要部分——引用層。

2.2 引用層

引用層主要負責對接口進行宏包裝,使得后續編程引用此接口時無需再進行繁瑣的校驗過程。

所謂宏包裝,是指利用宏可定義變量的句法特點,將接口與其校驗過程定義為宏。

依舊以GenSend接口為例,對此接口包裝如下:

#define D_GenSendPacked(a,b,c,d)? if(GenSend-Packed(a,b,c,d)) return;

在添加了引用層之后,僅需使用D_ GenSendPacked

()宏即可直接調用GenSend接口,無需進行其他多余操作。

3日志系統基本結構

使用面向間隙思維所創建的日志系統,其基本思想為使用接口ID和引用者ID來描述引用者、被引用者,并使用LogError函數來描述引用結果。同時如需必要,亦可記錄接口中流通的數據體詳細信息。

日志系統的基本結構可分為以下幾部分:

3.1數據輸入部分

面向間隙的相關監控代碼塊。此部分負責輸入被引用接口的接口ID、引用者ID、接口中流通的數據及其他需要記錄入日志的信息。

3.2存儲部分

此部分可靈活使用Flash、EMCC、SD卡等物理載體,文件、Flash扇區存儲方法進行存儲,且應在存儲滿后覆蓋起始部分。

3.3輸出部分

此部分可視具體需求實現實時輸出、按條件導出等輸出模式。

4架構設計及后期移植

在七層模型中插入間隙層后,日志系統和接口校驗就不再是一個需要在代碼架構設計階段需要訴諸精力的部分。且間隙層在后續的平臺移植過程中,天然具有的低耦合性相比其他插入式日志系統具有較大優勢。

5結語

在樸素單片機系統這一領域內,經濟性和維護簡易度被高度重視,因此日志系統的開發無疑具有重要的意義。目前的日志系統,搭建過程能夠借鑒的編程模板極多且具有大量的成型框架,比如[4]Java的SpringBoot、Linux自帶的成型日志系統或[5]其他基于串口、[6]AETA的日志系統。但對于樸素單片機終端而言,高級語言的系統移植難度極大,而Linux的內核裁剪則相對復雜繁瑣,且對相關工程師的能力要求較高,較高的人力成本也拉高了產品成本。這種背景下,一種簡單有效、易于維護的日志系統亟需被開發出來用于樸素單片機遠程終端市場。而如本文所述,面向間隙的相關代碼塊與接口是一種并生關系。接口被引用時相關監控代碼就會被觸發。基于此,基本思想構建出的日志系統結構簡單,本身與上層應用軟件伴生,支持靈活的擴展及后期維護。[7]而實際上在軟件中,函數和函數間亦可以認為是一個個相互隔離的面,函數間同樣存在間隙。因此,面向間隙也可以和函數綁定,實現關鍵函數的數據孿生。以此搭建的程序在開發和維護尚對比傳統程序均存在效率和成本優勢,可以為物聯網系統開發、高數據量應用(如VR、AR、智能駕駛、城際智能資源調度等)的底層搭建提供廣闊的前景,并能為大規模鋪設基礎智能終端減少大量成本,推動物聯網領域盡快走進智能網聯時代。

參考文獻

[1] 涂小琴.C語言結構化編程教學案例過程設計[J].現代計算機(專業版),2017(30):72-76.

[2] 叢剛.微型機BASIC語言結構化編程方法探討[J].成都電訊工程學院學報,1988(s2):191-192.

[3] 宋佳,范偉,黃鵬.基于Spring的Java平臺程序架構研究[J].計算機與網絡,2016,42(22):68-71.

[4] 王童童.面向切面的軟件容錯技術研究[D].西安:西安電子科技大學,2015.

[5] 李亞洲.基于串口通信的單片機日志系統設計[J].工業控制計算機,2009,22(11):44-45.

[6] 周康生,張興,王新安,等.一種適用于AETA的日志系統的設計與實現[J].計算機技術與發展,2019,29(12):8-13.

[7] 王興念,吳六一,李立生,等.基于面向切面編程的跨區傳輸跟蹤與測試技術應用[C].中國電力科學研究院有限公司、國網電投(北京)科技中心、《電信科學》雜志社.第三屆智能電網會議論文集.中國電力科學研究院有限公司、國網電投(北京)科技中心、《電信科學》雜志社:國網電投(北京)科技中心,2018:118-124.

Abstract:This paper introduces a method of compiling equipment log system in detail. Through the idea of Facing-gap, the software structure is optimized, and a log system based on C language is created simply and effectively to realize the detection of software status, effectively improve the efficiency of troubleshooting, and provide an efficient development scheme for software development and maintenance.

Key words:facing-gap;singlechip;programming thinking and methods

收稿日期:2020-06-03

作者簡介:梁雪濤(1996—),男,山東青島人,本科,軟件工程師,研究方向:網聯終端開發。

猜你喜歡
單片機
基于單片機的SPWM控制逆變器的設計與實現
電子制作(2019年13期)2020-01-14 03:15:28
基于單片機的層次漸變暖燈的研究
電子制作(2019年15期)2019-08-27 01:12:10
基于單片機的多功能智能插排
電子制作(2019年11期)2019-07-04 00:34:48
基于單片機的便捷式LCF測量儀
電子制作(2019年9期)2019-05-30 09:42:02
小議PLC與單片機之間的串行通信及應用
電子制作(2018年12期)2018-08-01 00:48:04
MSP430單片機在仿真中要注意的幾點問題
電子制作(2017年9期)2017-04-17 03:00:53
基于單片機的平衡控制系統設計
電子制作(2017年19期)2017-02-02 07:08:27
基于單片機的三維LED點陣設計
電子制作(2016年21期)2016-05-17 03:52:51
Microchip推出兩個全新PIC單片機系列
基于Proteus的單片機控制系統的仿真設計
主站蜘蛛池模板: 成人一级黄色毛片| www亚洲天堂| 国内老司机精品视频在线播出| 永久成人无码激情视频免费| 97青草最新免费精品视频| A级毛片高清免费视频就| 88av在线播放| 啪啪免费视频一区二区| 欧美中文一区| 午夜无码一区二区三区在线app| 亚洲综合中文字幕国产精品欧美| 久久99精品久久久久纯品| 欧美a级在线| 在线精品视频成人网| 欧美国产综合色视频| 精品人妻一区无码视频| 最近最新中文字幕在线第一页| 欧洲高清无码在线| 99久久精品免费观看国产| 成人91在线| 国产91视频观看| 日本亚洲成高清一区二区三区| 久久国产精品影院| 久久综合色视频| 国产正在播放| 久久青草视频| 在线观看国产精品第一区免费 | 国产日韩AV高潮在线| 视频二区中文无码| 国产99视频精品免费观看9e| 国产精品视频猛进猛出| 综合色在线| 91麻豆国产视频| 91久久精品日日躁夜夜躁欧美| 欧美日韩导航| 久久国产精品娇妻素人| 人妻无码AⅤ中文字| 亚洲国产精品成人久久综合影院| 欧美国产在线一区| 成人午夜免费视频| 超清人妻系列无码专区| 亚洲无码精彩视频在线观看| 国产成人精品男人的天堂下载| 亚洲一区毛片| 99热免费在线| 91精品综合| 国产剧情一区二区| 无遮挡国产高潮视频免费观看| 欧美一区二区福利视频| 国产成人综合在线视频| 国产精品刺激对白在线| 日韩区欧美国产区在线观看| 亚洲国模精品一区| 日本黄色a视频| 九色91在线视频| 亚洲区第一页| 久久成人18免费| 99一级毛片| 亚洲午夜天堂| 国产精品3p视频| 国产欧美日韩免费| 亚洲综合片| 欧美区国产区| 在线观看国产小视频| 日本国产精品一区久久久| 伊人国产无码高清视频| 久久精品国产国语对白| 免费一极毛片| 国产午夜福利在线小视频| 免费中文字幕一级毛片| 又大又硬又爽免费视频| 夜夜操天天摸| 国产青榴视频| 亚洲AⅤ综合在线欧美一区| 国产啪在线| 国产青榴视频| 亚洲精品日产AⅤ| 国产午夜人做人免费视频| 无码免费的亚洲视频| 2021国产乱人伦在线播放| 伊人久久久久久久| 无码视频国产精品一区二区|