【史上最全面ESP32】软件中断与硬件中断

文章目录

    • 前言
    • 硬件中断
      • 硬件中断概念
      • 硬件中断的使用
    • 软件中断
      • 软件中断概念
      • 软件中断的使用
    • 总结


前言

ESP32是一款高度集成的芯片,具有强大的中断处理能力。在ESP32中,我们可以配置所有的GPIO引脚作为硬件中断源,通过附加它们到相应的中断服务例程(ISR)来启用中断。此外,ESP32还支持软件中断,例如定时器溢出时的定时器中断。

硬件中断

硬件中断概念

硬件中断是响应外部硬件事件而发生的,例如,当检测到触摸时发生触摸中断,当GPIO引脚的状态改变时发生GPIO中断。我们可以使用attachInterrupt()函数在引脚上设置中断。

硬件中断的使用

在ESP32中,我们可以使用硬件中断来响应按键事件。以下是一个简单的示例,说明了如何使用硬件中断来检测按键按下的事件。

const int buttonPin = 12; // GPIO pin where the button is connected
volatile bool has_interrupted = false;void IRAM_ATTR myInterruptFunction() {has_interrupted = true;
}void setup() {Serial.begin(115200);pinMode(buttonPin, INPUT_PULLUP); // Configure the pin as an input with internal pull-up resistorattachInterrupt(digitalPinToInterrupt(buttonPin), myInterruptFunction, RISING); // Configure the interrupt
}void loop() {if(has_interrupted) {Serial.println("Button pressed!");has_interrupted = false;}
}
  • attachInterrupt(digitalPinToInterrupt(buttonPin), myInterruptFunction, RISING);

    • 函数原型void attachInterrupt(uint8_t pin, voidFuncPtr callback, int mode);
    • 作用:将中断服务例程(ISR)附加到指定的GPIO引脚上。
    • 参数
      • pin:要附加中断的GPIO引脚编号。
      • callback:中断发生时调用的函数(ISR)。
      • mode:定义触发中断的条件,例如RISING、FALLING、CHANGE等,他们分别表示上升沿触发,下降沿触发和改变就触发。
    • 返回值:无。
  • digitalPinToInterrupt(buttonPin)

    • 函数原型int digitalPinToInterrupt(int pin);
    • 作用:将数字引脚转换为中断号,用于attachInterrupt()函数。
    • 参数
      • pin:要转换的数字引脚编号。
    • 返回值:对应的中断号。
  • myInterruptFunction()

    • 函数原型void IRAM_ATTR myInterruptFunction();
    • 作用:定义中断服务例程(ISR),在中断发生时执行的函数。
    • 参数:无。
    • 返回值:无。
      IRAM_ATTR是一个特殊的属性,用于指示编译器将特定的代码段放置在ESP32的内部RAM(IRAM)中。这是因为ESP32基于哈佛架构,具有两个总线:一个用于指令,一个用于数据。IRAM是可执行的,并且只能通过4字节对齐的字进行读取或写入。

当你在代码中使用IRAM_ATTR标记时,你正在声明编译后的代码将被放置在名为".dram.text"的段中。这意味着可执行文件不仅有".text"和".data"段,还有其他段。在ESP32启动时,引导程序会在将控制权交给你的应用程序之前,将".dram.text"段复制到实际的RAM中。然后,RAM被映射到指令区域地址空间(> 0x4000 0000),这意味着可以将控制权传递给此代码(如常规操作),因为代码位于指令总线地址空间中。

使用IRAM_ATTR的一个主要原因是,当ESP32执行Flash操作(如写入或擦除)时,需要在RAM中运行的中断服务例程(ISR)。如果不使用IRAM_ATTR,代码将被放置在Flash中,而Flash在ESP32上的速度比内部RAM慢。

软件中断

软件中断概念

软件中断是当触发软件事件时发生的,例如定时器溢出。我们可以使用ESP32的定时器中断来执行特定的任务。

软件中断的使用

