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

C语言延时实现

C语言延时实现

在C语言中,delay 函数通过空循环实现延时,而不是像其他高级语言(如Python)直接使用 sleep 函数。这种实现方式是基于单片机的特性C语言的底层操作。下面详细解释为什么这种空循环可以实现延时,以及它与 sleep 的区别。


1. 为什么空循环可以实现延时?

单片机的运行机制
  • 单片机是一种嵌入式设备,其程序是直接运行在硬件上的,没有操作系统的支持。
  • 单片机的每条指令执行时间都是固定的,由时钟频率决定。例如,51单片机的典型时钟频率是12MHz,每个机器周期为1µs。
  • 空循环(如 for 循环)会占用CPU时间,执行一定次数的指令,从而实现延时。
空循环的延时原理
  • 空循环的每次迭代都会执行一些指令(如变量比较、自增等),这些指令需要一定的时间。

  • 通过调整循环次数,可以控制延时的总时间。

  • 例如,以下代码:

    for (i = 0; i < ms; i++)for (j = 0; j < 120; j++);
    
    • 外层循环 i 执行 ms 次。
    • 内层循环 j 执行120次。
    • 每次内层循环的执行时间约为1µs(假设时钟频率为12MHz),因此总延时约为 ms 毫秒。

2. 为什么不用 sleep 函数?

单片机的特殊性
  • 单片机通常没有操作系统,因此没有像 sleep 这样的系统调用。
  • sleep 是操作系统提供的功能,依赖于操作系统的调度机制,而单片机是直接运行在硬件上的,没有这种支持。
sleep 的实现方式
  • 在高级语言中,sleep 是通过操作系统的定时器任务调度实现的。
  • 调用 sleep 时,操作系统会将当前任务挂起,切换到其他任务,直到指定的时间到达。
  • 这种方式依赖于操作系统的支持,而单片机没有操作系统。

3. 空循环延时的优缺点

优点
  • 简单易用:不需要额外的硬件或软件支持,直接通过代码实现。
  • 精确控制:通过调整循环次数,可以精确控制延时时间。
缺点
  • 占用CPU资源:空循环会占用CPU时间,导致CPU无法执行其他任务。
  • 不适用于长时间延时:长时间的空循环会显著降低程序的效率。

4. 其他延时方式

在单片机中,除了空循环延时,还可以使用以下方式实现延时:

定时器中断
  • 使用单片机的硬件定时器,设置定时器的时间间隔。
  • 定时器到达指定时间后,触发中断,在中断服务程序中处理延时逻辑。
  • 优点:不占用CPU时间,适合精确延时。
  • 缺点:需要配置定时器,代码复杂度较高。
硬件延时模块
  • 某些单片机提供硬件延时模块,可以直接调用库函数实现延时。
  • 例如,STM32单片机的 HAL_Delay 函数。
  • 优点:使用方便,精度高。
  • 缺点:依赖硬件支持。

5. 示例代码对比

空循环延时
void delay(unsigned int ms) {unsigned int i, j;for (i = 0; i < ms; i++)for (j = 0; j < 120; j++);
}
定时器中断延时
void Timer0_Init() {TMOD = 0x01; // 定时器0,模式1TH0 = 0xFC;  // 定时初值TL0 = 0x18;ET0 = 1;     // 使能定时器0中断EA = 1;      // 使能总中断TR0 = 1;     // 启动定时器0
}void Timer0_ISR() interrupt 1 {TH0 = 0xFC;  // 重装定时初值TL0 = 0x18;// 延时逻辑
}

6. 总结

  • 空循环延时是通过占用CPU时间实现的,适用于简单的延时需求。
  • sleep 是操作系统提供的功能,依赖于任务调度,单片机不支持。
  • 在单片机中,空循环延时是最简单的方式,但长时间延时建议使用定时器中断。

希望这个解释能帮助你理解空循环延时的原理!如果还有其他问题,欢迎继续提问。

相关文章:

