vertical blank interrupt 和 horizontal blank interrupt解释

转载自:http://hi.baidu.com/johnman/blog/item/24086289d68cc3b20e2444c0.html

 

垂直中断(vertical blank interrupt)和水平中断(horizontal blank interrupt)。


ndsl的硬件在屏幕上绘图的时候,是从上到下,从左到右,每个屏幕象素点依次绘制的。如下图:




绘制的过程是一行一行地绘制,每当绘制完一行。黑色箭头所指示,就引发一个水平中断(Hblank
interrupt)。当所有的行都被绘制,相当于完成了一次红色箭头所指示的路径,硬件引发一个垂直中断(Vbland
interrupt)。当然,完成这些过程,是否引发中断,还要设置对应的寄存器。


为什么需要这些中断?举个例子:



如上图:最左边的文字是经过的时间,每一行的左边图形表示当时显存的内容,右边表示当时屏幕的显示内容。实际上,显存是一块线性的连续内存,并且每一个单位(8bit或者16bit)对应屏幕上的一点。但是为了具像,所以把显存抽象成跟屏幕一样是个矩形。另外要指出:nds是每1/60秒(2/120秒)绘制一次屏幕。




下面是对上图的解释:

0秒的时候:

内存的内容是一个正方形,硬件准备绘图,这时屏幕上什么也没有。

       




1/120秒的时候:

硬件把内存一半的内容绘制到屏幕上,屏幕上出现半个正方形。

     



再过了0.01/120秒的时候(也就是1.01/120):

这时你的程序希望显示一个三角形,于是就把整个内存的内容改写成三角形了,而在这短短的时间内,nds的绘制屏幕的硬件并没有停止,而是继续把显存的内容绘制到屏幕上,也就是绘制了第三行那小小的红色块。不过这些似乎并没有太大影响。

  


2/120秒的时候:

绘制的硬件完成了内存下半部红色区域所指示的内容的绘制,本来你写的程序以为要显示一个三角形,但实际上却显示成了右图所示的一个类似T状的图形。这并不是你所希望的结果。



实际上的程序和情况会比这个更加复杂和不可预知。因此,垂直和水平中断向量就是为了克服这个问题而引入的。


当完成了一次屏幕绘制的时候,就引发一个垂直中断。通过引发这个中断,这个时候就不再绘制屏幕,用户可以在这个时候更新显存,等到更新完毕的时候,设置好所有要显示的内容的时候,再让硬件进行绘制。这样就能够保证显示出来的东西是你所希望的东西了。

转载于:https://www.cnblogs.com/super119/archive/2012/03/23/2413442.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
interrupt和isInterrupted是Java线程中用于中断线程的方法和判断线程是否被中断的方法。 interrupt方法是Thread类的一个方法,用于请求中断当前线程。当调用interrupt方法时,如果当前线程正在被阻塞(例如通过sleep或wait方法),会抛出InterruptedException异常,并且中断标志位会被置为true。如果当前线程没有被阻塞,中断标志位仅仅被置为true,不会有任何其他影响。 isInterrupted方法是Thread类的另一个方法,用于判断当前线程是否被中断。该方法仅是对中断标志位的一个判断,并不会改变中断标志位的状态。如果中断标志位为true,则返回true;否则返回false。 在实例中,可以看到一个使用interrupt方法的例子。当调用thread.interrupt()方法时,线程会被中断,如果线程正在阻塞,会抛出InterruptedException异常,可以通过捕获该异常来处理中断信号。 另外,在使用interrupt方法时,需要注意到,当try-catch捕获到InterruptedException异常时,中断信号会被抹除,所以如果执行在catch异常前,isInterrupted方法将返回true,可以正常退出。否则,中断信号被抹除后,isInterrupted方法得到的值为false,循环会继续执行。 总之,interrupt方法用于请求中断当前线程,isInterrupted方法用于判断线程是否被中断。在处理中断时,需要注意捕获InterruptedException异常并处理中断信号。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值