Arduino UNO R3自学笔记12 之 Arduino在调试过程中串口的使用
注意:学习和写作过程中,部分资料搜集于互联网,如有侵权请联系删除。
前言:
1.使用场景
在日常调试过程中,可能会发生各种奇奇怪怪的问题,此时数据的可视化尤为重要,可视化不一定要让数据显示成各种表格、图形,折线啥的,哪怕是一个数,一个符号,都非常有用。
2.情景还原
有时候为了榨干单片机的性能,尽量在裸机编程过程会考虑代码的执行时间,而此时,我们可以借用Arduino的自身函数,加上串口来测试一段代码,下面给出一段代码:
void setup()
{
Serial.begin(115200);
}
void loop()
{
//A
for(unsigned int m=0,m<100,i++)
{
for(unsigned int m=0,m<100,i++)
{
;
}
}
//B
}
假设我们需要知道代码从A执行到B处的时间,那我们应该怎么做呢?
3.今日知识点
Arduino提供以下4种时间相关函数:
delay(num)函数,num表示时间(以毫秒为单位),延时函数。
delayMicroseconds(num)函数,num表示时间(以微秒为单位),延时函数。
mills() 函数,返回Arduino板开始运行至此函数执行时的时间长度,返回值为毫秒。
micros() 函数,返回Arduino板开始运行至此函数执行时的时间长度,返回值为微秒数。
4.解决办法
有了以上函数的支撑,分别在A和B两点调用 mills()或者micros(),将得到两个值,作差,这样我们就可以得到他们的运行时间。再通过串口输出,我们就可以在看到时间了,完整测试代码如下:
void setup()
{
Serial.begin(115200); //初始化串口,使用波特率115200,其余默认
}
void loop()
{
//A
static uint32_t lastMillis = 0; //用于存储第一次获取的运行时间
static uint32_t time0 = 0; //用于存储时间差
lastMillis = micros(); //获取运行时间
for(unsigned int m=0;m<100;m++) //一个嵌套,消耗CPU时间
{
for(unsigned int n=0;n<100;n++)
{
__asm__ __volatile__ ("nop"); //这是一个空指令,但是会花费一个周期去执行
}
}
//B
time0=micros() - lastMillis; //计算A到B的执行时间差
delay(200);
Serial.print("程序A点运行到B点耗时: ");
Serial.print(time0);
Serial.println("微秒");
}
5.测试截图
特别说明:重点掌握串口的使用,这个计算出来的时间,使用Arduino R4跑出来的。大家用Arduno R3测试的话可能时间会更长,与我实验值有差别。
上一篇:Arduino UNO R3自学笔记11 之 Arduino的串口是什么?
下一篇:Arduino UNO R3自学笔记13 之 Arduino使用LM35如何测量温度?