什么是全局中断?

什么是全局中断?全局中断使能位控制着“所有”中断,它如果关闭的话会屏蔽其它中断,有人经常关闭它,防止其它中断带来干扰,比如在使用gpio模拟某个时序时,在gpio传输数据过程中,如果被某个中断干扰,会导致时序不准确问题,通常的做法是关闭全局中断,数据传输完成后打开全局中断,同样在rtos中对全局变量的保护基本上都使用了全局中断。
;汇编代码如下:cpsie i ;使能全局中断cpsid i ;关闭全局中断为了方便使用,在keil编译器中经常使用如下c代码,作用一样的。__disable_irq();__enable_irq();结合一个bug来解释一下全局中断带来的问题,我们的硬件设计方案是两个处理器uart通讯,由于设计需要传输比较大的数据,必须要提高通讯速率,期望通讯速率能到1.5m,可是速率提上来了,bug也出来了,表现是两个处理器偶尔通信异常,有数据丢失问题。研究来研究去,确定最终原因就是全局中断惹的祸,在擦写内部flash中使用了开关全局中断,由于关中断时间较长,导致串口接收fifo溢出,数据丢失,可是擦写flash又必须开关中断保护,这可咋整,解决办法:由于我们的通讯协议是一问一答方式,于是把擦写flash操作移到收到指令之后,发送应答之前,解决了这个通讯问题。
uint8_t flash_erasesector(uint32_t sectoraddress){ uint8_t ret; __disable_irq(); __disable_fault_irq(); ret = erasesector(null, sectoraddress); __enable_fault_irq(); __enable_irq(); return ret;}有朋友说了,rtos中对全局变量的保护都是用开关总中断,怎么没有问题?可以注意观察一下,在rtos中,全局中断关闭时间都不是太长,而且严禁出现长时间关中断,严禁出现关中断时间不可控,这样会影响实时性。来说一下什么是时间不可控,其实这种情况有很多种,比如,长链表操作、环形缓冲区操作、循环操作等等。代码举例说一下。
__disable_irq(); //这里的时间不能太长,否则会有潜在风险 __enable_irq(); //例如下面代码: __disable_irq(); for(i=0;i< cnt;i++) { //太多的循环或者不定次数循环 //这里的时间不能确定 } __enable_irq();

简单介绍一下计算机是怎么实现加法和乘法的
COVID-19流行病使人们越来越关注人工智能
用于工业应用的射频设备
项科技推动下 AI自动拍照新景点成网红打卡新地标
7点影响PCB板价格的因素,你知道吗?
什么是全局中断?
VueTrack和ReAlign之间的区别具体是怎样的
互联工厂和企业中把OT-IT结合有什么好处?
redis应用场景及实例
蓝牙音箱也能无线充电 这种玩法你肯定没见过
盘点首届进博会上的科技亮点
机器视觉应用方向及学习思路汇总
窄带物联网产业开始要“热”起来了吗
雷击浪涌的原理
GTC23 | Adobe 携手 NVIDIA 释放生成式 AI 的力量
写给喜欢单片机的初学者
最新可用隔离元件的性能提升如何帮助替代架构在不影响安全性的前提下提升系统性能
良田高拍仪V1000A3E评测 到底怎么样
超级计算机能跑多快,Summit最高速将达到200petaflops
电动车电池最常见的几种损坏情况(一)