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语言中,delay 函数通过空循环实现延时,而不是像其他高级语言(如Python)直接使用 sleep 函数。这种实现方式是基于单片机的特性和C语言的底层操作。下面详细解释为什么这种空循环可以实现延时,以及它…...
OSI模型的网络层中产生拥塞的主要原因?
( 1 )缓冲区容量有限;( 1.5 分) ( 2 )传输线路的带宽有限;( 1.5 分) ( 3 )网络结点的处理能力有限;( 1 分…...
机器学习周报-ModernTCN文献阅读
文章目录 摘要Abstract 0 提升有效感受野(ERF)1 相关知识1.1 标准卷积1.2 深度分离卷积(Depthwise Convolution,DWConv)1.3 逐点卷积(Pointwise Convolution,PWConv)1.4 组卷积(Grou…...
什么是网关路由
1.认识网关 网关(Gateway)和路由(Router)是两个相关但不同的概念。 一、网关(Gateway) 定义 网关是一个网络节点,它充当了不同网络之间的连接点。可以将其看作是一个网络的 “大门”…...
信号的产生、处理
一、信号的概念 信号是linux系统提供的一种,向指定进程发送特定事件的方式。收到信号的进程,要对信号做识别和处理。信号的产生是异步的,进程在工作过程中随时可能收到信号。 信号的种类分为以下这么多种(用指令kill -l查看&…...
在Linux中,zabbix如何监控脑裂?
在Linux中,zabbix监控脑裂主要涉及对高可用(HA)系统中可能发生的节点间通信中断或不一致状态的监控。脑裂问题通常发生在具有冗余节点的高可用系统中,如集群、HA系统或分布式数据库系统,当节点之间失去通信时ÿ…...
C++基础概念复习
前言 本篇文章作基础复习用,主要是在C学习中遇到的概念总结,后续会继续补充。如有不足,请前辈指出,万分感谢。 1、什么是封装,有何优点,在C中如何体现封装这一特性? 封装是面向对象编程&…...
Earth靶场
打开靶机后使用 arp-scan -l 查询靶机 ip 我们使用 nmap 进行 dns 解析 把这两条解析添加到hosts文件中去,这样我们才可以访问页面 这样网站就可以正常打开 扫描ip时候我们发现443是打开的,扫描第二个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实现大文件分段续传(断点续传)
前端环境准备及目录结构: 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小雅超集使用夸克网盘缓存教程
距离上一次小白写到关于小雅的教程已经过去了一周的时间,这段时间里,有很多小伙伴都想知道怎么用夸克网盘作为小雅的缓存。 今天这不就来了吗? 这段时间确实是比较忙,毕竟快过年了嘛,辛辛苦苦一整年,至少…...
计算机基础知识复习1.4
数据库事务 #开启一个事务 start transaction #执行SQL语句 SQL1 SQL2 .. #提交事务 commit 类加载器 启动类加载器:负责加载Java的核心库 用C编写,是JVM的一部分,启动类加载器无法被Java程序直接引用 扩展类加载器:是Java语…...
SpringMVC(三)请求
目录 一、RequestMapping注解 1.RequestMapping的属性 实例 1.在这里创建文件,命名为Test: 2.复现-返回一个页面: 创建test界面(随便写点什么): Test文件中编写: 编辑 运行: 3.不返回…...
Node.js应用程序遇到了内存溢出的问题
vue 项目 跑起来,一直报错,内存溢出 在 文件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…...
如何构建云原生时空大数据平台?
在现代企业中,随着对技术的依赖日益加深,空间数据的重要性愈发显著。它通过结合地理成分(如纬度、经度、地址、邮编等)与业务数据,成为解决复杂问题的重要工具。地理空间数据可从多种来源获取,例如卫星影像…...
二极管钳位电路分享
二极管钳位(I/O的过压/浪涌保护等) 如果我们的电路环境接收外部输入信号容易受到噪声影响,那我们必须采取过压和浪涌保护措施,其中一个方式就是二极管钳位保护。 像上图,从INPUT输入的电压被钳位在-Vf与VCCVf之间&…...
腾讯云智能结构化 OCR:驱动多行业数字化转型的核心引擎
在当今数字化时代的汹涌浪潮中,数据已跃升为企业发展的关键要素,其高效、精准的处理成为企业在激烈市场竞争中脱颖而出的核心竞争力。腾讯云智能结构化 OCR 技术凭借其前沿的科技架构与卓越的功能特性,宛如一颗璀璨的明星,在交通、…...
19.3、Unix Linux安全分析与防护
目录 UNIX/Linux系统的安全分析与防护UNIX/Linux系统安全增强技术UNIX/Linux安全模块应用参考国产操作系统安全分析与防护 UNIX/Linux系统的安全分析与防护 unix和linux操作系统分成三层,分别是硬件层,系统内核层以及应用层。Windows系统也是分成三层&a…...
JVM对象内存结构
1对象内存结构说明 注意: 如果对象为数组对象,在对象头后面有4字节存储数组长度; 1.1对象头 对象头分为Mark Word和Class Pointer两部分; Mark Word:对象基础信息 32位操作系统中占4字节,64位操作系统中占8…...
联邦学习和大模型相结合: 数据隐私,提升训练效率,架构优化
联邦学习和大模型相结合: 数据隐私,提升训练效率,架构优化 数据隐私保护方面 增强隐私保护机制:大模型通常需要大量的数据进行训练,而联邦学习可以在不共享原始数据的情况下进行模型训练。结合两者,可以设计出更强大的隐私保护机制,如利用联邦学习的加密技术和差分隐私…...
拯救C盘爆红!WindowsCleaner:开源免费的Windows系统清理神器
拯救C盘爆红!WindowsCleaner:开源免费的Windows系统清理神器 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 还在为C盘爆红而烦恼吗&#…...
具身智能会取代人类工作吗?安全性如何?
替代与创造并存 安全性挑战:技术风险与伦理风险交织 结论:在替代与共生之间寻找平衡...
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 想象一下,您正在打印一个精密机械零件,但打印到一半时,模型…...
从零搭建一个可复用的UVM验证环境:以APB总线为例的保姆级步骤拆解
从零搭建一个可复用的UVM验证环境:以APB总线为例的保姆级步骤拆解 在芯片验证领域,UVM(Universal Verification Methodology)已经成为事实上的行业标准。但对于刚接触UVM的工程师来说,从理论到实践的跨越往往令人望而…...
2011-2025年城市级百度指数搜索日月年源数据+城市间矩阵
之前我们发布了百度指数的关键词定制爬取服务,包括指定地区、时间、关键词以及城市VS城市的百度指数数据: 【爬虫】各省/地级市—环境关注/数字经济等百度指数(—最新年份) (qq.com) 也曾经发布过2011-2024年所有城市的城市间搜…...
别再只调API了!拆解讯飞AIUI在智能机器人上的完整工作流与配置细节
讯飞AIUI在智能机器人中的深度集成与实践指南 从API调用到系统级整合的跨越 在智能机器人开发领域,语音交互早已不再是简单的命令词识别。六麦克风阵列、多模态交互、场景化语义理解等技术的融合,要求开发者必须从系统架构层面思考语音能力的整合。讯飞A…...
本地LLM部署:硬件配置指南
文章主要探讨了自托管 AI 的优势及必要性,详细分析了与 AI 相关的关键硬件组件,包括 GPU、RAM、CPU 和 SSD,并强调了显存(VRAM)在 LLM 推理中的核心作用。文章还提供了从入门到发烧的硬件配置建议,如 Ollam…...
5步彻底解决FanControl传感器检测异常:完整修复指南
5步彻底解决FanControl传感器检测异常:完整修复指南 【免费下载链接】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接口的任意文件写入漏洞:从环境搭建到原理分析 在开源下载工具领域,Aria2凭借其轻量级、多协议支持的特性赢得了众多技术用户的青睐。然而,正是这样一个看似简单的工具,其RPC接口却隐藏着可能被恶意利用的安全隐…...
“Webinar Replay: Modern Component Design with Spring” 指的是一场已录制回放的网络研讨会(Webinar)
“Webinar Replay: Modern Component Design with Spring” 指的是一场已录制回放的网络研讨会(Webinar),主题聚焦于使用 Spring 框架进行现代组件化设计。该活动通常由 Spring 官方团队、Pivotal(现属 VMware)或 Spri…...
