我很惊讶我原来的问题引发了如此多的误解和负面评论。在一台机器(例如 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/win32)。该工具包仅依赖于 C 语言的原始 Win32 API,目前提供以下元素:
点阵显示器,用于高效、像素可寻址的显示器,例如图形 LCD、OLED 等,颜色高达 24 位
分段显示器用于分段显示器,例如分段 LCD 和分段 LED,以及分段的通用自定义位图。
具有自定义“按下”和“释放”位图的所有者绘制的按钮,并且能够在按下和释放时生成单独的事件。
该工具包附带一个示例和一个应用说明(请参阅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 资源编辑器进行了测试。
Enjoy!