Time 使用Mbed跟踪时间

Time 使用Mbed跟踪时间,time,while-loop,iteration,mbed,Time,While Loop,Iteration,Mbed,我正在使用mbed平台在ARM MCU上编程运动控制器。 我需要确定while循环每次迭代的时间,但我正在努力想出最好的方法 我有两种可能的方法: 1) 定义每秒可以完成多少次迭代,并使用“等待”,使每次迭代在一个固定的间隔后发生。然后我可以增加一个计数器来确定时间 2) 在进入循环之前捕获系统时间,然后连续循环,从原始系统时间中减去当前系统时间以确定时间 我是沿着正确的轨道思考,还是完全错过了它?您的第一个选项并不理想,因为等待和计数器部分会偏离数字,您最终会得到关于迭代的不准确信息 第二个选

我正在使用mbed平台在ARM MCU上编程运动控制器。 我需要确定while循环每次迭代的时间,但我正在努力想出最好的方法

我有两种可能的方法:

1) 定义每秒可以完成多少次迭代,并使用“等待”,使每次迭代在一个固定的间隔后发生。然后我可以增加一个计数器来确定时间

2) 在进入循环之前捕获系统时间,然后连续循环,从原始系统时间中减去当前系统时间以确定时间


我是沿着正确的轨道思考,还是完全错过了它?

您的第一个选项并不理想,因为等待和计数器部分会偏离数字,您最终会得到关于迭代的不准确信息

第二个选项是可行的,这取决于您如何实现它。mbed有一个名为“Timer.h”的库,这将是解决您的问题的简单方法。定时器功能是基于中断的(如果使用LPC1768,则使用Timer3)。您可以在此处查看手册:mbed.org/handbook/timer。ARM支持32位地址作为Cortex-M3处理器的一部分,这意味着计时器是32位int微秒计数器。这对您的可用性意味着,这个库最多可以保持30分钟的时间,因此它们非常适合微秒到秒之间的时间(如果需要更多的时间,那么您将需要一个实时时钟)。这取决于你是否想知道毫秒或微秒的计数。如果需要micro,则需要调用函数read_us(),如果需要milli,则使用read_ms()。计时器中断的使用将影响你的时间1-2微秒,因此如果你想跟踪到这个水平而不是毫秒,你必须记住这一点

以下是您尝试完成的示例代码(基于LPC1768并使用联机编译器编写):

#包括“mbed.h”
#包括“Timer.h”
定时器;
串行设备(p9、p10);
int main(){
device.baud(19200);//设置波特率
int my_num=10;//while中的循环数
int i=0;
浮点数和=0;
浮动偏差=0;
浮动数值[我的数值];
float my_time[my_num];//数组的初始值设置为零
对于(int i=0;i
#include "mbed.h" 
#include "Timer.h"
Timer timer;

Serial device (p9,p10);



int main() {  
    device.baud(19200); //setting baud rate  
    int my_num=10; //number of loops in while  
    int i=0;  
    float sum=0;  
    float dev=0;  
    float num[my_num];  
    float my_time[my_num]; //initial values of array set to zero  
    for(int i=0; i<my_num; i++)  
    {  
        my_time[i]=0; //initialize array to 0  
    }  

timer.start(); //start timer  
 while (i < my_num) //collect information on timing  
 {  
    printf("Hello World\n");  
    i++;  
    my_time[i-1]=timer.read_ms(); //needs to be the last command before loop restarts to be more accurate  
 }  
timer.stop(); //stop timer  
sum=my_time[0]; //set initial value of sum to first time input  

for(i=1; i < my_num; i++)  
{  
    my_time[i]=my_time[i]-my_time[i-1]; //making the array hold each loop time  
    sum=sum+my_time[i]; //sum of times for mean and standard deviation  
}  
sum = sum/my_num; //sum of times is now the mean so as to not waste memory  

device.printf("Here are the times for each loop: \n");  
for(i=0; i<my_num; i++)  
{  
    device.printf("Loop %d: %.3f\n", i+1, my_time[i]);  
}   

device.printf("Your average loop time is %.3f ms\n", sum);  
    for(int i=0; i<my_num; i++)  
    {  
        num[i]= my_time[i]-sum;  
        dev = dev +(num[i])*(num[i]);  
    }  
    dev = sqrt(dev/(my_num-1)); //dev is now the value of the standard deviation  
    device.printf("The standard deviation of your loops is %.3f ms\n", dev);  

  return 0;  
}