使用.NET微框架进行编程的经验

7
我咨询的一家公司正在考虑转向采用.NET微框架驱动的设备,以便我们能够更快地将设备推向市场。理论上说,使用C#而不是C或汇编语言进行编码将更加快速且错误更少。但这只是理论,因为我从未编写过嵌入式设备程序。

我的问题如下:

  1. .NET微框架是否适合?
  2. .NET微框架无法做到哪些事情?
  3. 有哪些需要注意的事项?
  4. 是否有第三方插件设备的可行市场? 我在Microsoft网站上没有看到很多内容。
  5. 是否有商业设备是使用MF Framework开发的,能否给出相关示例?

谢谢。


1
你为什么会建议转换到一个你没有经验的平台呢? - Binary Worrier
1
@Binary Worrier。由于现有的方法论需要太长时间才能进入市场,因此在我们采取行动之前,我在这里提出问题。 - AngryHacker
2
我很好奇,为什么你会为一家制造嵌入式设备的公司提供咨询服务,而你从未编写过嵌入式设备的程序?我为这家可怜的公司感到难过...听起来他们得到了非常短的一根火柴棍。 - jrista
1
我实际上是为他们编写软件,与他们的硬件相集成。他们正在寻找更快地推出产品的方法,我建议根据Channel 9网站上的视频选择使用MF。 - AngryHacker
也许是因为他想学习新事物,拓展视野... 为此干杯! - TimothyP
2个回答

8
没有了解您的应用程序和嵌入式设备的当前能力,我很难给出明确的意见, .NET MF 是否适合此任务。如果嵌入式设备是一款低功耗8位CPU,带有2K RAM和32K ROM,则.NET MF不适合该设计。
在许多情况下,转向.NET MF将涉及对芯片组的硬件更改,这些芯片通常针对ARM7或ARM9核心。主要原因是利用已经完成的端口处理工作,并将PAL和TinyCLR交叉编译为所涉及处理器的本机代码。然后,如果您的应用程序符合.NET MF模型,您只需要开发托管代码。
比较开发板可能会帮助您选择新设计的平台。GHI产品的优点是您可以购买裸芯片,其中包含他们开发的固件,以与您的硬件设计集成。

回答问题1:.NET Micro Framework是否能胜任任务?

很抱歉,没有更多信息我无法回答关于您的应用程序的这个问题。

回答问题2:.NET Micro Framework有哪些不能实现的功能?

微框架不像许多竞争产品一样是实时的。调度程序相当简单,并且不针对需要确定性时间的系统进行优化。
TinyCLR将等待的下一个“线程”的IL解释为20ms。线程可以通过调用Thread.Sleep(0)来放弃其分配的时间片。仅在每个线程时间片之间,运行时解释器才会从硬件检查标志并将事件分派到托管代码或唤醒阻塞等待硬件的线程。据我了解,没有办法让一个线程从本地代码中断服务例程(ISR)中解除阻塞,也没有办法让一个优先级较高的线程抢占地中断一个优先级较低的线程。

回答问题3:有哪些需要注意的地方?

一切似乎都在运行,您已经理解了运行时解释器循环的工作方式(线程调度和对硬件事件的反应),然后您忘记了垃圾回收!最好尽量减少内存抖动的数量(每次新建对象时仔细检查)。考虑持有一个通常会被GC回收并在需要时进行重复使用的对象池,而不是创建和销毁常用对象。
问题4的答案:是否存在可行的第三方插件设备市场?
第三方参与主要涉及硬件方面的开发板和参考设计。从软件角度来看,这个code-share link可能会引起兴趣。顺便提一下,不要忘记大多数VS2008开发工具也适用于.NET MF(例如Resharper和VisualSVN)。
抱歉,我对第5个问题没有答案,因为我不关注这种类型的事情。微软的.NET MF登陆页似乎有商用设备的图片,但我从未跟随过链接。

5
.Net Micro Framework与我曾经使用的许多其他嵌入式平台相比,非常容易使用。但它目前确实存在一些缺点,例如缺乏实时支持。此外,由于所有附加设备都使用相同的总线,某些SDK套件存在硬件争用问题。如果您需要大量设备连接到控制器上,建议考虑Windows CE平台。目前Micro Framework的硬件选择非常有限。
对于小项目而言,这是一个很好的平台。但当您尝试满足近实时要求时,可能会遇到一些问题。
像这个行业的许多其他方面一样,这取决于具体情况。但事实上,您可以以不到100美元的价格获得开发套件,这可能值得一试。

我使用了来自DeviceSolutions.Net的Tahoe-II,配合.Net Micro Framework 2.0/3.0和C#。线程非常简单,但该框架目前非常有限。我不得不创建自己的HTTP解析器并创建简单的RESTful webservies。虽然有设备Web服务模型,但我想要纯HTTP。我还不得不创建自己的SNTP和SMTP协议层。新版本(4.0)应该很快发布,可能会填补一些这些缺陷。


Matthew,感谢您的回复,尤其感谢缺乏实时支持。我可以指望什么样的实时分辨率?换句话说,我可以设置计时器间隔的最小值并可靠地触发吗? - AngryHacker
1
我记不清了,但我认为它是2到5毫秒。您可以将其设置得更短,但不要忘记您将使用单核处理器,该处理器需要为您的程序以及CLR切换线程。通过创建紧密循环并使用Thread.Sleep(0)来允许系统暂停您的线程以执行其他工作,您可能会获得更好的响应时间。与Windows本身一样,计时器实际上只是指南,以提供最小的阻塞时间。您还可以使用控制器GPIO作为中断,而不是观察事件。 - Matthew Whited

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接