Time 使用Mbed跟踪时间
我正在使用mbed平台在ARM MCU上编程运动控制器。 我需要确定while循环每次迭代的时间,但我正在努力想出最好的方法 我有两种可能的方法: 1) 定义每秒可以完成多少次迭代,并使用“等待”,使每次迭代在一个固定的间隔后发生。然后我可以增加一个计数器来确定时间 2) 在进入循环之前捕获系统时间,然后连续循环,从原始系统时间中减去当前系统时间以确定时间Time 使用Mbed跟踪时间,time,while-loop,iteration,mbed,Time,While Loop,Iteration,Mbed,我正在使用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;
}