EXIT常规流程和示例代码

C++ exit()函数详解:进程终止机制与退出码设计 exit()是C++中用于进程级终止的关键标准库函数,其核心原理在于触发标准化清理流程(缓冲区刷新、atexit函数调用、静态对象析构),并返回整型状态码供父进程解析。它区别于return(函数级控制流)和abort(无清理强制中止),在Docker容器管理、Gradle构建、LLaMA-Server服务启停等现代工具链中承担着‘心跳信令’角色。技术价值体现在可控性、可预测性与跨平台兼容性,广泛应用于命令行工具错误处理、嵌入式服务优雅退出及CI/CD流水线状态反馈场景。本文深入剖析exit()的语义约定、s 阅读详情

提示:其理论知识请见EXIT原理


一、EXIT配置流程

检测按键上升沿来出发中断。
在这里插入图片描述
注意:GPIO管脚采用复用IO模式,选择GPIO的管脚。浮空输入模式。

二、示例代码

//按键的GPIO初始化
static void KeyGpioInit(void)
{
	//GPIOA 对于的PIN0初始化
	rcu_periph_clock_enable(RCU_GPIOA);
	gpio_init(GPIOA, GPIO_MODE_IPU, GPIO_OSPEED_2MHZ, GPIO_PIN_0);
	
	//GPIOAG 对于的PIN13和PIN14初始化
	rcu_periph_clock_enable(RCU_GPIOG);
	gpio_init(GPIOG, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_2MHZ, GPIO_PIN_13);
	gpio_init(GPIOG, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_2MHZ, GPIO_PIN_14);
}

static void KeyExtiInit(void)
{
	//################GPIOA口对于的pin13和pin14############
	/*使能EXTI时钟*/
	rcu_periph_clock_enable(RCU_AF);
	
	//I/O连接到EXTI线
	gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOA, GPIO_PIN_SOURCE_0);
	/*exit的初始化   配置上升/下降沿*/
	exti_init(EXTI_0, EXTI_INTERRUPT, EXTI_TRIG_FALLING);//INTERRUPT中断的意思
	/*清除标志*/
	exti_interrupt_flag_clear(EXTI_0);
	/*使能中断*/
	nvic_irq_enable(EXTI0_IRQn, 1, 1);  //irqn
	
	


	//################GPIOG口对于的pin13和pin14############
	/*使能EXTI时钟  上面已经执行过一次*/ 
	//rcu_periph_clock_enable(RCU_AF);
	
	/*I/O连接到EXTI线*/
	gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOG, GPIO_PIN_SOURCE_13);
	/*配置上升/下降沿*/
	exti_init(EXTI_13, EXTI_INTERRUPT, EXTI_TRIG_FALLING);
	/*清除标志*/
	exti_interrupt_flag_clear(EXTI_13);
	
	/*I/O连接到EXTI线*/
	gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOG, GPIO_PIN_SOURCE_14);
	/*配置上升/下降沿*/
	exti_init(EXTI_14, EXTI_INTERRUPT, EXTI_TRIG_FALLING);
	/*清除标志*/
	exti_interrupt_flag_clear(EXTI_14);
	
	/*使能中断*/
	nvic_irq_enable(EXTI10_15_IRQn, 0, 1);
}


/**
***********************************************************
* @brief EXTI0中断服务函数,对应PA0 对于key1  优先级为1
* @param
* @return 
***********************************************************
*/
void EXTI0_IRQHandler(void)
{
	if (exti_interrupt_flag_get(EXTI_0) != RESET)
	{
		ToggleLed(LED1);
		exti_interrupt_flag_clear(EXTI_0);
		while (1);
	}
}

/**
***********************************************************
* @brief EXTI10_15中断服务函数,对应PG13 PG14  key2 key3 优先级为00
* @param
* @return 
***********************************************************
*/
void EXTI10_15_IRQHandler(void)
{
	if (exti_interrupt_flag_get(EXTI_13) != RESET)
	{

		DelayNms(1000);
		ToggleLed(LED2);
		exti_interrupt_flag_clear(EXTI_13);
	}
	
	if (exti_interrupt_flag_get(EXTI_14) != RESET)
	{	
		DelayNms(1000);
		ToggleLed(LED3);
		exti_interrupt_flag_clear(EXTI_14);
	}
}

