9

我正在寻找用于原型设计(虚拟原型设计)、模拟和测试桌面 Windows 上深度嵌入式 C 代码的工具和技术,包括构建由按钮、LED 和 LCD 显示器(分段和图形)组成的逼真的嵌入式前面板。

我对使用纯 C 代码和原始 Win32 API 而不是 MFC、.NET/C#、vxWidgets 或 Qt 的可能低级方法特别感兴趣。我还想使用免费的开发工具,例如带有 Platform SDK 和 ResEdit 的 Visual C++ Express 来编辑资源。

我正在寻找代码示例来渲染图形 LCD(从单色到 24 位颜色),具有高效的像素级界面、多段 LCD 和响应“按下”和“释放”事件的自绘按钮。

4

4 回答 4

8

我很惊讶我最初的问题引发了如此多的误解和负面评论。在一台机器(例如 PC)上开发深度嵌入的 C 代码并在另一台机器(嵌入式微控制器)上运行它的策略称为“双重目标”,并且非常普遍。例如,在 PC 上开发和测试深度嵌入的代码是 James Grenning 最近出版的《嵌入式 C 的测试驱动开发》一书的基石。

通过双目标避免目标硬件瓶颈

请注意,双重定位并不意味着嵌入式设备与 PC 有任何关系。这也不意味着模拟必须与嵌入式目标 CPU 的周期精确。

双重目标仅仅意味着从第一天开始,您的嵌入式代码(通常在 C 中)被设计为在至少两个平台上运行:最终目标硬件和您的 PC。为此,您真正需要的是两个 C 编译器:一个用于 PC,另一个用于嵌入式设备。

然而,双重目标策略确实需要一种特定的嵌入式软件设计方式,以便通过定义明确的接口处理任何目标硬件依赖关系,该接口通常称为板支持包 (BSP)。该接口至少有两种实现方式:一种用于实际目标,另一种用于 PC,例如运行 Windows。有了这样的接口,大部分嵌入式代码可以完全不知道它链接到哪个 BSP 实现,因此可以在 PC 上快速开发,但也可以在目标硬件上运行而无需任何更改

虽然一些嵌入式程序员可以将双重目标视为自己造成的负担,但更有经验的开发人员普遍认为,关注软件和硬件之间的界限实际上是有益的,因为它会产生更模块化、更便携和更易于维护的软件更长的使用寿命。对双重目标的投资还可以在大大加快的编译-运行-调试周期中立即获得回报,与运行代码的可见性有限且速度较慢、资源受限的深度嵌入式目标相比,在功能强大的 PC 上更快、更高效.

前面板 Win32 GUI 工具包

在为具有非平凡用户界面的设备开发嵌入式代码时,经常会遇到将嵌入式前面板表示为 PC 上的 GUI 元素的问题。这个问题是如此普遍,以至于我真的很惊讶这里没有人可以推荐一个现有的库或一个开源项目,它们将为基本元素(如 LCD、按钮和 LED)提供一个简单的纯 C 接口。这实际上并没有那么复杂,但似乎每个嵌入式开发人员都必须一遍又一遍地重新发明这个轮子。