C语言延时实现

C语言延时实现 在C语言中&#xff0c;delay 函数通过空循环实现延时&#xff0c;而不是像其他高级语言&#xff08;如Python&#xff09;直接使用 sleep 函数。这种实现方式是基于单片机的特性和C语言的底层操作。下面详细解释为什么这种空循环可以实现延时&#xff0c;以及它…...

OSI模型的网络层中产生拥塞的主要原因?

&#xff08; 1 &#xff09;缓冲区容量有限&#xff1b;&#xff08; 1.5 分&#xff09; &#xff08; 2 &#xff09;传输线路的带宽有限&#xff1b;&#xff08; 1.5 分&#xff09; &#xff08; 3 &#xff09;网络结点的处理能力有限&#xff1b;&#xff08; 1 分…...

机器学习周报-ModernTCN文献阅读

文章目录 摘要Abstract 0 提升有效感受野&#xff08;ERF&#xff09;1 相关知识1.1 标准卷积1.2 深度分离卷积&#xff08;Depthwise Convolution&#xff0c;DWConv&#xff09;1.3 逐点卷积&#xff08;Pointwise Convolution&#xff0c;PWConv&#xff09;1.4 组卷积(Grou…...

什么是网关路由

1.认识网关 网关&#xff08;Gateway&#xff09;和路由&#xff08;Router&#xff09;是两个相关但不同的概念。 一、网关&#xff08;Gateway&#xff09; 定义 网关是一个网络节点&#xff0c;它充当了不同网络之间的连接点。可以将其看作是一个网络的 “大门”&#xf…...

信号的产生、处理

一、信号的概念 信号是linux系统提供的一种&#xff0c;向指定进程发送特定事件的方式。收到信号的进程&#xff0c;要对信号做识别和处理。信号的产生是异步的&#xff0c;进程在工作过程中随时可能收到信号。 信号的种类分为以下这么多种&#xff08;用指令kill -l查看&…...

在Linux中,zabbix如何监控脑裂?

在Linux中&#xff0c;zabbix监控脑裂主要涉及对高可用&#xff08;HA&#xff09;系统中可能发生的节点间通信中断或不一致状态的监控。脑裂问题通常发生在具有冗余节点的高可用系统中&#xff0c;如集群、HA系统或分布式数据库系统&#xff0c;当节点之间失去通信时&#xff…...

C++基础概念复习

前言 本篇文章作基础复习用&#xff0c;主要是在C学习中遇到的概念总结&#xff0c;后续会继续补充。如有不足&#xff0c;请前辈指出&#xff0c;万分感谢。 1、什么是封装&#xff0c;有何优点&#xff0c;在C中如何体现封装这一特性&#xff1f; 封装是面向对象编程&…...

Earth靶场

打开靶机后使用 arp-scan -l 查询靶机 ip 我们使用 nmap 进行 dns 解析 把这两条解析添加到hosts文件中去&#xff0c;这样我们才可以访问页面 这样网站就可以正常打开 扫描ip时候我们发现443是打开的&#xff0c;扫描第二个dns解析的443端口能扫描出来一个 txt 文件 dirsear…...

JavaScript 日期格式

