在Windows上进行原型设计和仿真嵌入式软件

Mir*_*mek 7 embedded prototyping rtos visual-studio-express visual-studio

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

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

我正在寻找代码示例来渲染图形LCD(从单色到24位颜色),具有高效的像素级接口,多段LCD和自拍式按钮,可响应"低压"和"释放"事件.

Mir*_*mek 6

我很惊讶我的原始问题引发了如此多的误解和不良评论.在一台机器(例如PC)上开发深度嵌入式C代码并在另一台机器上运行它(嵌入式微控制器)的策略称为"双目标",这种策略非常普遍.例如,在PC上开发和测试深度嵌入式代码是James Grenning最近出版的"嵌入式C的测试驱动开发"一书的基石.

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

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

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

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

虽然一些嵌入式程序员可以将双重定位看作是一种自我造成的负担,但更有经验的开发人员普遍认为,关注软件和硬件之间的界限实际上是有益的,因为它会带来更多模块化,更便携,更易维护的软件.使用寿命更长.双重目标的投资也可以在极大加速的编译运行调试周期中立即得到回报,与速度较慢,资源有限的深度嵌入式目标相比,在强大的PC上速度更快,效率更高,对运行代码的可视性有限.

前面板Win32 GUI工具包

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

因此,为了帮助对Windows上的嵌入式设备原型设备感兴趣的嵌入式开发人员,我创建了一个"前面板Win32 GUI工具包",并在GPL开源许可下在线发布(请参阅http://www.state-machine.com/ win32).此工具包仅依赖于C中的原始Win32 API,并且当前提供以下元素:

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

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

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

该工具包附带一个示例和一个App Note(请参阅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资源编辑器进行了测试.

请享用!