Arduino /处理与.NET Micro Framework?最好的语言?最好的硬件?


10

我已经和Arduino纠缠了一段时间了,而且我正在从初学者过渡到中级。对于性能和硬件可用性,我希望对.NET Micro Framework提出一些意见。

我是.NET程序员,但是我发现Arduino的处理几乎为零摩擦...它与C#如此接近,所以我想做的任何事情甚至都不需要访问文档。

无论如何,哪个更好?


又见这个问题(与C ++):chiphacker.com/questions/3027/...
凯文·维米尔

Answers:


17

如果您想从初学者过渡到中级语言,则需要学习的语言是C。即使您不讨论整个Windows锁定问题,也需要非常善于使用C编程,然后才能在Windows上完成高质量的工作。 .NET Micro或C ++等高级语言的微控制器。

嵌入式系统由知识金字塔组成,您真正需要了解每个步骤的至少一些步骤:
^用户代码
^^操作系统
^^^ C语言
^^^^汇编语言
^^^ ^^微控制器架构
^^^^^^数字设计
^^^^^^^^半导体^^^^^^^^^
基本电子学(欧姆定律)

Arduino框架为业余爱好者提供了一个方便的钩子,使他们可以进入C语言和操作系统之间的金字塔。

关于您的.NET Micro Framework问题,“ 关于”表示:

典型的.NET Micro Framework设备具有32位处理器,没有外部内存管理单元(MMU),并且可能只有64K的随机存取内存(RAM)。

此外,手册还将其与Windows MobileWindows EmbeddedCE 6.0和.NET Compact Framework 区别开来,并将其与Linux,Real-Time,Java和自定义操作系统进行了比较。与Arduino / Processing框架相比,这是一个巨大的飞跃。

您的Arduino具有带1k RAM的8位处理器。除了8位和32位功耗之外,它的运行速度还不到大多数所列处理器的一半。虽然我不会阻止您迁移到32位处理器,但我还是建议您将它作为中级到高级的方法。

在C#或C ++中用几行代码来消耗大量的时间和内存确实很容易,这在运行于数GHz的双核处理器和数GB的RAM上是微不足道的,但是在嵌入式设备上却可以带来巨大的改变。除非您精通汇编语言和/或C,或者是精通C#或C ++的专家,否则我不建议您将其用于嵌入式编程。

因此,我将从下载WinAVR开始,并在C中编写一个简单的LED闪烁例程。如果C完全使您感到困惑,请在PC上执行一些本机代码(“ Hello World”),然后移至微控制器,但这不是必须的。接下来,向上移动通信在UART,开始使用中断,重做一些在C中的Arduino项目然后,找到(或进行!)一个新的开发板用不同的微控制器,也许PICARM,有的LCD屏幕,以太网,SD卡或其他任何您想要的东西,并尝试学习新系统。到达那里后,您会知道要去哪里。

我们将一路为您提供帮助!


6
我不同意汇编程序和C的知识是必不可少的。了解微控制器的工作方式至关重要。学习汇编器(c,少说些)当然是获得这种理解的一种途径,但不是唯一的途径。
康纳·沃尔夫

4
@假名:当然,这就是为什么我说“每个至少有一些”。遵循从C到汇编到Hex的简单程序,并理解每个步骤,将使您成为一个更好的程序员。以后,您可以根据需要让魔术发挥作用,但是您需要了解所使用机器的功能。
凯文·维米尔

抱歉,抱歉。错过了“一些”。
康纳·沃尔夫

7

我没有使用“ .NET Micro Framework”的经验,但是对于任何涉及在低功耗嵌入式平台上运行虚拟机的事情都非常怀疑。对我来说,这似乎是一种浪费。您需要更多的电源处理器,更多的内存,更多的功耗,才能实现与运行更专业的平台(可编译为本机代码)相同的效果。可能是为什么我的运行虚拟机(类似于JVM)的528MHz Android手机经常感觉比我前几年使用312MHz Palm Treo的速度慢,后者运行的是为本地机器代码编译的应用程序。

快速浏览一下,.NET MF需要一个ARM处理器,这比Arduino中使用的8位ATMega芯片在功耗和复杂性方面都领先一步。

我的建议是,如果Arduino做到了您想要的,那就坚持下去。如果不是这样,您可以使用功能更强大的ATMega或ATXmega芯片,并且该芯片还可以直接在C / C ++中与ARM一起使用,而无需在其之上附加.NET转换层。


2
我衷心同意,但我不认为这是正在发生的事情。我认为IL在部署时会转换为机器特定的代码。这是假设的链接:microsoft.com/downloads / ...到目前为止,我对Arduino感到非常满意...我认为唯一可以说服我的是,我在tinyclr.com上找到了相当不错的屏蔽选择。我还没有看到针对Arduino的广泛屏蔽选择。
克里斯·贝伦斯

1
权衡程序员的精力也是为什么台式机启动和启动程序与5或10年前使用的计算机一样长的原因。
凯文·维米尔

@Chris-问题不在于它不运行机器代码,而是它通过一系列抽象来运行它。抽象,对象,通用库,模块化等都很好,因为它们简化了编程,但占用时间和空间。
凯文·维米尔