因此,为了帮助有兴趣在 Windows 上对嵌入式设备进行原型设计的嵌入式开发人员,我创建了一个“前面板 Win32 GUI 工具包”并在 GPL 开源许可下在线发布(参见http://www.state-machine.com/赢32)。该工具包仅依赖于 C 语言中的原始 Win32 API,目前提供以下元素:

  1. 点阵显示器,用于高效的像素可寻址显示器,例如图形 LCD、OLED 等,颜色高达 24 位

  2. 用于分段显示的分段显示器,例如分段 LCD,以及带有用于分段的通用自定义位图的分段 LED。

  3. 具有自定义“按下”和“释放”位图的所有者绘制的按钮,并且能够在按下和释放时生成单独的事件。

该工具包附带一个示例和一个应用说明(参见http://www.state-machine.com/win32/AN_Win32-GUI.pdf),展示了如何处理来自所有者绘制的按钮、常规按钮、键盘的输入,和鼠标。您还可以在http://www.state-machine.com/win32/front_panel.html上查看动画演示。

关于“前面板 Win32 GUI 工具包”的大小和复杂性,上述 GUI 元素的实现只需要大约 250 行 C 语言。所有输入源和大量注释的示例总计大约 300 行 C 语言。该工具包已使用免费的 Visual C++ Express 2010(带有 Express Edition Platform SDK)和免费的 ResEdit 资源编辑器进行了测试。

享受!

于 2012-08-28T19:54:43.483 回答
1

您在对问题的评论说明中提到的设备永远不会使用 Windows PC,因此在这种情况下不需要低级 Windows 编程。事实上,我会说它不受欢迎。原型设计与速度有关。这是关于你能以多快的速度把一些东西放在一起向潜在的投资者或高层管理人员或其他决策者展示。

您不希望在低级 C 和 Win32 api 上花费额外的时间,直到项目需求被清除到足以让您知道这是最终项目可交付成果的绝对要求(也许是服务器/PC 监控工具?)。在此之前,您需要开发速度。幸运的是,该行业拥有用于快速原型设计和硬件开发的工具,如您所描述的。

我对嵌入式开发原型的偏好

至于我作为开发人员的意见,我喜欢 .net 微框架 (.netmf) 仅仅是因为我已经是 Microsoft .Net 开发人员并且可以转移我现有的很多技能。因此,我在 Visual C# Express 2010 下使用 C# 使用 FEZ 微控制器进行原型制作(根据需要免费)。它快速、简单,您可以在几分钟内完成项目的核心。

如果您作为开发人员的经验不同,您可能会寻找使用 BASIC、Java 或其他语言编程的微控制器,以通过重用您的核心技能集来帮助加快开发速度。

解决您的问题赏金评论

惊人的大部分嵌入式软件可以在台式计算机上开发,而不是在深度嵌入式目标上。如果处理得当,这种“目标系统瓶颈”的避免可以潜在地将生产力提高一个数量级。但是,要在桌面上开发嵌入式软件,需要模拟 UI 组件,例如显示器(分段和越来越图形化)、LED、旋钮和按钮。我正在寻找用 C 语言用普通 Win32 API 编写的此类 UI 组件,以便与要在桌面 Windows 上开发和测试的嵌入式代码轻松集成。

我从事嵌入式开发的专业工作超过 4 年,以及围绕该兼职工作的许多年。虽然您上面所说的有些正确,但它不会为您节省时间或金钱,这就是为什么每个人都对这种策略的动机感到困惑的原因。我们花了数年时间试图为这家公司的硬件设备推出一个 Windows 模拟器,理论上这可以节省原型设计的时间。这总是很痛苦,我们花了更多的时间来模拟这种体验,而不是直接从草绘的 UI 绘图规范到真正的开发。仿真器落后于硬件开发,通常要等到硬件发布 6 个月或更长时间后才能支持最新功能。这是很多额外的工作,但价值很小。

您将花费更多时间来开发不可重用的 win32 平台代码和硬件仿真组件,而不是实际为核心项目本身编写代码。这仅对硬件供应商才有意义,他们将此仿真器作为“增值”工具提供给潜在的第 3 方开发人员,但对于新硬件设计的原型制作没有意义。

现代开发环境(如带有 FEZ 微控制器的 Visual C# Express 2010)可以编译、将项目输出推送到微控制器,然后开始调试的速度与在 C 中编译和运行模拟 LCD 或 LED 的低级 Windows 应用程序一样快或更快,或者开关等...因此,现代工具不再适用您的评论“将生产力提高一个数量级”。(可能是在过去 10 年左右之前。)

如果您真的,真的只是想在 PC 上直观地模拟嵌入式硬件,请使用 adobe flash 之类的东西来模拟 UI。但是,当您制作原型的最终设备不会运行 windows 时,不要通过为 windows 编码来复制代码(也许会运行 windows,但您没有这么说)。使用当今可用的最快最可靠的原型设计工具,这绝对不是低级 C 和 win32 api!

也许将 StackExchange 用于电子产品?

因为这是一个面向开发的站点,所以讨论特定嵌入式硬件的优点并不重要。如果您决定重新专注于使用微控制器电子设备进行原型设计(ArduinoFEZPropellerBasic StampPololu等),您可能会在 stackexchange for electronics 上寻求电子硬件建议。我会说,这些平台中的大多数旨在促进 LCD、LED、按钮和界面的原型设计,正如您所概述的那样。您通常可以在几分钟内组装一些预先构建的模块,并准备好开始对您的项目进行编码。在这里可以节省大量时间。

于 2012-08-19T17:30:14.403 回答
0

你要求太多了,你需要看看@proteus。 http://www.labcenter.com/products/vsm_overview.cfm

于 2012-08-25T08:22:16.110 回答
0

正如 Mahmoud 所说,您可能会在proteus Professional中找到带有原型示例的代码解决方案。它是流行的原型设计、仿真和编码软件之一,您可以免费下载 proteus Professional并查看其手册。

祝你好运

于 2013-04-07T17:43:34.737 回答