数据是否打包
对于任何高度受限的嵌入式系统,其软件需要同时满足操作需求和执行环境的约束条件。正如人们可能预期的那样,这些约束条件往往并非总是互补的,因此在设计实现过程中,需要做出一些权衡决策。SSI和RAC/OM照相机都使用了12位的转换或像素数据,这带来了我们的首次主要的权衡决策:数据打包。对于二进制数据的概述,请参阅后面的“二进制数据”部分。
在任务的早期设计阶段,大家产生了对12位像素数据进行打包的想法,还引发了一些有趣的争论。由于只有有限的内存可用于图像数据存储,对12位像素的数据进行打包存储在16位的内存空间中,这个想法还是很吸引人的。这里的“打包”,指的是对这些12位像素的数据进行连续存储,在这些位中间不“浪费”任何空间——实际上就是忽略16位的内存边界限制。但是更高效的数据存储换来的代价是处理时间变长(解包、移位和重新打包)。一个数字图像就是一个数组(该图像需要作为一维数组处理还是二维数组处理,依赖于需要在它上面完成哪些操作),因此,在图像上的任何操作需要利用对数组的一个或多个算法循环来处理其图像数据。我们期望通过RAD6000处理的数据量非常大,因此,即便是在20MHz的时钟频率下,即计算每个CPU循环时间,该速度也将是慢得让人无法接受。
最后,我们决定“浪费”一些内存空间,把12位的像素存放在16位的内存空间,使得处理简单,避免占用任何不必要的CPU资源。这个决定也是由以下早期的想法所驱动,即通过就地执行所有的图像处理和压缩操作,避免使用多个大的处理缓存或者结果数组。如果对数据打包,将会使得就地执行这些操作变得异常困难,而且最终代码也将会变得过于复杂,导致整个我们想要实现的就地处理的想法都变得不可行。
二进制数据
数据即信息。在计算机系统中,它是通过数值来表示的,因为计算机CPU所处理的就是数值。数据能够表示文本,在该文本中,每个字符有一个唯一的数值,或者通过对每个像素或者图片元素进行编码来表示图像,在一个图像中,由一个数值表示它的强度、颜色以及这二者特征的组合。给定一个合适的数值编码方案,计算机可以处理一个人可以想象到的任何类型的数据,包括音频、电位、文本、图像甚至是定义猫和狗区别的一组不同特征。但是不论数值表示的是什么数据,对计算机而言,它们都仅仅是数字。我们提供规则来说明该数字应该如何编码、处理、显示和解释。
数据有不同的大小值,该值取决于其表示的是什么。举个例子,一扇窗户或者一个防盗报警系统的门锁只需要1位(或一个二进制数)来表示其可能的两种状态:开或关,即0或1。为了表示一个英语字母或者发音,需要100个左右的数字,每个数字通过8位的数据来表示。现代计算机通过二进制形式工作,因此8位可以表示从0~255的任何一个数字(如110010002=20010)。在很多计算机中,有更合适的形式来表示二进制数值,如典型的八进制或者十六进制。对于16位或32位的CPU,正如凤凰号火星着陆探测器所采用的,内存可以通过16位的字长方式来高效访问。想要访问低于16位(如8位)的字长方式,其效率实际上可能会很低,因此对于大于8位而又小于16位的数据,通常都是以16位字长的内存方式来存储,有几位没有使用。这正是凤凰号火星着陆探测器所处理数据的方式,因为CCD成像器的电子设备每个像素生成的是12位的数据,而飞行器的内存是通过16位或32位的存储方式组织的。