【问题标题】:Need to send ten periods of data every second ( ten periods per second ) [closed]需要每秒发送十个周期的数据(每秒十个周期)[关闭]
【发布时间】:2018-08-30 12:48:04
【问题描述】:

我有一个包含来自 adc 的数据的数组,对于这个数据,我需要在 sd 卡中每秒保存 10 个周期,以检测我使用过零函数的周期,然后我将一个变量添加到变量中,每次它过零(改变唱)和写一个文件,我有两个问题,第一个是设置定时器每秒发送10个周期的数据。我的第二个问题是我只想发送这 10 个周期的数据,休息一下并继续发送接下来的 10 个周期。 此代码有效,我的问题是如何实现计时,如何在 1 秒内发送 10 个周期?

void zeroCrossing(float* data, float* zerCross, int nx)
{
    int i;
    int a = 0;
    bool sign1, sign2;

    memset(zerCross, 0, nx * sizeof(float)); //copies the 0  to the first characters of the string
    //pointed to, by argument
    for (i = 0; i < nx - 1; i++) {
        float b[16]; /* loop over data  */
        b[i] = data[i];
        sign1 = getSign(data[i]);
        sign2 = getSign(data[i + 1]);
        if (sign1 != sign2) { /* set zero crossing location */
            zerCross[i + 1] = 1;
            a++;
            // break ;
            // continue;
            if (a == 10) { // 10
                break;
            }
        }
    }
    //cout << a<<endl;
}

/* get sign of number */
bool getSign(float data)
{
    if (data > 0) /* positif data */
        return (1);
    else /* negatif data */
        return (0);
}

【问题讨论】:

  • 那么您使用的是什么语言;如果您知道某些代码不相关;不要发布它。
  • 问题是什么?
  • 所以familiar...
  • 正确格式化您的代码,如果您正在使用 C++,请不要使用 C 标签,并描述代码的作用以及应该做什么。
  • 您没有提出问题,也没有描述任何错误情况。你只描述你想做什么。你的代码有效吗?如果不是什么部分不工作?正如评论所言,这篇文章的一切都是似曾相识

标签: c++


【解决方案1】:

一个可能是使用sleep_until

auto timestamp = std::chrono::high_resolution_clock::now();
for(;;)
{
    doTheStuff();
    timestamp += std::chrono::milliseconds(100);
    std::this_thread::sleep_until(timestamp);
}

虽然这可以通过sleep_for 以稍微少一点的努力来实现,但上述方法稍微更精确,因为它考虑了你所做的任何事情的计算时间。

对于小型任务,这种精度可能无关紧要,因为睡眠精度本身可能会更糟......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-16
    • 2021-07-11
    • 2018-02-11
    • 2021-06-01
    • 2019-04-05
    • 2010-10-16
    • 1970-01-01
    • 2020-07-18
    相关资源
    最近更新 更多