关注MCU 开发中的无限循环

2023-12-19

在 MCU 的开发过程中,我们经常会遇到需要使用无限循环的情况。例如,在前后台系统中,我们需要在一个无限循环中处理各种任务;在实时性操作系统中,我们也可能需要在一个无限循环中调度各个任务。 那么,处理无限循环的语句有哪些写法呢?目前常见的有两种:while(1)和 for(;;)。这两种写法都可以实现无限循环的效果,但它们之间有一些微妙的差别。

首先,让我们来看看 while(1)的写法。while(1)的意思是“当条件为真时执行循环”,这里的条件是一个常量 1,所以永远为真,因此会一直执行循环。

f65c5bdb2c5fc952ee72930190e4d854.jpeg

这种写法非常简单明了,一眼就能看出这是一个无限循环。然而,它也有一些缺点。首先,由于 while 循环的条件是一个常量,编译器可能会对其进行优化,导致循环的执行速度变慢。其次,如果在循环体内部有 break 语句,那么这个循环就不再是无限循环,而是一个有限循环,这可能会引发一些错误。 相比之下,for(;;)的写法更加复杂一些,但它也有一些优点。for(;;)的意思是“无条件地执行循环”。

for 循环的条件部分为空,这意味着它没有条件判断,因此会一直执行循环。这种写法的好处是,编译器不会对它进行优化,因此循环的执行速度会比较快。此外,即使在循环体内部有 break 语句,这个循环仍然是一个无限循环,不会引发任何错误。 当然,这两种写法并不是绝对的优劣之分,而是各有各的特点和适用场景。如果你只需要一个简单的无限循环,而且不关心性能问题,那么可以使用 while(1)的写法。

8a1fb0c38c42815e7fd27fd6fc6098f2.jpeg

如果你需要一个高性能的无限循环,或者担心循环会被误操作成有限循环,那么可以使用 for(;;)的写法。 总的来说,处理无限循环的语句有很多写法,但最常见的就是 while(1)和 for(;;)。选择哪种写法取决于你的需求和偏好,以及程序的具体情况。 除此之外,还有一些其他的无限循环写法,如 do-while、goto 等。这些写法虽然不太常用,但在某些特定情况下也可能会派上用场。例如,do-while 循环可以用来确保循环体至少被执行一次;goto 可以用来跳过循环体的一部分或整个循环体,从而实现更复杂的控制流程。

4b1135613d8be6b83125f0460532b9a6.jpeg