是的,但是我认为抽象层仅(或至少大部分仅)存在于开发机器上。但是,当然,这只是我需要的那种信息。
克里斯·贝伦斯

2
@Chris-抽象将一直传播到机器代码。最后,机器对以下地址执行操作:加载,存储,添加,条件分支等。汇编是机器代码的一对一转换,C相对地映射到它。但是,高级语言还有很多工作要做,因为任何处理器的指令集中都没有try / catch指令。实现异常处理程序所需的机器代码并非易事。
凯文·维米尔

4

如果要过渡到中级,则应尝试在Arduino环境之外的平台。它们有很多可供选择,即使使用Atmel MCU,您也可以保持8位不变,或者从其他供应商处转移到8位​​。使用IDE,编写C语言代码,了解MCU的工作原理,编写自己的Bootloader代码或使用在线编程器,然后继续前进。

但是,如果您真的想尝试用C#编写微控制器,请尝试以下方法:http : //www.trygtech.com/products/sh7619_evb.php

它使用更大的MCU,典型的.NET占用空间约为512K闪存和256k RAM。


2
该系统使用.NET Micro框架。正是Chris一直在寻求意见的那种系统。
凯文·维米尔

4

我刚刚看到了Netduino,这可能对您来说是一个有趣的折衷方案。我不了解系统规格或细节,但它确实使用了.NET Micro,因此听起来至少是尝试该框架的好方法。


3

处理/ Arduino对我来说最大的一个问题是缺少一个像样的调试器。我有一条AVR巨龙,但这并没有太大帮助,因为(a)AVR Studio的调试器缓慢且有错误,或者(b)在Eclipse中进行调试仅是缓慢的,尽管如此,仍然有错误。我还没有机会在WinAVR中尝试它,但这是列表中的下一个。

当然,Arduino IDE中没有调试器。

一旦您跳出简单的应用程序并开始构建必须在有线和无线网络级别进行涉及的事情的应用程序,那就太令人沮丧了。这就是为什么我要认真研究.NET MF的原因-一直在使用SDK,并且很快就会有一些硬件出现。


糟糕...注意力不集中!我正在使用带有Eclipse的WinAVR toochain ;-)

1
我要承认...我从未想到,在这两个系统中,除了引脚13之外,都将有一个调试器。这肯定需要对Netduino进行第二次研究……
克里斯·贝伦斯

是的 您可以在较小的ATMegas上使用DebugWire,在较大的芯片(我认为是1280及更高)上使用JTAG,以通过上述两种环境对Arduino应用进行片上除杂。但是,您必须具有硬件来执行此操作,对我来说,价格在$ 50USD左右的Dragon是个不错的选择

但是,正如我提到的,在最佳体验上,这两种选择似乎都是平均水平。我期待与即将推出的netduino进行调试比较。

1
有关此消息的更新-几天前收到了netduino,并且一直在使用它。我必须说,与Arduino当前的状态相比,开箱即用的体验令人惊叹。不需要花哨的东西-只需Visual Studio(您可以使用免费的“ Express”版本)和USB电缆,就可以轻松进行板载调试并开始运行。所有的intellisense东西都可以在IDE中使用,我不得不说-即使我在其他平台上完成了很多c / c ++工作,使用.NET也会使buildnig嵌入式代码容易犯罪;-)

2

您可能想检查一下Netduino。它被构建为与arduino布局和引脚兼容,并运行.NET Micro Framework。因此,您可以使用C#进行编码,甚至可以在Visual Studio中进行调试!

到目前为止,我发现它非常好并且易​​于使用。虽然我没有找到很多教程,但我认为您可以移植很多Arduino的东西。作为一名新手,我能够轻松地从Arduino教程中移植光敏电阻/光电管设置和代码。


1

您可以考虑通过几个开源项目之一在STM32(ARM M3)上进行Arduino风格的C开发。LeafLabsxduino都具有正常工作的硬件和基于Arduino的工具链。当我需要32位微控制器和常规的Atmega芯片时,我一直在使用Leaflabs Maple板


1

您可以看一下http://www.hpinfotech.ro/html/cvavr.htm ,它是Atmel易于使用的不错的IDE,并且编写了一些CI来专业地使用了它,并且非常好,更像您的便利程度从像Visual Studio这样的IDE中获取。我认为Eclipse在Android开发方面有些笨拙,不如买到的那么精巧。

我有Netduino,我为实现乐趣而实现了Tricopter控制系统,该系统非常实时,并且运行可靠,使用Visual Studio 2010 C#编写。在设备上的调试通常非常出色,我可以通过以下方式自动同步数据: wifi,我在飞机上有一个很小的HTTP服务器。


0

我们在生产应用程序(精密测量设备)中使用.NET Micro Framework。它工作正常。

当您可以使用“创建-查看-配置文件-更改-查看...”范例时,当今的微处理器已经达到了状态。现在的内存量非常大而且便宜,因此很可能不会出现内存不足的情况。

作为C#开发人员,您知道进行适当的分析以达到期望的条件是一种更好的生存方式,而不是猜测在创建代码以使您的代码(可能不是)更快时应该做的其他事情和更复杂的事情。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.