嵌入式硬件篇---单片机周期
文章目录
- 前言
前言
在单片机中,时序控制是其执行指令和协调外设的核心基础。以下是单片机中常见的各种周期及其详细说明,以层次结构展开:
- 时钟周期(Clock Cycle)
定义:
时钟周期是单片机的最小时间单位,由外部晶振或内部振荡器产生的时钟信号决定。每个时钟周期对应一个时钟脉冲的上升沿到下一个上升沿(或下降沿)的时间。例如,12MHz 晶振的时钟周期为83.33ns。
作用:
所有内部操作(如寄存器读写、ALU运算)均以时钟周期为基准同步进行。
- 机器周期(Machine Cycle)
定义:
机器周期是单片机完成一个基本操作所需的时间,通常由多个时钟周期组成。例如,传统8051单片机的机器周期包含 12个时钟周期。
对于传统8051(12时钟周期/机器周期):1us
现代增强型8051(如STC系列)可能采用 1时钟周期/机器周期,速度提升12倍。
典型操作:
取指(Fetch):从程序存储器读取指令。
译码(Decode):解析指令功能。
执行(Execute):执行运算或数据传输。
架构差异:
CISC架构(如8051):复杂指令可能需要多个机器周期。
RISC架构(如ARM Cortex-M):单周期指令为主,效率更高。
- 指令周期(Instruction Cycle)
定义:
执行一条完整指令所需的时间,通常由1个或多个机器周期组成。指令周期因指令复杂度而异。
示例(以8051为例):
单周期指令:MOV A, #data(1机器周期)。
双周期指令:ADD A, direct(2机器周期)。
四周期指令:MUL AB(4机器周期)。
重要性:
直接影响程序执行速度,需在实时系统中精确计算指令耗时。
例如,使用12MHz晶振的8051执行 NOP(单周期)耗时1μs,而 DIV AB(四周期)耗时4μs。
- 状态周期(State Cycle)
定义:
某些架构将机器周期进一步细分为多个状态周期(如S1、S2),每个状态周期对应一个时钟周期。
在传统8051中,一个机器周期包含 6个状态周期(S1~S6),每个状态周期由2个时钟脉冲组成。
作用:
用于协调内部操作阶段,例如:
S1~S2:取指阶段。
S3~S4:译码阶段。
S5~S6:执行阶段。
- 总线周期(Bus Cycle)
定义:
单片机通过总线(地址总线、数据总线、控制总线)与外部存储器或外设通信的时间单位。
例如,访问外部RAM时,需多个时钟周期完成地址锁存、数据读写等操作。
典型场景:
传统8051访问外部ROM时,每个总线周期占用2个机器周期(24个时钟周期)。
- 中断响应周期(Interrupt Latency)
定义:
从中断触发到执行中断服务程序(ISR)第一句代码的时间,通常包含:
完成当前指令(若为多周期指令)。
保存现场(PC、状态寄存器等)。
跳转到ISR入口地址。
优化策略:
使用快速中断(如ARM的NVIC嵌套向量中断)。
缩短关键代码段的执行时间。
- 流水线周期(Pipeline Stage)
定义:
现代单片机采用流水线技术,将指令执行分为多个阶段(取指、译码、执行、写回),各阶段并行处理以提高效率。
经典5级流水线(如ARM9):每个阶段占用1个时钟周期,理想情况下每个时钟周期完成一条指令。
冲突处理:
数据冲突:通过旁路(Bypassing)或插入空操作(NOP)解决。
分支预测:减少流水线清空导致的性能损失。
关键概念对比
周期类型 组成关系 典型时长(以8051为例) 作用场景
时钟周期 基础时间单位 83.33ns(12MHz晶振) 所有操作的同步基准
机器周期 12个时钟周期(传统8051) 1μs(12MHz晶振) 完成取指、译码、执行
指令周期 1~4个机器周期(因指令而异) 1μs(单周期指令) 执行单条指令的总时间
总线周期 多个机器周期 2μs(访问外部存储器) 外部设备通信
实际应用中的注意事项
时钟源选择:
外部晶振精度高,适合通信协议(如UART、SPI)。
内部RC振荡器成本低但稳定性差,需校准。
功耗与速度权衡:
降低时钟频率可减少功耗(如电池供电设备)。
高频时钟适合实时性要求高的场景(如电机控制)。
时序计算:
延时函数需精确计算指令周期数。。
流水线优化:
避免频繁跳转(如循环展开)。
使用单周期指令替代多周期指令。
总结
单片机的周期体系是其时序控制的核心,从时钟周期到指令周期层层递进,直接影响执行效率和实时性。理解这些概念有助于:
优化代码速度(如选择单周期指令)。
设计精准延时(如通信协议的波特率匹配)。
降低系统功耗(动态调整时钟频率)。
不同架构(如8051、ARM、PIC)的周期设计差异显著,实际开发中需参考具体芯片的数据手册。
相关文章:
嵌入式硬件篇---单片机周期
文章目录 前言 前言 在单片机中,时序控制是其执行指令和协调外设的核心基础。以下是单片机中常见的各种周期及其详细说明,以层次结构展开: 时钟周期(Clock Cycle) 定义: 时钟周期是单片机的最小时间单位&a…...
【双指针】专题:LeetCode 283题解——移动零
移动零 一、题目链接二、题目三、题目解析四、算法原理两个指针的作用以及三个区间总结 五、与快速排序的联系六、编写代码七、时间复杂度、空间复杂度 一、题目链接 移动零 二、题目 三、题目解析 “保持非零元素的相对顺序”,比如,示例1中非零元素1…...
2025蓝桥杯JavaB组
说明 博主自己水平有限,而且答案也不一定对,下面代码和思路仅作分享。我只把我考场上做了的写出来了,有什么问题欢迎评论区交流。 A:逃离高塔 思路: 由于有了去年的经验,所以一上来我就是找规律…...
SQL学习--基础语法学习
SQL和excle对比 学习目标 单表查询 项目背景 SQL 练习环境 SQL Online Compiler - Next gen SQL Editor 商品信息表:https://study-zhibo.oss-cn-shanghai.aliyuncs.com/test/%E5%95%86%E5%93%81%E4%BF%A1%E6%81%AF%E8%A1%A8.csv 订单明细表:https://…...
MATLAB2022b安装
1 从百度网盘下载MATLAB2022b,下载完成后解压到某个文件夹; 链接: MATLAB2022b 提取码: 6666 2 打开解压后的文件夹,进入setup文件夹,双击打开“setup.exe”文件; 3 在弹出窗口中选择“高级选项”-->“我有文件安…...
如何更改OCP与metadb集群的连接方式 —— OceanBase运维管理
背景 许多用户都会借助OCP平台来进行OceanBase集群的运维与监控,且因为考虑单节点的OCP部署,在遇故障时可能会短时间出现无法管控 OceanBase集群,多数用户倾向于采用多节点方式来部署OCP,即 OCP的 metadb集群也是三节点的集群部署…...
HTTP实现心跳模块
HTTP实现心跳模块 使用轻量级的cHTTP库cpp-httplib重现实现HTTP心跳模块 头文件HttplibHeartbeat.h #ifndef HTTPLIB_HEARTBEAT_H #define HTTPLIB_HEARTBEAT_H#include <string> #include <thread> #include <atomic> #include <chrono> #include …...
架构总览怎么写,才算工业级?
📈系统架构文档是整个项目最重要的起点,但很多人第一章就“写穿了”: 不是写得太细,就是没有重点。想要写出高质量、能协作、能传承的架构文档,这一篇会告诉你应该怎么做—— ✅ 架构总览的终极目标 明确边界、定义角色、画清数据流 别讲执行细节,别深入函数调用。 ✅ 架…...
Python10天突击--Day 3:函数式编程突破
以下是 Python 中实现方法耗时统计装饰器的完整方案,包含同步/异步支持、多级嵌套调用统计、可视化输出和性能分析等高级功能: 基础版:同步方法计时装饰器 import time from functools import wrapsdef timeit(func):"""基础…...
Datawhale 入驻 GitCode:以开源力量推动 AI 教育公平与创新
在 AI 技术深度重塑教育生态的今天,国内首个 AI 开源学习社区 —— Datawhale 正式加入 GitCode 开源平台!作为覆盖全球 3000 高校、培养超百万 AI 人才的创新社区,Datawhale 将通过开源协作模式,为人工智能教育公平注入新动能&a…...
ChatDBA:一个基于AI的智能数据库助手
今天给大家介绍一个基于 AI 大语言模型实现数据库故障诊断的智能助手:ChatDBA。 ChatDBA 是由上海爱可生信息技术股份有限公司开发,通过对话交互,提供数据库故障诊断、专业知识学习、SQL 生成和优化等功能,旨在提升 DBA 工作效率。…...
MacOS中的鼠标、触控板的设置研究
一、背景和写这篇文章的原因 想搞清楚和配置好鼠标,比如解决好为什么我的滚动那么难用?怎么设置滚轮的方向跟windows相同?调整双击速度,调整鼠标滚轮左右拨动的"冷却时间"。 二、各种设置之详细解释 1. MacOS设置 -&…...
asp.net core 项目发布到 IIS 服务器
目录 一、VS2022 发布 二、设置IIS服务 三、配置IIS管理器 (一)打开IIS管理器 (二)添加站台 (三)配置应用程式集区 四、安装ASP.NET Core Hosting Bundle 五、设定IIS的日志位置 六、测试 一、VS2…...
如何解决线程安全问题(不涉及分布式情况)
线程安全问题本质 当多个线程并发操作共享资源(变量/对象)时,可能因非原子性操作或内存可见性问题导致数据不一致。 解决方案一:synchronized 关键字 实现方式: 实例方法同步锁 在实现Runnable接口的自定义线…...
Spring Boot(二十二):RedisTemplate的List类型操作
RedisTemplate和StringRedisTemplate的系列文章详见: Spring Boot(十七):集成和使用Redis Spring Boot(十八):RedisTemplate和StringRedisTemplate Spring Boot(十九)…...
【Nodebb系列】Nodebb笔记写入方案
NodeBB写入方案 前言 最近在整理以前记录的碎片笔记,想把它们汇总到NodeBB中,方便管理和浏览。但是笔记内容有点多,并且用发帖的形式写到NodeBB中会丢失时间信息,因此整理了一套NodeBB写入方案,大致流程如下…...
计算机视觉——基于YOLOV8 的人体姿态估计训练与推理
概述 自 Ultralytics 发布 YOLOV5 之后,YOLO 的应用方向和使用方式变得更加多样化且简单易用。从图像分类、目标检测、图像分割、目标跟踪到关键点检测,YOLO 几乎涵盖了计算机视觉的各个领域,似乎已经成为计算机视觉领域的“万能工具”。 Y…...
鸿蒙小案例---心情日记
效果演示 代码实现 import { router, window } from kit.ArkUIEntry Component struct Index {async aboutToAppear(): Promise<void> {let w await window.getLastWindow(getContext())w.setWindowSystemBarProperties({statusBarColor: #00C6C3,statusBarContentColo…...
力扣第206场周赛
周赛链接:竞赛 - 力扣(LeetCode)全球极客挚爱的技术成长平台 1. 二进制矩阵中的特殊位置 给定一个 m x n 的二进制矩阵 mat,返回矩阵 mat 中特殊位置的数量。 如果位置 (i, j) 满足 mat[i][j] 1 并且行 i 与列 j 中…...
从 SYN Flood 到 XSS:常见网络攻击类型、区别及防御要点
常见的网络攻击类型 SYN Flood、DoS(Denial of Service) 和 DDoS(Distributed Denial of Service) 是常见的网络攻击类型,它们的目标都是使目标系统无法正常提供服务。以下是它们的详细说明: 1. SYN Flood…...
el-tree 实现树形菜单子级取消选中后父级选中效果不变
背景 在复杂的企业级管理系统中,树形菜单是一种常见的数据展示和交互组件。传统的树形菜单通常存在以下交互局限: 子节点取消选中时,父节点会自动取消选中无法满足复杂的权限分配和数据筛选场景实际应用场景: 组织架构权限管理多层级资源分配复杂的数据筛选与展示实现需求…...
Java虚拟机——JVM(Java Virtual Machine)解析一
1.JVM是什么? 1.1 JVM概念 Java Virtual Machine (JVM) 是JDK的核心组件之一,它使得 Java 程序能够在任何支持 JVM 的设备或操作系统上运行,而无需修改源代码 JDK是什么,JDK和JVM是什么关系?1.Java IDE(Integrated …...
开源的PMPI库实现及示例代码
开源的PMPI库实现及示例代码 PMPI (Profiling MPI) 是MPI标准中定义的接口,允许开发者通过拦截MPI调用进行性能测量和调试。以下是几个常用的开源PMPI库实现: 1. MPICH的PMPI接口 MPICH本身提供了PMPI接口,可以直接使用。 2. OpenMPI的PM…...
【源码】SpringMvc源码分析
文章目录 SpringMVC 基础回顾核心组件源码分析DispatcherServletHandlerMappingHandlerAdapterViewResolver 请求处理流程源码解析 在当今的 Java Web 开发领域,SpringMVC 无疑是最为广泛应用的 Web 框架之一。它以其强大的功能、灵活的配置以及高度的…...
tcp特点+TCP的状态转换图+time_wait详解
tcp特点TCP的状态转换图time wait详解 目录 一、tcp特点解释 1.1 面向连接 1.1.1 连接建立——三次握手 1.1.2 连接释放——四次挥手 1.2 可靠的 1.2.1 应答确认 1.2.2 超时重传 1.2.3 乱序重排 1.2.4 去重 1.2.5 滑动窗口进行流量控制 1.3 流失服务(字节…...
高支模自动化监测解决方案
1.行业现状 高大模板支撑系统在浇筑施工过程中,诸多重大安全风险点进行实时自动化安全监测的解决方案主要监测由于顶杆失稳、扣件失效、承压过大等引起的支撑轴力、模板沉降、相对位移、支撑体系倾斜等参数变化。系统采用无线自动组网、高频连续采样,实时…...
Node.js EventEmitter 深入解析
Node.js EventEmitter 深入解析 概述 Node.js 作为一种强大的 JavaScript 运行环境,以其异步、事件驱动特性在服务器端编程中占据了重要地位。EventEmitter 是 Node.js 中处理事件的一种机制,它允许对象(称为“发射器”)发出事件…...
OpenCV 图形API(24)图像滤波-----双边滤波函数bilateralFilter()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 应用双边滤波到图像。 该函数对输入图像应用双边滤波,如 http://www.dai.ed.ac.uk/CVonline/LOCAL_COPIES/MANDUCHI1/Bilateral_Fil…...
单双线程的理解 和 lua基础语法
1.什么是单进程 ,什么是多进程 当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源。而一个进程又是由单个或多个线程所组成的。 1.1 像apache nginx 这类 服务器中间件就是多进程的软件 ࿰…...
HarmonyOS中的多线程并发机制
目录 多线程并发1. 多线程并发概述2 多线程并发模型3 TaskPool简介4 Worker简介4.1 Woker注意事项4.2 Woker基本用法示例 5. TaskPool和Worker的对比5.1 实现特点对比5.2 适用场景对比 多线程并发 1. 多线程并发概述 并发模型是用来实现不同应用场景中并发任务的编程模型&…...
