嵌入式软件开发人员在创建他们的系统时需要监控五个重要特征。现代系统拥有丰富的资源,监控这些特征有时看似价值不高或没有必要,但目前为止在现场遇到的最大问题总是与这五个关键特征密切相关。
无论一个嵌入式系统多简单或多复杂,有5个关键特征是需要开发人员特别留意的。有一些特征显而易见,如RAM和ROM的使用情况;还有一些特征很容易被开发人员忽视,如系统时序和执行顺序,成为开发设计的隐患。
特征1—系统时序
如果向开发人员询问系统中断或其它系统函数的最小、最大和平均执行时间,90%的反应是翻白眼。说到嵌入式系统的实时性能,许多开发人员只能在心里祷告获得最好的结果。如今的微控制器已经变得非常快速和强大,但它们只是一般的计算器件,其时序并不能被完全忽略。开发人员需要了解多个中断同时发生或者用户在同一时刻“按下”所有按钮(这是我喜欢的一种测试方法,几乎百分之百不能一次通过)时,系统将如何响应。
幸运的是,现代微控制器有多种工具帮助开发人员理解嵌入式系统的时序和响应。举例来说,ARM微控制器有跟踪功能,使开发人员可以定期采样PC计数器,并重构系统时序和执行路径。利用这些工具,开发人员能看到反映系统内部工作的实际数据,而不再只是默默祈祷系统按自己想要的方式执行代码。
特征2—执行顺序
对开发人员来说,了解指令执行顺序与了解系统时序一样重要。知道系统在何处分支或跳转、各个函数或中断何时并以何种顺序执行非常重要。如今的系统变得非常复杂,虽然我们自认为明白正在发生什么,但仍然需要提取跟踪数据,明明白白看到代码的执行。结果显示的内容常常与我们所预期的完全不同。
我强烈推荐开发人员研究并熟悉这些微控制器跟踪工具。这些现代工具可以提供几年前完全无法想象的直观洞察图。我曾经用这些工具提供的洞察功能找出了许多设计缺陷,因此在编写代码之前设置好了跟踪与缺陷捕获工具。
特征3—代码大小
人们理所当然地认为每个开发人员都会监视代码大小,但我认为实际上他们没有这样做。若是问一个GPIO或SPI驱动程序在他们的系统中占多少空间,大多数开发人员甚至都不知道去哪儿找答案!他们唯一知道的是自己编写的应用程序有GPIO和SPI,最终的应用程序使用了(比如)约47kB的闪存空间。众所周知,我们通常都不会跟踪系统中的代码细节。
现在在我们的保护系统中,代码大小会根据所用的编译器甚至优化等级和标志而有很大的变化。另外,多数情况下,监视代码大小已经变得不那么重要了,这是因为闪存相当便宜,供应商已经能够做到根据代码大小便利地在同一微控制器系列的不同器件之间切换。但为了便于未来的项目规划和器件选择,跟踪驱动程序等项目的细节仍然特别有用。
特征4—RAM的使用
与代码存储器不同,RAM正成为嵌入式软件开发的关键因素。提供超过100kB的闪存空间同时却只提供16kB的RAM,对于微控制器已经很常见。这意味着RAM空间仍然非常珍贵。如果再考虑实时操作系统(RTOS),情况会变得更糟。在基于RTOS的系统中,开发人员通常将大量的RAM分配给线程堆栈空间,因为很难准确估计合适的大小。因此开发人员在编写并实现他们的软件时,需要监控RAM空间都作了何用。
特征5—能耗
对于电池供电的设备,能耗无疑是系统设计的一个关键要求。而对于接入电网的系统,因为能耗不是关键要求,因此常被忽略。鉴于能量成本不断上升、自然资源逐渐减少,开发人员仍应继续监控设计的功耗需求,以便了解它们的能耗情况并最大程度地降低能耗。借助这种监视,由电池供电的设备显然会通过替换电池或给电池充电而获得更长的工作时间。那些直接连接到电网的设备也能节省电力成本而使消费者和最终用户受益。的确,每一台单独的设备所节约的能源可能微乎其微,但如果数百万台设备合在一起,我们就知道有多少能量不会被浪费了。
总结
本文讨论了嵌入式软件开发人员在创建他们的系统时需要监控的五个重要特征。现代系统拥有丰富的资源,监控这些特征有时看似价值不高或没有必要,但目前为止我在现场遇到的最大问题总是与这五个关键特征密切相关。