【问题标题】:Estimating the computational budget of a microcontroller (Arduino)估算微控制器 (Arduino) 的计算预算
【发布时间】:2014-03-17 22:34:45
【问题描述】:

我有一个 Arduino,它在每个采样周期 T(在此示例中,T = 10ms 大约)从传感器读取值。每次阅读后,我都想对传感器值进行大量计算。在设计算法之前,我想对我的有效计算预算有一个真实的感觉。这是代码大纲:

void loop() {

    //read sensor measurements into variables

    //do computations

    delay(SAMPLE_PERIOD);

}

我想做的是插入某种测试,该测试可以真实地评估在下一个循环开始之前的时间段内我可以承受多少次乘法、加法和负载。我的第一个想法是插入如下内容:

for (i = 0; i < N; i++) {
    //load operation
    //multiply operation
    //add operation
    //store operation 
    //or some mix of the above
}

我会增加 N 以查看每个采样周期可以运行多少次操作。我会使用计数器/计时器来查看这是否比 T 花费的时间更长。

你怎么看?

作为参考,微控制器板是 Teensy 3.1:https://www.pjrc.com/teensy/teensy31.html#specs

【问题讨论】:

  • 在嵌入式系统上进行基准测试的正确、准确方法是使用示波器。将 I/O 引脚设置为高电平,运行算法,将 I/O 引脚设置为低电平。用你的范围测量,完成。
  • @Lundin 所说的 - 它更容易。
  • 我看不出使用示波器反复查看设置为高/低的引脚会有多大帮助。我已经知道时钟速度是多少,我想进一步了解架构可以做什么(例如每个周期有多少负载/muls/adds)。

标签: c embedded arduino hardware


【解决方案1】:

或者,使用一些测试台代码:

  1. 编写执行计算的代码
  2. 编写一个例程: 一种。存储启动处理器时间 湾。调用计算 1,000 次 C。存储结束处理器时间 d。减去这两个值并除以 1,000

这将使您能够很好地估计进行一次计算需要多长时间。

10ms 可能不够长,如果你的计算。太长了!

【讨论】:

    【解决方案2】:

    该数据表中较慢的 MCU 以 48 MHz 运行,这意味着您将在 10 毫秒内使用 480 000 个周期。很难看出你怎么能用完。

    但你的计划更大的问题是延迟的想法。当延迟循环运行时,处理器不能做任何有效率的事情。

    更好的方法是在定时器上使用中断。不仅会减少抖动,而且会更容易做到。

    另一个需要考虑的因素是如何收集传感器值。如果传感器需要触发后等待一段时间,那么在 ISR 结束时触发传感器可能是个好主意。这样,当 ISR 下次运行时,这些值就可以使用了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-03
      • 1970-01-01
      • 2015-07-20
      • 1970-01-01
      • 2021-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多