在许多嵌入式应用程序中,需要在使代码非常高效或将代码与特定系统配置隔离以不受不断变化的需求影响之间进行权衡。
您通常采用哪种 C 结构来实现两全其美(灵活性和可重构性而不损失效率)?
如果您有时间,请继续阅读以了解我在说什么。
当我为安全气囊控制器开发嵌入式软件时,我们遇到的问题是,每次客户改变对特定要求的想法时,我们都必须更改代码的某些部分。例如,在开发过程中,触发安全气囊展开的条件和事件的组合每隔几周就会发生变化。我们讨厌如此频繁地更改那段代码。
当时,我参加了嵌入式系统会议,并听到了 Stephen Mellor 的精彩演讲,题为“应对不断变化的需求”。你可以在这里阅读这篇论文(他们让你注册,但它是免费的)。
这样做的主要思想是在代码中实现核心行为,但以数据的形式配置具体细节。您可以轻松更改数据,甚至可以在 EEPROM 或闪存的不同部分进行编程。
这个想法听起来很棒,可以解决我们的问题。我与我的同事分享了这一点,我们立即开始重新设计一些软件模块。
在我们的编码中尝试使用这个想法时,我们在实际实现中遇到了一些困难。对于受限的嵌入式系统,我们的代码结构变得非常繁重和复杂。
为了说明这一点,我将详细说明我上面提到的示例。我们没有使用一堆 if 语句来确定输入组合是否处于需要展开安全气囊的状态,而是改为使用一个大表。一些条件不是微不足道的,所以我们使用了很多函数指针来调用很多小辅助函数,这些函数以某种方式解决了一些条件。我们有几个间接级别,一切都变得难以理解。长话短说,我们最终使用了大量的内存、运行时和代码复杂性。调试这个东西也不是很简单。老板让我们把一些东西改回来,因为模块太重了(他也许是对的!)。
PS:SO中有一个类似的问题,但看起来重点不同。适应不断变化的业务需求?