中断处理

学霸笔记

霸气de小男生 提交于 2020-01-16 18:42:58
北邮摄像头 一、摄像头基本原理 我们的像素是多少 不需要太大的像素,不然会降低接受图像速度 提高帧数,降低像素 中断处理 PCLK像素值、HREF行、VSYNC场:一场一zhen 1、用到的就是行中断和场中断 行\场中断:需要用到外部引脚中断,同步 DMA传输:一般:外设到CPU到内存;DMA:由DMA控制器直接向外设取数据,此时CPU就只需要等待DMA完成接受的信号 中断处理:行中断来了,存到一个数组里,行到达像素高度,行中断清零,场中断,盯着 Field_Over_Flag=1 当然,直接接受场中断就更好了 2、图像采集优化 没记 二、摄像头图像处理 1.1、图像二值化 根据环境在出发前设定固定阈值:小于阈值直接设成白色(0) 通过OLED打印,通过按键对于图像二值化阈值进行调整 大津法,遍历阈值,发现方差最大 2、赛道边线提取 2.1 图像校正 获取摄像头视野角度,水平倾角,高度 计算实际图像与获取图像的XY坐标对应关系 对于缺失值进行 加权来计算缺失点计算量太大,只需要关键点(比如:赛道边缘什么) 2.2 赛道中心提取 2.2.1 常规赛道 捕捉赛道左侧右侧边缘坐标 计算梯度幅度和方向;保留局部梯度最大的点,已得到细化的边缘 2.2.2 特殊赛道 环岛识别检测、十字交叉路口 找出关键特征 三、摄像头代码框架 1、main.c 关闭总中断,防止初始化失败,初始化结束,就开中断

中断&异常

五迷三道 提交于 2020-01-16 04:00:33
中断分类      类别 原因 返回行为 例子 广义 中断 异步中断 ( 狭义中断 ) 中断 ( interrupt) 可屏蔽中断 来自 I/O 设备的信号 总是返回到下一条指令 所有的 IRQ 中断 不可屏蔽中断 电源掉电和物理存储器奇偶校验 同步中断 ( 也称异常 ) 陷阱 (trap) 有意的异常 总是返回到下一条指令 系统调用、信号机制 ( 通过软中断实现 ) 故障 (fault) 潜在可恢复的错误 返回到当前指令 缺页异常、除 0 错误、段错误 终止 (abort) 不可恢复的错误 不会返回 硬件错误 注: 80386有两根引脚INTR和NMI接受外部中断请求信号,INTR接受可屏蔽中断请求。在80386中,标志寄存器EFLAGS中的IF标志决定是否屏蔽可屏蔽中断请求。 中断的定义( wikipedia ) 中断 是指由于接收到来自外围硬件(相对于 中央处理器 和 内存 )的 异步 信号或来自 软件 的 同步 信号,而进行相应的硬件/软件处理。硬件中断导致处理器通过 一个上下文切换(context switch)来保存执行状态(以程序计数器和程序状态字等寄存器信息为主);软件中断则通常作为CPU指令集中的一个指令(汇编中的int 指令),以可编程的方式直接指示这种上下文切换,并将处理导向一段中断处理代码。软中断陷入内核,常被用于实现系统调用(int 80等)。

softlockup/hardlockup原理详细介绍

眉间皱痕 提交于 2020-01-16 00:50:31
转载自 https://blog.csdn.net/hzj_001/article/details/100054659 主体涉及到了3个机制:kernel watchodog线程,高精度定时器(时钟中断),基于PMU硬件perf event的NMI(不可屏蔽中断)。 基本思想: 1.)(soft lockup):抢占被长时间关闭而导致其余进程无法调度 2.)(hard lockup):中断被长时间关闭而导致 softlockup基本原理: 1)SoftLockup 检测首先需要对每一个CPU core注册叫做watchdog的kernel线程。即[watchdog/0],[watchdog/1],[watchdog/2]… 2)同时,系统会有一个高精度的计时器hrtimer,该计时器能定期产生时钟中断,该中断对应的中断回调函数是watchdog_timer_fn();此中断回调函数主要做3件事: a.watchdog_interrupt_count函数更新hrtimer_interrupts变量(判断hardlockup会用) b.wake_up_process唤醒watchdog线程(更新时间戳) c.is_softlockup判断是否出现了soft_lockup soft lock detector会检查时间戳,如果超过soft lockup threshold一直未更新,说明

Java多线程面试题整理

