【问题标题】:C# for embedded systems? [closed]C# 用于嵌入式系统? [关闭]
【发布时间】:2010-10-08 18:29:24
【问题描述】:

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

虽然很大程度上取决于嵌入是如何“嵌入”的,

您认为 C# 实现这一目标的效果如何?

您认为 C# 是否与 C/C++ 一样好,甚至更好?

【问题讨论】:

  • 查看 .NET Micro Framework。我想说.NET(和 C#)已经走了很长一段路!也就是说,这个问题只能获得自以为是的答案,因此请期待版主将其关闭。

标签: c# embedded


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    重点在于硬件加速和其他编译器改进等 JITed 语言(如 C#)能够做得很好。

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

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

    【讨论】:

    • 用过那个机顶盒我不确定我是否真的称它为成功。
    • 我记得自己想知道为什么 tomtom GPS 比我尝试过的任何其他竞争对手都要快得多。当tomtom长时间重新计算下一个转弯的位置时,其他gps'es会错过一个转弯和至少几个十字路口。事实证明,tomtom 运行的是 Linux,而“非常慢”的是 windows ce(微软嵌入式操作系统)。努夫说。
    【解决方案3】:

    如您所知,如果您想在 C# 中针对它编写代码,则需要有一个嵌入式 .net 迷你运行时。你可以说,比如 Win 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, 它是 Cosmos 的一部分),内容为 输入文件(通常是外壳)和 Cosmos 库和编译 生成的 IL 到 x86 代码。 IL2CPU有一个 跨平台层,我们计划 支持其他处理器和 平台,包括 x64。 IL2CPU也 支持某些扩展方法 允许 C# 代码交互 直接与 CPU、寄存器和 内核中的端口。 IL2CPU包含 一些内联汇编器,但也有 没有需要链接的 ASM 文件 在。

    目前IL2CPU首先输出原始asm 文件(使用 IL cmets),然后 通过 nasm 处理它们(一个免费的 汇编程序)。稍后我们计划发射 直接转二进制。

    【讨论】:

      【解决方案4】:

      有趣的是创建一个“编译器”,将 .Net Micro Framework 程序集转换为原生嵌入式程序集语言。但是,它必须将内存管理调用注入方法中。或者,您可以使用伪方法,例如 System.Memory.Delete(),而不是尝试“猜测”它们的去向,并将其用作插入删除的标志。

      尝试使用 Phoenix 框架将是一件有趣的事情;我可能会在下个假期尝试一下。

      【讨论】:

        【解决方案5】:

        【讨论】:

          【解决方案6】:

          我很难相信 c# 永远是嵌入式系统的最佳选择,至少就目前可用的处理能力而言。 C# 通常针对 MSIL/CIL 而不是合适的机器语言。从 c# 获取特定处理器的机器代码是可行的,但不太可能非常有效。最好的选择:坚持使用更接近硬件的语言(c、c++、非托管),尽管缺乏内置的内存管理(尽管它是不确定的)并且可用库的范围有限。在嵌入式中,精简和透明是最好的选择,恕我直言。

          【讨论】:

          • 你不是升c吗? ...仅仅因为它是托管代码?
          【解决方案7】:

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

          【讨论】:

          • 如果您不在堆中分配内存,或者至少只在启动/预热期间这样做,您几乎可以消除垃圾收集的影响。 Unity 正在将游戏引擎中的 c++ 替换为他们称为高性能 c# 的 c# 版本,这基本上是不允许在堆上分配的 c# 版本。
          【解决方案8】:

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

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

          【讨论】:

            【解决方案9】:

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

            目前 .NET Micro 的内存占用为 300Kb,仅在 ARM 和 Blackfin 上受支持,因此对于大量嵌入式应用程序的使用而言,它不适合或过于昂贵。此外,虽然它支持多线程,但它不具备实时能力,因此不适用于另一大块应用程序。

            几年前,微软在英国嵌入式系统展上举办了一次免费会议,推出了当时新的 .NET Micro;在问答环节中,当我问到关于实时支持的问题时,得到的答案是“不,它不是实时的。”,观众听到了一声呻吟,一个数字得到了起身离开,浪费了他们的时间。

            【讨论】:

            • 嵌入式系统并不意味着它已经在 RTOS 上实时运行。有无数基于 Linux 和 Android 的嵌入式系统,但没有一个是实时的。
            • @AbhishekDhar 当然,我没有说其他 - 只是它排除了大部分嵌入式应用程序,就像 Linux 不适合大量嵌入式应用程序一样,大小,复杂性和缺乏实时的。在撰写本文时(2011 年),Linux 上的 C# 在任何情况下都几乎不可行。我的观点是,对于专门为嵌入式设计的操作系统和框架,开发人员期望实时功能,而.NET Micro 没有提供。重点只是在问题的上下文中考虑,并与不需要主机支持的 ​​C 和 C++ 进行比较。
            • @AbhishekDhar 此外,当你只有一把锤子时,一切看起来都像钉子。 Linux 是一把大锤,在嵌入式系统中使用 in 的原因通常与技术适当性无关。
            【解决方案10】:

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

            【讨论】:

              【解决方案11】:

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2011-06-22
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2018-04-06
                • 1970-01-01
                相关资源
                最近更新 更多