为什么在嵌入式系统中使用低级语言或接近它(C)?如果后者不编译

Omr*_*vic 3 c embedded

我搜索过但我找不到明确的答案.如果我们在计算机中编译代码(功能强大),那么我们只是向嵌入式设备中的内存发送机器指令.如果我们使用任何类型的语言,这对我的理解没有任何区别,因为最后我们只会向嵌入式设备发送机器代码,编译这个昂贵的阶段已经由强大的机器完成了!

为什么使用C这样的语言?为什么不用Java?我们最后发送一个机器代码.

Cli*_*ord 5

答案部分在于运行时需求和平台提供的语言期望:C的运行时大小是最小的 - 它需要一个堆栈,这就是它能够开始运行代码.对于兼容的实现,需要静态数据初始化,但是您可以在没有它的情况下运行代码 - 初始化本身甚至可以用C编写,甚至堆和标准库初始化也是可选的,就像存在库一样.它不需要OS依赖,没有解释器,也没有虚拟机.

大多数其他语言需要更多的运行时支持,这通常由OS,运行时库或虚拟机提供.为了"独立"运行,这些语言需要支持"内置"并因此要大得多 - 以至于在很多情况下您可以部署具有OS和/或JVM的系统.在任何情况下.

当然,特定语言适用于嵌入式系统的其他原因包括硬件级访问,性能和确定性行为.

虽然运行时环境和/或操作系统的问题是您在小型嵌入式系统中经常看不到高级语言的主要原因,但它绝不是闻所未闻的.例如,.Net Micro Framework允许在嵌入式系统中使用C#,并且有许多嵌入式JVM实现,当然Linux发行版被广泛嵌入,使得语言选择几乎无限制..Net Micro在有限数量的处理器体系结构上运行,并且需要相当大的内存(> 256kb),并且JVM实现可能具有类似的要求.Linux将无法在低于约16Mb ROM/4Mb RAM的情况下启动.这两种方法都不适合在微秒域中具有最后期限的硬实时应用程序.

C在8,16,32和64位平台上或多或少无处不在,并且从第一天起通常可用于任何架构,而对其他语言的支持(至少在32位平台上可能不是C++)可能是变量和不完整的,或许只能在更成熟或广泛使用的平台上使用.

从开发人员的角度来看,一个重要的考虑因素是目标平台和语言的交叉编译工具的可用性.因此,开发人员选择C(或越来越多的C++)是一个良性循环,因为这是最广泛使用的工具,工具/芯片供应商提供C和C++工具链,因为这是开发人员所需要的.以库,开源代码,调试器,RTOS等形式添加第三方支持,选择一种几乎没有任何支持的语言将是一个勇敢(或愚蠢)的开发人员.这种方式不仅仅是高级语言.我曾经参与过一个以Forth编写的项目 - 一种比C语言更低级的语言 - 这是一种孤独的体验,虽然有热情的语言倡导者,但他们坦率地赞成语言传福音而非商业成功.简而言之,C已达到临界质量接受,并且难以驱逐.C++受益于与C的广泛互操作性以及类似的最小运行时要求,以及通常支持这两种语言的工具链.因此,采用C++的唯一障碍主要是开发人员惯性,并且在某种程度上可用于8位和16位平台.