我正在寻找在桌面Windows上进行深度嵌入式C代码原型设计(虚拟原型设计)、模拟和测试的工具和技术,包括构建由按钮、LED和LCD显示器(分段和图形)组成的逼真嵌入式前面板。
我特别感兴趣的是一种可能的低级方法,使用纯C代码和原始Win32 API,而不是MFC、.NET/C#、vxWidgets或Qt。我还想使用免费的开发工具,如带有Platform SDK的Visual C++Express和用于编辑资源的ResEdit。
我正在寻找代码示例来渲染图形LCD(从单色到24位彩色),它具有高效的像素级接口、多段LCD和所有者绘制的按钮,可以对"按下"one_answers"释放"事件做出响应。
我很惊讶我最初的问题引发了这么多误解和负面评论。在一台机器(例如,PC)上开发深度嵌入式C代码并在另一台机器上运行(嵌入式微控制器)的策略被称为"双重目标",这确实很常见。例如,在PC上开发和测试深度嵌入式代码是James Grenning最近出版的《嵌入式C的测试驱动开发》一书的基石。
避免双重目标定位的目标硬件瓶颈
请注意,双重目标并不意味着嵌入式设备与PC有任何关系。也不意味着模拟必须与嵌入式目标CPU精确循环。
双重目标只是意味着,从第一天起,你的嵌入式代码(通常是C语言)就被设计为至少在两个平台上运行:最终目标硬件和你的电脑。你真正需要的只是两个C编译器:一个用于电脑,另一个用于嵌入式设备。
然而,双重目标策略确实需要设计嵌入式软件的特定方式,以便通过定义良好的接口(通常称为板支持包(BSP))处理任何目标硬件依赖关系。该接口至少有两个实现:一个用于实际目标,另一个用于PC,例如运行Windows。有了这样的接口,大部分嵌入式代码可以完全不知道它链接到哪个BSP实现,因此它可以在PC上快速开发,但也可以在目标硬件上运行,而无需任何更改。
虽然一些嵌入式程序员可能会将双重目标视为自己造成的负担,但更有经验的开发人员普遍认为,关注软件和硬件之间的界限实际上是有益的,因为这会使软件变得更模块化、更便携、更可维护,使用寿命更长。在双重目标方面的投资也会在大大加快的编译-运行调试周期中立即获得回报,与速度慢得多、资源受限、对运行代码的可见性有限的深度嵌入式目标相比,编译-运行-调试周期在功能强大的PC上更快、更高效。
前面板Win32 GUI工具包
当为具有非平凡用户界面的设备开发嵌入式代码时,经常会遇到将嵌入式前面板表示为PC上的GUI元素的问题。这个问题非常常见,以至于我真的很惊讶,这里没有人能推荐一个现有的库或开源项目,它将为基本元素(如LCD)提供一个简单的纯C接口,按钮和LED。这真的没有那么复杂,但似乎每个嵌入式开发人员都必须一次又一次地重新发明这个轮子。
因此,为了帮助对在Windows上制作嵌入式设备原型感兴趣的嵌入式开发人员,我创建了一个"Front Panel Win32 GUI Toolkit",并根据GPL开源许可证将其发布到了网上(请参阅http://www.state-machine.com/win32)。该工具包仅依赖于C中的原始Win32 API,目前提供以下元素:
-
点阵显示器,用于高效的像素可寻址显示器,如图形LCD、OLED等,具有高达24位的彩色
-
用于分段显示的分段显示,如分段LCD和具有通用自定义位图的分段LED。
-
所有者绘制的按钮具有自定义的"按下"one_answers"释放"位图,并且能够在按下和释放时生成单独的事件。
该工具包附带一个示例和一个应用程序说明(请参阅http://www.state-machine.com/win32/AN_Win32-GUI.pdf),显示了如何处理来自所有者绘制的按钮、常规按钮、键盘和鼠标的输入。您也可以在http://www.state-machine.com/win32/front_panel.html.
关于"Front Panel Win32 GUI Toolkit"的大小和复杂性,上述GUI元素的实现只需要大约250行C。具有所有输入源和大量注释的示例相当于大约300行C。该工具包已使用免费的Visual C++Express 2010(使用Express Edition Platform SDK)和免费的ResEdit资源编辑器进行了测试。
享受吧!
您在对该问题的评论澄清中提到的设备永远不会使用windows PC,因此在这种情况下不需要低级别的windows编程。事实上,我认为这是不可取的。原型是关于速度的。这是关于你能以多快的速度把一些东西组合起来,向潜在投资者、高层管理人员或其他决策者展示。
您不想在低级别的C和Win32API上花费额外的时间,直到项目需求足够充分,您知道这是最终项目交付的绝对要求(也许是服务器/PC监控工具?)。在那之前,你需要发展速度。幸运的是,该行业拥有如您所描述的快速原型设计和硬件开发工具。
我对嵌入式开发原型的偏好
至于我作为一名开发人员的看法,我喜欢.net微框架(.netmf),因为我已经是一名Microsoft.net开发人员,可以转移我现有的很多技能。因此,我在Visual C#Express 2010下使用C#制作了一个FEZ微控制器的原型(根据需要免费)。它既快速又简单,而且你在几分钟内就完成了项目的核心。
如果你的开发经验不同,你可以寻找一款使用BASIC、Java或其他语言编程的微控制器,通过重用你的核心技能来帮助提高开发速度。
回答您的问题Bounty评论
令人惊讶的是,嵌入式软件的很大一部分可以开发出来在台式计算机上,而不是在深度嵌入的目标上。这避免"目标系统瓶颈"可能会提高如果做得好,生产力将提高一个数量级。但是在桌面上开发嵌入式软件,需要模拟用户界面组件,如显示器(分段和递增图形)、LED、旋钮和按钮。我正在寻找这样的UI用C语言用普通Win32 API编写的组件,以便与嵌入式代码将在桌面Windows上进行开发和测试。
我做了4年多的全职专业嵌入式开发,也做了很多年的兼职。虽然你上面说的有些正确,但这不会为你节省时间或金钱,这就是为什么每个人都对这个策略的动机感到困惑。我们花了数年时间试图为这家公司的硬件设备推出一个windows模拟器,理论上可以节省原型制作的时间。这总是一种痛苦,我们花了更多的时间试图模仿这种体验,而不是直接从草图UI绘图规范到实际开发。模拟器落后于硬件开发,通常要到硬件发布6个月或更长时间后才能支持最新功能。这是很多额外的工作,价值很低。
您将花费更多的时间开发不可重用的win32平台代码和硬件仿真组件,而不是实际为核心项目本身编写代码。这只对硬件供应商有意义,他们将此模拟器作为"增值"工具提供给潜在的第三方开发人员,但对新硬件设计的原型设计没有意义。
像带有FEZ微控制器的Visual C#Express 2010这样的现代开发环境可以编译,将项目输出推送到微控制器,然后开始调试,速度与编译和运行C中模拟LCD、LED或开关等的低级别windows应用程序的速度一样快,现代工具不再适用。(可能是在过去10年左右之前。)
如果你真的,真的只是想在电脑上直观地模拟嵌入式硬件,可以用adobeflash之类的东西来模拟UI。但是,当你正在制作原型的最终设备不会运行windows时,不要通过为windows编码来重复代码(也许会,但你没有这么说)。使用目前可用的最快、最可靠的原型设计工具,这是绝对不是低级别C和win32api!
也许使用电子产品的StackExchange
因为这是一个面向开发的网站,所以讨论特定嵌入式硬件的优点并没有真正的意义。如果您决定重新专注于使用微控制器电子产品进行原型设计(Arduino、FEZ、Propeller、Basic Stamp、Pololu等),您可能会询问有关电子产品堆叠交换的电子硬件建议。我要说的是,这些平台中的大多数都是为了方便您所概述的LCD、LED、按钮和界面的原型设计。您通常可以在几分钟内组装几个预构建的模块,并准备好开始对项目进行编码。在这里可以节省大量的时间。
你要求太多了,你需要看看@proteus。http://www.labcenter.com/products/vsm_overview.cfm
正如Mahmoud所说,您可能会在proteus professional中找到带有原型示例的代码解决方案。它是一款流行的原型设计、模拟和编码软件,您可以免费下载proteus professional并查看他们的手册。
祝好运