我咨询的公司正在寻求切换到由.NET Micro Framework提供支持的设备,以便我们能够更快地将设备推向市场.至少在理论上,这个想法是用C#而不是C或汇编进行编码会更快,更容易出错.就像我说的那样,这个理论,因为我从未编写过嵌入式设备.
我的问题如下:
.NET Micro Framework是否能胜任这项任务?
.NET Micro Framework无法做到的一些事情是什么?
有哪些陷阱?
插件设备是否有可行的第三方市场?我没有在微软的网站上看到很多东西.
有人可以指向使用MF Framework开发的商业设备.
谢谢.
如果不了解您的应用程序和嵌入式设备的当前功能,如果.NET MF能胜任这项任务,我将很难给出明确的意见.如果嵌入式设备是具有2K RAM和32K ROM的低功耗8位CPU,那么.NET MF将不适合该设计.
在很多情况下,迁移到.NET MF将涉及对许多供应商所青睐的芯片组的硬件更改,这些供应商通常以ARM7或ARM9内核为目标.这样做的主要原因是利用已经完成的移植HAL的工作,并将PAL和TinyCLR交叉编译为相关处理器的本机代码.然后,如果您的应用程序适合.NET MF模型,则只需要开发托管代码.
开发板的比较可能有助于您为新设计选择平台.GHI产品的优势在于您可以购买裸芯片组,并使用他们开发的固件来集成您的硬件设计.
对问题1的回答:.NET Micro Framework是否能胜任这项任务?
抱歉,如果没有更多信息,我无法回复您的申请.
对问题2的回答:.NET Micro Framework无法做到的一些事情是什么?
像许多竞争产品一样,微框架不是实时的.调度程序非常简单,并未针对需要确定性计时的系统进行优化.
TinyCLR将IL从下一个等待的"线程"解释为20ms.线程可以通过调用产生分配的时间片Thread.Sleep(0)
.仅在每个线程时间片之间,运行时解释器将检查来自硬件的标志,并将事件分派给托管代码,或者如果它们被阻塞等待硬件则唤醒线程.据我所知,没有办法让线程从本机代码中断服务程序(ISR)中解除阻塞,或者对于优先级较高的线程,先发制人地中断较低优先级的线程.
对问题3的回答:有哪些问题?
一切似乎都在工作,你已经了解了运行时interperter循环如何工作(线程的调度和对硬件事件的反应),然后你忘记了GARBAGE COLLECTION!
最好尽量减少内存抖动的数量(每次new
对象时仔细检查).不要创建和销毁常用对象,而是考虑通常使用GC来保存对象池,并在需要时再次回收它们.
对问题4的回答:插件设备是否有可行的第三方市场?
第三方的参与主要是在硬件方面的开发板和参考设计.从软件的角度来看,这个代码共享链接可能很有用.作为一个侧面问题,不要忘记大多数VS2008开发工具也适用于.NET MF(例如Resharper和VisualSVN)
对不起,对问题5没有答案,因为我不遵循这类事情.在对.NET MF登录页面上微软似乎有商用设备的图像,但我从来没有跟着的链接.
与我合作过的许多其他嵌入式平台相比,.Net Micro Framework非常易于使用.但目前它确实有一些缺点,例如缺乏实时支持.由于使用相同总线的所有附加设备的硬件争用,一些SDK工具包也存在问题.如果您需要从控制器上挂下大量设备,我会查看Windows CE平台.Micro Framework的当前硬件选择非常有限.
伟大的平台和小项目,这将是伟大的.但是当你试图进入接近实时的要求时,你可能会遇到困难.
就像这个行业中的其他许多东西一样.但是,由于您可以以低于100美元的价格获得开发套件,因此可能值得一试.
我使用DeviceSolutions.Net中的Tahoe-II和.Net Micro Framework 2.0/3.0和C#.线程非常简单,但框架目前非常有限.我必须创建自己的HTTP解析器并创建原始的RESTful webservies.有一个Device Web Service模型,但我想要纯HTTP.我还必须创建自己的SNTP和SMTP协议层.新版本(4.0)应该很快发布,它可能填补其中一些短期下降.