中断处理

网卡工作原理

。_饼干妹妹 提交于 2020-01-07 16:35:05
Linux操作系统的功能可以概括为进程管理、内存管理、文件系统管理、设备管理、网络等几部分。所有的系统操作最终都可以映射到对物理设备的操作。除去对CPU、内存以及其他少数几个物理实体的操作之外,系统对其他设备的所有操作都通过专门的称为驱动程序的代码完成。系统中存在的每种外设在内核中都必须有对应的设备驱动程序对其进行处理。所以分析网卡的工作原理即是分析网卡的驱动程序。 网络是独立的一个模块。为了屏蔽网络环境中物理网络设备的多样性,Linux对所有的设备进行抽象并定义了一个统一的概念,称之为接口。所有对网络硬件的访问都是通过接口进行的,接口提供了一个对所有类型的硬件一致化的操作集合来处理基本数据发送和接收。一个网络接口被看作是一个发送和接收数据包的实体。对于每个网络接口,都用一个net_device的数据结构来表示。net_device中有很多提供系统访问和协议层调用的设备方法,包括提供设备初始化和往系统注册用的init函数,打开和关闭网络设备的open和stop函数,处理数据包发送的函数hard_start_xmit,以及中断处理函数。 所有被发送和接收的包都用数据结构sk_buff表示。要发送数据时,网络系统将分局系统路由表选择相应的网络接口进行数据传输;当接收数据包时,通过驱动程序登记的中断服务程序进行数据的接口处理。 Linux网络驱动程序崇尚倒下分为四层:协议接口层

STM32基于Rt-thread3.12系统的串口通讯

泪湿孤枕 提交于 2020-01-06 23:10:32
前言 STM32的串口收发可以说是对这个芯片学习的一个基础,相信接触过STM32的朋友首先学会的就是它的GPIO和USART。对GPIO和串口初始化的操作我在这里不做赘述,这些在STM32的例程里面很容易找到学会。我们在这里重点介绍STM32的串口中断接收,以及在RTT系统中我们如何把串口device注册到系统的对象容器里。 关于RT-Thread3.12系统 作为国产小型嵌入式系统中的翘楚,RTT也是被大多数产品所使用。我参与的这个项目RTT的主要工作就是多线程调度和串口device的控制。对于线程的调度先不详细说明,我们这里只介绍串口通讯一个线程的东西。 RTT对象 在 RT-Thread中,所有的数据结构都称之为对象。 其中线程,信号量,互斥量、事件、邮箱、消息队列、内存堆、内存池、设备和定时 器在 rtdef.h 中有明显的枚举定义,即为每个对象打上了一个数字标签。我们这里的对象就特指设备,而我们的设备就特指串口。 那么我们使用这个对象有什么用处呢,我私以为有两个最大的用处,一是有利于设备管理,二是基于程序安全考虑。我使用这一功能的时候基本与第一个用处不沾边,因为我们就一个串口设备。主要还是基于安全的考虑才使用RTT对象。 使用系统的对象也就是把硬件驱动注册到系统中,让系统对就硬件进行操控,我们再通过系统操控硬件。 串口注册到系统

fiddler配置和使用

蹲街弑〆低调 提交于 2020-01-06 14:53:49
1、fiddler的配置 打开Fiddler Tool->Fiddler Options->HTTPS 。 (配置完后记得要重启Fiddler). 选中 ,fiddler就可以截获https请求,第一次会弹出证书安装提示,若是没有,点击Actions-> Trust Root Certificate 另外如果要想监听程序的访问的https站点的使用是不可信任的,则要勾选上‘Ignore servercertificate errors’ 证书安装提示: 点击Yes,留意一下红框里面的内容,DO_NOT_TRUST_FiddlerRoot ,这个就是证书的名称。 点击是 点击确定,证书安装成功 查看一下证书,Actions—>open windows certificate Manager 可以证书已经添加进去了,证书名称就是之前提醒大家留意的,【DO_NOT_TRUST_FiddlerRoot】 2、手机端抓包配置: fiddler监听端口默认是 8888,你可以把它设置成任何你想要的端口。勾选上 “Allow remote computersto connect” ,允许远程设备连接。 为了减少干扰,可以去掉 “Act assystem proxy on startup” 。 手机端(客户端)设置: 首先查看电脑的 IP 地址,确保手机和电脑在同一个局域网内 输入ipconfig

FreeRTOS 任务栈大小确定及其溢出检测

