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

嵌入式框架架构设计与中断处理机制

一、软件架构设计

轮询式架构

指的是在程序运行时,首先对所有的硬件进行初始化,然后在主程序中写一个死循环,需要运行的功能按照顺序进行执行,轮询体系是一种轻松可靠的方式,一般适用于在只得按照顺序执行的并且没有外部事件的影响的情况下。

int main()

{

//硬件初始化

LED_Init();

BEEP_Init();

KEY_Init();

....

//进入死循环

while(1) // for(;;)

{

//LED控制

//KEY检测

if()

{

}

//BEEP控制

.....

}

}

前后台架构

相比于轮询系统,前后台系统增加中断通过的概念,倘若外部事件发生,则在中断中进行处理,主程序在轮询框架中运行,中断被称为前台,主程序中的while(1)就称为后台。中断会终止后台程序的运行,然后跳转到对应的中断服务函数中去处理,处理完成后,在继续执行后台的工具。使用前后台系统能够极大程度的提高脚本的实时响应能力,避免造成外部事件的缺失。

//进程间通信 信号采用的前后台思想

//构造信号的回调函数 属于前台

void Signal_CallBack(int signum)

{

}

int main()

{

//硬件初始化

LED_Init();

BEEP_Init();

KEY_Init();

....

//注册信号,常用的信号SIGUSR1

signal(SIGUSR1,Signal_CallBack);

//进入死循环 属于后台

while(1)

{

//LED控制

//BEEP控制

.....

}

}

多任务架构

相比于前后台平台,多任务系统的外部事件也是在中断中进行响应,但是外部事件的处理是任务中进行处理。任务具有优先级,优先级高的任务先处理,所以程序就会被分割为一个个的任务,任务是一个独立的死循环,并且不能返回,许可由操作系统进行任务的调度,程序段的实时响应能力又得到提升。

//线程的回调

void *tspad_thread(void *arg)

{

while(1)

{

//获取触摸屏坐标

}

}s

int main()

{

//1.硬件初始化

//2.创建新线程

pthread_create(&id,NULL,tspad_thread,NULL);

//3.进入死循环

pthread_exit();

}

二、MCU中断的原理与应用

中断概念

为了使CPU具有对外界紧急事件的实时处理能力而设置的。当CPU正在处理某件事的时候外界发生了紧急事件请求,要求CPU暂停当前的工作,转而去处理这个紧急事件,处理完以后,再回到原来被中断的地方,继续原来的工作,这样的过程称为中断。就是单片机的中断环境

实现这种功能的部件称为中断系统,请示CPU中断的请求源称为中断源。MCU的中断系统一般允许多个中断源,当几个中断源同时向CPU请求中断,要求为它服务的时候,这就存在CPU优先响应哪一个中断源请求的问题。

中断请求

中断源指的是那些能够引发异常事件的具体种类。这些异常事件在微控制器(MCU)所执行的各种任务和操作过程中有可能突然出现并打乱正常的执行流程。而这些引发异常事件的源头,早在MCU的内核之中,就已经被开发人员依据相关的设计标准和实际应用需求,进行了明确地定义和细致地配置。也就是说,MCU的内核已经清晰地知道每一种中断源所代表的具体含义以及在遇到该中断源触发的异常事件时应该采取怎样的应对措施。

在MCU的系统架构里,有一个极其重要的表格,该表格被称作中断源表,不过更为专业和常见的称呼是中断向量表。这个中断向量表就像是一个详细的索引目录,它详细且全面地列出了各种各样不同类型的中断源。对于每一种中断源,该向量表不仅记录了其名称和特征,还精确地给出了与之对应的处理程序入口地址。这个入口地址的作用极为关键,当某个中断源触发了异常事件后,MCU能够依据中断向量表中记录的该中断源对应的入口地址,迅速地跳转到相应的处理程序中去,从而及时地对异常事件进行处理,以保障系统的稳定运行和任务的正常执行。

关于中断向量表的详细信息,可以在STM32F4系列的中文参考手册中进行查阅和参考,该手册提供了全面的解释和示例,帮助开发者更好地理解和应用中断机制。