◇◆丶佛笑我妖孽 提交于 2020-01-15 09:38:38
1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速。比如,如果一个线程完成一个任务要100毫秒,那么用十个线程完成改任务只需10毫秒。Java在语言层面对多线程提供了卓越的支持,它也是一个很好的卖点。 2) 线程和进程有什么区别? 线程是进程的子集,一个进程可以有很多线程,每条线程并行执行不同的任务。不同的进程使用不同的内存空间,而所有的线程共享一片相同的内存空间。别把它和栈内存搞混,每个线程都拥有单独的栈内存用来存储本地数据。 3) 如何在Java中实现线程? 1)java.lang.Thread 类的实例就是一个线程但是它需要调用java.lang.Runnable接口来执行, 2)由于线程类本身就是调用的Runnable接口所以你可以继承java.lang.Thread 类或者直接调用Runnable接口来重写run()方法实现线程。 3). 实现Callable接口通过FutureTask包装器来创建Thread线程 Callable接口(也只有一个方法)定义如下: public interface Callable<V> { V call() throws Exception; } public class SomeCallable<V>

中断机制

 ̄綄美尐妖づ 提交于 2020-01-15 04:38:28
中断的定义 指CPU对突发的外部事件的反应过程或机制 cpu收到 外部信号 (中断信号)后,停止当前工作,转去处理该 外部事件 ,事件完毕后回到原来工作的 中断处 (断点)继续原来的工作 引入中断的目的 实现并发活动 实现实时处理 实现故障自动处理 中断的一些概念 中断源和中断类型 中断源 引起系统中断的事件称为中断源 中断类型 强迫性中断和自愿中断 强迫性中断:程序没有预期的如IO,外部中断 自愿中断:程序有预期的。 如:执行访管指令 外中断和内中断 外中断:由CPU外部事件引起的,如IO,外部事件 外中断:不可屏蔽中断和可屏蔽中断 不可屏蔽中断:中断原因很紧要,CPU必须响应 可屏蔽中断:中断原因不紧要,CPU可以不响应 内中断:由CPU内部事件引起的,如访管中断,程序中断 断点 程序中断的地方,将要执行下一条指令的地址 CS:IP 现场 程序正确运行所依赖的信息集合 相关寄存器 现场的两个处理过程 现场的保护:进入中断服务程序之前,栈 现场的恢复:退出中断服务程序之前,栈 中断响应的过程 1)识别中断源 2)保护断点和现场 3)装入中断服务程序的入口地址 4)进入中断服务程序 5)恢复现场和断点 6)中断返回:IRET 中断响应的实质 交换指令执行地址 交换CPU的态 工作: 现场的保护和恢复 参数传递(通信) 来源: CSDN 作者: zxk_623797743 链接:

Java并发学习 & Executor学习 & 异常逃逸 & 同步互斥Best Practice & wait/notify, conditon#await/signal

陌路散爱 提交于 2020-01-14 12:11:55
看了这篇文章: http://www.ciaoshen.com/2016/10/28/tij4-21/ 有一些Java并发的内容,另外查了一些资料。 朴素的Thread 首先,Java中关于线程Thread最基本的事实是: 除非通过Native方法将本地线程加入JVM,创建线程唯一的方法就是“创建一个Thread类的实例对象,然后调用它的start()方法。” 其次,关于Thread对象实例的构造,需要注意,start()方法依赖于run()方法: 要么传递一个Runnable对象给构造器做参数。 要么重写Thread自己的run()方法。 第一种方法是实现Runnable接口。 注意, Runnable里面获取线程信息需要用 Thread.currentThread() package com.company; class MyRunnable implements Runnable { public void run() { try { Thread.sleep((long)(Math.random() % 5 * 1000 + 1000)); } catch (InterruptedException e) { e.printStackTrace(); } System.out.printf("Here is thread %d\n", Thread

OS期末预习与PPT翻译(PPT7~13)

