0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

单片机开发过程中5种延迟代码执行的技术

科技观察员 来源:英锐恩 作者:英锐恩 2023-07-10 10:43 次阅读

单片机项目开发过程中,经常会出现一个有趣的问题,即弄清楚如何延迟代码执行。有时,[单片机开发]人员可能只是希望有10微秒的延迟,以使I/O线在读取之前稳定下来,或者可能希望在两次读取之间指定的时间间隔使它反跳。在本文中,我们将探讨五种延迟代码执行的技术。

一、条件循环

第一种技术是使用条件循环(可能是最常用和最简单的)。条件循环延迟通常会使用for、while或do

while循环重复执行无操作(NOP)指令。例如:

for(int i = 0; i < 100000; i++)

{

__NOP();

}

条件延迟在紧要关头可能会很有用,但很难准确或有效。如果开发人员要针对其他操作模式(例如低功耗操作)调整时钟频率,则延迟时间将完全不同。另外,总会有一个问题,那就是到底有多长时间?有人可能会认为这是100000条指令,但是每次通过循环时,都会有其他指令来检查循环变量并递增i。这些时序循环对于在任何生产代码中使用来说都是不可预测的。

二、使用计时器

可以使用的第二种技术是利用单片机内置的硬件计时器。通常有几种不同的硬件计时器可用于跟踪系统时间,生成波形,捕获输入和通用。如果开发人员需要延迟(例如10微秒),则可以向硬件计时器加载表示10微秒的计数值。在这种情况下,计时器将设置为单次计时器。该代码将启动计时器并等待计时器溢出标志被设置,然后该标志将指示时间已过。

该代码类似于以下内容:

Timer_Reload

(DELAY_VALUE );

