当前位置: 首页 > article >正文

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如何测量温度?


http://www.kler.cn/news/328427.html

相关文章:

  • 【Router】T750路由功能之VLAN划分功能介绍及实现
  • 论文笔记:LAFF 文本到视频检索的新基准
  • 【算法】链表:21.合并两个有序链表(easy)
  • 什么是信息增益比
  • MFC工控项目实例之十九手动测试界面输出信号切换
  • Python办公自动化之Excel
  • [C++] 小游戏 征伐 SLG DNF 0.0.1 版本 zty出品
  • ARM base instruction -- ic
  • 滚雪球学MySQL[2.3讲]:MySQL数据过滤与排序详解:WHERE条件、ORDER BY排序与LIMIT分页查询
  • 物联网智能项目研究
  • 如何创建AWS云账号
  • 思维+贪心,CF 1210B - Marcin and Training Camp
  • SD-WebUI forge支持flux模型。算力互联forge镜像使用教程
  • 【鸿蒙学习】深入了解UIAbility组件
  • Java在用增强for循环遍历集合时删除元素,抛出java.util.ConcurrentModificationException异常
  • 【Verilog学习日常】—牛客网刷题—Verilog企业真题—VL69
  • 决策树中联合概率分布公式解释说明
  • 如何判断电器外壳是否带电
  • 十四、磁盘的管理
  • SpringBoot之Profile的两种使用方式
  • 二叉搜索树详解
  • 基于ARX结构的流密码算法Salsa20
  • mybatis-puls快速入门
  • Nginx的核心架构和设计原理
  • EnvoyFilter 是 Istio 中用于直接修改 Envoy 配置的一种资源类型
  • 帝都程序猿十二时辰
  • modelsim仿真 wave视图里 数据位宽和进制怎么显示
  • 通信工程学习:什么是CSMA/CD载波监听多路访问/冲突检测
  • 计算机知识科普问答--25(121-125)
  • 关于KKT条件的线性约束下非线性问题-MATLAB