总之,无论使用哪种无限循环的写法,都需要考虑到程序的可读性和可维护性。一个好的编程习惯是在代码中添加适当的注释,解释循环的目的和作用,以便于其他开发者理解和修改代码。同时,也要注意避免使用过于复杂的循环结构,以免增加代码的复杂性和出错率。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关注MCU 开发中的无限循环 的相关文章

  • 使用stm32的ADC得到准确的电压

    一 引脚多一点的stm32单片机存在VREF 和VREF 引脚 由上面的供电图知道 如果存在VREF 和VREF 引脚 那么ADC是由这两个引脚供电的 ADC的采集电压范围为 VREF
  • 【GPIO】通用输入/输出工作模式原理

    1 GPIO基本结构 保护二极管 IO引脚上下两边两个二极管用于防止引脚外部过高 过低的电压输入 当引脚电压高于VDD时 上方的二极管导通 当引脚电压低于VSS时 下方的二极管导通 防止不正常电压引入芯片导致芯片烧毁 P MOS管和N MO
  • 使用fromelf把axf文件转换成elf格式

    FROMELF用法 命令格式 fromelf options input file fromelf h即可打印出帮助信息 Product MDK Plus 5 29 Component ARM Compiler 5 06 update 6
  • LVGL-obj对象

    对象创建 1 lv中所有的对象都以obj为基础进行扩展的 创建对象时父对象是空 则在显示器屏链表增加一个节点 父对象非空则在其子链表增加一个节点 创建完成会通过parent gt signal cb parent LV SIGNAL CHI
  • STM32外部中断 中断优先级讲解及配置

    1 概念 对于几乎所有的微控制器 中断都是一种常见的特性 中断一般是由硬件 如外设和外部输入引脚 产生的事件 它会引起程序流偏离正常的流程 如给外设提供服务 转去执行其他的流程 CPU在正常执行程序的过程中 由于内部 外部事件的触发或程序的
  • 从0写bootloader — 最简单的bootloader和App

    地址空间划分 对于空间划分是人为定义的 bootloader编写 启动文件start s PRESERVE8 instruct is aligned by 8 bytes 指令集8字节对齐 THUMB use Thumb instructi
  • 带硬件FIFO的串口驱动程序设计思路

    串口具有硬件FIFO可以降低中断频率 对于需要高波特率数据传输 MCU本身速度比较慢 或有更高级优先级中断需要及时处理的场合就显得比较重要 通常 即便串口本身带硬件FIFO 在编写串口驱动程序时 仍然需要在上层在加一层软件FIFO 或Rin
  • CORE-ESP32C3

    目录 参考博文 源于网友oled eink aht10项目 源代码修改及复现说明 主要修改 显示效果 编辑硬件准备 软件版本 日志及soc下载工具 软件使用 接线说明 天气显示屏 硬件接线 温度采集 日期温度显示屏 正常初始化LOG 示例代
  • ESP32S3学习——SPIFFS 文件系统

    芯片 esp32s3 开发环境 espidfv4 4 一 官网相关资料 1 简介 SPIFFS 是一个用于 SPI NOR flash 设备的嵌入式文件系统 支持磨损均衡 文件系统一致性检查等功能 2 说明 目前 SPIFFS 尚不支持目录
  • Micropython史上最友好的编辑器,小巧精悍

    Python 因为非常好学 易上手故而广受大众的喜欢 micropython 也因此在物联网单片机领域拥有一席之位 并且 python 有着良好的生态环境 功能亦更加丰富 from machine import Pin p0 Pin 0 P
  • 【STM32实战】机械臂快递分拣系统(二)——机械臂控制程序(上位机)编写

    STM32实战 机械臂快递分拣系统 二 机械臂控制程序 上位机 编写 前言 题目分析 蓝牙模块的使用 上位机程序的编写 连接阿里云 测试 前言 近期回校上最后一门课 刚好是做机械臂有关的题目 所以写文记录一下 主要实现的是可以自动识别获取快
  • 使用VS Code开发Arduino

    文章目录 目的 软件安装 快速使用 更多说明 编译输出时中文乱码 Arduino扩展配置说明 使用 arduino cli 总结 目的 Arduino官方的IDE作为编辑器的功能挺简陋的 用起来并不是很舒服 相比较之下用VS Code Vi
  • ESP8266 教程3 — 通过TCP组建局域网并通信

    目录 1 ESP8266 的 AP 模式 1 1 查询 ESP8266 的wifi应用模式 1 2 设置 ESP8266 模块的wifi信息 1 3 查询已经接入的设备 2 ESP8266 的Station 模式 2 1 设置ESP8266
  • Keil MDK误将Project窗口关了的解决办法,窗口视图重置

    在使用MDK时 误将Project窗口或者其他窗口关了 点击view 选择对应的窗口即可 或者点击Window窗口 选择Reset View to Defaults 再点击Reset即可实现窗口的重置
  • 使用Arduino开发ESP32(17):固件更新演示

    文章目录 目的 基础说明 使用演示 通过SD卡更新固件 通过网页更新固件 总结 目的 很多时候我们会有因为bug修复 功能增加等情况需要对已投产使用的设备更新固件 这种情况下再使用工具通过串口烧录固件就不是那么方便了 比较常用的是通过网络或
  • GPIO口的八种工作状态

    一直对GPIO的工作状态不是很熟悉 导致在设置IO状态时 经常会设置成推挽上拉 或者推挽下拉 开漏上拉等问题 虽然看起来没有影响MCU工作 但感觉这是一种无知的表现 现在总结下GPIO口的八种工作状态 其中四种输入状态 四种输出状态 一 输
  • PWM模块:边沿对齐PWM和中心对齐PWM

    PWM模块 边沿对齐PWM和中心对齐PWM 当PWM 时基工作在自由运行模式时 模块产生边沿对齐的PWM 信号 给定PWM 通道的输出1 边沿对齐模式 信号的周期由装入PTPER 的值指定 其占空比由相应的PDCx 寄存器指定 参见图15
  • 俄罗斯方块游戏(C语言)

    简介 俄罗斯方块 Tetris 是一款经典的游戏 下面是用C语言实现俄罗斯方块的示例代码 code include
  • C语言环形缓冲区

    2024第一天 继续给自己加点料 导言 C语言环形缓冲区是一种常用的数据结构 它提供了一种高效的方式来存储和处理数据 本文将深入解析C语言环形缓冲区的定义 原理和应用 并提供一些实际的代码示例 一 什么是环形缓冲区 环形缓冲区 也称为循环缓
  • C语言环形缓冲区

    2024第一天 继续给自己加点料 导言 C语言环形缓冲区是一种常用的数据结构 它提供了一种高效的方式来存储和处理数据 本文将深入解析C语言环形缓冲区的定义 原理和应用 并提供一些实际的代码示例 一 什么是环形缓冲区 环形缓冲区 也称为循环缓

随机推荐

  • 项目中常用依赖 持续更新中

    okhttp3 implementation com squareup okhttp3 okhttp 4 9 3 implementation com squareup okhttp3 logging interceptor 4 9 3 r
  • android系统镜像文件

    boot img 这是包含内核和设备树 Device Tree 的镜像文件 它被引导加载程序 bootloader 加载以启动系统 并负责将控制权转交给内核 dtbo img 这是设备树增量编译 Device Tree Overlay 的镜
  • Android Uri scheme协议file转content

    一 Uri的介绍 在Android开发中 Uri Uniform Resource Identifier 是用于标识和访问各种资源的核心概念 这些资源可能包括文件 网络URL 数据库记录等 在处理这些资源时 我们可能会遇到不同的Uri协议
  • Python中使用JsonPath:概念、使用方法与案例

    目录 一 引言 二 JsonPath的概念 三 JsonPath的使用方法 1 安装JsonPath库 2 使用JsonPath查询JSON数据 3 复杂的JsonPath查询表达式 四 JsonPath的使用技巧和最佳实践 1 简化Jso
  • Template for directive ‘electronicSign‘ must have exactly one root element.

    问题 原因 angularjs 提示模版指令需要根元素 解决办法 清理头尾
  • Object.defineProperty

    直接在一个对象上定义一个新属性 或者修改一个已经存在的属性 Object defineProperty obj prop desc let person name 码农 age 18 Object defineProperty person
  • 【Unity】运行时创建曲线(贝塞尔的运用)

    Unity 运行时创建线 贝塞尔的运用 1 实现的目标 在运行状态下创建一条可以使用贝塞尔方法实时编辑的网格曲线 2 原理介绍 2 1 曲线的创建 unity建立网格曲线可以参考 Unity程序化网格体 的实现方法 主要分为顶点 三角面 U
  • #HarmonyOS:项目结构图

    hvigor 存储构建配置文件信息 idea 存储项目的配置信息 AppScope 全局的共有资源存放目录
  • 【JavaScript】Set方法

    基本用法 ES6 提供了新的数据结构 Set 它类似于数组 但是成员的值都是唯一的 没有重复的值 Set 本身是一个构造函数 用来生成 Set 数据结构 const s new Set 2 3 5 4 5 2 2 forEach x gt
  • 模具企业MES管理系统需求特点分析

    模具制造行业是制造业中的重要领域 为各种行业提供着模具和工装的制造与加工服务 在这个竞争激烈的行业中 企业需要高效管理和控制生产过程 以满足客户需求 提高产品质量和降低成本 MES生产管理系统作为一种集成的信息系统 为企业提供了实时的生产数
  • C++接口类使用Qt的虚信号

    项目中封装库的对外接口类 包括Qt的插件框架 希望接口类是一个比较干净的类 不需要继承自Object 与Qt无关系 但又需要它的子类使用Qt的信号和槽机制 则可以如下处理 接口类 处理请求 pragma once include thnet
  • 一文讲清楚内外网数据交换方案 可以解决哪些问题?

    首先 有内外网数据交换方案这个需求 前提是一定是做了内外网的隔离 将核心数据保护在内网之中 不能随意进行传输使用 做内外网隔离 在企业以及一些监管机构里面 比如金融 电力等行业 还是很普遍的的 一方面是出于自身安全性考虑 一方面是处于监管要
  • 面试题:偏向锁的十连问,你能接住几个?

    文章目录 前言 名词解释 问题解析 问题1 如何判断当前锁对象为偏向锁 问题2 偏向锁如何判断锁重入 问题3 符合什么条件才会尝试获取偏向锁 问题4 线程进入偏向锁后 会不会创建lock record 问题5 偏向锁膨胀后
  • npm run build Last few GCs

    npm run build Last few GCs 这是由于webpack执行时造成的内存溢出 lt Last few GCs gt 3906 0x3ce6a70 165833 ms Mark sweep 1374 0 1425 0 gt
  • Cannot find module ‘xxx‘

    方法一 直接进行npm install重新打包 方法二 如果npm install重新打包之后 仍然出现这个问题 可以进行删除node modules文件夹 同时强制清除缓存 rm rf node modules npm cache cle
  • C 库函数 - gmtime()

    描述 C 库函数 struct tm gmtime const time t timer 使用 timer 的值来填充 tm 结构 并用协调世界时 UTC 也被称为格林尼治标准时间 GMT 表示 声明 下面是 gmtime 函数的声明 st
  • 【QT】解决QTableView修改合并单元格内容无法修改到合并范围内的单元格

    问题 修改合并单元格的内容 修改合并单元格的内容时 希望直接修改到合并范围内的单元格 Qt没有实现这个功能 需要自己写出 Delegate来实现 方案 Delegate class EditDelegate public QStyledIt
  • 新年跨年烟花超酷炫合集【内含十八个烟花酷炫效果源码】

    以下展示为全部烟花特效效果 下方仅展示部分代码 源码获取见文末 HTML5烟花喷泉
  • 1005. K 次取反后最大化的数组和 && 增强for循环(foreach循环)遍历数组

    1005 K 次取反后最大化的数组和 原题链接 完成情况 解题思路 参考代码 1005K次取反后最大化的数组和 1005K次取反后最大化的数组和 简洁写法 错误经验吸取 增强for循环 foreach循环 遍历数
  • 关注MCU 开发中的无限循环

    在 MCU 的开发过程中 我们经常会遇到需要使用无限循环的情况 例如 在前后台系统中 我们需要在一个无限循环中处理各种任务 在实时性操作系统中 我们也可能需要在一个无限循环中调度各个任务 那么 处理无限循环的语句有哪些写法呢 目前常见的有两