倖福魔咒の 提交于 2020-01-14 09:10:23
黄底的字是我还不懂的地方,如果有知道的小伙伴可以私戳我或者评论,感激不尽ღ( ´・ᴗ・` ),期末加油! Exception 概念 中断 指CPU 在收到外部中断信号后,停止原来工作,转去处理该中断事件,完毕后回到原来断点继续工作。 操作系统-复习笔记整理 exception:非法的程序操作 interrupt:硬件设备发出的信号 system call:用户程序通过系统调用请求操作系统服务 CPU每执行完一条指令,都要检查是否有未响应的中断信号( 这张图里的interrupt包括exception,interrupt和system call吗?还是仅仅是interrupt ),如果是,则保护被中断的CPU环境。 获取中断号并由此找到中断处理程序 ,中断处理程序处理完后再继续执行下一条指令。 中断向量表 每种设备都配以相应的中断处理程序。当某种设备发来中断请求信号时,中断处理器会确定中断号。然后去查找中断向量表。 中断向量表存着所有中断号和对应的中断处理程序的入口地址。因此找到中断号对应的中断处理地址并把地址放在PC中,就可以去执行中断处理程序了。 中断的分类 ppt标题的这个User->Kernel是什么意思? 是否中断可以分成interrupt和exception,同时也可以分成device interrupt,software interrupt 和program

IDT系统中断描述表以及绕过Xurtr检测的HOOK姿势

笑着哭i 提交于 2020-01-14 08:22:17
什么是中断? 指当出现需要时,CPU暂时停止当前程序的执行转而执行处理新情况的程序和执行过程。即在程序运行过程中,系统出现了一个必须由CPU立即处理的情况,此时,CPU暂时中止程序的执行转而处理这个新的情况的过程就叫做中断。 比如:除零(0号中断)、断点(3号中断)、系统调用(2e号中断)、以及异常处理等都会引发中断,所以自然需要相应的中断例程去进行处理。 这样操作系统就会用数据结构来维护这些中断例程,这个数据结构就是IDT(Interrupt Descriptor Table)。 中断描述表 IDT表的长度与地址是由CPU的IDTR寄存器来描述的。IDTR寄存器共有48位,高32位是IDT表的基地址,低16位是IDT的长度。 typedef struct _IDTR{ USHORT IDT_limit; USHORT IDT_LOWbase; USHORT IDT_HIGbase; }IDTR,*PIDTR; IDTR idtr; __asm SIDT idtr; 可以通过以上SIDT指令可以读取IDTR寄存器。然后通过MAKEWORD宏把高位与地位组合起来就可以获得IDT表的基地址了。 简单来说,IDT表是一张位于物理内存的线性表,共有256个表项。在32位模式下,每个IDT表项的长度是8个字节(64 bit),IDT表的总长度是2048字节。 kd> r idtr idtr

java核心-多线程(4)-线程类基础知识

橙三吉。 提交于 2020-01-14 00:33:17
1.并发 <1>使用并发的一个重要原因是提高执行效率。由于I/O等情况阻塞,单个任务并不能充分利用CPU时间。所以在单处理器的机器上也应该使用并发。 <2>为了实现并发,操作系统层面提供了。但是进程的数量和开销都有限制,并且多个进程之间的数据共享比较麻烦。另一种比较轻量的并发实现是使用线程,一个进程可以包含多个线程。线程在进程中没有数量限制, 数据共享相对简单。线程的支持跟语言是有关系的。Java 语言中支持多线程。 <3>Java 中的多线程是抢占式的。这意味着一个任务随时可能中断并切换到其它任务。所以我们需要在代码中足够的谨慎,防范好这种切换带来的副作用。 2.基础 <1>Runnable 它可以理解成一个任务。它的run()方法就是任务的逻辑,执行顺序; <2>Thread 它是一个任务的载体,虚拟机通过它来分配任务执行的时间片。Thread中的start方法可以作为一个并发任务的入口。不通过start方法来执行任务,那么run方法就只是一个普通的方法; <3>线程的状态 见下图 <4>Callable<T> 它是一个带返回的异步任务,返回的结果放到一个Future对象中。 <5>Future<T> 它可以接受Callable任务的返回结果。在任务没有返回的时候调用get方法会阻塞当前线程。cancel方法会尝试取消未完成的任务(未执行->直接不执行,已经完成-

Linux中断管理机制

淺唱寂寞╮ 提交于 2020-01-13 17:21:04
转自 https://www.cnblogs.com/arnoldlu/p/8659981.html 新的linux kernel 及 arm不支持 中断嵌套。 关键词:GIC、IAR、EOI、SGI/PPI/SPI、中断映射、中断异常向量、中断上下文、内核中断线程、中断注册。 由于篇幅较大,简单梳理一下内容。 本章主要可以分为三大部分: 讲解硬件背景的 1. ARM中断控制器 。 系统初始化的静态过程:GIC初始化和各中断的中断号映射 2. 硬件中断号和Linux中断号的映射 ;每个中断的注册 5. 注册中断 。 一个中断从产生到执行完毕的动态过程:ARM底层通用部分如何处理 3. ARM底层中断处理 ;GIC部分的处理流程以及上层通用处理部分 4. 高层中断处理 。 这里的高层处理,没有包括下半部。下半部在 Linux中断管理 (2)软中断和tasklet 和 Linux中断管理 (3)workqueue工作队列 中进行介绍。 1. ARM中断控制器 1.1 ARM支持中断类型 ARM GIC-v2支持三种类型的中断: SGI:软件触发中断(Software Generated Interrupt),通常用于多核间通讯,最多支持16个SGI中断,硬件中断号从ID0~ID15。SGI通常在Linux内核中被用作IPI中断(inter-processor interrupts)