关注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 开发中的无限循环 的相关文章

  • MCU(单片机)datasheet(规格说明书)

    STC 宏晶 型号 程序容量 datasheet STC8G2K64S4 36I QFN48 64K 规格说明书链接 https pan baidu com s 18IickcTlMHgesCkmXFi7Lg pwd tala 提取码 ta
  • ITX-RK3588J在Ubuntu22.04上进行SDK编译与烧写

    一 SDK下载 在Window上下载好最新的SDK 并把他放拉到虚拟机里的Ubuntu22 04上 二 搭建编译环境 Firefly维基教程上 需要安装编译环境 直接使用 sudo apt get install 软件名 安装全部软件 su
  • 合宙Air103

    基础资料 基于Air103开发板 Air103 LuatOS 文档 上手 开发上手 LuatOS 文档 探讨重点 对官方社区库接口RC522模块库调用及示例进行复现及分析 了解RDIF及非接触式IC卡的原理及操作方法 实现功能 利用已知的A
  • 使用fromelf把axf文件转换成elf格式

    FROMELF用法 命令格式 fromelf options input file fromelf h即可打印出帮助信息 Product MDK Plus 5 29 Component ARM Compiler 5 06 update 6
  • 13-ESP8266连接MQTT服务器发送数据

    Author teacherXue 一 什么是MQTT 定义 MQTT是一个基于客户端 服务器的消息发布 订阅传输协议 MQTT协议是轻量 简单 开放和易于实现的 这些特点使它适用范围非常广泛 在很多情况下 包括受限的环境中 如 机器与机器
  • Event Driven Class OSAL 基于事件驱动的模拟操作系统

    EventDrivenClassOSAL详解 Event Driven Class OSAL 基于事件驱动的模拟操作系统 前言 什么是OSAL OSAL为 Operating System Abstraction Layer 即 操作系统抽
  • 合宙Air105

    基于Air105开发板 Air105 LuatOS 文档 上手 开发上手 LuatOS 文档 前文 合宙Air105 摄像头 capture SPI Serial 串口 TFTLCD Micro SD卡 GC032A USB转TTL 官方d
  • RISC-V MCU开发 (七):代码调试

    RISC V MCU开发 七 代码调试 MounRiver Studio MRS 配合GD Link WCH Link JLink等在线调试下载器 可支持GDVFx系列 CH56x CH57x CH58x CH32Fx CH32Vx等RIS
  • CORE-ESP32C3

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

    前言 shineblink core 开发板 简称Core 的库函数支持NBIOT通信功能 所以只用几行代码即可实现基于M5311 NB模块的联网通信 TCP UDP MQTT 功能 这里我们主要介绍通过TCP实现联网通信的功能 更多关于T
  • 合宙Air700E/4G模块使用AT指令查询基础信息

    Air700E使用AT指令查询基础信息 前言 AT指令使用 AT 确认AT固件 AT CGMR 请求制造商版本 AT CGMM 返回制造商型号编码 AT CGSN x 查询产品序列号 AT CGSN 1 查询IMEI AT CGSN 2 查
  • Esp8266 Node Mcu 一直乱码的问题详解

    最近一直在做项目 遇到的这个问题花了我很长时间 因此在这里写出自己的经历供大家参考 喜欢的可以点个赞 比较简单的方案 在Arduino上设置Node Mcu 1 打开文件 gt 首选项 复制这样一个网址 http arduino esp82
  • STM32CubeMX学习六 之ADC配置

    文章目录 前言 一 本地环境 二 开始 1 定时器配置 2 引脚配置 在这里插入图片描述 https img blog csdnimg cn e5b6f155a1b8468cb15046a0a9d031cd png 3 内部时钟配置 4 A
  • HT1621B液晶驱动(附电路图)

    最近做了一个项目用到了HT1621 电路图 datasheet code HT1621B datasheet include ht1621 h void ht1621 send high order data UCHAR data UCHA
  • 第36章_瑞萨MCU零基础入门系列教程之步进电机控制实验

    本教程基于韦东山百问网出的 DShanMCU RA6M5开发板 进行编写 需要的同学可以在这里获取 https item taobao com item htm id 728461040949 配套资料获取 https renesas do
  • PWM模块:边沿对齐PWM和中心对齐PWM

    PWM模块 边沿对齐PWM和中心对齐PWM 当PWM 时基工作在自由运行模式时 模块产生边沿对齐的PWM 信号 给定PWM 通道的输出1 边沿对齐模式 信号的周期由装入PTPER 的值指定 其占空比由相应的PDCx 寄存器指定 参见图15
  • 【零基础玩转BLDC系列】基于反电动势过零检测法的无刷直流电机控制原理

    无刷直流电动机基本转动原理请参考 基于HALL传感器的无刷直流电机控制原理 基本原理及基础知识本篇不再赘述 目录 反电势过零检测法的原理 反电势过零检测实现方法 位置传感器的存在限制了无刷直流电机在某些特定场合中的应用 如 使电机系统的体积
  • 俄罗斯方块游戏(C语言)

    简介 俄罗斯方块 Tetris 是一款经典的游戏 下面是用C语言实现俄罗斯方块的示例代码 code include
  • 关注MCU 开发中的无限循环

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