修改内存缓冲区中位字段的方法与装置的制作方法

文档序号:2616439阅读:148来源:国知局
专利名称:修改内存缓冲区中位字段的方法与装置的制作方法
技术领域
本发明涉及一种修改内存缓冲区位字段的方法,更特别地,涉及一种与显示设备相应的内存缓冲区中非字节或非字对齐的位字段的修改方法。
背景技术
一般而言,一个显示屏分为多行多列的小单元或基本区,称为图像元素或像素。欲在显示屏上显示一幅图像,则需将代表该图像的数据写入与显示屏相应的内存缓冲区。内存缓冲区包含一个数据项的块。这些数据项可以是字节、16位字或32位字。内存缓冲区中数据项的位字段对应于显示屏的像素。每个位字段一般包含诸如相应像素色彩与亮度之类的信息。该领域的技术人员都知道,每个像素所要求的位数是不同的。对于一个简单的8色显示器,每个像素需要3位。位字段中象这样长度的位字段不是对齐的,而是从数据项的一开始就是偏移的。一些位字段跨接于相邻数据项的边界。
修改这样的非对齐位字段需要相当大的数据处理开销。使用微处理器对一个误对齐位字段所进行的一般操作涉及到从一个数据项中分离出位字段,对该位字段进行操作,以及将位字段重新置于数据项中以便进行进一步的处理。一般而言,使用微处理器进行这样的操作必须执行诸如移位、循环、与、或等指令。某些微处理器有另外一些允许直接位操作的指令,譬如bset(位设置)与bclr(位清零)。但是,所有这些指令都是处理器操作密集型的,每条指令都需要多个周期的处理器时间来执行。
另一个修改非对齐位字段的可行方法是,使用预定的掩码以及与待修改位字段所有可能的起始位置相对齐的像素信息。尽管该方法降低了指令执行的数量,但是存储预定的掩码与像素信息却需要相当大的存储空间。
再一个可行方法是使用特制的硬件,对位字段直接进行操作。美国专利6,061,783号公开了这样一个例子。

发明内容
根据本发明的一个方面,提供了一种修改具有一位模式的数据项选定数据部分的方法。该方法标识待修改的一个数据部分。该方法还进一步通过访问多个字段而选定一个字段。该字段包含多个重复出现的位模式。具有相同位模式的相邻字段偏移至少一位。该方法选择一个掩码,以获得与所识别数据部分相对齐的选定字段的一个位模式。该方法通过利用所述位模式之一,在所述标识的数据部分执行一个预定的位操作来修改所识别的数据部分。
该方法最好可以进一步标识相对所述数据项起始位置而言,所述数据部分的偏移值,并且,该方法可以使用所述偏移值访问多个字段,以选定所述字段。
该方法最好可以通过使用所述偏移值选定一个掩码的方法访问多个掩码,从而选择一个掩码。
该方法应该可以通过使用偏移值从多个索引中选择一个索引的方法来选择一个字段,并且,使用所选索引选择一个字段的方法访问多个字段。
所述数据项最好可以是与一个显示屏相应的内存缓冲区中多个数据项中的一个选定数据项,其中,所述数据部分对应于显示屏上的一个像素。在这样的应用中,所述位模式可以是一个色彩数据。该方法可以标识待修改数据部分,其途径是标识包含待修改数据部分的数据项。该方法也可以选择一个字段,其途径是访问多个色彩字段,以从基于一个色彩参数所选定的色彩字段子集中选择一个色彩字段。
该方法最好可以进一步校验所述数据部分,以确定是否所述数据部分横跨一个相邻数据项,从而导致在所述相邻数据项中留下剩余数据部分。如果确定存在这样的剩余数据部分,那么该方法在相邻数据项中修改剩余数据部分,其方式与如上所述的通过一个选定的第二字段与掩码的方法类似。
根据本发明的另一方面,提供了一个数据部分的处理器,用于修改具有一位模式的数据项的一个选定数据部分。所述处理器包括一个字段选择器,用于从多个字段中选择一个字段。所述字段包含多个如上所述的重复出现的位模式。
该处理器还包括一个掩码选择器,用于选择一个掩码,从而在一个选定的与所述数据部分对齐的字段中获得一个选定的位模式。该处理器进一步包括一个位操作器,用于修改所述数据部分,其方法是在带选定位模式的数据部分上执行一个预定的位操作。
该字段选择器最好可以从多个字段中选择一个字段,并且,该掩码选择器可以选择一个掩码,其方式是基于相对于所述数据项起始处选定数据部分的一个偏移值。


