• 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状的图形。这并不是你所希望的结果。



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


    当完成了一次屏幕绘制的时候,就引发一个垂直中断。通过引发这个中断,这个时候就不再绘制屏幕,用户可以在这个时候更新显存,等到更新完毕的时候,设置好所有要显示的内容的时候,再让硬件进行绘制。这样就能够保证显示出来的东西是你所希望的东西了。
  • 相关阅读:
    git rror: RPC失败
    linux加载模块报错:could not insert module xxx.ko: Unknown symbol in module
    Ubuntu 20.04 添加当前用户 Root 权限
    C程序编译过程
    静态代码块和非静态代码块
    java反射
    ==和equal的区别
    solr中配置域
    Solr的简介以及安装
    Spring Data Redis 小demo
  • 原文地址:https://www.cnblogs.com/super119/p/2413442.html
Copyright © 2020-2023  润新知