在此之前我们写过定时器的文章,我们这里就不多赘述:ESP TIMER

总结

ESP32的中断处理能力非常强大,无论是硬件中断还是软件中断,都可以帮助我们更有效地管理和控制硬件设备,提高系统的实时性和响应速度。通过理解和掌握ESP32的中断机制,我们可以更好地利用这款芯片的强大功能,为我们的项目带来更多可能性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/44490.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JFlash读取和烧录加密stm32程序

JFlash读取和烧录加密stm32程序 安装后JFlash所在的目录:C:\Program Files\SEGGER\JLink 一、烧写加密程序 1、打开C:\Program Files\SEGGER\JLink目录,找到JFlash.exe,双击它,就可以打开该执行程序。见下图: 2、选择“Create …

代码随想录算法训练营第三十天 | 01背包问题 二维 01背包问题 一维 416. 分割等和子集

46. 携带研究材料(第六期模拟笔试) 题目描述 小明是一位科学家,他需要参加一场重要的国际科学大会,以展示自己的最新研究成果。他需要带一些研究材料,但是他的行李箱空间有限。这些研究材料包括实验设备、文献资料和…

无题:天选之子?

1. 从一个人说起:孤独信 原名独孤如愿,字期弥头云中郡(今内蒙古自治区和林格尔县)人,鲜卑族西魏、北周(南北朝)时期名将,八柱国之一北塞俊郎,容仪俊美,善于骑射独孤侧帽&#xff1a…

SQL语法(DQL):SELECT 多表查询之子查询

1、子查询 定义:如果某一个SQL语句A包含了一个查询Select语句B,称B叫做子查询,称A叫做主查询,A带有子查询语句目的:提高代码复用性,间接提高代码开发效率分类: 条件子查询:将子查询…

开发指南042-产生待办

整个平台待办是统一处理的&#xff0c;各业务微服务需要产生待办时调用系统API <dependency><groupId>org.qlm</groupId><artifactId>qlm-api</artifactId><version>1.0-SNAPSHOT</version> </dependency> Autowired privat…

Nature Renderer 2022(植被渲染工具插件)

渲染大量详细的植被。 自然渲染器通过替换Unity的默认地形细节和树系统来提高植被渲染的质量。一切都适用于现有数据:使用相同的草地、植被和树木,并保留现有地形。我们只是升级您的渲染器。 Unity验证的解决方案 Nature Renderer受到25000多名开发人员的信任,是Unity验证的…

Llama-2 vs. Llama-3:利用微型基准测试(井字游戏)评估大模型

编者按&#xff1a; 如何更好地评估和比较不同版本的大语言模型&#xff1f;传统的学术基准测试固然重要&#xff0c;但往往难以全面反映模型在实际应用场景中的表现。在此背景下&#xff0c;本文作者别出心裁&#xff0c;通过让 Llama-2 和 Llama-3 模型进行井字游戏对决&…

【JavaScript脚本宇宙】无处不在的JavaScript库:解析音视频处理与实时通信技术

JavaScript库大揭秘&#xff1a;音视频、互动体验与实时通信 前言 在当今互联网时代&#xff0c;JavaScript已经成为前端开发中不可或缺的一部分。随着Web技术的不断发展&#xff0c;出现了许多优秀的JavaScript库&#xff0c;为开发者提供了丰富的工具和资源。本文将介绍几个…

STM32智能机器人手臂控制系统教程

目录 引言环境准备智能机器人手臂控制系统基础代码实现&#xff1a;实现智能机器人手臂控制系统 4.1 数据采集模块 4.2 数据处理与控制算法 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景&#xff1a;机器人手臂管理与优化问题解决方案与优化收尾与总结 1. 引言 …

Linux系统中磁盘管理LVM与挂载

Linux系统中磁盘管理LVM与挂载 本文以属于Linux系统基本概念&#xff0c;如果以查找教程教程&#xff0c;解决问题为主&#xff0c;只需要查看本文后半部分。如需要系统性学习请查看本文前半部分。 本文操作极容易导致主机无法自动重启&#xff0c;请慎重操作。操作前务必要进…

