这可以固定在硬件中,但这要付出复杂性和材料清单的代价。多年来,“修复软件”是最佳的选择,并且已经设计了许多“反跳”算法。
一切都与时机有关
一些复杂的外围硬件可能会响应软件写入寄存器的命令。硬件通过执行一系列动作来响应命令的情况并不少见,在此期间它不会响应其他命令。这不是故障,因为硬件设计人员希望设备以此方式运行。但是,从软件开发人员的角度来看,这似乎是不合逻辑的。
这给软件带来了挑战。需要包括安全措施,以便在发出命令时,必须经过一段适当的时间才能编写另一条命令。在简单的应用中,某种延迟循环可能就足够了。在更复杂的软件中,可能无法在空闲循环中占用CPU,因为还有其他处理要做。在这种情况下,需要更复杂的计时机制。
大端或小端
有多种方式可以表示一个单词(甚至一个字节)内的数据。一个简单的例子是单词中字节的顺序。他们可能是最不重要的第一或最重要的。两种方法都不对,而且不同的CPU历来都是小端或大端的。因此,几乎不可避免的是,链接在一起的两个子系统可能对数据表示有不同的想法。
这是在软件中修复的另一种候选方法,仅字节交换或循环。挑战在于将接口的使用本地化到执行转换的软件的一小部分。
增加功能
除了规避硬件中的错误和怪异之外,以节省成本为名,或者因为该功能在开发过程的后期就被梦想了,可以在硬件中有效实施的功能可以卸载到软件中并不少见。
这是微处理器控制的替代品,用于伺服液压系统上的大型硬接线控制面板。当时,在微处理器中拥有如此巨大的计算能力的想法令人鼓舞,当然,开发人员对此感到迷恋。硬件设计已经完成,并在非常好的时间内冻结,使生产能够按计划进行。在新功能的想法泛滥之前,软件开发一直进展顺利。该软件被迫屈服(即,其实时行为受到损害),因此必须进行重大设计审查。
隐藏硬件问题:驱动程序
长期以来,人们已经认识到,访问和控制硬件对于没有经验的或缺乏经验的嵌入式软件开发人员可能是一个特殊的挑战。结果,出现了设备驱动程序的概念。驱动程序只是一个很小的软件,它封装了使用某些硬件的笨拙并提供了与应用程序代码的合理接口。
它是在驱动程序中容纳了硬件设计的怪癖,理想情况下,应该在其中进行调整以解决意外的功能或非功能。