4-嵌入式开发总结之--显示模型

   俗话说,百闻不如一见。听百遍不如看一遍,可见,直观的看到,对我们人类是多么重要。对于计算机系统来讲,显示设备充当了我们直观感受计算机运行的窗口,也是我们使用计算机离不开的部件。通过它,我们才能正常操作系统,观察到系统的运行、软件的执行,才能看电影写文档等等。也正是显示,让我们直观体验到计算机技术给我们的生活带来的五彩变化,并在一定程度上加速了计算机技术的发展。

   生活中,显示设备的种类有很多,比如早期的显像管显示器,现在有的超市里结账设备用的仍然是这类显示器,只不过尺寸比较小。液晶显示器,现在电脑显示器基本都是这类显示设备。另外还有各种电子消费设备的LCD,LED显示屏等等。

   既然显示设备这么多,而且差异也很大,那么一个一个来介绍,似乎就不太合理。虽然硬件上这类设备种类繁多,差异又大,但是,如果从软件上能找到它们之间的共性,也就是能够模型化显示设备,就方便我们后续的讨论了。下面我们就从几个实际问题入手,来探寻这种共性。

第一 数字信号转模拟

   这一块直接讲显示的原理,但是更贴近软件角度。

   讨论显示设备,我们第一个要注意的概念就是数字信号和模拟信号。首先,我们需要明确一点,就是计算机处理的都是数字信号。010101这些二进制数据在最终的硬件表达上都是高低电平,不管是文字还是图片。即程序运行最终产生的要显示的内容是数字表达的。这一点对计算机相关专业的同学来讲,应该都没有疑问。关于这块的细节信息在后面还会介绍到。而对于显示设备来讲,信息的最终展示,本质上却都是模拟的。也就是说内容是数字的,显示过程是物理的,模拟的。基于显像管的显示器就不用说了,通过电子枪发射射线,激发屏幕后面的银光粉来显示图像。而对于液晶这些显示设备来讲,基于特殊工艺制作的材料,可以通过给它不同的电压刺激,激发其显示不同的颜色。总归一点,就是要想物理设备显示颜色,都需要给它一个刺激信号,通过对该信号的响应和处理,显示设备就会显示出跟刺激信号相匹配的颜色。如下图所示: 

   这是第一共性。

   这里,要想达到精确控制,精确显示,控制器和设备材料及工艺是关键。我们就不对这里的细节展开了,感兴趣的读者可以查阅相关资料来更加详细的了解。

   接着上面的讨论,很明显,对于计算机来讲,这个刺激信号就是电信号。一个二进制位可以表示高低两种电信号,也就能产生两种刺激信号。假如用黑和白来对应相应的颜色变化,那么,两个二进制位就可以表示高,较高,低,较低四种电信号,从而产生四种刺激信号,也就能反应出黑,较黑,白,较白四种颜色了。依此类推,更多的数据位能产生更多的组合,更多的组合能产生出更多的幅度变化,从而划分更宽的颜色范围,产生更多的颜色变化。

   第二 大花猫的启示

   了解了二进制数据跟颜色的映射关系后,我们再来进一步深入探讨。很明显一点,即使我们有再多的二进制数据,产生再多的颜色,也无法直接产生有含义的图像。一幅图像,可能不一定需要很多种颜色去构成,但是一定需要很多点来表达,关键是要组合好。这里其实举个大花猫的例子就很清楚了。不知大家都有没有玩过或见过花猫,有没有注意过它们毛发的颜色,那些黑白相间的花猫,白色部分是不是一嘬白毛构成,黑色部分是不是都由黑毛构成,整体来看就有黑白相间的效果了。实际上,花猫整体的花纹效果是由一根根黑色或者白色的毛发聚集起来显示出来的,当数量非常多时,就可以组合显示各种图形了,而且越多、越细、越密,看起来就会越逼真。这就是为什么说要许多点来表达,这里的点跟一根根毛发是一个道理。计算机的显示原理也是如此,花猫的整个身体就好比是显示屏幕,一根根的毛发就好比是显示屏上的一个个像素点。当一个个的点显示出色彩,并且点足够多,组合有规则,我们的眼睛在整体上看到的就会是一幅有具体含义的图像。这里对其中更加深层次的生物学原理就不展开了。总结起来就是,显示设备显示的图像是由点阵产生的。如下图所示

 

   从宏观上看,整体上看,上面的图像显示了一个汉字【点】,但是往细了看,则是由许许多多的红白点构成的。它们有规则的排列,最终才构成有含义的点字。计算机要控制显示设备显示这个点字,就得输出许多个二进制数据,每一个二进制数据都产生一个刺激信号,通过上一部分介绍的映射关系,从而在屏幕的某个位置点上产生相应的颜色。这样,当屏幕从上到下,从左到右,输出所有二进制数据对应的点的颜色值后,这个点字就最终显示出来了。当点越来越多,越来越细,越来越密,我们肉眼就越难看出图像是由点构成的。当这种构造达到足够小后,直至超出我们肉眼的识别范围后,我们甚至不能再看出这幅图像是由点阵构成的,而是会认为就是一幅真真正正的图。这样的整个过程就是数据图像到实际图像的转变映射过程。

  比如上面【点】的图像,实际背后的内容可能是

 

   到此,我们更多的是介绍了显示的逻辑过程,对于物理过程则费墨较少。因为这些信息对我们后续软件功能的介绍影响不大,同时,这些细节更多的涉及硬件原理,对偏软件的人或许会觉得繁琐复杂,其实就跟内存和硬盘的硬件原理部分一样,这里就不过多涉及和深入。说实话,这些细节作者也不是很了解,如果读者感兴趣,想要深入了解,网络上有很多详细的资料可以查阅。不过为了后续讨论更加顺畅自然,这里再多说几句。对于如何将显示数据转换到电刺激信号,学过汇编的人可能会有更加直观的感受,特别是编写过显示控制器驱动的读者。这些控制器都会提供寄存器级别的接口,用于实现在显示设备上控制每一个显示像素。一旦能够控制每一个像素点,那么显示具体画面的工作就主要是如何组合像素点矩阵了。所以,对CPU来讲,它只需要将图像数据交给显示控制器就可以了,至于具体的控制硬件产生颜色的工作就由显示控制器来完成即可。

   第三 速度匹配,需要缓存和显存

   通过前面的介绍,我们知道,要在屏幕上显示一幅图像,需要很多个点来组合完成。每个点的颜色通过一个二进制数据表示。这里假设一个字节表示一个点的颜色,这样一来,屏幕上有多少个点,就需要多少个字节。再假设我们将显示屏幕的分辨率设置为1024乘以720,这就是说,横向每一行1024个点,纵向每一列720个点,整个屏幕一次显示一幅图像则需要737280个点,也即这么多个字节,720k。(这里不考虑屏幕实际的分辨率等其他情况。)从这个简单的计算,我们就可以看出,计算机显示图像有一个特点,那就是数据量特别大。随着分辨率的进一步提高,这种数据量的增加是成倍的。面对这种情况,CPU每次输出一个字节来刺激显示一个点的颜色显然不符合工程实际,最终的显示效果可能让用户无法忍受。想像一下,一幅图像慢慢从屏幕上刷出来的感觉。如果是看视频呢?

   电子系统中,不管是软件还是硬件,匹配速度的最常用也最有效的方法就是在两个对象间加一个缓冲。显示控制器同样不例外,它采用显存来临时存储要显示的数据。怎么讲呢,当要显示一幅图像时,CPU每次不是输出一个点的数据,而是整副图的数据,并将它们存储在显存中,提交给控制器。控制器一次将整副图输出到屏幕上,这比一次一个点效率高多了。本质上,显存也是一块内存,只不过它是专门用作显示的缓冲。这里做一个不是十分恰当的比喻,显存就好比花猫的毛色基因,点阵则好比实际的花猫颜色。之所以打这个比喻,是因为这一部分,我们要将显存作为显示模型的构造基础。对于软件控制显示输出来讲,控制了显存内容,就控制了输出的内容。这就好比控制了花猫的显示基因,也就控制了花猫的毛色构成。作为软件开发者,不需要过多的关注显示如何通过硬件完成,只要抓住如何控制显存内容,就可以完成各种图形输出的操作。好了,显示模型可以表示为下图:

   这里将显示设备等价的表示为一块显存。

 

   这可以说是显示设备最简明的模型了。后面我们在讨论显示输出相关的内容时,只需要将整个显示输出系统抽象化、模型化为一块内存就可以了。

   第四 进一步速度提升,需要GPU

   前面我们介绍了显存,这为解决数据量本身产生的问题提供了一个基础方案。但是,仅仅如此,问题还远远没有解决。接着看:

   其实,显示最大的问题不仅在于数据量超大,而且为了显示各种效果,还需要各种变换处理,这也是由它的数字化本质决定了的。虽然CPU技术的发展可谓一日千里,日新月异,但是面对庞大的显示数据量和苛刻的变换速度(慢了,要不需要等待,要不就看到变换的中间过程了),还是无能为力。即便CPU每一秒可以处理成千上万的数据,即便可以采用显存方法。为什么呢?因为单靠蛮力,是解决不了问题的。又为什么这么说呢,或者说蛮力又从何谈起?这要从CPU最初的设计说起。CPU是被设计来执行处理通用问题的,包括执行通用的算数计算,通用的数据搬移,通用的控制命令。这些通用的方式,对于显示这种特殊的数据处理,并不合适。这样就导致一个结果,CPU在全力的工作,卖力到极点了,速度本身也奇快,但是对于许多显示处理,需要绕好几个弯才能完成,加之显示数据处理量庞大,导致最终的结果还是不尽人意。那有人就会问,既然这样,你还要通用CPU干嘛,干脆每个设备都专门设计一个CPU好了。这里有两个主要问题,次要问题就不提了。首先设备太多,做不到每个设计一个CPU,也没有这个必要,因为对某些设备,以CPU现在的速度,即使再绕弯,也不用卖力,解决起来也绰绰有余了。其次,显示相关问题所产生的数据量之大,在计算机中可以算是一个特例。为了处理这些问题,人类可以说是投入了大量的力量,研究各种压缩算法,加速算法。但是最终发现,单纯靠软件方法还是不能完美解决,还得靠硬件,这才设计了一个类似CPU的东东,叫做GPU。可见,就是这个,也是不愿意设计的。所以说,任何事物的产生都是有他背后的原理的,扯远了。对GPU,通常也叫显示处理单元,其一方面完成硬件的数据搬运,另一方面完成一些算法和操作的硬件实现,二者结合,才达到了现在这种还看得过去的效果。有关GPU的介绍就到此为止,它不影响我们的显示模型。对于GPU来讲,显存就如内存对CPU的作用一般。

   第五 其他技巧

   其实,要达到流畅的画面显示,光靠硬件还是不够的。人们想了各种各样的办法,采用了很多的技巧,实际中的效果也是非常明显的。其中有一项,就是back-font模式。所谓这种模式,就是一部分先显示着,一部分则计算着。当计算着的部分完成后,用其替代显示着的部分,然后二者的角色转换,之前显示着的部分,现在变为计算着的部分,开始新的计算。过程如下图所示:

 

   通过这种方式,可以有效避免计算和刷图过程被显示,改善用户体验。

   最后,关于显示设备的模型化,可以总结为:显示内容数字化表示,数字化内容显存保存。这样屏幕就可以映射为显存了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙赤子

你的小小鼓励助我翻山越岭

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值