存储空间对于嵌入式系统还重要吗?
作者:风河的首席技术官 Tomas Evensen October 05, 2006
文章来源:http://www.ednchina.com/blog/tomas/
存储器,或你的软件需要使用的总内存容量,曾经是嵌入式设备的一个难题。但是现在,RAM和闪存的成本比例和以前相比变得越来越小,是不是存储器不再是一个问题了?随意的使用?因为很便宜?还是不要太早的下定论。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
你可以把我看成是古板的学究。但我相信,存储器在一些设备中仍旧是一个难题(虽然不是所有的情况总是如此),让我来告诉你原因。
当我最初开始编程的时候,我所选择的电脑是TRS-80,也被Pet/Commodore/Apple称作Trash-80。实际上对于我父亲带回家的这台机器,我并不能做太多的选择。到了1970年代以后,我使用的计算机有一个巨大的4KB RAM,并很快升级到了16KB。当时我使用的编程的语言是Z80汇编语言。在这种条件下,你只能使用你的第6感来解决程序问题,并尽量使用短小的代码。我说这个并不是炫耀我的年龄而是要表明我的看法。
在个人电脑/工作站/企业级平台上,存储器显然已不是开发软件的首要标准。你也可以对比Office97和Office2003。我们对于存储器的需求至少增加了5倍。由于在PC上磁盘和RAM平均的增长数量与此相当,所以这并没有带来什么问题。
但在嵌入式领域中并不是这样。我会给你举出3个理由,但我相信还有更多:
1. 与PC相比,内存在嵌入式设备中的成本还是比较重要的,虽然内存的价格已经便宜了很多,但其它组件也在降价,你在硬件上每一笔开支的节省都会在你卖掉成千上万的廉价设备时得到补偿。
2. 电能消耗
更多的内存就会消耗更多的电能。那些经历过因Windows Mobile没电而无法使用的用户,会深刻体会到这一点的重要性。这不仅是你在设备中使用的内存数量问题,这同样还涉及在不同情况下需要供电的内存数量。一些精巧的设备会关闭不需要使用的内存。
3. 启动时间
一些设备,比如数码相机需要快速启动,在一些系统中,一大块的启动时间是用来将软件从闪存中读到RAM内存中。代码越短的启动越快。
OK,所以存储器还是很重要的,但是如何削减软件在设备上占用的存储器容量呢?
这里有一些小技巧。有些时候代码的大小可以衡量一些事情,比如特性、性能、程序的应用性等,但我发现保持代码的精简会使得程序的复杂性降低,这对于程序的质量来说是一件好事情。
l 选择一个可以优化程序代码占用存储空间大小的编程语言
这是一种简单的替换。对于节省存储器来说,相比于Java来说,C语言是一种较好的语言(因为你可以得到你想要的存储空间)。如果你知道你在做什么,c++也是一种十分高效的语言,但是我见过很多臃肿的c++程序,所以我建议你小心使用。你可以阅读Stroustrup的相关评论来了解更多的内容。尽量不要使用所有的C++组件。
l 选择一个可以优化代码占用存储空间大小的编译器
大多数的编译器可以优化速度并关注代码的大小,这与嵌入式编译器有很大的差别。例如,其中的一个原因是我们使用风河的编译器来编译VxWorks,对比于gcc,它不仅会将代码的运行效率提高10%,同时也会将代码缩小10%。
l 选择一个可以订制的操作系统并只包含你想要的组件
为设备设计操作系统(比如VxWorks)与设计一般功能的操作系统(比如Linux)不同。RTOS系统(实时系统比如VxWorks),可以被看成是一个库,你可以只将你实际用到的代码放到代码镜像中。
但是得到精简存储器的最有效方法是精简你的代码构架并缩小你的代码尺寸。虽然说起来容易,但当你真正处理现存的代码时,你会发现这是很困难的。
文章评论(0条评论)
登录后参与讨论