注意:
1、EXTI_14叫EXTI线,而EXTI10_15_IRQn叫EXTI10_15_中断。
2、除了nvic_irq_enable需要使用EXTI10_15_IRQn,其余均使用EXTI线。
3、EXTI线和EXTI中断函数对于关系。
4、每个EXTI线都有一个中断标志位(请求挂起寄存器”,代表我中断来了(程序可以通过读取这个寄存器的内容确定来的是哪个中断),当该EXTI线产生中断时,该中断标志位会置1。
exti_interrupt_flag_get(EXTI_14) 获取EXTI线的中断,
而EXTI_14线对于的中断函数为EXTI10_15_IRQHandler。
在这里插入图片描述

三、EXIT寄存器

在这里插入图片描述
EXTI_PD为 挂起寄存器”,当其置为1时,表示exti产生中断。
在这里插入图片描述
在这里插入图片描述

四、EXIT库函数代码

exti_init():初始化EXTI线x

void exti_init(exti_line_enum linex, exti_mode_enum mode, 
exti_trig_type_enum trig_type)
//linex:EXTI_x
//mode:EXTI_INTERRUPT(中断模式) 和  EXTI_EVENT(中断模式)
//trig_type(触发类型):
// EXTI_TRIG_RISING 上升沿触发  EXTI_TRIG_FALLING 下降沿触发
// EXTI_TRIG_BOTH  上升沿和下降沿均触发
/* configure EXTI_0 */
exti_init(EXTI_0, EXTI_INTERRUPT, EXTI_TRIG_BOTH);

exti_interrupt_enable():EXTI线x中断使能

void exti_interrupt_enable(exti_line_enum linex);
/* enable the interrupts from EXTI line 0 */
exti_interrupt_enable(EXTI_0);

exti_interrupt_disable:EXTI线x中断禁能

void exti_interrupt_disable(exti_line_enum linex);
/* disable the interrupts from EXTI line 0 */
exti_interrupt_disable(EXTI_0);

exti_flag_get():获取EXTI线x标志位 (获取exti_pd寄存器中对应exti线的值)

和exti_interrupt_flag_get()作用一样

FlagStatus exti_flag_get(exti_line_enum linex)
//FlagStatus:SET或RESET
例如:
/* get EXTI line 0 flag status */
FlagStatus state = exti_flag_get(EXTI_0);

exti_flag_clear:清除EXTI线x标志位(将exti_pd寄存器中对应exti线的值置为0)

和exti_interrupt_flag_clear()作用一样

void exti_flag_clear(exti_line_enum linex);
/* clear EXTI line 0 flag status */
exti_flag_clear(EXTI_0);

exti_interrupt_flag_get():获取EXTI线x中断标志位

FlagStatus exti_interrupt_flag_get(exti_line_enum linex);
例如:
/* get EXTI line 0 interrupt flag status */
FlagStatus state = exti_interrupt_flag_get(EXTI_0);

exti_interrupt_flag_clear():清除EXTI线x中断标志位

void exexti_flag_get(ti_interrupt_flag_clear(exti_line_enum linex);
/* clear EXTI line 0 interrupt flag status */
exti_interrupt_flag_clear(EXTI_0);

exti_init():初始化EXTI线x


exti_init():初始化EXTI线x


exti_init():初始化EXTI线x


exti_init():初始化EXTI线x


exti_init():初始化EXTI线x


exti_init():初始化EXTI线x


GD32F130之EXTI中断和事件控制器 简介 EXTI,即extended interrupts and events controller,扩展的中断和事件控制器。之所以说是扩展的,是为了区分于内核自带的NVIC。NVIC由ARM Cortex-M3内核设计,而EXTI则由芯片厂商设计。EXTI 的中断功能依赖NVIC。 GD32F130的EXTI包含27条独立且结构相同的通道,称之为EXTI Line x(x=0~27),但是有些通道功能未开放,实际能使用的只有24条。具体参考应用手册:《表 5-4. GD32F130xx 和 和 GD3 阅读详情

相关推荐

在 Dynpro 里优雅跳过必输校验:AT EXIT-COMMAND 与无条件模块调用的门道和坑

摘要: 本文探讨SAP Dynpro中必输字段校验与退出命令的交互机制。通过一个示例程序,分析了Dynpro屏幕在用户点击不同按钮时的行为差异:普通命令(如EXECUTE)会触发必输校验,而E类型退出命令(如CANCEL/BACK)可通过AT EXIT-COMMAND绕过校验。文章详细解释了屏幕流逻辑的执行顺序、OK Code传输规则,以及如何正确使用AT EXIT-COMMAND模块处理退出场景。同时指出了项目中常见的多个AT EXIT-COMMAND模块共存时可能引发的逻辑问题,并提供了可复用的代码结构

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 594

中断函数(学习笔记)

中断函数

weixin_45495051的博客 1045

利用HTML+CSS设计PPT:html-to-pptx实现自动化转换与可编辑输出

在办公自动化和前端开发领域,将网页技术应用于文档生成是一个重要的技术方向。其核心原理在于通过解析HTML/CSS的结构与样式,将其映射为目标文档的原生对象模型。这项技术的价值在于,它能够将Web技术栈强大的布局与样式能力(如Flexbox、CSS Grid)与办公软件(如Microsoft PowerPoint)的广泛兼容性和可编辑性相结合。在实际应用场景中,这种技术特别适合需要快速生成兼具设计感与实用性的演示文稿,例如数据报告、产品发布和营销材料。本文探讨的html-to-pptx项目正是这一思路的工程实

weixin_30652491的博客 486

【GD32】03 - EXTI外部中断

EXTI,全称External Interrupt/Event Controller,即外部中断/事件控制器,是微控制器中的一个重要组成部分。它主要用于管理来自外部设备的中断和事件请求。总的来说,EXTI是微控制器中一个重要的外部中断/事件控制器,它可以实现对外部设备的中断和事件请求的管理和处理。在物联网和嵌入式系统等领域中,EXTI具有广泛的应用前景和重要的价值。以上介绍来自文心一言。

m0_63235356的博客 3224

STM32CUBEMX | STM32L431RCT6的内部Flash操作

一、STM32CUBEMX配置 1、选择芯片型号: 2、配置时钟源 1、 如果选择使用外部高速时钟(HSE),则需要在System Core中配置RCC; 2、 如果使用默认内部时钟(HSI),这一步可以略过; 3、配置时钟树 STM32L4的最高主频到80M,所以配置PLL,最后使HCLK = 80Mhz即可: 4、代码生成设置 点击GENERATE CODE即可生成MDK-V5工程: 二、在MDK中编写、编译、下载用户代码 1、STM32内部Flash及HAL库API 查看所使用芯片的信息,

yongridada的博客 5568

ADI DSP开发环境(CCES)下的程序烧录问题(以ADSP-SC589为例)

在CCES环境下将程序烧录到flash主要有两种方式。首先在对项目编译产生文件的属性设置为Release。 在编译完成后,找到每个CORE单独生成的DXE文件: 文件通常位于项目目录下每个core的Release文件中。安装SC589评估板的驱动(ADSP-SC5xx_EZ-KIT_Lite-Rel2.0.0.exe)后,在安装目录下可以找到SPI FLASH芯片的驱动程序(sc589_w25q128fv_dpia_Core1.dxe): 把文件copy到CCES 的目录下由于SC58x处理器的特殊性

daijingxin的博客 3730

GD32F103学习笔记(5)——EXTI(外部中断)接口使用

一、简介 Cortex-M3集成了嵌套式矢量型中断控制器(Nested Vectored Interrupt Controller (NVIC)) 来实现高效的异常和中断处理。NVIC实现了低延迟的异常和中断处理,以及电源管理控制。它和内核是紧密耦合的。更多关于NVIC 的说明请参考《Cortex-M3 技术参考手册》。 EXTI(中断/事件控制器)包括20个相互独立的边沿检测电路并且能够向处理器内核产生中断 请求或唤醒事件。EXTI有三种触发类型:上升沿触发、下降沿触发和任意沿触发。 EXTI中的每一个

Leung的博客 9810

FPGA,关于安装使用libero IDE V9.2 及其gold floating license配置

3、license安装根据,下面的提示进行,跟随setting up the license server on a host教程操作。1、从官网下载Libero IDE v9.2(如下图中的Libero IDE v9.2 software)4、下载完成license解压包后还需要下载 Daemons license ,地址如下。(2)第一行并不是在内填写,而是直接用您电脑名替换掉(1)修改license.bat前四行是,其务必保持和案例位置相同(避免出错)............

JasonK的博客 4297

GD32——按键外部中断

以GD32F303的芯片(M4)为例。 简言:文章主要讲解,普通IO口的按键使用外部中断来配置使用,从而更快的响应按键事件,有效的提高了按键处理的实时性。 文章分为两部分:第一部分讲基本原理,第二部分讲配置。

weixin_64192009的博客 2681

TensorRT量化校准数据集选择

在TensorRT中进行INT8量化时,校准数据集的选择至关重要,直接影响量化后模型的精度和推理性能。这是一个典型的问题。

浩瀚之水的专栏 497

Darknet-Yolov3 移植过程

本教程面向使用寒武纪平台进行深度学习推理任务的开发者。针对当前主流检测网络darknet-yolov3,进行寒武纪平台的移植。开发者对照移植过程,能够利用寒武纪智能处理器设备完成多种场景的目标检测任务。本实验代码基于 Neuware 1.6.1 与 Python 2.7 环境。

shengyin714959的博客 438

[C++] 退出清理函数解读(exit、_exit、abort、atexit)

退出相关函数说明:在C++中,exit_exit(或_Exit)、abort和atexit是用于控制程序退出和清理的标准库函数。

wangdsh的博客 4931

Android系统开发面试指南:系统Launcher岗位解析

本文针对上海礼聪Android系统开发岗位(侧重系统Launcher、充电/电池/USB底层开发)提供面试指南。内容涵盖应用开发(启动流程优化)、系统底层(充电状态机、USBOTG)、编程能力(线程安全LRU实现)、问题排查(ANR分析)及沟通协作等核心考点。通过5类典型问题及技术深度解析,帮助候选人系统准备,重点考察Framework源码理解、系统调试能力和工程思维。建议结合PowerManagerService等模块源码和systrace工具进行实践准备,同时注重技术表达与协作能力的展现。

郑伟强dev的专栏 934

Linux进程控制——进程创建(fork函数)、进程终止(exit和_exit函数)和进程等待(wait和waitpid方法)

一、进程创建 1.1 fork函数初识 对于fork函数的参数和返回值可以阅读本篇博客 Linux进程编程实践1——进程的基本概念、fork创建进程 这里直接上图了解fork的头文件和参数 Q1:为什么父进程返回子进程id,而子进程返回0? 现实生活中,任何孩子都知道自己的父亲(排除特殊情况),而父亲却可能有多个孩子,因此就需要一个代号来标识每一个孩子,简单来说就是父亲:孩子=1:n 因此,对于操作系统来说,父进程有多个子进程,需要返回子进程的pid来调度每个子进程,而任何子进程都知道自己的父进程,因此.

2686

用Playwright MCP让AI帮你完成所有浏览器自动化

Playwright MCP(Model Context Protocol)是微软基于 Playwright 框架推出的 AI 浏览器自动化新协议。它通过结构化快照数据和自然语言指令结合大型语言模型(如 GPT),实现无需编码的网页交互。无论你是要测试登录流程、抓取价格数据,还是用 AI 远程控制浏览器,Playwright MCP 都能大幅降低门槛,让“说人话”也能驱动自动化脚本。本篇将从功能介绍、技术架构、使用方法到实际场景,带你全面理解这一自动化革命。

todoitbo的博客 3万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

c语言中exit函数_C ++中的exit()函数

c语言中exit函数 介绍 (Introduction) Today we’ll learn about exit() in C++. We know we can break out of loops using the built-in break function in C++. Similarly, we can also break out of a whole C++ program ...

从零开始的教程世界 6581

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

理解C语言的exit与return

退出状态 exit和return的区别 一般惯例保留状态值128或更高以用于特殊目的。特别是,值128用于指示在子过程中无法执行另一个程序。该约定非必须但建议遵守。 在/usr/include/stdlib.h中定义了EXIT_FAILURE和EXIT_SUCCESS ... /* We define these the same for all machines. Changes from this to the outside world should be done in `_exit'. *

运维狗的备忘录 915

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

abort函数和exit函数

函数名: abort 功 能: 异常终止一个进程 用 法: void abort(void); 头文件:#include 说明:abort函数是一个比较严重的函数,当调用它时,会导致程序异常终止, 而不会进行一些常规的清除工作,比如释放内存等。 程序例: #include #include int main(void) {    puts( "About to ab

我不会编程,但不是完全不会,我会一点点 2618

Linux进程控制:fork、exit与waitpid的江湖恩怨

深入解析Linux进程控制的三部曲,涵盖fork的写时拷贝优化、exit与_exit的区别、waitpid的状态捕获,助你彻底掌握进程管理。

2401_83431652的博客 1293

python中os._exit(0) 强制关闭进程后来杀死线程

会强制终止整个进程,所有线程都会被杀死。应谨慎使用,仅在确实需要立即终止程序且不需要进行任何清理操作时使用。优先选择更温和的退出方法(如sys.exit()),以确保资源能够被正确释放,维护程序的稳定性和数据的一致性。

图灵追幕者博客录 1122

【Linux学习笔记】进程的fork创建 exit终止 wait等待

哈喽,各位小伙伴大家好!上期我们讲了环境变量今天我们讲的是【Linux学习笔记】进程的fork创建 exit终止 wait等待。话不多说,我们进入正题!向大厂冲锋!

大白的编程日记. 1892

C语言里面的中断程序:“exit()”和“return返回”

摘要:《C Primer Plus》示例代码films3.c中,初始化阶段使用exit(EXIT_FAILURE)处理内存分配失败这类致命错误,以立即终止程序;而main函数末尾用return 0表示正常结束。exit()会强制终止整个程序,适合处理不可恢复错误;return则从当前函数返回,在main中使用时效果与exit()相似但语义更清晰。两者都会执行清理操作,但exit()可在程序任何位置调用实现全局终止,体现了防御性编程思想。

jimy1的博客 409

_exit和exit的区别

1. 先说一下什么是文件,文件是具有永久性存储及特定顺序的字节组成的一个有序的,有名称的集合。因此提到文件,人们常常会想到目录路径,磁盘存储,文件和目录名等内容。除了常规文件,目录文件、设备文件(包括输入输出设备,如显示器,键盘等)、管道文件等也属于文件。 2. 再说一下linux下的标准库函数       linux下的标准库函数中,有一套称作高级I/O的函数,我们熟知的printf fop

myjoying的专栏 574

TortoiseGit(小乌龟) git did not exit cleanly (exit code 1)

TortoiseGit 报错 git did not exit cleanly (exit code 1)

lIIIIIIllIIIl的博客 1425

Python退出机制详解:sys.exit、os._exit与优雅停机实践

在Python程序开发中,进程退出并非简单的“结束”动作,而是涉及异常传播、清理流程、系统调用与信号协作的复杂机制。无论是命令行脚本还是常驻服务,正确理解sys.exit抛出的SystemExit、os._exit的底层行为,以及SIGTERM等信号的处理方式,都是保障任务可靠落盘、避免数据丢失的关键。从退出码约定到finally与atexit的清理顺序,再到多线程环境下的阻塞问题,每一步都隐含工程陷阱。本文从基础原理出发,结合部署、容器与CI场景,梳理从sys.exit到优雅停机的完整路径,帮助开发者设计

weixin_33600816的博客 277

winform Environment.Exit(0);Application.Exit();

【代码】winform Environment.Exit(0);

nbspzs的专栏 984
上一篇: stem32系列文章目录
下一篇: 自定义中断服务函数(中断处理函数或者中断函数)
物语系列
博客等级 码龄6年 582粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值