中断处理

《操作系统真象还原》中断

我与影子孤独终老i 提交于 2020-02-27 04:12:49
中断   中断处理,就是处理器接受到中断信号后,暂停当前执行的任务,转而去查找中断向量表,去执行中断服务程序,执行完后,恢复到中断前的状态,继续执行刚才的程序。   形象一点就是有个人或有个急事打断你现在做的事情,让你不得不处理这件紧急的事情,当你处理完这件事情后(当然也有可能继续被另一件事情打断),再做回你刚才没做完的事情。 为什么要有中断   那为什么要有中断呢?拿工作做例子,突然有件事情打断你去做别的事情,一般人都会觉得很烦躁,毕竟重新集中精力做回原来的事情,是一件很耗精力的事情;但大多情况下“别的事情”都是你的本职工作,而且很有可能别人的工作也需要你的协助才能进行下去,如果没有你,可能别人的工作根本进行不下去,导致项目进展停滞了。尽管“中断”了你现在的工作,但完成另一个工作很可能会促进整个项目的进展,让更多的任务能够得到完成。   需要中断的原因和上面的例子类似。有了中断,我们可以让多个任务看起来能够同时运行(在单CPU中实际上不是同时运行,而是交替,一个时刻只有一个任务运行,同时运行只不过是假象,这就是并发),比如任务A和任务B,我不用等到任务A完成才去完成任务B,我可以一会儿去做任务A,一会儿去做任务B,这样子的话任务B不需要等待任务A了。如果我们把任务A看作一个进程,把任务B看作外部设备需要处理的工作(比如键盘输入),这样子CPU既可以执行内存里的程序

ARM GIC

瘦欲@ 提交于 2020-02-26 23:04:25
GIC 简介 GIC 的全称为 General Interrupt Controller,主要作用可以归结为: 接受硬件中断信号并进行简单处理,通过一定的设置策略,分给对应的CPU进行处理。 Terminology IRI: Interrupt Routing Infrastructure. The Distributor, Redistributor and ITS are collectively known as an IRI. The IRI performs interrupt grouping, interrupt prioritization, and controls the forwarding of interrupts to the CPU interfaces. ITS: Interrupt translation service, is an OPTIONAL hardware mechanism in the GICv3 architecture that routes LPIs to the appropriate Redistributor, and the GICv4 implementations must include at least one ITS. ARM 中断源分类 SGI: Software Generated Interrupt

利用DMA双缓冲或半完成中断实现串口不定长数据的接收

