嵌入式系统的C#?

时间:2009-02-20 04:20:12

标签: c# embedded

  

“C#旨在适用于为托管和嵌入式系统编写应用程序,从使用复杂操作系统的大型应用程序到具有专用功能的非常小的应用程序。”   -- design goals (wikipedia)

虽然它在很大程度上取决于嵌入式是如何“emebedded”,

您认为C#达到此目标的程度如何?

您是否认为C#与C / C ++一样好,如果不是更好的工具?

11 个答案:

答案 0 :(得分:10)

嗯,有Micro Framework;我没有听到很多关于它的噪音,但我不是“嵌入式”。但这取决于它在做什么...... C#是一种很好的通用语言,但仍然需要一些硬核(并且挂起代码复杂性)。

答案 1 :(得分:7)

有很多商业上成功的软件应用程序用C#和WinCE平台编写。例如,一些机顶盒(来自AT& T等)在.net CF上运行C#代码。鉴于这些盒子有64或128 MB内存,我认为嵌入式中的C#足够嵌入。

点是硬件加速和其他编译器进步的进步,像C#这样的JITed语言能够很好地工作。

最大的优势在于最新的Visual Studio,您可以从VS 调试设备。至少对于开发环境来说,现在没有什么好的了。

注意:平台方面,WinCE / WinMobile有很多竞争对手,每个都有其优势。在上面我只讨论开发环境的优势。

答案 2 :(得分:4)

如您所知,如果要在C#中编写代码,则需要使用嵌入式.net迷你运行时。你可以说,就像赢得CE一样。

我希望我们很快会在市场上推出低成本的.NET mini-mini嵌入式芯片,或者它们已经存在?对此消息感兴趣

http://www.windowsfordevices.com/news/NS4666205829.html

  

微软的一家小型创业公司   后院准备开始出货   小巧的32针芯片式计算机模块   运行“.NET Embedded”,一个新的   微软嵌入式软件平台   开发用于手表和其他   “聪明的个人物品。”模块,   由创业公司.netcpu Corp.开发,   包含微软的部分内容   智能个人对象技术   (SPOT)硬件和软件。

但是,这里有一些有趣的东西。看看COSMOS项目。它可以将您的IL代码转换为各种平台(以及将来希望嵌入式架构)

http://www.gocosmos.org/index.en.aspx

  

Cosmos包含一个编译器(IL2CPU,   这是读取的宇宙的一部分   输入文件(通常是shell)和   宇宙图书馆和编译   导致IL到x86代码。 IL2CPU有一个   跨平台的层,我们计划   支持其他处理器和   平台,包括x64。 IL2CPU也   支持某些扩展方法   它允许C#代码进行交互   直接与CPU,寄存器和   内核中的端口。 IL2CPU包含   一些内联汇编程序,但有   没有需要链接的ASM文件   英寸

     

目前IL2CPU首先输出原始asm   文件(带有IL注释)然后   通过nasm处理它们(免费的   汇编语言)。后来我们计划发射   直接到二进制。

答案 3 :(得分:3)

您可以结帐Netduino。它是使用C#在ARM 32位微控制器上应用.Net Micro Framework。它在netduino.com或此视频http://www.youtube.com/watch?v=UN-JXHHlgcY

由于C#使用的框架或虚拟机充当其C#代码和机器代码之间的中间件,我希望它比使用C或C ++运行得慢。但是在速度不是那么重要的应用中,并且立即交付,这绝对是相当可观的。

答案 4 :(得分:3)

我将C#用于我的一些嵌入式应用程序,并且它在72MHz ARM芯片上运行得足够快(小型Web服务器等)。此外,.NET微框架还附带了许多可以修剪的额外库关闭。

答案 5 :(得分:2)

嵌入式系统通常具有实时要求。满足那些使用垃圾收集语言的人很可能 intersting。

答案 6 :(得分:2)

不使用WinCE或Windows Embedded的嵌入式系统上的C#需要.NET Micro,因此实际上“托管和嵌入”之间没有区别,因为它需要托管。那就是 托管,可以嵌入,因此“托管嵌入式”毫无意义。

目前,.NET Micro的内存占用量为300Kb,仅支持ARM和Blackfin,因此不适合使用大量嵌入式应用程序,也不太昂贵。此外,虽然它支持多线程,但它不具备实时性,因此不适合其他大量应用程序。

几年前,微软在英国嵌入式系统展上举行了免费会议,推出了当时新的.NET Micro;在Q& A期间,当我询问有关实时支持的问题时,得到了答案“不,这不是实时的。”,听众发出一声呻吟声,数字起来离开了,浪费了他们的时间。

答案 7 :(得分:0)

有趣的是创建一个“编译器”,将.Net Micro Framework程序集转换为本机嵌入式汇编语言。但是,必须将内存管理调用注入到方法中。或者,不要试图“猜测”他们去哪里,你可以使用一个伪方法,例如System.Memory.Delete(),并将其作为一个符号在那里插入删除。

尝试使用Phoenix框架会很有趣;我可能会在下个假期试一试。

答案 8 :(得分:0)

答案 9 :(得分:0)

我很难相信c#永远是嵌入式系统的最佳选择,至少达到目前可用的处理能力的程度。 C#通常以MSIL / CIL为目标,而不是合适的机器语言。可以从c#获得特定处理器的机器代码,但是不太可能非常有效。最好的选择:坚持使用更接近硬件(c,c ++,非托管)的语言,尽管缺乏内置的内存管理(尽管不确定)和有限的可用库范围。嵌入式,简化式和透明式是最好的选择,imho。

答案 10 :(得分:-4)

对于嵌入式设备,c#永远不会像c / c ++一样好,因为它是托管代码并在.net框架内运行。就虚拟机而言,java远远优于.NET,这显然是为什么数十亿的嵌入式设备在Java上运行......而很少有人在.NET上运行。简而言之,微软通过让人们在嵌入式设备中使用c#而没有任何商业利益。为这些设备编程的人永远不会购买他们的Visual Studio IDE。那么为什么要打扰?