文章图片
文章图片
嵌入式软件实现中经常出现的一个有趣问题是弄清楚如何延迟代码执行 。 有时 , 嵌入式开发人员可能只希望有 10 微秒的延迟 , 以允许 I/O 线在读取之前稳定下来 , 或者可能希望在读取之间有一个指定的时间段来消除它的抖动 。 在这篇文章中 , 我们将探讨五种延迟代码执行的技术 。
技术 #1 – 条件循环第一种可能是最常用和最简单的技术是使用条件循环 。 条件循环延迟通常会使用 for、while 或 do while 循环来重复执行无操作 (NOP) 指令 。 例如:
有条件的延迟在紧要关头可能很有用 , 但它几乎不准确或有效 。 如果开发人员要针对不同的操作模式(例如低功耗操作)调整时钟频率 , 则延迟时间将完全不同 。 另外 , 总是有一个问题 , 那就是延迟到底有多少?有人可能认为它有 100000 条指令 , 但每次循环都会有额外的指令来检查循环变量并增加 i 。 这些时序循环太难以预测 , 无法在任何生产代码中使用 。
技巧 #2 – 使用计时器可以使用的第二种技术是利用内置在微控制器中的硬件定时器 。 通常有几种不同的硬件定时器可用于跟踪系统时间、生成波形、捕获输入和通用目的 。 如果嵌入式开发人员需要延迟 , 例如 10 微秒 , 硬件计时器可以加载表示 10 微秒的计数值 。 在这种情况下 , 定时器将被设置为一次性定时器 。 代码将启动计时器并等待设置计时器溢出标志 , 这将指示时间已过 。
此代码的抽象版本可能如下所示:
这种技术比我们之前看到的条件循环要强大得多 。 它也更便携 , 可以更容易地调整到所需的延迟时间 。 事实上 , API 可以在整个代码中重复使用 , 以允许将单个计时器用于所需的任意数量的延迟 。
技术 #3 – 使用系统记号(HAL 示例)
可能存在专用硬件计时器不可用或不希望设置一次性计时器的情况 。 在这些情况下 , 开发人员可以利用板载系统滴答声来产生延迟 。 即使是裸机系统通常也有一个后台定时器 , 它充当系统滴答声 , 以便软件从微控制器启动的那一刻起就有一个时间参考 。 通常 , 这些系统滴答声在典型系统中设置为每 1 或 10 毫秒发生一次 。
系统通常使用一些 API 允许开发人员访问当前系统时钟 , 例如 SysTick_Get() 。 开发人员可以利用它来创建类似于以下内容的延迟:
开发人员只需要确保如果他们做这样的事情 , 他们不会遇到计算问题或其他潜在问题 , 因此应该检查边界条件 。
技巧 #4 – 使用 RTOS 屈服函数
在使用实时操作系统 (RTOS) 的更高级系统中 , 嵌入式开发人员可以利用内置的 RTOS API 调用来生成任务以产生延迟 。 例如 , 如果开发人员正在使用 FreeRTOS , 他们可以在他们的任务中使用如下代码:
此延迟功能将导致任务在一个 RTOS 滴答声中产生当前任务 。 根据配置 , RTOS 滴答声可以设置为 1 毫秒或 10 毫秒 。 使用这样的延迟机制可能会出现问题 , 因为该任务将在该时间段内产生 CPU , 但不能保证一旦系统滴答期到期 , 该任务将成为最高优先级的任务!如果任务是准备好运行的最高优先级任务 , 则该任务只会在延迟后立即运行 , 因此延迟时间可能会有一些抖动 。
- oppo find x|OPPO Find X3 Pro这种比较旧的机型还有机会优先开发?
- 扫地机器人|忙了一天回家还要做家务?看扫拖机器人如何帮你“一键躺平“
- 今日下午|九号发布送餐、送物机器人:售价19999元
- AR智能眼镜|谷歌最新专利显示,正在开发兼具AR功能的智能眼镜
- 作者|程茜编辑|心缘智东西4月26日消息|起价19999元!九号机器人推室内配送机器人,要定义未来5年
- 前段时间|日本中本高道教授开发出“嗅觉显示器”
- OPPO|续华为鸿蒙后再挑战安卓!国产手机老四强宣布联合腾讯开发新系统
- 本文转自:大众日报“搬运物品”“快速前进”……一个个憨态可掬的机器人按照指令迅速完成任务...|山东科技大学上演“机器人总动员”
- 为何有人说扎克伯格是机器人?网友分析2018听证会,发现了什么?
- 机器人|机器人比科学家还聪明?中国人工智能十分先进,国外订单直接暴涨