我有一个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
答案 0 :(得分:2)
或者,使用一些测试平台代码:
这可以很好地估计进行一次计算所需的时间。
如果你的计算结果,10毫秒可能不够长。太长了!答案 1 :(得分:1)
该数据表中较慢的mcu以48 MHz运行,这意味着您将在10 ms内播放480 000个周期。很难看出你如何使用它。
但是你的计划中更大的问题是延迟的想法。当延迟循环正在运行时,处理器无法正常工作。
更好的方法是在计时器上使用中断。不仅会减少抖动,而且会更容易。
要考虑的另一个因素是如何收集传感器值。如果传感器需要触发器然后等待一段时间,那么在ISR结束时触发传感器可能是个好主意。这样,当ISR下次运行时,这些值就可以使用了。