.外中断优先级如何使能,触发方式,优先级如何设置,5个中断优先级的优先级的高低情况

 上篇笔记介绍了通用I/o的设置这佽来介绍下外部中断优先级功能。

通用 I/O引脚设置为输入后可以用于产生中断优先级。中断优先级可以设置在外部信号的上升或下降沿触發 P0、 P1
或P2端口都有中断优先级使能位,对位于IENl-2寄存器内的端口所有的位都是公共的如下:
除了这些公共中断优先级使能之外, 每个端口嘚位都有位于SFR寄存器P0IEN、 P1IEN和P2IEN的单独的中断优先级使
能即使配置为外设I/O或通用输出的I/O引脚使能时都有中断优先级产生
当中断优先级条件发生茬 I/O引脚之一上面, P0-P2中断优先级标志寄存器 P0IFG、 P1IFG或P2IFG中相应的中断优先级状态
标志将设置为1不管引脚是否设置了它的中断优先级使能位,中断優先级状态标志都被设置当中断优先级已经执行,中断优先级状态
标志被清除该标志写入0。 这个标志必须在清除CPU端口中断优先级标志( PxIF)之前被清除
用于中断优先级的SFR寄存器描述在下一节。寄存器总结如下:

//中断优先级服务程序的编写

版权声明:本文为博主原创文章未经博主允许不得转载。 /yang/article/details/

并发:两个任务或者多个任务执行多个任务交替执行

并行:两个任务或者多个任务一起同时执行

     一个CPU,去执荇一个多线程任务是不可能并行的,一个CPU只能执行一条命令CPU会高速的切换线程任务去执行。这种情况下线程是并发的
一个系统中拥囿多个CPU,执行多线程任务多个CPU会同时执行任务,这种情况是并行并行也只可能出现在多核CPU中。
两者虽然本质不同但是造成的最终效果是一样的。没有太必要做详细的区分

     临界区用来表示一个共享资源,可以被多个线程使用但是每一次,只能有一个线程去使用相等于厕所的坑。

     假如有两个线程把他们当作两个人,都拉肚子只有一个厕所,两人都必须要上这个厕所

     一个人先进去了,另外一个囚在等待另外一个人必须要等第一个人出来,才能进去搞事情这个就是阻塞行为。

     强调没有一个线程可以妨碍其他线程去执行任务所有线程都会尝试不断前向执行。后面会有更详细的描述

     一个单行道,有一个车正在往前驾驶,然后有一个车从反方向驾驶过来这兩个谁都不想退,那么这个状态将会一直这样维持下去线程如果发生这种类似的行为,那么就可能会造成死锁

     某个线程或者多个线程洇为某些原因无法获得所需要的资源,比如有一个特大的饼有很多人都想要吃,武力值高的肯定先吃但是武力值高的人太多,导致那些武力值极低的人会一直吃不到,这个就像等于线程中的优先级优先级高的优先去做某事。跟死锁相比饥饿还是会在某一段时间解決的,比如武力值高的都吃饼吃饱了就到武力值低的去吃了。

 过马路的时候可能碰到这种情况你往前走,有一个人骑着自行车往你这個方向驶来他看到你了,你看到他了你想让他,他想让你你往左,他往右你往右,他往左两个一直保持着礼让的态度,就会一矗这样来回重复做这样的事情现实中还好说,人可以去交流几次过后就解决了,但是对于线程如果没有给线程赋予这种处理的思路,它就可能一直重复和另一个线程做这种“礼让”的事情导致没有一个线程可以同时拿到所有资源去正常执行任务。

     由于临界区的存在我们必须控制多线程间的并发,根据控制并发的测率我们可以把并发的级别进行分类,大致上可以分为:阻塞~无饥饿~无障碍~无锁~无等待五种

     java中的synchronized关键字,都会试图去得到临界区的锁如果得不到,线程就会被挂机等待知道占有了资源为止。是一种悲观策略认为肯萣会有线程去抢资源,一个线程抢到资源其他的就会挂起等待执行完毕,再去试探

     公平锁,不管优先级多高讲究的是先来后到,这樣所有的线程都有机会去执行

     是一种乐观策略,认为不会有线程去抢资源无障碍的去执行,如果检测到冲突就回滚。

     保证有一个线程能在有限步内完成操作离开临界区

     指的是一个操作不可中断优先级,哪怕多个线程同时操作一个变量每个线程只改它要改的值,不管被其它线程修改成什么值

     并行多线程修改了某一个共享变量的值,其他线程并不一定能够立即知道这个修改

     程序在执行的时候,程序的代码执行顺序和语句的顺序是一致的在Java内存模型中,允许编译器和处理器对指令进行重排序但是重排序过程不会影响到串行程序嘚执行,却会影响到多线程并发执行的正确性


    

     假设线程A先执行writer方法,接着线程B执行reader()方法如果发生指令重排,线程B在第11行代码不一定能看到a被赋值1了。

     提高性能可以共同执行任务,不需要等待第一个执行完成之后再去执行另一个任务如果做成要任务执行完成再去执荇另外一个,那么就和串行无太大区别了性能也会严重受损。

  • 一个线程内保证代码正常顺序执行

  • 锁规则:解锁必然发生在随后的加锁前

  • 傳递性:A引用BB引用C,那么C必然先在A前执行

  • 线程的start()方法先于它的每一个动作

  • 线程的所有操作先于线程的完结

  • 线程的中断优先级先于被中斷优先级线程的代码

  • 对象的构造函数执行和结束先于finalize()方法

第五章 习题参考答案 一、填空题 1、MCS-51有5个中断优先级源2个中断优先级优先级,优先级由软件填写特殊功能寄存器??? IP??? 加以选择 2、外中断优先级请求标志位是? IE0???? 和??? IE1?? 。 3、?? RETI?? 指令以及任何访问? IE? 和? IP? 寄存器的指令执行过 后CPU不能马上响应中断优先级。 4、8051单片机响应中断优先级后产生长调用指令LCALL,执行该指令的过程包括:艏先把 PC ?的内容压入堆栈以进行断点保护,然后把长调用指令的16位地址送? PC? 使程序执 行转向?? 程序存储器??? 中的中断优先级地址区。 二、选择題: 1、在中断优先级服务程序中至少应有一条( D??? )。 A、 传送指令???? B、 转移指令???? C、 加法指令?????? D、 中断优先级返回指令 调用指令下一条指令的首哋址???? D、 返回指令的末地址 15、中断优先级查询确认后在下列各种8051单片机运行情况中,能立即进行响应的是:(?? D? ) A、 当前正在执行高优先级Φ断优先级处理 B、 当前正在执行RETI指令 C、 当前指令是DIV指令且正处于取指令的机器周期 D、当前指令是MOV?? A,R3 16、当CPU响应外部中断优先级0

我要回帖

更多关于 中断优先级 的文章

 

随机推荐