C 估算微控制器(Arduino)的计算预算

C 估算微控制器(Arduino)的计算预算,c,embedded,arduino,hardware,C,Embedded,Arduino,Hardware,我有一个Arduino,它在每个采样周期T(在本例中,T=10ms左右)读取传感器的值。每次读取之后,我想对传感器值进行一系列计算。在设计算法之前,我想对我的有效计算预算有一个真实的感觉。以下是代码概要: void loop() { //read sensor measurements into variables //do computations delay(SAMPLE_PERIOD); } 我想做的是插入某种测试,它可以真实地评估在下一个循环开始之前的时

我有一个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
}
(i=0;i{ //负荷运行 //乘法运算 //添加操作 //商店经营 //或者以上的一些组合 } 我将增加N,以查看每个采样周期可以运行多少个操作。我会使用计数器/计时器来查看这是否需要比T更长的时间

你觉得怎么样


作为参考,微控制器板是Teensy 3.1:

或者,带有一些测试台代码:

  • 编写执行计算的代码
  • 编写一个例程: A.存储启动处理器的时间 B调用计算1000次 C存储结束的处理器时间 D减去这两个值并除以1000
  • 这将为您提供一个很好的估计,即进行一次计算需要多长时间


    如果你的计算太长,10毫秒可能不够长

    数据表上较慢的mcu以48 MHz的频率运行,这意味着您将在10毫秒内有48万个周期可玩。很难看出您如何使用它

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

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


    另一个要考虑的因素是如何采集传感器值。如果传感器需要先触发,然后等待一段时间,则最好在ISR结束时触发传感器。这样,下次ISR运行时就可以使用这些值。

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