中断管理

通常根据中断源的轻重缓急排队,优先处理最紧急事件的中断请求源,即规定每一个中断源有一个优先级别。CPU总是先响应优先级别最高的中断请求

当CPU正在处理一个中断源请求的时候(执行ISR),发生了另外一个优先级比它还高的中断源请求。如果CPU能够暂停对原来中断源的服务程序,转而去处理优先级更高的中断请求源,处理完以后,再回到原低级中断服务程序,这样的过程称为中断嵌套。这样的中断架构称为多级中断系统,没有中断嵌套功能的中断系统称为单级中断平台。

NVIC全称为嵌套向量中断控制器,是嵌入式系统中内核的重要组成部分之一,属于内核中的外设模块。其主要效果是全面管理系统中所有的中断请求,包括但不限于中断的使能或失能、中断的优先级设置与调整、中断的响应与处理等关键执行。

通过高效地协调和处理各种中断信号,NVIC确保了平台的稳定运行和实时响应能力,是保障嵌入式系统高效运作的核心组件之一。

不管是Cortex A系列还是Cortex M系列的内核内部均有NVIC,通过NVIC来管理内核异常和外部异常。

NVIC管理中断通道的打开与关闭,可以把NVIC理解为负责管理所有中断的开关,想要采用中断发送中断请求,就必须提前打开中断的通道。关于NVIC的使用都存储在一个结构体中,该结构体和NVIC的函数接口都定义在misc.c和misc.h中。

  1. 中断的顺序

MCU中的NVIC利用4bit的优先级来管理所有的中断通道,STM32中断的优先级分为两种:抢占式优先级(主优先级) + 响应式优先级(子优先级),有16个优先级(0~15),数字越小,优先级越高。

意义:如果同时发生多个中断请求,但是又不能同时处理,就根据中断请求的优先级来处理和响应中断。

通过抢占优先级(主优先级):抢占优先级高的中断能够打断正在执行的抢占优先级低的中断!!!

响应优先级(子优先级):在同时发生多个中断的情况下,响应优先级高的中断可先执行!!!

(1)抢占优先级高的中断可以打断正在执行的抢占优先级低的中断

(2)抢占优先级相同的中断同时发生,响应优先级高的中断先执行

(3)抢占优先级相同的多个中断发生,响应优先级高的中断不能打算响应优先级低的中断

(4)抢占优先级和响应优先级相同的多个中断同时发生,则按照向量表的中断编号来执行

为了方便用户管理和响应中断,NVIC需要对中断优先级进行分组,这样用户可以方便安装

采用分组4。就是注意:该函数一般在主程序的入口进行调用,并且整个项目应该只调用一次,因为设置好优先级分组之后就不应该随意更改分组,否则中断管理比较混乱,另外用户在设置中断优先级的时候应该遵守分组对应的优先级范围。一般都

三、EXTI外设的基本原理与应用

基本概念

外部中断/事件控制器,在整个平台当中,这样的外部中断/事件控制器一共有23个。每一个外部中断/事件控制器都配备有一个内部的边沿检测器,这个内部的边沿检测器具备相当重要的功能,它可以对上升沿或者下降沿进行检测。而且,每一根连接到外部中断/事件控制器的线都具备一定的能力,既可以产生事件,也能够产生中断。就是EXTI所指的

注意:每个GPIO引脚都许可配置为外部中断,但是和GPIO相关的外部中断线一共有16根,分别为EXTI0~EXTI15。

基本原理

注意:STM32F407所有IO口都能够设置为外部中断,但是必须把GPIO引脚配置为输入模式。

程序设计

1.把EXTI外设的源文件以及SYSCFG外设的源文件添加到项目工程中,具体操作如下所示:

2.参考ST公司提供的外设的源文件的开头的注释以及参数ST公司提供的关于外设的例程

3.打开GPIOA端口时钟(KEY0按键对应的引脚PA0)以及SYSCFG外设时钟(映射)!

4.配置GPIOA端口PA0引脚的模式为输入模式,需要利用该引脚检测外部事件,如下图:

5.利用SYSCFG外设的对GPIOA端口的引脚PA0以及EXTI0建立映射关系(自动建立)

6.定义EXTI外设的结构体变量,对结构体成员初始化(编号+模式+边沿+状态),如下图

7.配置EXTI外设的中断,需要使用NVIC外设管理中断的通道以及中断的优先级,如下图

8.EXTI中断通道配置达成后,需要编写对应的中断服务函数,中断服务函数的格式如下图:

ST厂商为了规范化,故而会把所有异常的ISR中断服务程序统一写入到stm32f4xx_it.c源文件中,另外,在该源文件中也会给开发者提供ISR的模版,所以开发者必须严格遵循!!!

注意:ISR中断服务函数的名字是已经提前定义在启动文档中向量表内,启动文件是在程序运行之前先运行的一个汇编文件(xxx.s结尾的),用户在选择使用某个外设的中断的时候,必须从启动文件中复制中断服务函数的名称。注意:中断源对应的中断服务程序(ISR)的函数结构是固定的,不应该有返回值和参数的,目的是提高程序可靠性!

http://www.jsqmd.com/news/389279/

相关文章:

  • # 高危预警|CVE-2026-24735漏洞突袭Apache Answer,私密/已删帖子历史记录无差别泄露
  • GESP认证C++编程真题解析 | 202503 八级 - 详解
  • AI教材写作神器来袭!低查重编写,轻松打造专业教材!
  • 掌握AI专著撰写技巧!借助工具轻松打造专业学术专著
  • Fast Inverse Square Root(快速平方根倒数算法)
  • 低查重“杀手级”利器!AI教材编写工具助你高效产出靠谱教材!
  • 跨平台零日间谍武器:ZeroDayRAT深度剖析——双系统入侵、全域监控与未来攻防预判
  • 2026重型货架品牌优选:用户评价好的品牌大盘点,仓库货架/仓储货架/阁楼货架/横梁货架,重型货架厂商推荐排行榜 - 品牌推荐师
  • 全新视角:AI专著写作的优势与常用工具,助你高效完成大作
  • 英语_阅读_The Desert_待读
  • 【Seedance 2.0 自分镜脚本解析引擎深度白皮书】:揭秘零代码适配影视AI工作流的3大降本核心机制
  • Seedance 2.0动态光影重绘为何越升级越卡?——揭秘2.0.3版本中被忽略的Uniform Buffer对齐缺陷与修复补丁
  • 从合规到内生安全:Linux安全基线设计逻辑与未来演进
  • 使用EmbeddingGemma-300m增强Claude的代码理解能力
  • 从需求到接口上线:XinServer 全流程拆解
  • 掌握AI专著生成技巧!实用工具分享,轻松完成学术专著创作
  • No157:AI中国故事-对话落下闳——太初历法与AI纪元:春节起源与时间计算
  • 筑牢AI安全防线:ChatGPT推出锁定模式与高风险标签,重构提示词注入与数据泄露防护体系
  • MedGemma医学影像AI助手应用场景:AI辅助生成医学影像学实习考核试题
  • ChatGLM3-6B-128K实际表现:多源信息融合问答效果评测
  • Qwen-Image-Edit实测:上传人脸秒变专业级写真
  • 2026年2月防水蓝牙耳机品牌推荐,防汗防水耐用性实测榜单 - 品牌鉴赏师
  • 揭秘AI专著撰写工具,让你从毫无头绪到专著写作游刃有余
  • Qwen3-ForcedAligner-0.6B零基础教程:5分钟搞定音频文本对齐
  • 2026年正规的wms仓库管理软件公司采购推荐手册 - 品牌鉴赏师
  • 人脸识别OOD模型在考勤系统中的应用:实测效果与部署指南
  • 基于Qwen3-ForcedAligner-0.6B的智能客服语音分析系统
  • 多GPU深度学习训练环境配置:分布式训练实战指南
  • CVE-2025-59718 安全漏洞研究报告-Fortinet FortiOS SAML认证绕过漏洞深度技术分析
  • 2026年2月自动喷砂机品牌推荐,流水线喷砂设备实力厂家精选 - 品牌鉴赏师