火热夏季:浦语*书生InternLM大模型实战闯关-入门岛之Linux基础知识

一、ssh链接与端口映射并运行hello_wold.py 1.创建开发机 InternStudio创建开发机 2.进入开发机 3.Ssh链接开发机 powerShell终端ssh链接开发机。 4.创建一个hello_world.py文件web demo 5.运行web demo 6.端口映射 7.本地浏览器打开web 二、 VSCODE 远程连接开发机并创建一个…

【最强八股文 -- 计算机网络】【快速版】TCP 与 UDP 头部格式

目标端口和源端口: 应该把报文发给哪个进程包长度: UDP 首部的长度跟数据的长度之和校验和: 为了提供可靠的 UDP 首部和数据而设计&#xff0c;接收方使用检验和来检查该报文段中是否出现差错 源端口号和目的端口号: 用于多路复用/分解来自或送到上层应用的数据。告诉主机报文段…

[机器学习]-人工智能对程序员的深远影响——案例分析

机器学习和人工智能对未来程序员的深远影响 目录 机器学习和人工智能对未来程序员的深远影响1. **自动化编码任务**1.1 代码生成1.2 自动调试1.3 测试自动化 2. **提升开发效率**2.1 智能建议2.2 项目管理 3. **改变编程范式**3.1 数据驱动开发 4. **职业发展的新机遇**4.1 AI工…

数字统计

import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别// 注意 while 处理多个 caseint a in.nextInt();i…

基于深度学习的点云平滑

基于深度学习的点云平滑是一种利用深度学习模型处理和优化三维点云数据以消除噪声并提升平滑度的方法。该技术在自动驾驶、机器人导航、3D重建和计算机图形学等领域有着广泛应用。以下是关于这一领域的系统介绍&#xff1a; 1. 任务和目标 点云平滑的主要任务是从带有噪声和粗…

【计算机毕业设计】基于Springboot的足球青训俱乐部管理系统【源码+lw+部署文档】

包含论文源码的压缩包较大&#xff0c;请私信或者加我的绿色小软件获取 免责声明&#xff1a;资料部分来源于合法的互联网渠道收集和整理&#xff0c;部分自己学习积累成果&#xff0c;供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者…

Day66 代码随想录打卡|回溯算法篇---分割回文串

题目&#xff08;leecode T131&#xff09;&#xff1a; 给你一个字符串 s&#xff0c;请你将 s 分割成一些子串&#xff0c;使每个子串都是 回文串。返回 s 所有可能的分割方案。 方法&#xff1a;本题是一个分割回文串的问题&#xff0c;是回溯算法的另一类问题。 针对一个字…

前端面试题日常练-day82 【面试题】

题目 希望这些选择题能够帮助您进行前端面试的准备&#xff0c;答案在文末 在Sass中&#xff0c;以下哪个功能用于创建一个混合器&#xff08;Mixin&#xff09;&#xff1f; a) include b) loop c) function d) component Sass中的嵌套规则可以帮助实现以下哪个目的&#xf…

英伟达今年在华销售额预计将达120亿美元、MiniMax创始人:三年后才会出现“杀手级”AI应用

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 更多资源欢迎关注 1、英伟达今年在华销售额预计将达120亿美元 芯片咨询公司SemiAnalysis报告预估&#xff0c;今年英伟达有望在中国销售价值约120亿美元的人工智能芯片。黄仁勋曾表示&#xff0c;希望借助新的芯片使得…

【算法】十进制转换为二进制

目的&#xff1a;将十进制转换为二进制 思路&#xff1a; 首先我们手算的情况是通过求余数算出进制数&#xff0c;同样代码也是通过做除法和求余数的方式&#xff0c;除法是得出下一次的被除数&#xff0c;而求余数是得到进制数 代码&#xff1a; #include<stdio.h>/…