- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章在没有硬件的情况下开发软件需要注意什么?由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
在今天的帖子中,我们将探讨开发人员在没有硬件的情况下开发软件所需的思维方式转变.
在当今的现代开发周期中,嵌入式开发人员需要做出的第一个思维转变是没有硬件。我们不是从硬件开始,然后一路向上,而是将注意力和开发重点放在应用程序上。开发人员应该关注应用程序功能、它们之间的关系以及它们操作的数据.
专注于应用程序而不是硬件具有几个主要优势。首先,它将开发人员的注意力转移到应用程序功能上。其次,以应用程序为重点,开发人员可以识别各种功能所需的数据作为输入和输出,以及这些数据如何在应用程序中流动。这种对数据的关注具有抽象和消除硬件依赖性的额外好处!最后,以应用程序为中心的开发允许我们在没有硬件的情况下模拟、建模和测试我们的应用程序代码。这为我们提供了创建自动化回归测试、最小化目标调试时间和在 PC 环境中测试我们的应用程序的能力,这比在目标环境中更容易工作.
没有按钮.
让我们看一个简单的例子。嵌入式开发人员经常需要编写一个可以消除开关抖动的函数。传统上,开发人员会定期调用他们的 debounce 函数,该函数将读取 GPIO 线,然后运行 debounce 算法。这里的问题是去抖动功能直接依赖于硬件!如果GPIO线发生变化,需要更新功能!将硬件更改为新的微控制器,该功能需要使用新的 GPIO 驱动程序调用进行更新。对功能进行单元测试感兴趣?这要困难得多,因为该功能取决于硬件.
显然,这不是一个很好的解决方案,即使我们一直这样编写代码!相反,我们需要认识到没有按钮!只有数据包含代表按钮的状态。按钮去抖功能应该采用代表当前开关状态的参数,而不是让去抖开关直接访问 GPIO 硬件。这将功能与硬件解耦,并允许在没有硬件的情况下对功能进行完全测试!只需传入数据以测试开关去抖算法是否正常工作!这也意味着我们可以构建回归测试.
一般来说,嵌入式开发人员可以遵循几个步骤来编写他们的应用程序代码,从而打破他们的硬件依赖关系.
首先,识别硬件生成或使用的数据。该数据将成为传递给应用程序功能函数的参数。对于 debounce 示例,这只不过是 ButtonState。函数原型可能如下所示:
bool Button_Debounce(ButtonState_t const ButtonState);
接下来,创建一个可用于获取硬件状态的抽象。 在 PC 上运行时,此功能将仅链接到可以模拟硬件的数据生成器。 当硬件存在时,该函数链接到返回硬件状态的 GPIO 驱动程序。 这使开发人员可以在有或没有硬件的情况下进行操作。 这将导致应用程序代码如下所示:
bool ButtonDebounced = false; ButtonState_t ButtonState = Button_StateGet(); ButtonDebounced = Button_Debounce(ButtonState);
最后,还可以进行抽象以将数据发布到硬件。这对于去抖动算法来说不是必需的,但如果应用程序组件要控制 LED、阀门、电机等,则可能是必需的。这再次允许开发人员在 PC 或硬件上运行应用程序之间切换 . 。
希望提高代码稳健性、降低总体成本和缩短上市时间的嵌入式开发人员可以从编写没有硬件的应用程序代码中受益匪浅。这并不总是可行或值得的,但对于许多现代系统来说,这是一种可以显着改进系统设计的技术。它的好处是使应用程序易于测试,并最大限度地减少了在目标上调试所花费的时间.
原文地址:https://www.toutiao.com/a7062542968179130891/ 。
最后此篇关于在没有硬件的情况下开发软件需要注意什么?的文章就讲到这里了,如果你想了解更多关于在没有硬件的情况下开发软件需要注意什么?的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
前言 在进行Maven开发时,往往需要下载大量jar包,而由于网络不稳定等其他因素可能导致jar未下载完毕,然后保留了lastUpdated文件,导致无法更新失效的jar包。 本文分享 bat脚本,自
按字母顺序排序并不是我们花太多时间担心的事情。我们在很小的时候就学习了字母表,现在我们知道它(拉丁文)以 A 开头,然后是 B,然后是 C 等等,一直到 Z。 但是这个订单究竟存储在计算机系统中的什么
我尝试使用可分离为 2 个一维向量的二维矩阵来证明二维傅里叶变换的信号属性的可分离性。地点: f(x,y) = f(x)*f(y) 那么 F(u,v) = F(u)*F(v) 使用以下代码: % Se
我需要为几个小型sqlite数据库编写文档。想描述数据的使用方式,包括表和行说明以及示例数据。 是否可以使用MySQL Workbench?如果没有其他选择,或者我可以使用任何模板? TIA! 最佳答
我正在尝试使用旧版本(例如:1.4.5)安装 memcached,但我不知道该怎么做。 brew install memcached安装最新的。 我也试过 brew install memecache
背景 多年来,我一直使用自己的类似贝叶斯方法,根据大型且不断更新的训练数据集对来自外部来源的新项目进行分类。 每个项目都有三种类型的分类: 30 个类别,其中每个项目必须属于一个类别,且最多属于两个类
嗨,我需要确定 4 个数字是否相等。数字是 size(A,1)、size(B,1)、size(C,1) 和 size(D,1),其中,例如A = [1 2; 3 4], B=[1 2 3, 4 5 6
Wikipedia 中的文章似乎太冗长了。 我将框架理解为一组精心设计的库和工具。 Qt 框架为跨平台 GUI 提供了一组库/工具。 cocoa 框架为 Mac 做了同样的事情。 软件框架的实际定义是
我们的客户最近发现了这个网站: http://mydeco.com/3d-planner/ 它有一个非常非常奇特且组合良好的 3d CAD Web 应用程序,似乎是使用 jQuery 编写的,而不是
我们正在寻找一种独立的(非 cms)日历解决方案来显示在网络上。它可以是开源的或付费服务。 我们主要是在寻找一种在 Web 上显示日历的方法,其中包含事件发生的时间和事件的名称。如果它可以按周、月、年
我想知道与软件相关的“质量保证”和“质量科学”之间的区别。 我在Google上进行了研究,但未找到有关“质量科学”的任何信息。 最佳答案 Based on the link you have prov
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
我有一个由 2 个方程和 2 个未知数组成的系统,我想使用 MATLAB 求解,但不知道如何编程。我得到了一些有关 Gamma 分布的信息(平均值为 1.86,90% 的间隔介于 1.61 和 2.1
给定一个矩阵,其中 1 是当前子集 test = 0 0 0 0 0 0 0 0 0 0 0 0
我在组合 Matlab“数据”变量的重复元素时遇到问题。我可以使用 unique 和 sort 轻松组合这些值。 [sorted,idx] = sort(data); [~,ij] = unique(
我在做的问题中有这么一段代码,如下图。定义部分只是为了向您展示数组的大小。下面我粘贴了矢量化版本 - 它慢了 2 倍以上。为什么会这样?我知道如果矢量化需要大的临时变量,我就会发生,但(看起来)这里不
我有一个 3D 矩阵,我想将它的每个 2D 分量存储在另一个 2D 矩阵的行中,该 2D 矩阵有许多行作为 3D 矩阵的第 3 维。 我该怎么做? 最佳答案 与 permute & reshape -
如果计算机能够使用纯 JavaScript(Google V8)、C++(Windows、Mac OS 和 Linux)运行程序/软件而没有任何性能问题,是否有任何好的方法可以通过要求尽可能少尽可能从
我的团队的任务是将用于播放媒体文件的全屏、信息亭式应用程序从 Windows 迁移到嵌入式 ARM Linux(瘦客户端)。我们需要在 sd/1080p 中支持 mpeg-2 播放以及 HTML、SW
我们有数以千计的具有白色或黑色或渐变背景的产品图片。我们正在寻找可以去除图片背景的软件或服务。我们需要一款能够很好地完成这项工作的智能软件。 最佳答案 在 photoshop 中,您可以记录 Acti
我是一名优秀的程序员,十分优秀!