当前位置: 首页 > 科技观察

在没有硬件的情况下开发软件需要注意什么?

时间:2023-03-17 16:36:52 科技观察

在今天的帖子中,我们将探讨开发人员在没有硬件的情况下创建软件所需的思维转变。以应用程序为中心的开发在当今的现代开发周期中,嵌入式开发人员需要做出的第一个思维转变是没有硬件。我们不是从硬件开始逐步向上发展,而是将注意力和开发重点放在应用程序上。开发人员应该关注应用程序功能、它们之间的关系以及它们操作的数据。专注于应用程序而不是硬件有几个主要优势。首先,它将开发人员的注意力转移到应用程序功能上。其次,以应用程序为中心,开发人员可以将各种功能所需的数据识别为输入和输出,以及这些数据如何在应用程序中流动。这种对数据的关注具有抽象和消除硬件依赖性的额外好处!最后,以应用程序为中心的开发允许我们在没有硬件的情况下模拟、建模和测试我们的应用程序代码。这使我们能够创建自动回归测试,最大限度地减少目标调试时间,并在PC环境中测试我们的应用程序,这比在目标环境中更容易使用。没有按钮!让我们看一个简单的例子。嵌入式开发人员通常需要编写一个函数来消除开关弹跳。传统上,开发人员会定期调用他们的debounce函数,该函数会读取GPIO线,然后运行??debounce算法。这里的问题是去抖功能直接依赖于硬件!如果GPIO线发生变化,则需要更新函数!将硬件更改为新的微控制器,并且需要使用新的GPIO驱动程序调用来更新功能。对功能进行单元测试感兴趣?这要困难得多,因为该功能取决于硬件。显然,这不是一个很好的解决方案,即使我们一直这样写代码!相反,我们需要意识到没有按钮!只有数据包含表示按钮的状态。按钮去抖功能应该采用表示当前开关状态的参数,而不是让去抖开关直接访问GPIO硬件。这将功能与硬件分离,并允许在没有硬件的情况下对功能进行全面测试!只需传入数据即可测试开关去抖算法是否正常工作!这也意味着我们可以构建回归测试!没有硬件系统的设计一般来说,嵌入式开发人员可以遵循几个步骤来编写打破硬件依赖性的应用程序代码。首先,确定硬件生成或使用的数据。该数据将作为传递给应用程序函数的参数。对于debounce示例,这只不过是ButtonState。函数原型可能如下所示:boolButton_Debounce(ButtonState_tconstButtonState);接下来,创建一个可用于获取硬件状态的抽象。在PC上运行时,此功能将只链接到可以模拟硬件的数据生成器。当硬件存在时,此函数链接到返回硬件状态的GPIO驱动程序。这允许开发人员使用或不使用硬件进行操作。这将导致应用程序代码如下所示:boolButtonDebounced=false;ButtonState_tButtonState=Button_StateGet();ButtonDebounced=Button_Debounce(ButtonState);最后,还可以进行抽象以将数据发布到硬件。这对于去抖算法不是必需的,但如果应用程序组件正在控制LED、阀门、电机等,则可能是必需的。这再次允许开发人员在PC或硬件上运行应用程序之间切换。结论希望提高代码稳健性、降低总体成本和缩短上市时间的嵌入式开发人员可以从在没有硬件的情况下编写应用程序代码中获益匪浅。这并不总是可行或值得的,但对于许多现代系统而言,这是一种可以显着改进系统设计的技术。它的好处是使应用程序易于测试,并最大限度地减少在目标上调试所花费的时间。