谈谈对中断的理解?
   中断是计算机中处理异步事件的重要机制
   
   中断触发的方式:
       1)中断源级设置
          按键:(CPU之外的硬件)
               设置中断的触发方式
          uart控制 (CPU之内的硬件)
               不用设置触发方式
          
          中断使能     
                    
       2)中断控制器级设置
          优先级 中断使能 ...设置发往哪个核
       3)ARM设置
          cpsr.I =0(使能中断)
    硬件自动做4件事
       1:备份cpsr到spsr_<mode>
  2:设置cpsr(主要是设置准备跳转到那个模式下执行代码)
  3:将pc-4保存到lr_<mode>(以便下次能够跳转返回)
  4;设置pc为某个异常的入口地址
            及pc=VECTOR_BASE+0x00/0x04/0x08/0x0C/0x10/0x18/0x1C
            若为IRQ异常及pc=baseaddr+0x18;
    软件应该做的事
       1:建立异常向量表  (产生中断之前就要准备完成)
       2:跳转到IRQ异常处理函数(产生中断时候跳转)
         IRQ异常处理函数
              保护现场
              bl c_irq_handler
              恢复现场

   c_irq_handler
              判断哪个硬件触发的
              调用对应硬件操作函数
              清空中断源 中断控制器pending       
        注:
             保护现场:及将被异常打断任务使用的ARM寄存器的数据保存到栈中。
     恢复现场:1)从栈中将之前保存到栈的数据恢复到ARM寄存器中。2)状态恢复:cpsr=spsr_<mode> 。 3)跳转返回:pc=lr_<mode>。

linux中附加要求: 中断上下文  栈空间小
    为了解决某些硬件中断处理过长 人为分为顶半部 和底半部
       顶半部
       底半部
    登记底半部的方式
       1)软中断
          不灵活  不好用
       2)tasklet
          基于软中断机制实现的
          其登记的底半部工作于中断上下文
          底半部函数在中断返回之前被执行
   具有中断处理函数的特点。
       3) 工作队列   
          底半部工作于进程上下文,及是基于进程实现的。
          具有进程的特点。

中断处理函数的特点:
1:要执行速度足够的快,若执行的很慢的话的将会影响用户进程的执行,应该中断的优先级高于进程,所以只要有中断在执行进程将得不到执行,给人感觉就会觉得用户程序很卡。
2:中断处理函数不能休眠和阻塞,同时也不能调用可能造成休眠的函数(如copy_to_user(...)/copy_from_user(...)函数可能造成休眠)。若使中断处理函数休眠就会使内核吐核。
  因为当中断休眠后将释放cpu给其他的进程或者中断,由于中断处理函数不参入进程调度,所以在主动释放cpu资源后就不能够再次的得到执行。
3:中断中不能调用不可重入的函数,因为中断也会别高优先级的中断打断。当低优先级的中断处理函数执行到不可重入的函数被打断时,再次回来的时候会值就不准确。
  printf(....); 和浮点数的运算都是不可重入的。
4:当执行中断处理函数时使用了独立的栈空间,该栈一般很小 通常为一个物理内存页(4KB)在中断处理函数中不能静态分配大数组。
5:中断的优先级高于进程优先级。

进程函数的特点:
1:进程可以进行休眠和阻塞,因为有进程调度器会再次使其重新得到调用。
2:进程中可以调用不可重入函数,但需要对共享资源进行加锁保护(互斥锁,信号量 等)
3:进程也同样有自己的线程栈(栈是以线程为分配单位),该栈一般很小 通常为一个物理内存页(4KB)在中断处理函数中不能静态分配大数组。
4:进程的执行速度无要求。