ε祈祈猫儿з 提交于 2020-01-06 01:42:22
以下转载自安富莱电子: http://forum.armfly.com/forum.php FreeRTOS 的任务栈设置 不管是裸机编程还是 RTOS 编程,栈的分配大小都非常重要。 局部变量,函数调用时的现场保护和返 回地址,函数的形参,进入中断函数前和中断嵌套等都需要栈空间,栈空间定义小了会造成系统崩溃。 裸机的情况下,用户可以在这里配置栈大小: 为什么是堆中的?因为我们采用的就是动态创建任务的方式。如果静态创建,就和我们自己开辟的空间有关,通常静态创建任务用数组作为容器,但是通常静态创建的方式我们都不使用。 FreeRTOS 的系统栈设置 上面跟大家讲解了什么是任务栈,这里的系统栈又是什么呢?裸机的情况下,凡是用到栈空间的地方 都是在这里配置的栈空间: 在 RTOS 下, 上面两个截图中设置的栈大小有了一个新的名字叫系统栈空间 ,而任务栈是不使用这里的空间的。 任务栈不使用这里的栈空间,哪里使用这里的栈空间呢?答案就在中断函数和中断嵌套。  由于 Cortex-M3 和 M4 内核具有双堆栈指针,MSP 主堆栈指针和 PSP 进程堆栈指针,或者叫 PSP 任务堆栈指针也是可以的。在 FreeRTOS 操作系统中,主堆栈指针 MSP 是给系统栈空间使用的,进 程堆栈指针 PSP 是给任务栈使用的。 也就是说,在 FreeRTOS 任务中,所有栈空间的使用都是通过 PSP

如何停止JAVA线程

我的未来我决定 提交于 2020-01-06 00:35:28
本文以转移至本人的个人博客,请多多关注! 本文以转移至本人的个人博客,请多多关注! 本文以转移至本人的个人博客,请多多关注! http://blog.csdn.net/anhuidelinger/article/details/11746365 终止线程的三种方法 有三种方法可以使终止线程。 1. 使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。 2. 使用stop方法强行终止线程(这个方法不推荐使用,因为stop和suspend、resume一样,也可能发生不可预料的结果)。 3. 使用interrupt方法中断线程。 1. 使用退出标志终止线程 当run方法执行完后,线程就会退出。但有时run方法是永远不会结束的。如在服务端程序中使用线程进行监听客户端请求,或是其他的需要循环处理的任务。 在这种情况下,一般是将这些任务放在一个循环中,如while循环。如果想让循环永远运行下去,可以使用while(true){……}来处理。但要想使 while循环在某一特定条件下退出,最直接的方法就是设一个boolean类型的标志,并通过设置这个标志为true或false来控制while循环 是否退出。下面给出了一个利用退出标志终止线程的例子。 package chapter2; public class ThreadFlag extends Thread { public

EDMA - DMA QDMA 完美总结