为了更好地理解与实施本发明,现在参照

最佳具体实施方式

,其中图1是一个显示屏与相连内存缓冲区的示意图;图2是一个方框示意图,示出了与处理器相应的内存,该内存包含在处理器中执行的程序指令,用于图1中示出的显示屏与相关内存缓冲区进行接口;图3是根据本发明的一个具体实施方式

修改内存缓冲区数据项的数据部分的一系列步骤,其中,数据部分对应于图1中示出的显示屏的一个像素;图4是一个示意图,示出了在图3的序列步骤中,如何使用存储在查阅表中的数据来修改数据项中的选定数据部分;图5是一个示意图,示出了横跨图1中内存缓冲区的两个相邻数据项的数据项;以及图6是数据部分处理器的方框图,该处理器执行图3中某些步骤。
具体实施例方式
图1示出了显示屏2与相连内存缓冲区4。显示屏2的一个例子液晶显示器(LCD)。内存缓冲区4用来存储一块一般由16位字组成的数据项。也可以使用其他位长度的数据项。数据项6的位字段对应于显示屏2上的像素。图1也示出了一个数据部分8,它在该具体实施方式

中是选定数据项10对应于像素12的一个3位的位字段。数据部分8包括像素12的色彩信息。用这个3位的数据部分8可以确定8色中的一种颜色。
图2是一个方框示意图,示出了与显示屏2接口所需的组件。除了内存缓冲区4以外,内存14通过总线18连接到处理器16上,其方式是该领域的技术人员所熟知的。处理器16通过执行内存14中的可读程序指令来修改存储于内存缓冲区4中的数据项6。
图4示出了存储于内存14中的查阅表(LUTs)。查阅表包括一个色彩查阅表22,一个索引查阅表24与一个掩码查阅表26。色彩查阅表22有多个色彩字段28,安排成8乘3的二维阵列,以便于通过索引寻址访问。色彩字段28包含了有关8种色彩的信息。每个色彩由一个包含三个色彩字段的子集所表征。虚线所围框内所示出的是一个蓝色色彩字段子集30。每个色彩字段28包含重复出现的代表特定色彩数据的3比特位模式32。第一个色彩字段的第一个位模式开始于色彩字段的起始位置(位0的位置)33。譬如,蓝色的第一个色彩字段34将起始于“001”的一个蓝色位模式36。随后出现的第一个色彩字段的位中包含重复出现的蓝色位模式“001”。第二个蓝色色彩字段38,与第一个蓝色色彩字段34相邻,包含与第一个蓝色色彩字段34中相同的位模式,但偏移一个比特。第二个色彩字段中蓝色位模式36起始于位1位置,而不是起始于位0位置。在位0位置的第一位包含蓝色位模式“001”的最后一位。类似的,第三个蓝色色彩字段40包含与第一个蓝色色彩字段34中相同的位模式,但偏移两个比特。在位0与位1位置的第三个蓝色色彩字段40的前两位包含蓝色位模式“001”的最后两位。色彩字段34、38、40中的一个包含有一个蓝色位模式“001”,该位模式与内存缓冲区4中数据项10的选定的3位数据部分8对齐。以类似的方式设置其他7种颜色的色彩字段28。
索引查阅表24有多个包含索引或索引值的字段。对于一个16位的数据项而言,共有18个字段——16个字段与数据项的16位相对应,而另外两个字段(以数据部分中的位数减去1得到)则用来处理边界条件。后面将描述这些边界条件。存储在每个字段中的索引值,是索引查阅表24中的字段位置除以3(数据部分的位数)所得到的余数。第一个字段,其字段位置为0,故得到的余数为0。因此,第一个字段的值置为0。类似地,第二个字段的值为1,而第三个字段的值为2,等等。
掩码查阅表26也有多个字段,其数量与索引查阅表24的字段数量相等。每个字段包含一个16位的掩码,用于从色彩查阅表22里重复出现的位模式中获取一个选定的色彩位模式。第一个字段42中的掩码有三个连1位,其后跟着13个连0位。每个紧跟其后的字段包含类似的掩码,但偏移一位。两个字段,字段44与46,仅仅提供部分掩码,这些字段44与46中的1的位数不足三位。接下来的两个字段,字段48与50,也包含一个部分掩码,用于连接字段44与46中的掩码,以处理边界条件,其中,一个三位的数据部分跨接了两个数据项的边缘。
该领域的技术人员都知道,诸如“字段”之类词汇的含义是依赖于上下文环境的。譬如,当指一个具有多个字段的内存中表格时,“字段”在此上下文环境中是指内存的位置。但是,当指一个字段操作时,应该可以理解,“字段”这个词是指内存某个位置的数据。
图3描述了修改内存缓冲区4的选定数据部分8的一系列步骤20。当引入处理器16修改显示屏2的像素12时,系列步骤20开始于步骤51——起始。此时,处理器16提供了一个色彩参数(颜色)与表征如何修改像素12的修改模式。为帮助描述系列步骤20的操作,考虑一个以蓝色色彩数据修改像素12的例子。该例子中色彩参数将表征蓝色(color=1)。
系列步骤20接着处理步骤52——识别数据部分,其中,处理器16确定数据项10中对应于像素12的数据部分8。通过在内存缓冲区4中一个索引(pos)来识别内存缓冲区4中的数据项10。该数据项被赋予一条伪代码memory_buffer[pos]处理器也确定一个偏移值,或者数据项10中的数据部分8起始位的位置(bit_pos)。图4示出了数据项10起始位的位置为bit10,即,bit_pos的值为10。
系列步骤20接着处理步骤54——选择色彩字段,其中,色彩参数用于访问色彩查阅表22,以获得对应于色彩参数的蓝色色彩字段34、38、40的子集30。选择子集的伪代码为Color_LUT[color]接着使用起始位的位置(bit_pos)访问索引查阅表24以获得一个索引值。索引值最终被用来选择色彩字段34、38、40中的一个字段。从索引查阅表24中选择索引的伪代码为Index_LUT[bit_pos]如图4所示,在索引查阅表24中进行索引时将返回一个索引值1。从子集30中选择色彩字段38的伪代码为Color_LUT[color][Index_LUT[bit_pos]]在该例中,第二个蓝色色彩字段38被选定。应该注意到,选中的色彩字段38是一个蓝色位模式“001”55,它与数据项10中的数据部分8对齐。
系列步骤20接着处理步骤56——选择掩码,通过数据部分8的起始位置(bit_pos)访问掩码查阅表26,从而选定一个掩码。从掩码查阅表26中选择掩码的伪代码为Mask_LUT[bit_pos]从图4可以看出,所选中的掩码58为“0000000000111000”。所选中掩码中的三个连1位在位的位置上与数据部分8对齐。
在从各自的查阅表22、24、26中选定了色彩字段38与掩码58之后,系列步骤20继续处理步骤60——修改数据项,其中,与修改模式相对应的位操作是使用选定的色彩字段38与掩码58在数据项10上执行的。修改模式包括“与”、“或”、“异或”和“替代”,这些是该领域的技术人员所熟知的。以下伪代码将在数据项10上执行一个“与”修改模式的位操作mem_buf[pos]=mem_buf[pos]AND(Color_LUT[blue][Index_LUT[bit_pos]]OR(NOT Mask_LUT[bit_pos]))在该例中,上述伪代码中所进行的计算如下mem_buf[pos]=mem_buf[pos]AND(ColorLUT[1][IndexLUT[10]]OR(NOT mask_LUT[10]))mem_buf[pos]=mem_buf[pos]AND(ColorLUT[1][1]OR(NOT 0000000000111000))mem_buf[pos]=mem_buf[pos]AND(1001001001001001 OR 1111111111000111)mem_buf[pos]=mem_buf[pos]AND(1111111111001111)类似地,以下伪代码将在数据项10上执行一个“或”修改模式的位操作mem_buf[pos]=mem_buf[pos]OR(Color_LUT[blue][Index_LUT[bit_pos]]AND Mask_LUT[bit_pos])在该例中,上述伪代码中所进行的计算如下mem_buf[pos]=mem_buf[pos]OR(ColorLUT[1][IndexLUT[10]]AND mask_LUT[10])mem_buf[pos]=mem_buf[pos]OR(ColorLUT[1][1] AND 0000000000111000)mem_buf[pos]=mem_buf[pos]OR(1001001001001001 OR 0000000000111000)mem_buf[pos]=mem_buf[pos]OR(0000000000001000)注意在以上每一个位操作中,仅仅修改了数据项10中的数据部分8。
在修改完数据项10之后,系列步骤20接着处理步骤64——检查数据部分,检查数据部分8是否延伸到了相邻数据项62(图1)。如果确认数据部分8没有延伸到相邻数据项62,在该例中的图4就是这种情况,系列步骤20就终止于步骤66——结束,从而标志着数据部分8的修改工作的完成。如果不是这样,而是经确定数据部分延伸到了相邻数据字节62,那么系列步骤20接着处理步骤68——修改相邻数据项。在步骤68中,驻留在相邻数据项32中的数据部分的剩余是通过一个选定的第二色彩字段与一个选定的第二掩码来进行修改的。在相邻数据项32上进行位操作的伪代码为mem_buf[pos+1]=mem_buf[pos+1]AND(Color_LUT[blue][Index_LUT[bit_pos+2]]OR(NOTMaskLUT[bit_pos+2]))借助于图5所示的另一个例子,可以更好地描述对相邻数据项32的修改。所示数据部分70延伸到两个相邻数据项10与62。数据部分70的第一位驻留在数据项10中。该数据部分70的起始位位置(bit_pos)为15。剩余两位驻留在数据项62中。以下结合伪代码,描述执行系列步骤20中的步骤60、64、68,用“与”模式修改数据部分70mem_buf[pos]=mem_buf[pos]AND(Color_LUT[blue][Index_LUT[bit_pos]]OR(NOT MaskLUT[bit_pos]))if(portion spans two adjacent bytes)mem_buf[pos+1]=mem_buf[pos+1]AND(Color_LUT[blue][Index_LUT[bit_pos+2]]OR(NOTMaskLUT[bit_pos+2]))在进行了前述的步骤之后,数据部分70的第一位将在步骤60—修改数据项——中得到修改。“与”修改模式中数据项10的最后一位将进行如下的修改mem_buf[pos]=mem_buf[pos]AND(Color_LUT[blue][Index_LUT[bit_pos]]OR(NOT MaskLUT[bit_pos]))mem_buf[pos]=mem_buf[pos]AND(Color_LUT[blue][Index_LUT[15]]OR(NOT MaskLUT[15]))mem_buf[pos]=mem_buf[pos]AND(Color_LUT[1]
OR(NOT 0000000000000001))mem_buf[pos]=mem_buf[pos]AND(0010010010010010 OR(1111111111111110)mem_buf[pos]=mem_buf[pos]AND 1111111111111110根据以上伪代码的第三行,“与”修改模式中的数据项62的最先两位将进行如下的修改mem_buf[pos+1]=mem_buf[pos+1]AND(Color_LUT[blue][Index_LUT[bit_pos+2]]OR(NOTMaskLUT[bit_pos+2]))mem_buf[pos+1]=mem_buf[pos+1]AND(Color_LUT[blue][Index_LUT[17]]OR(NOT MaskLUT[17]))mem_buf[pos+1]=mem_buf[pos+1]AND(Color_LUT[1][2]OR(NOT 1100000000000000))mem_buf[pos+1]=mem_buf[pos+1]AND(0100100100100100 OR 0011111111111111)mem_buf[pos+1]=mem_buf[pos+1]AND 0111111111111111图6示出了硬件数据处理部分处理器72的方框示意图。数据部分处理器72实现上述系列步骤20中的一部分步骤。数据部分处理器72的输入接收包括待修改数据部分的数据项74、数据项74数据部分的起始位位置76、色彩参数78以及修改模式80。掩码选择器82基于起始位位置,从多个掩码中选择一个掩码。类似地,索引选择器84对应于起始位位置,从多个索引中选择一个索引。色彩字段选择器86选择一个对应于色彩参数和来自索引选择器的索引的色彩字段。每个色彩字段有一个如上所述的重复出现的位模式。位操作器88利用选定的掩码与色彩字段在数据项74上执行位操作,以在数据项处理器72的输出90处产生一个修改过的数据项。
显然,上述方法与执行“位移”或“循环”指令相比,其优势在于需要较小的处理能力。执行同样一个任务,以前需要一个较强处理能力的处理器,而使用该方法则只需一个处理能力不是很强的处理器即可。使用该方法的软件代码中所包含的指令也更加简洁。与以前的方法相比,查阅表22、24、26所需的内存也较少,以前的方法要求存储预定的掩码以及与待修改数据部分的所有可能的起始位置相对齐的像素信息。
尽管已经参照最佳具体实施方式

描述了本发明,但我们可以理解,本发明并不局限于这里所描述的具体实施方式

。譬如,可以使用其他位长度的数据部分。查阅表也可以包含其他类型的位模式。
权利要求
1.一种使用一种位模式修改数据项选定数据部分的方法,所述方法包括识别待修改的数据部分;通过访问多个字段来选择一个字段,所述字段包括多个重复出现的位模式,其中,相邻字段具有相同的位模式,但偏移至少一位;选择一个掩码,以在所述选定字段中获得一个选定的所述位模式,而所述选定位模式与所述已识别的数据部分是对齐的;以及通过使用所述位模式中一个选定的位模式,在所述已识别数据部分上执行一个预定的位操作,来修改所述的已识别数据部分。
2.如权利要求1所述的方法,其中识别数据部分进一步包括识别所述数据部分相对于所述数据项起始处的一个偏移值;以及选择一个字段包括使用所述偏移值访问多个字段以选定一个字段。
3.如权利要求2所述的方法,其中选择一个掩码包括使用所述偏移值访问多个掩码以选定所述掩码。
4.如权利要求3所述的方法,其中选择一个字段进一步包括使用所述偏移值从多个索引中选择一个索引,以及使用所选定的索引访问多个字段从而选择一个字段。
5.如权利要求1所述的方法,其中所述数据项是与显示屏相应的内存缓冲区多个数据项中一个选定的数据项;所述数据部分对应于所述显示屏上的一个像素;所述位模式是一种色彩数据;识别待修改数据部分包括识别包含待修改数据部分的一个数据项;以及选择一个字段包括通过访问多个色彩字段,来从基于一色彩参数所选定的色彩字段子集中选择一个色彩字段。
6.如权利要求1所述的方法,进一步包括检查所述数据部分,以确定是否所述数据部分已延伸到一个相邻数据项,并且在所述相邻数据项中形成了一个剩余数据部分;以及通过选择一个第二字段与一个第二掩码来修改所述相邻数据项,并且,修改所述剩余数据部分的方式与修改所述数据项中所述数据部分的方式是类似的。
7.一种数据部分处理器,用于使用一位模式来修改一个数据项中选定数据部分,所述处理器包括从多个字段中选择一个字段的字段选择器,所述字段包含多个重复出现的位模式,其中,相邻字段具有相同的位模式,但偏移至少一位;用于选择一个掩码的掩码选择器,以在所述选定字段的位模式中获得一个选定的位模式,而所述选定的位模式与所述已识别的数据部分是对齐的;以及一个位操作器,通过使用所述位模式中一个选定的位模式,在所述数据部分上执行一个预定的位操作,来修改所述的数据部分。
8.如权利要求7所述的数据部分处理器,其中,所述字段选择器从多个字段中选择一个字段,所述掩码选择器基于相对于所述数据项起始处所选数据部分的偏移值来选择一个掩码。
全文摘要
本发明公开了一种使用位模式修改数据项中选定数据部分的方法。所述方法识别待修改的数据部分。该方法通过访问多个字段进一步选定一个字段。所述字段包括多个重复出现的位模式。相邻字段具有相同的位模式,但偏移至少一位。所述方法选择一掩码以获得一个在选定的字段中选定的位模式,而该位模式与所述已识别的数据项是对齐的。该方法通过使用所述位模式中一个选定的位模式,在所述已识别数据部分上执行一个预定的位操作,来修改所述已识别数据部分。本发明也公开了实现上述方法的一种处理器。
文档编号G09G5/36GK1359061SQ0114420
公开日2002年7月17日 申请日期2001年12月12日 优先权日2000年12月14日
发明者马春奇, 陈伟东, 莫君亮, 王可宇 申请人:摩托罗拉公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1