基于C环境的面向间隙的单片机日志系统开发思想
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
China Science & Technology Overview
信息技术与应用
基于C 环境的面向间隙的单片机日志系统开发思想
梁雪涛李升建张延良薛雷宋业栋
(潍柴动力股份有限公司,山东潍坊261061)
摘 要:本文详细介绍了一种系统编纂设备日志的方法。
通过面向间隙的思想,优化软件结构,简便有效的创建一种基于C 语言
的日志系统。
以实现软件状态的监测,切实有效的提高故障排查效率,为软件开发和维护提供一种高效的开发方案。
关键词:面向间隙;单片机;编程思维及方法
中图分类号:TP311.52 文献标识码:A 文章编号:1671-2064(2020)13-0047-02
0引言
近年来,随着物联网产业的发展和相关政策的落地,
市场对于简单可靠的单片机数采设备需求量越来越高。
而 目前对于这种小型硬件,Linux 系统占据着无可置疑的统 治地位。
但是对于更小的硬件,以成本经济性考虑并未植 入Linux 系统。
在缺少成型操作系统支持的情况下,日
志、任务调度等重要功能的缺失使得简单单片机程序设计
思想已无法满足日益增长的功能需求。
而在开发过程中, 日志系统在排查bug 和程序检测方面均具有重要意义。
本文立足于朴素单片机环境,提出一种简单有效的日志系 统建立方法和编程思想,为此细分领域的程序开发提供一 种切实有效的开发方案。
1面向间隙的基本理念
众所周知,目前的大多数程序,其结构大抵按照OSI
七层模型构建叫 如图1所示。
应用层 表示层 会话层 传输层 网络层
数据链路层物理层
图1 OSI 七层模型
按照此模型,各代码层之间通过接口交互,实现彼此
间的数据交换和功能实现。
如应用层仅会调用底层的功能 接口,并由程序员手动对接口的返回结果进行校验0。
在 此过程中的一切处理皆因调用位置不同而异,调用十次即
需重写十次校验结果和校验后的处理代码。
一方面难以生 成系统的日志和错误警报,另一方面极易缺失结果校验,
造成后期bug 排查困难,耗时长,效率低。
在JavaSpringBoot 1'1中,存在人为构建切面作为日
志监控点的思想。
而面向间隙的思想与其类似,只是监控 点无需人为特意搭建,而是直接监控接口。
在各代码层发
生交互的间隙内组织监控代码,实现对接口调用的实时监 控,并自主生成相应日志,完成对接口反馈的校验和错误
报警,最终实现对软件运行状况的实时监控。
2间隙层的结构
对于间隙层,其主体结构可分为两个部分:包装层、 引用层。
2.1包装层
包装层主要负责对结构进行额外包装,包装内容包括 接口反馈校验、日志主体代码及其他额外内容。
2.1.1接口反馈校验
此部分即为对接口返回值的第一次校验,如接口反馈 失败,应向日志内写入报错相关信息。
反馈成功则应视其
重要性生成相关日志信息。
2.1.2日志主体代码
此部分负责记录接口引用位置、引用时间、引用者、 接口反馈结果等日志基本信息。
2.1.3其他额外内容
此部分可提供空函数指针,用于后期视需求拓展其他 代码,如回调函数。
2.1.4包装层的具体示例
下面以GenSend 接口为例:
此接口的具体信息如下:
名称:bool GenSend (u8* Dat, ul6 Datlen)功能:发送数据
输入:Dat 发送数据的地址
Datlen 发送数据的长度
返回:ture 发送成功
false 发送失败
此接口可被包装为一个新接口 GenSendPacked
新接口的具体信息如下:
名称:bool GenSendPacked(u8* Dat, ul6 Datlen,
u8 Sign)
功能:发送数据,生成相关日志输入:Dat 发送数据的地址
收稿日期:2020-06-03
作者简介:梁雪涛(1996—),男,山东青岛人,本科,软件工程师,研究方向:网联终端开发。
2020年7月上第13期总第337期
47
信息技术与应用
\ China Science & Technology Overview
Datlen 发送数据的长度Sign 调用标志符
返回:true 调用成功
false 调用失败
具体代码如下:
bool GenSendPacked(u8* Dat,ul6 Datlen,u8
Sign,void(*fp) (void))
{
〃日志主体部分
LogWrInfor(GENSEND,Sign);
〃可扩展函数
fp();
if (GenSend(Dat, Datlen))
{//返回值校验
LogWrError(GENSEND); return false;
}
else return true;}
在GenSendPack 接口中,日志主体部分LogWrlnfor 函数引用了 GENSEND 宏和Sign 变量来描述此接口的引 用状况。
GENSEND 宏用于描述接口 ID,以在日志中说
明是哪一个接口被引用。
Sign 变量则用于描述引用位置, 在日志中描述其在程序的哪个位置被引用。
fp ()为空置的函数指针,用于之后的扩展内容。
LogWrError 的功能为向日志中写入错误信息,使用 其引用的接口 ID 宏(此例中即为GENSEND)描述错误 状态。
如上包装后,每次底层接口被引用时则会在日志中写 入引用记录和可能存在的报错信息。
但包装层无法解决
另一问题:每次对接口的引用都必须校验结果。
为了解 决此问题,本文引入了面向间隙的第二个主要部分——引 用层。
2.2引用层
引用层主要负责对接口进行宏包装,使得后续编程引 用此接口时无需再进行繁琐的校验过程。
所谓宏包装,是指利用宏可定义变量的句法特点,将 接口与其校验过程定义为宏。
依旧以GenSend 接口为例,对此接口包装如下:
#define D_GenSendPacked(a ;b,c J 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结语
在朴素单片机系统这一领域内,经济性和维护简易度 被高度重视,因此日志系统的开发无疑具有重要的意义。
目前的日志系统,搭建过程能够借鉴的编程模板极多且具 有大量的成型框架,比如I41Java 的SpringBoot 、Linux
自带的成型日志系统或151其他基于串口、同AETA 的日志 系统。
但对于朴素单片机终端而言,高级语言的系统移植 难度极大,而Linux 的内核裁剪则相对复杂繁琐,且对
相关工程师的能力要求较高,较高的人力成本也拉高了产
品成本。
这种背景下,一种简单有效、易于维护的日志系
统亟需被开发出来用于朴素单片机远程终端市场。
而如本
文所述,面向间隙的相关代码块与接口是一种并生关系。
接口被引用时相关监控代码就会被触发。
基于此,基本思 想构建出的日志系统结构简单,本身与上层应用软件伴 生,支持灵活的扩展及后期维护。
⑴而实际上在软件中,
函数和函数间亦可以认为是一个个相互隔离的面,函数间
同样存在间隙。
因此,面向间隙也可以和函数绑定,实现
关键函数的数据挛生。
以此搭建的程序在开发和维护尚对
比传统程序均存在效率和成本优势,可以为物联网系统开 发、高数据量应用(如VR 、AR 、智能驾驶、城际智能资
源调度等)的底层搭建提供广阔的前景,并能为大规模铺
设基础智能终端减少大量成本,推动物联网领域尽快走进 智能网联时代。
参考文献
[1]涂小琴.C 语言结构化编程教学案例过程设计[J].现代计算机
.....下转第103页48
2020年7月上第13期总第337
期
China Science & Technology Overview
工程设计施工与管理
设实施等多方面,因此,开展工程造价影响因素研究具
有重要意义。
参考文献
[1] 李蓉.试探影响工程造价的主要因素与控制[J].中国建材科 技,2020,29(01):129+131.
[2] 李军峰.影响工程造价的主要因素及合理控制方法[J].建材与 装饰,2020(03):151-152.
[3] 申海波.影响工程造价的主要因素及合理控制方法[J].门 窗,2019(22):75.
[4] 肖启艳,李国太.工程量清单计价模式下的工程造价风险管理
[J].南方农机,2018(10):177.
[5] 雍霞.工程造价影响因素分析及降低工程造价措施[J].中国高
新区,2019(05):251-252.
[6] 邱静.浅析工程造价影响因素分析及降低工程造价措施[J].中 国科技投资,2017(34):61.
Research on Influencing Factors and Effective Control of Project Cost
XUEYuqin
(Traffic Engineering Rating Station of Henan Province, Zhengzhou Henan 450052)
Abstract:The construction process of engineering projects is a long-term, large-scale production and consumption
process. Project cost runs through the entire process of construction projects. This article first explains the characteristics of construction project cost, focuses on the factors affecting the cost of decision-making, design, construction and
completion, and finally puts forward effective control countermeasures, hoping to improve Existing cost management
methods improve the level of cost management.
Key words:project cost;influencing factorsjeffective control
上接第48页
传业版),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.
Gap Oriented Single Chip Microcomputer Log Development Idea Based on C Environment
LIANG Xuetao,LI Shengjian,ZHANG Yanliang,XUE Lei,SONG Yedong
(Weichai Power Co.,Ltd., Weifang Shandong 261061)
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年7月上第13期总第337期
103。