在 JavaScript 中,日期格式可以通过 Date 对象进行操作和格式化。下面是一些常见的 JavaScript 日期格式及其示例: 1. ISO 8601 格式 ISO 8601 是一种标准的日期和时间表示方法,格式为 YYYY-MM-DDTHH:mm:ss.sssZ,例如: let date = new Date(); console.log(date.toISOS…...

django vue3实现大文件分段续传(断点续传)

前端环境准备及目录结构&#xff1a; npm create vue 并取名为big-file-upload-fontend 通过 npm i 安装以下内容"dependencies": {"axios": "^1.7.9","element-plus": "^2.9.1","js-sha256": "^0.11.0&quo…...

xiaoya小雅超集使用夸克网盘缓存教程

距离上一次小白写到关于小雅的教程已经过去了一周的时间&#xff0c;这段时间里&#xff0c;有很多小伙伴都想知道怎么用夸克网盘作为小雅的缓存。 今天这不就来了吗&#xff1f; 这段时间确实是比较忙&#xff0c;毕竟快过年了嘛&#xff0c;辛辛苦苦一整年&#xff0c;至少…...

计算机基础知识复习1.4

数据库事务 #开启一个事务 start transaction #执行SQL语句 SQL1 SQL2 .. #提交事务 commit 类加载器 启动类加载器&#xff1a;负责加载Java的核心库 用C编写&#xff0c;是JVM的一部分&#xff0c;启动类加载器无法被Java程序直接引用 扩展类加载器&#xff1a;是Java语…...

SpringMVC(三)请求

目录 一、RequestMapping注解 1.RequestMapping的属性 实例 1.在这里创建文件&#xff0c;命名为Test: 2.复现-返回一个页面&#xff1a; 创建test界面&#xff08;随便写点什么&#xff09;&#xff1a; Test文件中编写&#xff1a; ​编辑 运行&#xff1a; 3.不返回…...

Node.js应用程序遇到了内存溢出的问题

vue 项目 跑起来&#xff0c;一直报错&#xff0c;内存溢出 在 文件node_modules 里 .bin > vue-cli-service.cmd 在依赖包这个文件第一行加上这个 node --max-old-space-size102400 "%~dp0\..\vue\cli-service\bin\vue-cli-service.js" %* node --max-old-s…...

如何构建云原生时空大数据平台?

在现代企业中&#xff0c;随着对技术的依赖日益加深&#xff0c;空间数据的重要性愈发显著。它通过结合地理成分&#xff08;如纬度、经度、地址、邮编等&#xff09;与业务数据&#xff0c;成为解决复杂问题的重要工具。地理空间数据可从多种来源获取&#xff0c;例如卫星影像…...

二极管钳位电路分享

二极管钳位&#xff08;I/O的过压/浪涌保护等&#xff09; 如果我们的电路环境接收外部输入信号容易受到噪声影响&#xff0c;那我们必须采取过压和浪涌保护措施&#xff0c;其中一个方式就是二极管钳位保护。 像上图&#xff0c;从INPUT输入的电压被钳位在-Vf与VCCVf之间&…...

腾讯云智能结构化 OCR:驱动多行业数字化转型的核心引擎

在当今数字化时代的汹涌浪潮中&#xff0c;数据已跃升为企业发展的关键要素&#xff0c;其高效、精准的处理成为企业在激烈市场竞争中脱颖而出的核心竞争力。腾讯云智能结构化 OCR 技术凭借其前沿的科技架构与卓越的功能特性&#xff0c;宛如一颗璀璨的明星&#xff0c;在交通、…...

19.3、Unix Linux安全分析与防护

目录 UNIX/Linux系统的安全分析与防护UNIX/Linux系统安全增强技术UNIX/Linux安全模块应用参考国产操作系统安全分析与防护 UNIX/Linux系统的安全分析与防护 unix和linux操作系统分成三层&#xff0c;分别是硬件层&#xff0c;系统内核层以及应用层。Windows系统也是分成三层&a…...

JVM对象内存结构

1对象内存结构说明 注意&#xff1a; 如果对象为数组对象&#xff0c;在对象头后面有4字节存储数组长度&#xff1b; 1.1对象头 对象头分为Mark Word和Class Pointer两部分&#xff1b; Mark Word&#xff1a;对象基础信息 32位操作系统中占4字节&#xff0c;64位操作系统中占8…...

联邦学习和大模型相结合: 数据隐私,提升训练效率,架构优化

联邦学习和大模型相结合: 数据隐私,提升训练效率,架构优化 数据隐私保护方面 增强隐私保护机制:大模型通常需要大量的数据进行训练,而联邦学习可以在不共享原始数据的情况下进行模型训练。结合两者,可以设计出更强大的隐私保护机制,如利用联邦学习的加密技术和差分隐私…...

拯救C盘爆红!WindowsCleaner:开源免费的Windows系统清理神器

拯救C盘爆红&#xff01;WindowsCleaner&#xff1a;开源免费的Windows系统清理神器 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服&#xff01; 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 还在为C盘爆红而烦恼吗&#…...

具身智能会取代人类工作吗?安全性如何?

替代与创造并存 安全性挑战&#xff1a;技术风险与伦理风险交织 结论&#xff1a;在替代与共生之间寻找平衡...

3个常见3D打印难题如何被Voron 2.4 CoreXY架构巧妙化解

3个常见3D打印难题如何被Voron 2.4 CoreXY架构巧妙化解 【免费下载链接】Voron-2 Voron 2 CoreXY 3D Printer design 项目地址: https://gitcode.com/gh_mirrors/vo/Voron-2 想象一下&#xff0c;您正在打印一个精密机械零件&#xff0c;但打印到一半时&#xff0c;模型…...

从零搭建一个可复用的UVM验证环境:以APB总线为例的保姆级步骤拆解

从零搭建一个可复用的UVM验证环境&#xff1a;以APB总线为例的保姆级步骤拆解 在芯片验证领域&#xff0c;UVM&#xff08;Universal Verification Methodology&#xff09;已经成为事实上的行业标准。但对于刚接触UVM的工程师来说&#xff0c;从理论到实践的跨越往往令人望而…...

2011-2025年城市级百度指数搜索日月年源数据+城市间矩阵

之前我们发布了百度指数的关键词定制爬取服务&#xff0c;包括指定地区、时间、关键词以及城市VS城市的百度指数数据&#xff1a; 【爬虫】各省/地级市—环境关注/数字经济等百度指数&#xff08;—最新年份&#xff09; (qq.com) 也曾经发布过2011-2024年所有城市的城市间搜…...

别再只调API了!拆解讯飞AIUI在智能机器人上的完整工作流与配置细节

讯飞AIUI在智能机器人中的深度集成与实践指南 从API调用到系统级整合的跨越 在智能机器人开发领域&#xff0c;语音交互早已不再是简单的命令词识别。六麦克风阵列、多模态交互、场景化语义理解等技术的融合&#xff0c;要求开发者必须从系统架构层面思考语音能力的整合。讯飞A…...

本地LLM部署:硬件配置指南

文章主要探讨了自托管 AI 的优势及必要性&#xff0c;详细分析了与 AI 相关的关键硬件组件&#xff0c;包括 GPU、RAM、CPU 和 SSD&#xff0c;并强调了显存&#xff08;VRAM&#xff09;在 LLM 推理中的核心作用。文章还提供了从入门到发烧的硬件配置建议&#xff0c;如 Ollam…...

5步彻底解决FanControl传感器检测异常:完整修复指南

5步彻底解决FanControl传感器检测异常&#xff1a;完整修复指南 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/F…...

别再只盯着RCE了:Aria2 RPC接口的任意文件写入漏洞,手把手教你复现与本地环境搭建

深入解析Aria2 RPC接口的任意文件写入漏洞&#xff1a;从环境搭建到原理分析 在开源下载工具领域&#xff0c;Aria2凭借其轻量级、多协议支持的特性赢得了众多技术用户的青睐。然而&#xff0c;正是这样一个看似简单的工具&#xff0c;其RPC接口却隐藏着可能被恶意利用的安全隐…...

“Webinar Replay: Modern Component Design with Spring” 指的是一场已录制回放的网络研讨会(Webinar)

“Webinar Replay: Modern Component Design with Spring” 指的是一场已录制回放的网络研讨会&#xff08;Webinar&#xff09;&#xff0c;主题聚焦于使用 Spring 框架进行现代组件化设计。该活动通常由 Spring 官方团队、Pivotal&#xff08;现属 VMware&#xff09;或 Spri…...