ARM7中断的理解的更多相关文章

  1. ARM学习篇 中断定时理解

    1. 中断控制器 a. 中断处理流程 P1--摘自S3C2440A手册 P1简要阐述了S3C2440A内置中断控制器处理中断的流程: ●​若某中断有自中断,则先接收子中断请求,否则,直接接受源中断. ...

  2. 对中断的理解handle_level_irq【原创】

    如下为本人原创,在解决问题的过程中的一点心得,如果有描述不准确的地方还请各位指出,非常感谢 Linux内核版本:linux-4.9.18 曾有一次调试触摸屏的时候遇到如下的问题 /startup/mo ...

  3. STM32外部中断初理解

    PA0,PB0...PG0--->EXTI0 PA1,PB1...PG1--->EXTI1 ....... PA15,PB15...PG15--->EXTI15 以上为GPIO和中断 ...

  4. 理解Linux中断 (1)【转】

    转自:http://blog.csdn.net/tommy_wxie/article/details/7425685 版权声明:本文为博主原创文章,未经博主允许不得转载. 一直认为,理解中断是理解内核 ...

  5. 对中断interrupt的理解

    一.中断 线程的几种状态:新建.就绪.运行.阻塞.死亡.参考:线程的几种状态转换 线程的可运行状态并不代表线程一定在运行(runnable != running ) . 大家都知道:所有现代桌面和服务 ...

  6. 电赛菜鸟营培训(二)——STM32F103CB之中断控制

    一.中断的概念 中断可以理解为一个有激励给它就会立马给你响应的一个东东.就是说在你执行main函数的内容时,当有这个触发时便会跳转到这个中断内存,执行这段代码. Attention: 1.中断的用法, ...

  7. Linux系统的中断、系统调用和调度概述【转】

    转自:http://blog.csdn.net/yanlinwang/article/details/8169725 版权声明:本文为博主原创文章,未经博主允许不得转载. 最近学习Linux操作系统, ...

  8. JAVA多线程之中断机制(如何处理中断?)

    一,介绍 这篇文章主要记录使用 interrupt() 方法中断线程,以及如何对InterruptedException进行处理.感觉对InterruptedException异常进行处理是一件谨慎且 ...

  9. java线程总结2--wait/notify(all)/sleep以及中断概念

    上一篇关于线程的博客简单梳理了一下多线程的一些基本概念,今天这篇博客再进行多线程编程中一些核心的方法进行简单的梳理和总结,主要是wait,sleep和notify方法以及中断的概念 一.中断概念. 在 ...

随机推荐

  1. SpringBoot自动注入分析

    我们经常会被问到这么一个问题:SpringBoot相对于spring有哪些优势呢?其中有一条答案就是SpringBoot自动注入.那么自动注入的原理是什么呢?我们进行如下分析. 1:首先我们分析项目的 ...

  2. Java并发编程总结(一)Syncronized解析

    Syncronized解析 作用: )确保线程互斥的访问同步代码 )保证共享变量的修改能够及时可见 )有效解决重排序问题. 用法: )修饰普通方法(锁是当前实例对象) )修饰静态方法(锁是当前对象的C ...

  3. Mybatis入门简版(补充)

    一.Mybatis 中$与#的区别 #相当于对数据 加上 双引号,$相当于直接显示数据 1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #user_id#, ...

  4. Blazor(一):运行初体验,全新的.net web的开发

    官网:https://dotnet.microsoft.com/apps/aspnet/web-apps/client 作者BBS:http://bbs.hslcommunication.cn/ 我们 ...

  5. Flask中的cookie和session

    from flask import Flask app = Flask(__name__) 一.cookie from flask import Flask, make_response, reque ...

  6. 重大升级!SEER见证人,您的节点需要在10月28日前更新

    SEER的区块链底层目前还处于不断完善中.一些新的完善更新会为区块链的基础设施--节点软件添加新的功能.理事会将会就是否接受新的节点版本进行共识投票,如果提案投票通过,将要求所有见证人在指定时间前将节 ...

  7. Web渗透之mssql差异备份getshell

    简介 差异备份数据库得到webshell.在sql server 里dbo和sa权限都有备份数据库权限,我们可以把数据库备份称asp文件,这样我们就可以通过mssqlserver的备份数据库功能生成一 ...

  8. Rust入坑指南:千人千构

    坑越来越深了,在坑里的同学让我看到你们的双手! 前面我们聊过了Rust最基本的几种数据类型.不知道你还记不记得,如果不记得可以先复习一下.上一个坑挖好以后,有同学私信我说坑太深了,下来的时候差点崴了脚 ...

  9. 【Bug】解决 SpringBoot Artifact contains illegal characters 错误

    解决 SpringBoot  Artifact contains illegal characters错误 错误原因:Artifact包含非法字符(大写字母) 解决方法:将Artifact名称改成小写 ...

  10. GO基础之数组

    一.数组的声明与遍历 package main import "fmt" //声明数组的形式1 ]int ], , , } func main() { // 声明数组的形式2 a ...