无论是多么简单或者复杂的嵌入式系统,作为开发者都应该密切关注的五个特点。有几个是显而易见的,比如RAM和ROM空间的使用。然后还有一些被开发者忽略的因素,很容易成为设计周期的主要症结。
问任何一个开发人员一个系统中断或其他系统功能的最小、最大和平均执行时间,90%的人答案都是茫然的。当谈到了解嵌入式系统的实时性能时,许多开发人员只是交叉手指,希望得到最好的结果。虽然现在的微控制器已经变得非常快速和强大,但它们绝不是一种可以完全忽略时间的通用计算设备,开发人员需要了解如果多个中断同时触发,或者如果用户一次按下所有按钮(我最喜欢的测试用例是第一次尝试几乎100%失败),他们的系统将如何响应。
幸运的是,现代微控制器有许多可用的工具,允许开发人员了解他们的系统时序和响应。例如,ARM微控制器具有跟踪功能,允许开发人员定期采样PC计数器并重建系统定时和执行路径。利用这些工具可以让开发人员深入了解他们的系统,并为他们提供有关系统如何执行的真实数据,而不是希望和祈祷系统按照开发人员所认为的方式执行代码。
对于开发人员来说,理解指令执行顺序与了解系统时序同样重要。了解系统在何处分支或跳转,以及何时以何种顺序执行各种函数或中断是至关重要的。系统已经变得如此复杂,以至于当我们认为我们了解正在发生的事情时,我们需要提取跟踪数据并可视化地查看代码执行。这往往揭示了一个与我们预期完全不同的故事。
每个开发人员都监控代码大小,对吗?我认为他们没有,真的。大多数开发人员,如果被问及GPIO或SPI驱动程序将在他们的系统中占用多少代码空间,甚至没有地方去寻找答案!他们所知道的是,他们开发的最后一个应用程序有GPIO和SPI,最终的应用程序使用了大约47 kB的闪存空间。我们因不跟踪系统的代码使用细节而臭名昭著。
现在我们要为自己辩护的是,代码大小可能会根据所使用的编译器,甚至是优化级别和所使用的标志而有很大的不同。此外,在今天的大多数情况下,监控代码大小已经变得不那么重要了,因为闪存相当便宜,而且供应商已经使基于代码大小在同一微控制器系列中的不同部分之间切换变得非常容易。然而,跟踪细节仍然是非常有用的。
RAM正在成为嵌入式软件开发中的关键因素,而不是代码存储器。微控制器提供超过100kB的闪存空间,但同时只提供16kb的RAM,这并不罕见。这意味着RAM空间仍然非常宝贵。再加上RTOS,情况很快就会变得更糟。在基于RTOS的系统中,开发人员为线程堆栈空间分配大量RAM的情况并不少见,因为很难估计正确的大小。因此,当开发人员创建和实现他们的软件时,他们需要监控
电池供电设备的能耗无疑是系统设计的一个关键要求。但接入电网的系统往往忽略了能源,因为它不是一个关键的要求。然而,考虑到不断上涨的能源成本和自然资源的限制,开发商仍然应该继续监控他们设计的电力需求,以了解他们的能源足迹是什么,以及如何最大限度地减少他们使用的能源。有了这样的监控,电池供电的设备在更换电池或给设备充电之间的使用寿命将明显延长的设备。
嵌入式软件开发人员在创建系统时需要监视这五个特征。拥有大量资源的现代系统有时会使监视这些特征显得微不足道或不必要,但在一天结束时,我在该领域遇到的最大问题总是与这五个关键领域相关。