while(Timer_Expired ()== false

{

__NOP ();

}

这种技术比条件循环要强大得多。它还具有更高的灵活性,并且可以更轻松地针对所需的延迟时间进行调整。实际上,可以在整个代码中重用该API,以允许单个计时器用于所需的任何数量的延迟。

三、使用系统刻度(HAL示例)

在某些情况下,可能没有专用的硬件计时器。在这种情况下,单片机开发人员可以利用板载系统时钟来创建延迟。即使是裸机系统,通常也具有作为系统时钟的后台计时器,以便从单片机启动的那一刻起,软件就具有时间参考。通常,在典型系统中,将这些系统时钟设置为每1或10毫秒发生一次。

系统通常使用一些API,这些API允许开发人员访问当前的系统刻度,例如SysTick_Get()。开发人员可以利用此延迟来创建类似于以下内容的延迟:

TimeStart =

SysTick_Get();

do

{

TimeNow = SysTick_Get();

TimeDelta = TimeNow – TimeStart;

}while(TimeDelta < DelayTime);

单片机开发人员只需要确保如果他们这样做,就不会陷入计算问题或其他潜在问题中,因此应检查边界条件。

四、使用RTOS产量函数

在使用实时操作系统(RTOS)的更高级的系统中,开发人员可以利用内置的RTOS

API调用来产生创建延迟的任务。例如,如果开发人员正在使用FreeRTOS,则在他们的任务中他们可以使用如下代码:

VTaskDelay

(1);

此延迟功能将使任务产生一个RTOS滴答声的当前任务。取决于配置,RTOS滴答可以设置为1毫秒或10。使用这样的延迟机制可能会出现问题,因为任务将在该时间段内产生CPU,但不能保证一旦系统滴答时间到期,该任务将是最高优先级的任务!如果任务是准备运行的最高优先级任务,则该任务仅在延迟后立即运行,因此延迟时间可能会有些抖动。

五、使用RTOS对象

使用RTOS对象来延迟时间。如果你仔细查看自己喜欢的RTOS中的对象(例如信号量、互斥对象和队列)的API,你会注意到大多数等待等待的API调用还将包含延迟时间。此延迟时间也可导致应用程序延迟。

与RTOS对象相关的是,大多数RTOS都还包含软定时器。这些是基于软件的计时器,是从运行中的硬件计时器触发的。然后,可以将与上面第一、二点中显示的技术相似的技术与这些软计时器一起使用,以在代码执行中产生延迟。

单片机开发人员想要延迟代码执行,可以使用多种不同的技术,使用的技术将取决于系统中可用的软件和硬件资源。然后,开发人员可以决定他们要使用的解决方案的复杂程度。总之,肯定有很多种机制可以帮助将代码执行延迟一定的时间。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6032

    文章

    44514

    浏览量

    632919
  • 单片机开发
    +关注

    关注

    2

    文章

    460

    浏览量

    19697
收藏 人收藏

    评论

    相关推荐

    单片机开发过程中的常见问题

    单片机在组装与开发过程中总是会出现一些问题,导致过程不是那么顺利的完成。今日分享一些单片机常见问题的解决办法1.单片机EN8F609兼容PI
    发表于 09-11 16:33

    开发单片机过程中有哪些步骤

    就两个步骤,程序代码的编写与程序的烧录(将单片机程序写入开发板的ROM),分别在以下两款软件实现:Keil
    发表于 07-13 09:18

    请问atmel32单片机开发过程中常见的问题有哪些?

    请问atmel32单片机开发过程中常见的问题有哪些?
    发表于 09-18 06:43

    单片机开发过程中按键处理函数的实现方法

    **.**单片机开发过程中按键处理函数的实现​**.**方法一​ 这种方法在单片机处理反应不够好,当按键交替按时,会表现的不够好​voidKey_Scan(void){uint8_t
    发表于 11-22 06:03

    单片机开发过程中的Flash

    Flash在我们生活无处不在,比如:U盘、固态硬盘、SD卡、内存卡等。同时,在单片机开发过程中也会遇到各种各样的Flash,...
    发表于 12-09 08:00

    谈一下在单片机开发过程中使用过的几种调试方案

    单片机开发过程中,有一个好的调试系统可以极大地提高开发效率。举个例子,做平衡系统时调节PID参数,你会选择 修改参数–>编译–>烧录–>运行–>修改…,还是做一个功能可以一边
    发表于 01-14 08:25

    单片机开发过程中怎样使用定时器进行定时及超时处理呢

    单片机开发过程中怎样使用定时器进行定时及超时处理呢?
    发表于 01-21 07:33

    单片机开发过程中硬件调试技巧

    本文结合作者在单片机开发过程中体会,讨论硬件调试的技巧。当硬件设计从布线到焊接安装完成之后,就开始进入硬件调试阶段
    发表于 06-01 16:09 1.4w次阅读

    PIC单片机开发的几个问题

    PIC单片机在国内日益流行,本文介绍Microchip PIC系列单片机开发过程中软、硬件设计的一些经验、技巧。
    发表于 06-18 13:46 2548次阅读

    AVR单片机例程

    电子开发过程中的资料-AVR单片机的学习例程
    发表于 11-03 15:50 0次下载

    单片机的主要作用_单片机开发过程

    本文首先介绍了单片机的主要作用,其次阐述了单片机的应用,最后介绍了单片机开发过程
    发表于 08-26 09:44 1.3w次阅读

    让你在单片机开发过程变得简单

    这是一本关于Intel 0C51以及广大的51系列单片机的书这本书介绍给读者一些新的技术使你的8051工程和开发过程变得简单请注意这本书的目的可不是教你各种8051嵌入式系统的解决方法。
    发表于 03-16 14:07 7次下载
    让你在<b class='flag-5'>单片机</b><b class='flag-5'>开发过程</b>变得简单

    .单片机开发过程中按键处理函数的实现

    **.**单片机开发过程中按键处理函数的实现​ **.**方法一​ 这种方法在单片机处理反应不够好,当按键交替按时,会表现的不够好​void Key_Scan(void
    发表于 11-13 12:36 16次下载
    .<b class='flag-5'>单片机</b><b class='flag-5'>开发过程中</b>按键处理函数的实现

    基于Energia的MPS430单片机开发过程中的问题

    基于Energia的MPS430单片机开发过程中的问题
    发表于 11-19 17:21 9次下载
    基于Energia的MPS430<b class='flag-5'>单片机</b><b class='flag-5'>开发过程中</b>的问题

    这几个单片机技巧如果不了解,真的很难再进阶!

    单片机开发过程中,我们总被代码执行效率、单片机器件的性能、成本困扰着,以至于用很长时间思考这类问题,这是难以避免的,毕竟
    发表于 12-08 09:21 4次下载
    这几个<b class='flag-5'>单片机</b>技巧如果不了解,真的很难再进阶!