【问题标题】:Emulating a hardware device [closed]模拟硬件设备[关闭]
【发布时间】:2012-09-30 21:03:07
【问题描述】:

我被分配了一个任务来模拟我公司的一个硬件设备。

我将使用用非托管 C++ 编写的设备固件 不一定是所有代码,但通信协议之类的东西在设备中运行良好,我想重用该代码。

我主要用 C# .NET 4 编写软件。

我很难破解这个坚果。至少,我想知道从哪里开始这项任务。

我非常了解 C#,并且我也使用过 C++。

固件在设备的芯片上运行,该芯片具有相当复杂的操作系统。不显示一些代码有点难以解释,但我做不到。

无论如何,我很乐意看到对此的一些意见。我也不确定是否应该写simulator or an emulator

硬件有不同的接口,包括RS-232、GSM数据包和蓝牙。 最重要的是使RS-232和GSM工作。

硬件代码写得很好,分层和结构化,所以我想可以用我自己的代码替换通信 API。

TLDN:我要复制/模拟/模拟硬件设备的行为,但这似乎是一个非常大的项目,我不知道从哪里开始。非常感谢您的输入。谢谢。

【问题讨论】:

  • 一个通常从头开始。有些人从最后开始,但后来变得混乱。 SCNR。
  • 只是一个想法 - 您是否因为其他人都拒绝而最终完成了这项任务?
  • @MartinJames 不,我最终完成了这项任务,因为它是分配给我的。 :-)
  • 在我看来,没有拒绝编程任务这样的事情;-)
  • 天哪,我会爱上的是项目负责人分配给我的任务。我喜欢这种非常艰巨的任务。

标签: c# c++ .net emulation


【解决方案1】:

我的想法基本上是分离和提取设备的逻辑层,并考虑将它们编译为您的仿真环境中的可执行文件。你需要做硬件部分和通信部分,它们的层次越来越高。通信部分可能很简单,只需实现接口并让您的模拟器用户与模拟设备进行交互。对于硬件设备仿真部分,如果是通用的,可以考虑使用现有的项目模型,如QEMU设备。

简而言之,更重要的工作是知道什么是公司特定的逻辑,什么是常见的设备逻辑,然后你就知道在哪里可以找到重复使用的代码。之后,将它们粘在一起。

【讨论】:

  • executable 我的意思是诸如 exe 或 dll 之类的东西,你可以运行
  • 将(部分)源代码编译成 dll 似乎是一种方法。我知道可以将某些函数暴露给 C#。
  • 确实,在 C# 中使用 dll 非常容易。
  • 可能有很多原因,例如如果dll想与设备寄存器交互但没有真正的硬件,替换register_read函数只是实现仿真。
  • 没错,@FamZheng。特别是通过 RS-232 和 GSM 进行通信时我想要这个
【解决方案2】:

这将完全针对特定项目。基本思想是找到合适的位置在每个设备上画线。您不想实际模拟实际的 RS-232 位,然后必须测量它们以获取数据。通常,对于您必须编写的任何代码,请尽可能使用实际代码。但是,任何你只需要撤消的代码,都不要使用。如果可能的话,在干净的接口处画线,然后在线的“下”侧重新实现代码(或硬件)。

【讨论】:

    【解决方案3】:

    固件在设备的芯片上运行,该芯片相当复杂 操作系统。不显示一些就很难解释 代码,但我不能这样做。

    您知道设备的工作原理。您知道给定输入的输出是什么。您需要确定需要复制哪些功能。

    硬件有不同的接口,包括RS-232、GSM数据 数据包和蓝牙。最重要的是使 RS-232 和 GSM 工作。

    您首先要创建一个可以通过 RS-232 和 GSM 协议进行通信的应用程序。完成此操作后,您可以使用已经编写的库函数来获得预期的输出。

    无论如何,我很乐意看到对此的一些意见。我也不确定是否 我应该写一个模拟器或模拟器。

    你需要确定你的老板到底想要什么。根据您向我们提出的模糊要求,我们无法帮助您做出此决定。

    【讨论】:

    • 投反对票的原因是什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-02
    • 1970-01-01
    • 2010-10-09
    相关资源
    最近更新 更多