我正在寻找用于桌面Windows上深度嵌入式C代码的原型设计(虚拟原型设计),仿真和测试的工具和技术,包括构建由按钮,LED和LCD显示器组成的真实嵌入式前面板(分段和图形) )。
我特别感兴趣的是一种可能的低级方法,使用纯C代码和原始Win32 API而不是MFC,.NET / C#,vxWidgets或Qt。我还想使用免费的开发工具,例如Visual C ++ Express with Platform SDK和ResEdit来编辑资源。
我正在寻找代码示例来渲染图形LCD(从单色到24位色),具有高效的像素级接口,多段LCD和所有者绘制的按钮,可以响应“郁闷”和“释放” “事件。
答案 0 :(得分: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,并且当前提供以下元素:
点阵显示器,用于高效,像素可寻址的显示器,如图形LCD,OLED等,最高可达24位色
分段显示的分段显示,例如分段LCD,以及分段LED,具有针对分段的通用自定义位图。
所有者绘制的按钮具有自定义的“郁闷”和“已释放”位图,并且能够在按下和释放时生成单独的事件。
该工具包附带一个示例和一个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资源编辑器进行了测试。
享受!
答案 1 :(得分:1)
您在评论澄清时提到的设备将永远不会使用Windows PC,因此在这种情况下不需要低级别的Windows编程。事实上,我说它不受欢迎。原型设计与速度有关。这是关于你能够多快地将某些东西放在一起以向潜在投资者或高层管理人员或其他决策者展示。
您不希望花费额外的时间使用低级别的C和Win32 api,直到项目要求被刷新到足以让您知道这是最终项目可交付成果的绝对要求(可能是服务器/ PC监控工具?)。在那之前,你想要发展的速度。幸运的是,业界拥有快速原型设计和硬件开发的工具,如您所描述的那样。
至于我作为开发人员的看法,我喜欢.net微框架(.netmf),因为我已经是Microsoft .Net开发人员,可以转移我现有的很多技能。因此,我使用在C#Express 2010下使用C#的FEZ微控制器进行原型设计(根据需要免费)。它快速,简单,您可以在几分钟内完成项目的核心工作。
如果您作为开发人员的经验不同,您可能会寻找使用BASIC,Java或其他语言编程的微控制器,以通过重用您的核心技能来帮助提高开发速度。
可以开发出大量的嵌入式软件 在台式计算机上,而不是深度嵌入的目标。这个 避免“目标系统瓶颈”可能会有所改善 如果做得好,生产力可以达到一个数量级。但是,要 在桌面上开发嵌入式软件,需要模拟UI 组件,例如显示器(分段和越来越多 图形),LED,旋钮和按钮。我正在寻找这样的UI 用简单的Win32 API在C语言中编写的组件,以便于与之集成 嵌入式代码将在桌面Windows上开发和测试。
我专业从事嵌入式开发工作超过4年以及该兼职多年。虽然你上面所说的有点真实,但它不会为你节省时间或金钱,这就是为什么每个人都对这种策略的动机感到困惑的原因。我们花了数年时间试图为这家公司的硬件设备推出一个Windows仿真器,理论上可以节省原型设计的时间。这总是很痛苦,我们花了很多时间来尝试模拟体验,而不是直接从草绘的UI绘图规范到真正的开发。模拟器落后于硬件开发,并且在硬件发布后6个月或更长时间内通常不支持最新功能。这是一项非常有价值的额外工作。
您将花费更多时间开发不可重用的win32平台代码和硬件仿真组件,而不是实际编写核心项目本身的代码。对于那些将此模拟器作为潜在第三方开发人员的“增值”工具提供硬件的供应商而言,这一点才有意义,但对于新硬件设计的原型设计没有意义。
具有FEZ微控制器的Visual C#Express 2010等现代开发环境可以编译,将项目输出推送到微控制器,然后开始调试或更快,而不是编译和运行低C模拟LCD或LED或开关等级别的Windows应用程序......因此,您的评论“将生产率提高一个数量级”,现代工具已不再适用。 (可能是在过去10年左右之前。)
如果你真的,真的只是想在PC上直观地模拟嵌入式硬件,可以使用adobe flash来模拟UI。但是,当您正在进行原型设计的最终设备不会运行Windows时,不要通过编码窗口重复代码(也许它会,但你没有这么说)。使用目前最快的最可靠的原型设计工具,明确地不低级别C和win32 api!
因为这是一个面向开发的网站,所以关于特定嵌入式硬件的优点的讨论并不真正相关。如果您决定重新关注使用微控制器电子设备进行原型设计(Arduino,FEZ,Propeller,Basic Stamp,Pololu等),您可能会要求使用电子硬件关于stackexchange for electronics的建议。我要说的是,大多数这些平台的设计都是为了促进LCD,LED,按钮和接口的原型设计。您通常可以在几分钟内组装一些预构建的模块,并准备好开始编写项目。这里可以节省大量时间。
答案 2 :(得分:0)
你要求太多,你需要看看@ proteus。 http://www.labcenter.com/products/vsm_overview.cfm
答案 3 :(得分:0)
正如Mahmoud所说,你可以在proteus professional中找到带有原型设计示例的代码解决方案。它是用于原型设计,模拟和编码的流行软件之一,您可以download proteus professional免费查看其手册。
祝你好运