本秂侑毒 提交于 2020-01-05 09:03:35
EDMA - DMA QDMA -------------------------------- 做个参考,和6487/8 的EDMA3的user guide有点区别. ------------------------------------ EDMA概要 ①EDMA数据传输有两种发起方式: ü CPU发起的EMDA数据传输(非同步方式):需要传输时,CPU设置ESR寄存器的相应位为1,从而触发一个EDMA事件的产生,事件对应的通道参数被送往地址硬件并且完成相应的处理,这种非同步方式的实时数据传输无需设定EER寄存器; ü 事件触发方式EDMA数据传输(同步方式):ER寄存器保存外设发送过来的事件,一旦CPU设置EER寄存器的相应位为1后,ER中的事件才会提交给事件编码器(Event Encoder),并且进一步引起相关的传输参数的发送给地址产生硬件;如果EER中对应于某事件的位没有置1,则ER寄存器中的事件将保留,一旦置1则触发EDMA的传输,这种特性可以应用到EDMA Chain传输,需要EER和CCER结合使用; ②EDMA每个通道是和特定的系统事件绑定的,如下表所示: ③EDMA Chain Transfer:一个通道传完继续传另一个通道; ④EDMA Link Tansfer:设定参数后,通道的数据传输传完,再载入这个通道的其他参数设定,再进行数据传输; (2

linux中断源码分析 - 概述(一)

梦想的初衷 提交于 2020-01-04 14:35:28
本文为原创,转载请注明: http://www.cnblogs.com/tolimit/ 关于中断和异常   一般在书中都会把中断和异常一起说明,因为它们具有相同的特点,同时也有不同的地方。在CPU里,中断和异常都会放入到一个中断描述符表中,都需要特定的处理程序进行处理,并且它们都是异步事件,内核完全不知道何时会有一个异常或者中断发生。当异常或者中断发生时,进程都会陷入内核,在内核中执行相应的处理。异常一般都是由CPU内部或者进程产生,而中断一般都是由外部设备产生。异常处理过程实际上和系统调用没什么区别(实际上系统调用是通过一个0x80异常陷入内核当中),而中断的处理过程和情况就相对来说比较复杂。一个中断处理分为硬中断和软中断两个部分,在中断处理的过程中系统是禁止调度和抢占的,而异常处理过程中是允许的。一个中断处理程序可以抢占其他的中断处理程序,也可以抢占异常处理程序,相反的,异常处理程序却不能够抢占中断处理程序。 可编程中断控制器(PIC、APIC)   为了方便说明,这里我们将PIC和APIC统称为中断控制器。中断控制器是作为中断(IRQ)和CPU核之间的一个桥梁而存在的,每个CPU内部都有一个自己的中断控制器,中断线并不是直接与CPU核相连,而是与CPU内部或外部的中断控制器相连。而为什么叫做可编程中断控制器,是因为其本身有一定的寄存器

《30天自制操作系统》笔记(10)——定时器

天大地大妈咪最大 提交于 2020-01-04 14:32:25
《30天自制操作系统》笔记(10)——定时器 进度回顾 上一篇 和 上上一篇 解决了绘制窗口和窗口刷新的问题。关于窗口的东西就此告一段落。本篇介绍一个相对独立且十分重要的操作系统部件—— 定时器 的使用方法。 定时器是一个硬件 可编程的间隔型定时器(Programmable Interval Timer)简称 定时器(PIT) ,是集成到电脑上的一个硬件部件。之前讲过的用于实现中断机制的 PIC 也是个硬件部件。有了PIT,我们才能在计算机中计时。 初始化定时器 前面,CPU、PIC都需要设置好才能用, PIT也需要设置 。PIT类似C#Winform里的Timer控件,能设置的只有激发Tick事件的 时间间隔(Interval) 这个属性。PIT里的Tick事件,对应的是PIC里的 0号中断 。也就是说,PIT会根据你设定的Interval,每隔Interval时间就发送一个0号中断。这里又印证了 "事件小名中断" 的说法。 1 #define PIT_CTRL 0x0043 2 #define PIT_CNT0 0x0040 3 void init_pit(void) 4 { 5 io_out8(PIT_CTRL, 0x34);/*中断周期(Interval)即将变更*/ 6 io_out8(PIT_CNT0, 0x9c);/*中断周期的低8位*/ 7 io_out8(PIT

MIT-JOS系列6:用户环境(二)

回眸只為那壹抹淺笑 提交于 2020-01-04 14:30:14
Part A:用户环境和异常处理 注:根据MIT-JOS的lab指导手册,以下不明确区分“环境”和“进程” 用户环境创建 见上一篇: MIT-JOS系列5:用户环境(一) 处理中断和异常 基础知识 受保护的控制转移 异常(exceptions)和中断(interrupts)都是受保护的控制转移(protected control transfers),它们将处理器模式从用户态切换到内核态,不给用户模式干扰到其他环境或内核功能的机会。在Intel的术语里, 中断一般是指由处理器外部的异步事件引发 的受保护的处理器控制权转移,例如外部I/O设备发出的活动信号; 异常则是由当前执行的代码同步地引起 的控制权转移,例如除零异常或非法存储器访问 为了确保这些控制转移被切实地受到了保护,处理器的中断/异常机制被设计为: 当中断或异常发生时,当前执行的代码无法选择进入内核的位置或方式 。处理器确保只能在严格受控的情况下才能进入内核态。在x86下,两种机制配合工作以提供这种保护: 中断描述符表IDT (中断向量表):处理器保证中断和异常只能引起代码进入到内核的一些特定的、已被明确定义的入口点。这些入口点由内核决定,而非中断或异常引发时正在执行的代码决定 x86允许内核有256种不同的中断或异常入口,每个入口的值由整数0~255表示,称为 中断向量 。一个中断向量的值由引发中断的源决定,不同的设备

IDT系列:(一)初探IDT,Interrupt Descriptor Table,中断描述符表

ぐ巨炮叔叔 提交于 2020-01-04 14:29:33
原文: IDT系列:(一)初探IDT,Interrupt Descriptor Table,中断描述符表 IDT,Interrupt Descriptor Table,中断描述符表是CPU用来处理中断和程序异常的。 一、有关IDT的基本知识 1、中断时一种机制,用来处理硬件需要向CPU输入信息的情况。 比如鼠标,键盘等。 2、中断和异常的产生是随机的,在CPU正常运行过程中随时可能产生。CPU的中断处理机制 3、中断可以由硬件产生(称为外部中断),也可以由软件产生(称为内部中断),在程序中写入int n指令可以产生n号中断和异常(n从0-ffh)。 4、同时CPU的中断异常机制还是重要特性的支持原理,比如程序调试,程序运行过程中的异常处理(如零除数异常、内存分页错误等)。 5、早期的操作系统甚至是通过中断来进行内核调用的。int指令是一种c从ring3 进入ring 0的方法。比如windows在xp版本之前使用的int 2e。在x86 CPU提供了sysenter指令后,这种方式才被放弃。 6、每一种中断对应一个中断号。CPU执行中断指令时,会去IDT表中查找对应的中断服务程序(interrupt service routine ,ISR)。ISR(为了表述方便后面用ISR n表示n号中断的处理程序),x86CPU最大可以支持256种中断。 7、中断是CPU的机制