ARM7中断的理解
谈谈对中断的理解?
中断是计算机中处理异步事件的重要机制
中断触发的方式:
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中断的理解的更多相关文章
- ARM学习篇 中断定时理解
1. 中断控制器 a. 中断处理流程 P1--摘自S3C2440A手册 P1简要阐述了S3C2440A内置中断控制器处理中断的流程: ●若某中断有自中断,则先接收子中断请求,否则,直接接受源中断. ...
- 对中断的理解handle_level_irq【原创】
如下为本人原创,在解决问题的过程中的一点心得,如果有描述不准确的地方还请各位指出,非常感谢 Linux内核版本:linux-4.9.18 曾有一次调试触摸屏的时候遇到如下的问题 /startup/mo ...
- STM32外部中断初理解
PA0,PB0...PG0--->EXTI0 PA1,PB1...PG1--->EXTI1 ....... PA15,PB15...PG15--->EXTI15 以上为GPIO和中断 ...
- 理解Linux中断 (1)【转】
转自:http://blog.csdn.net/tommy_wxie/article/details/7425685 版权声明:本文为博主原创文章,未经博主允许不得转载. 一直认为,理解中断是理解内核 ...
- 对中断interrupt的理解
一.中断 线程的几种状态:新建.就绪.运行.阻塞.死亡.参考:线程的几种状态转换 线程的可运行状态并不代表线程一定在运行(runnable != running ) . 大家都知道:所有现代桌面和服务 ...
- 电赛菜鸟营培训(二)——STM32F103CB之中断控制
一.中断的概念 中断可以理解为一个有激励给它就会立马给你响应的一个东东.就是说在你执行main函数的内容时,当有这个触发时便会跳转到这个中断内存,执行这段代码. Attention: 1.中断的用法, ...
- Linux系统的中断、系统调用和调度概述【转】
转自:http://blog.csdn.net/yanlinwang/article/details/8169725 版权声明:本文为博主原创文章,未经博主允许不得转载. 最近学习Linux操作系统, ...
- JAVA多线程之中断机制(如何处理中断?)
一,介绍 这篇文章主要记录使用 interrupt() 方法中断线程,以及如何对InterruptedException进行处理.感觉对InterruptedException异常进行处理是一件谨慎且 ...
- java线程总结2--wait/notify(all)/sleep以及中断概念
上一篇关于线程的博客简单梳理了一下多线程的一些基本概念,今天这篇博客再进行多线程编程中一些核心的方法进行简单的梳理和总结,主要是wait,sleep和notify方法以及中断的概念 一.中断概念. 在 ...
随机推荐
- 跑的比谁都快 51Nod - 1789
香港记者跑的比谁都快是众所周知的常识. 现在,香港记者站在一颗有 nn 个点的树的根结点上(即1号点),编号为 ii 的点拥有权值 a[i]a[i] ,数据保证每个点的编号都小于它任意孩子结 ...
- ubuntu下安装及配置git的方法
安装Git 一个全新的ubunt系统,需要安装Git(系统是不具有该工具的),方法如下: 在terminel中输入如下命令: sudo apt-get install git git-core git ...
- mysql的十二条基本语句
在 mysql里,所有语句都以分号作为结束标志! 1.连接服务器 Mysql -u username -p passwd 2.当连上服务器后,首先面对的是库,库有1个或多个,因此我们想对表进行操作的话 ...
- 从零起步 系统入门Python爬虫工程师 ✌✌
从零起步 系统入门Python爬虫工程师 (一个人学习或许会很枯燥,但是寻找更多志同道合的朋友一起,学习将会变得更加有意义✌✌) 大数据时代,python爬虫工程师人才猛增,本课程专为爬虫工程师打造, ...
- 常见PHP危险函数及特殊函数
PHP代码执行函数 - eval & assert & preg_replace mixed eval ( string $code ) 把字符串 $code 作为PHP代码执行. 很 ...
- socat的介绍与使用
Socat 是 Linux 下的一个多功能的网络工具,名字来由是 「Socket CAT」.其功能与有瑞士军刀之称的 Netcat 类似,可以看做是 Netcat 的加强版. Socat 的主要特点就 ...
- 2019年高级Java程序员面试题汇总
目录 JDK Dubbo Zookeeper Strut2 Spring系列 Redis系列 Mysql系列 Java多线程 消息中间件 线程池 事物 JVM 设计模式 其他 程序设计 基础知识 编程 ...
- 关于M23内核简介 - 待续
1.定位 M23是基于最新的ARMv8-M构架的主要关注低功耗应用的微控制器,未来会是M0.M0+的替代品. M33是基于最新的ARMv8-M构架的主要关注高能效应用的微控制器,未来会替换M3.M4. ...
- 百万年薪python之路 -- 内置函数练习
1.整理今天笔记,课上代码最少敲3遍. 2.用列表推导式做下列小题 过滤掉长度小于3的字符串列表,并将剩下的转换成大写字母 lst = [["a","b"],[ ...
- iOS开发高级分享 - Unread的下拉式选单
解构革命的演变 背景 2013年中期,RSS世界遭受了沉重打击.谷歌宣布,他们(*的*)RSS订阅服务,[谷歌阅读器],是被关闭了.有了它,数以百万计的声音突然惊恐地大叫,并突然保持沉默. 使用量下降 ...