一种在单片机系统中高效存储日志文件的方法技术方案

技术编号:24995722 阅读:18 留言:0更新日期:2020-07-24 17:58
本发明专利技术提供一种在单片机系统中高效存储日志文件的方法,属于日志存储技术领域,包括如下步骤:S1:预处理;S2:预分配连续的文件存储区;S3:初始化循环FIFO缓冲器;S4:对数据进行缩放并存入循环FIFO缓冲器;S5:对齐日志数据到扇区大小的整数倍N;若N≥预设值,则进入步骤S6,否则返回步骤S4;S6:通过迭代方式进行多扇区日志文件存储。该发明专利技术提供的方法能最小化大量、频繁的日志记录和文件操作对系统内其它任务的影响(如任务执行频率、任务执行速度),有利于系统正确、精准地完成既定任务。

【技术实现步骤摘要】
一种在单片机系统中高效存储日志文件的方法
本专利技术涉及单片机系统术领域,尤其涉及一种在单片机系统中高效存储日志文件的方法。
技术介绍
在某些单片机系统应用中,为了便于事后观察系统状态、分析系统性能或排查系统故障,实时记录一些系统数据(如参数值、状态量、指令量等)是必要的,这些数据通常称作日志。一般来说,结合可移动存储介质及文件系统,以文件方式进行日志记录是最优选择,最有利于事后在上位机中利用高级分析软件进行数据分析。然而,对于绝大多数单片机系统尤其是对于需要执行高频率、高实时性任务的单片机系统来说,大量、频繁的日志记录和文件操作会给系统带来繁重的处理负荷和I/O负荷,导致系统运行缓慢甚至崩溃,造成难以估量的后果。如中国专利技术专利CN109002547A公开了一种日志文件存储方法、移动终端及计算机可读存储介质,该方法包括:依据初始配置分区表文件依次下载对应的已编译分区镜像至存储空间,以形成各分区,并生成分区挂载脚本,其中,形成的各分区包括一日志存储分区;开机启动系统时,解析所述分区挂载脚本,获取日志存储分区的分区信息,并按照所述分区信息挂载所述日志存储分区;当系统启动完成后,实时读取各预设节点处的日志文件,并将读取到的日志文件存储至所述日志存储分区中。本专利技术能够有效的保存测试过程中的日志文件,降低问题分析难度,提高测试效率。再如中国专利技术专利CN109002547A公开了一种日志文件存储方法、移动终端及计算机可读存储介质,该方法包括:依据初始配置分区表文件依次下载对应的已编译分区镜像至存储空间,以形成各分区,并生成分区挂载脚本,其中,形成的各分区包括一日志存储分区;开机启动系统时,解析所述分区挂载脚本,获取日志存储分区的分区信息,并按照所述分区信息挂载所述日志存储分区;当系统启动完成后,实时读取各预设节点处的日志文件,并将读取到的日志文件存储至所述日志存储分区中。现有技术在性能相对较低的单片机系统使用与高级计算机和高性能嵌入式系统类似的文件操作方法来进行日志文件存储,即实时对存储介质中的文件系统和存储区进行读写、修改和分配,然后通过大幅减少数据量、降低记录频率来避免过多的文件操作。现有技术流程图如图1所示。现有技术至少存在以下问题:1、现有技术涉及文件的存储区实时动态分配,会在系统实时运行中产生大量存储区读写操作,效率低下。以常见的FAT32文件系统为例,文件的存储区实时动态分配流程图如图2所示,可以看出,流程中存在不定数量的扇区读写操作,会大大增加系统的处理负荷和I/O负荷,影响其它任务的执行。2、现有技术通过大幅减少数据量、降低记录频率来避免过多的文件操作,不可避免地会丢失大量数据。这不利于事后对系统进行完整的分析,甚至如果丢弃的是一些关键数据,将会使系统分析无法进行或得出错误结论。
技术实现思路
为解决现有技术中存在的技术问题,本专利技术提供了一种在单片机系统中高效存储日志文件的方法,该方法采用了循环FIFO缓冲器技术,在单片机系统的资源不足或存储器繁忙时先将日志数据存入缓冲器中,待单片机系统的资源充足且存储器空闲再将日志数据存储到存储器中。不丢失任何数据,可满足超大数据量的日志文件存储需求,有利于事后在上位机高级分析软件中对系统进行完整、全面、细致的分析。本专利技术提供了一种在单片机系统中高效存储日志文件的方法,包括如下步骤:S1:预处理:预先计算所需文件大小和所需循环FIFO大小;S2:预分配连续的文件存储区;根据步骤S1预处理得到的所需文件大小在存储器中寻找一块连续的、大小等于所需文件大小的存储区,分配给日志文件,并得到文件起始扇区S和结束扇区E;S3:初始化循环FIFO缓冲器;根据步骤S1预处理得到的所需循环FIFO大小,初始化一块足够大的内存作为循环FIFO缓冲器;S4:对数据进行合理缩放并存入循环FIFO缓冲器;若日志数据是浮点数,则对数据进行合理缩放,并将浮点型数据转化为定点型数据,再存储到循环FIFO缓冲器中;若日志数据是定点数,则直接存储到循环FIFO缓冲器中;S5:对齐日志数据到扇区大小的整数倍N;若N≥预设值,则进入步骤S6,否则返回步骤S4;S6:通过迭代方式进行多扇区日志文件存储。优选地,步骤S1中所需文件大小根据应用场景和日志记录需求计算;计算公式如下:所需文件大小=连续工作时长×主循环频率×每个循环记录的数据量步骤S1中所需循环FIFO大小根据日志数据量、单片机性能和存储器性能计算;计算公式如下:所需循环FIFO大小=最大写入时间×主循环频率×每个循环记录的数据量。优选地,步骤S5中数据缩放的依据为单位、精度和数据范围。优选地,步骤S6中若循环FIFO缓冲器中的数据不足以对齐到预设的扇区数N时,不执行日志存储操作,继续往循环FIFO缓冲器中预存数据;直到循环FIFO缓冲区中的数据对齐到预设的扇区数N时,执行多扇区日志存储操作。优选地,步骤S4中,步骤S4中,若单片机系统的资源不足或存储器繁忙时,将日志数据预存在循环FIFO缓冲器中;若单片机系统的资源充足且存储器空闲时,循环FIFO缓冲器中的日志数据一次性读取出来进行存储。优选地,步骤S5中根据以下公式将日志数据对齐到扇区大小的整数倍:其中,[]为取整函数。优选地,步骤S6中通过迭代方式进行多扇区日志文件存储具体方式为:从文件起始扇区S开始存储,设每次存储数据量为N个扇区,根据以下公式计算:S=S+N即每一次存储从上一次存储起始扇区的后续N个扇区开始;如果S>E,说明预处理得到的文件大小不足以存储一次任务产生的日志文件,需要重新进行合理的预处理,返回步骤S1;若S≦E,则重复步骤S4至步骤S6。优选地,步骤S1和步骤S2之间还包括初始化外部存储器、挂载外部存储器文件系统和打开/创建日志文件。与现有技术相对比,本专利技术的有益效果如下:(1)本专利技术通过改变文件存储区分配方式的设计思想将现有技术中的实时动态分配转换为本专利技术提供的根据预处理结果静态分配方式,并采用直接对文件分配到的扇区进行写操作的方式进行日志文件存储,大大减少了单片机系统工作中的实时扇区读写操作,进而大大减少日志文件存储过程对单片机计算资源和I/O资源的抢占。所以可保证其它重要的实时任务能分配到充足的单片机计算资源和I/O资源,确保系统内的实时任务能在不降低执行频率和执行速度的情况下正确、精准地执行。(2)本专利技术采用了循环FIFO缓冲器技术,在单片机系统的资源不足或存储器繁忙时先将日志数据存入缓冲器中,待单片机系统的资源充足且存储器空闲再将日志数据存储到存储器中。不丢失任何数据,可满足超大数据量的日志文件存储需求,有利于事后在上位机高级分析软件中对系统进行完整、全面、细致的分析。(3)本专利技术充分利用存储器本身的特性,将日志数据对齐到存储器扇区的整数倍,可大大提高存储器的存储效率,进而提高单片机系统的日志文件存储效率本文档来自技高网
...

【技术保护点】
1.一种在单片机系统中高效存储日志文件的方法,其特征在于,包括如下步骤:/nS1:预处理:预先计算所需文件大小和所需循环FIFO大小;/nS2:预分配连续的文件存储区;/n根据步骤S1预处理得到的所需文件大小在存储器中寻找一块连续的、大小等于所需文件大小的存储区,分配给日志文件,并得到文件起始扇区S和结束扇区E;/nS3:初始化循环FIFO缓冲器;/n根据步骤S1预处理得到的所需循环FIFO大小,初始化一块内存作为循环FIFO缓冲器;/nS4:对数据进行合理缩放并存入循环FIFO缓冲器;/n若日志数据是浮点数,则对数据进行缩放,并将浮点型数据转化为定点型数据,再存储到循环FIFO缓冲器中;若日志数据是定点数,则直接存储到循环FIFO缓冲器中;/nS5:对齐日志数据到扇区大小的整数倍N;/n若N≥预设值,则进入步骤S6,否则返回步骤S4;/nS6:通过迭代方式进行多扇区日志文件存储。/n

【技术特征摘要】
1.一种在单片机系统中高效存储日志文件的方法,其特征在于,包括如下步骤:
S1:预处理:预先计算所需文件大小和所需循环FIFO大小;
S2:预分配连续的文件存储区;
根据步骤S1预处理得到的所需文件大小在存储器中寻找一块连续的、大小等于所需文件大小的存储区,分配给日志文件,并得到文件起始扇区S和结束扇区E;
S3:初始化循环FIFO缓冲器;
根据步骤S1预处理得到的所需循环FIFO大小,初始化一块内存作为循环FIFO缓冲器;
S4:对数据进行合理缩放并存入循环FIFO缓冲器;
若日志数据是浮点数,则对数据进行缩放,并将浮点型数据转化为定点型数据,再存储到循环FIFO缓冲器中;若日志数据是定点数,则直接存储到循环FIFO缓冲器中;
S5:对齐日志数据到扇区大小的整数倍N;
若N≥预设值,则进入步骤S6,否则返回步骤S4;
S6:通过迭代方式进行多扇区日志文件存储。


2.如权利要求1所述的一种在单片机系统中高效存储日志文件的方法,其特征在于,步骤S1中所需文件大小根据应用场景和日志记录需求计算;计算公式如下:
所需文件大小=连续工作时长×主循环频率×每个循环记录的数据量
步骤S1中所需循环FIFO大小根据日志数据量、单片机性能和存储器性能计算;计算公式如下:
所需循环FIFO大小=最大写入时间×主循环频率×每个循环记录的数据量。


3.如权利要求1所述的一种在单片机系统中高效存储日志文件的方法,其特征在于,步骤S5中数据缩放的依据为单位、精度和数据范围。


4.如权利要求1...

【专利技术属性】
技术研发人员:岳欣欣
申请(专利权)人:涵涡智航科技玉溪有限公司
类型:发明
国别省市:云南;53

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1