加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 用于实时数据采集的快速存储器分配

发布时间:2020-12-16 07:12:40 所属栏目:百科 来源:网络整理
导读:我有一系列传感器连接到PC,可以测量各种物理参数,如力,转速和温度.这些传感器以一定的采样率连续生成样品.样本由时间戳和测量的维度本身组成;采样率的大小为一位数千赫兹(即每秒1至9000个样本之间). PC应该在给定的时间段内读取和存储这些样本.然后,进一步处
我有一系列传感器连接到PC,可以测量各种物理参数,如力,转速和温度.这些传感器以一定的采样率连续生成样品.样本由时间戳和测量的维度本身组成;采样率的大小为一位数千赫兹(即每秒1至9000个样本之间).

PC应该在给定的时间段内读取和存储这些样本.然后,进一步处理和评估收集的数据.

什么是缓冲样品的合理方法?在一些现实的设置中,采集可以轻松地每秒收集几兆字节.如果内存快速分配但需要在写入时进行交换,则分页也很重要.

我可以想到一个线程方法,其中一个单独的线程分配和管理一个(锁定的,不可交换的)内存块池.鉴于预先分配了足够的这些块,进一步的分配只会阻塞(如果之前必须换掉其他进程的页面),这个内存池的线程和获取可以不间断地进行.

这基本上是一个概念性问题.然而,更具体一点:

>它应该只依赖便携式功能,如POSIX.特征Qt的宇宙也很好.
>传感器可以通过各种方式连接. IP是一种可能性.通常,传感器通过本地链路(RS232,USB,扩展卡等)直接连接到PC.那就是足够快.
>时间戳主要由采集硬件本身应用,如果能够这样做,以避免网络抖动等.

想一想

我真的应该担心吗?显然,问题转移到三种情况:

>根本收集的数据很少.它可以很容易地在一个大的预分配缓冲区中进行缓冲.
>数据收集缓慢.动态分配缓冲区完全没问题.
>以高采样率获取的数据非常多.然后分配不是问题,因为缓冲区最终会溢出.问题在于如何将数据从内存缓冲区快速传输到永久存储.

解决方法

解决此类问题的想法如下:

根据您需要对数据执行的操作,将问题分成两个或多个进程:

>收购者
>分析器(如果您想实时处理数据)
>作家

将数据存储在共享内存中的循环缓冲区中(我建议使用boost :: interprocess).

收单方将持续从设备读取数据并将其存储在共享存储器中.与此同时,一旦有足够的数据读取进行任何分析,分析仪将开始处理它.如果需要,它可以将结果存储到另一个循环缓冲区共享内存同时,Reader将从共享内存中读取数据(已获取或已处理)并将其存储在输出文件中.

您需要确保所有进程都正确同步,以便它们同时完成工作,并且不会丢失数据(数据在处理或保存到输出文件之前不会被覆盖).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读