最后都变了- 提交于 2020-02-26 18:44:30
在《 HAL版本DMA循环模式串口数据收发 》中介绍了利用DMA循环模式进行串口数据的收发,STM32F4xx的DMA还提供了双缓冲的功能,采用双缓冲模式,可以在一个DMA完成接收后,对其缓冲区内数据进行处理的过程中,将此时接收到的数据放入第二个DMA缓冲区。双缓冲模式尤其对高速数据接收有着明显的优势,本文以上述循环接收方案为基础,提供实现双缓冲接收数据的实现方式。 首先,从寄存器的角度讲,要实现双缓冲,需要将CR寄存器的DBM位置1,将该位置1后,硬件会强制使用循环模式,当一个缓冲满后,会自动交换缓冲区的地址。但我们采用HAL库版本的程序时,不太需要关注这些,但是值得注意的是,HAL库的stm32f4xx_hal_uart.c中并没有提供实现双缓冲的接口,因此需要我们对HAL库的程序进行一些改写: HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size) { /*省略库中起始部分的程序*/ /* Set the DMA abort callback */ huart->hdmarx->XferAbortCallback = NULL; /* Enable the DMA stream */ //HAL_DMA_Start_IT(huart-

如何停止一个正在运行的线程?

自闭症网瘾萝莉.ら 提交于 2020-02-26 12:15:19
停止一个线程意味着在任务处理完任务之前停掉正在做的操作,也就是放弃当前的操作。停止一个线程可以用Thread.stop()方法,但最好不要用它。虽然它确实可以停止一个正在运行的线程,但是这个方法是不安全的,而且是已被废弃的方法。 在java中有以下3种方法可以终止正在运行的线程:· 使用退出标志,使线程正常退出,也就是当run方法完成后线程终止· 使用stop方法强行终止,但是不推荐这个方法,因为stop和suspend及resume一样都是过期作废的方法· 使用interrupt方法中断线程 1、停止不了的线程interrupt()方法的使用效果并不像for+break语句那样,马上就停止循环。调用interrupt方法是在当前线程中打了一个停止标志,并不是真的停止线程。public class MyThread extends Thread { public void run(){ super.run(); for(int i=0; i<500000; i++){ System.out.println(“i=”+(i+1)); } } } public class Run { public static void main(String args[]){ Thread thread = new MyThread(); thread.start(); try { Thread

Java线程面试题 Top 50 (转载)

Deadly 提交于 2020-02-26 10:06:30
 本文由 ImportNew - 李 广 翻译自 javarevisited 。欢迎加入 Java小组 。转载请参见文章末尾的要求。   不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题。Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员的欢迎。大多数待遇丰厚的Java开发职位都要求开发者精通多线程技术并且有丰富的Java程序开发、调试、优化经验,所以线程相关的问题在面试中经常会被提到。   在典型的Java面试中, 面试官会从线程的基本概念问起, 如:为什么你需要使用线程, 如何创建线程,用什么方式创建线程比较好(比如: 继承thread类还是调用Runnable接口 ),然后逐渐问到并发问题像在Java并发编程的过程中遇到了什么挑战,Java内存模型,JDK1.5引入了哪些更高阶的并发工具,并发编程常用的 设计模式 ,经典多线程问题如生产者消费者,哲学家就餐,读写器或者简单的有界缓冲区问题。仅仅知道线程的基本概念是远远不够的, 你必须知道如何处理 死锁 , 竞态条件 ,内存冲突和线程安全等并发问题。掌握了这些技巧,你就可以轻松应对多线程和并发面试了。   许多Java程序员在面试前才会去看面试题,这很正常。因为收集面试题和练习很花时间,所以我从许多面试者那里收集了Java多线程和并发相关的50个热门问题

51单片机中断学习

左心房为你撑大大i 提交于 2020-02-26 05:44:36
一、中断的概念 CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生); CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务); 待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断 二、中断源 在51单片机中有5个中断源 中断号 优先级 中断源 中断入口地址 0 1(最高) 外部中断0 0003H 1 2 定时器0 000BH 2 3 外部中断1 0013H 3 4 定时器1 0018H 4 5 串口总段 0023H 三、中断寄存器 单片机有10个寄存器主要与中断程序的书写控制有关 1.中断允许控制寄存器IE 2.定时器控制寄存器TCON 3.串口控制寄存器SCON 4.中断优先控制寄存器IP 5.定时器工作方式控制寄存器TMOD 6.定时器初值赋予寄存器(TH0/TH1,TL0/TL1) 寄存器详细说明:http://blog.sina.com.cn/s/blog_a05b986d0101545c.html 四、寄存器功能与赋值说明 注:在用到中断时,必须要开总中断EA,即EA=1。 //开总中断 1.中断允许控制寄存器IE EX0(EX1):外部中断允许控制位 EX0=1 外部中断0开关闭合 //开外部0中断 EX0=0 外部中断0开关断开 ET0(ET1):定时中断允许控制位 ET0=1

X86汇编7.内部中断

元气小坏坏 提交于 2020-02-26 04:12:38
最近学习了X86汇编,其实无论是古老的8086还是现在i3/5/7/9,Xeon3/5,在最基本原理上,都是相通的,只是CPU位数,寻址空间,寄存器个数,指令集的扩充等方面有所不同,对于学习,8086永不过时。 依据中断来源,中断可以分为内部中断,和外部中断。 1.内部中断的产生 当CPU发生下列事情后,会产生中断: (1)除法错误,中断号:0 (2)单步执行,中断号:1 (3)执行info指令,中断号:4 (4)执行int指令,中断号:int 指令后面跟随的立即数 CPU收到中断信息后,需要立即对中断进行处理,处理中断的程序叫中断处理程序。CPU用8位的中断码通过中断向量表找到相应的中断处理程序,中断向量就是中断处理程序入口地址。 中断向量表: 0号中断对应的中断处理程序的入口地址 1号中断对应的中断处理程序的入口地址 ...... n号中断对应的中断处理程序的入口地址 这样,CPU通过中断号就能找到中断处理程序的入口地址。中断向量表在内存中存放,对于8086处理器,中断向量表指定放在内存地址0处,从0000:0000到0000:03FF的1024个地址单元中,不同CPU可能有不同的约定。 CPU响应中断的方式是:设置CS:IP的值,使他指向中断处理程序入口地址。 中断过程: (1)(从中断信息中心)取得中断号 (2)标志寄存器的值入栈(因为在中断过程中要改变标志寄存器的值

X86汇编8.外部中断

。_饼干妹妹 提交于 2020-02-26 04:12:19
最近学习了X86汇编,其实无论是古老的8086还是现在i3/5/7/9,Xeon3/5,在最基本原理上,都是相通的,只是CPU位数,寻址空间,寄存器个数,指令集的扩充等方面有所不同,对于学习,8086永不过时。 1.端口的读写 在PC系统中,除和CPU通过总线相连的芯片(内存芯片)之外,还有3类芯片: (1)各接口卡(网卡、显卡)上的接口芯片,他们控制接口卡进行工作 (2)主板上的接口芯片,CPU通过它们对部分外省进行访问 (3)其他芯片,用来存储相关的系统信息,或进行相关的输入、输出处理 这些芯片都有一组可以由CPU读写的寄存器,这些寄存器物理上处于不同芯片中,但是都与CPU总线相连,可以通过CPU总线对他们进行控制,从CPU角度,将这些寄存器都称为端口,对他们进行统一编址,从而建立了一个统一的端口地址空间,每一个端口在地址空间中都有一个地址。 总结,CPU可以直接读写以下三个地方的数据: (1)CPU内部寄存器,在CPU内部 (2)内存单元,直接连在CPU上 (3)端口 端口地址和内存地址一样,都通过地址总线来传送。在PC系统中,最多可以定位64K个不同端口,他们的端口范围是:0~65535。 对端口的读写不能用mov、push、pop,应该用in和out in al,60h ;从60h端口读入一个接 执行过程: (1)CPU通过地址总线将信息60h发出 (2

跟涛哥一起学嵌入式 第05集:一道程序改错题,测出你的嵌入式功底

纵然是瞬间 提交于 2020-02-26 02:52:11
大家好,欢迎阅读《跟涛哥一起学嵌入式》第05集,我们今天讨论一下中断的基本概念。 中断,是嵌入式开发中经常使用的一个功能,也是嵌入式工程师必须要掌握的一个概念:CPU和外设通信时,一般都采用中断的形式异步通信,可以大大提高CPU资源的利用率。而你对中断的理解,到底有多少呢?不要急,一道程序改错题,就可以测出你的嵌入式系统功底。 比如,我们在嵌入式ARM裸机平台上,要实现一个MP3播放器,要求实现如下功能:当按键按下时,可以播放、暂停、播放下一首、上一首。为此,我们设计一个按键中断服务程序,当有按键发生时,我们去读取按键的值,然后再根据按键值去执行不同的操作,设计的按键中断函数如下: int keyboard_isr(int irq_num) { char *buf =(char *)malloc(512); int key_value = 0, key_value = keyboard_scan(); if(key_value == 1) { mp3_decode(buf,"xx.mp3"); sleep(10); mp3_play(buf);//play } else if(key_value == 2) mp3_pause(buf);//pause else if(key_value == 3) mp3_next(buf);//next song else if(key

TMS320F28051单片机解密型号

自闭症网瘾萝莉.ら 提交于 2020-02-25 19:17:17
TI 领先的 DSP 技术的处理能力和效率实现了 MCU 的控制外设集成和简便易用性,是诸如数字电机控制、数字电源和智能传感器等嵌入式应用的理想选择。致芯对于DSP系列芯片解密有明显优势。 TMS320F28051基本特性: 高效 32 位 CPU (TMS320C28x) 60MHz(16.67ns 周期时间) 16 × 16 和 32 × 32 乘法和累加 (MAC) 运算 16 × 16 双 MAC 哈佛 (Harvard) 总线架构 连动运算 快速中断响应和处理 统一存储器编程模型 高效代码(使用 C/C++ 和汇编语言) 部分芯片型号如下: TMS320LF2406A TMS320F28027 TMS320F2809 TMS320F28335 TMS320F2810 TMS320F28022 TMS320F2802 TMS320F2811 TMS320F28026 TMS320F2808 TMS320F28334 TMS320LF2407A TMS320F28021 TMS320F2806 TMS320F28332 TMS320LF2402A TMS320F2812 TMS320F28235 TMS320F2802 TMS320F2811 TMS320F28062 TMS320F28050 TMS320F28068 TMS320F28054 来源: 51CTO 作者: