16

我很想知道 C 的替代品在嵌入式开发人员世界中有多受欢迎,例如 Ada ...

我只使用过 C(带有一点汇编程序),但是我的目标资源非常有限。在这个空间的其他地方是否有其他地方可以移动到其他地方?什么是机顶盒中的佼佼者?

如果!C 的根本原因是什么?

  • 编译器对目标的支持
  • Trace\静态分析工具
  • 其他...

谢谢。

4

19 回答 19

6

Forth在嵌入式开发中非常流行。

此外,虽然Smalltalk在嵌入式社区中可能不流行,但嵌入式开发在 Smalltalk 社区中肯定很流行。

于 2009-02-28T01:12:19.207 回答
5

当您说“嵌入式开发”时,请记住您必须考虑项目的规模。

在对微控制器规模或 ASIC 固件进行编程时,您往往会看到 C 和汇编占主导地位。嵌入式开发人员倾向于“专门化”这些语言,因为它们的编译器几乎可用于每个嵌入式目标平台。例如,如果您的项目从具有 PowerPC 内核的芯片迁移到具有 ARM 内核的芯片,您可以相当确信您的 C 代码不会过于难以移植。一些芯片确实有可用于其他语言的编译器,但在生成的二进制文件的效率方面,它们通常与 C 编译器不匹配。由于嵌入式系统通常资源不足,系统设计人员希望使他们的代码尽可能高效(这也是您看到大量汇编语言代码的原因之一)。我见过可用于 C++、Pascal、Basic 等语言的开发工具,但它们通常是小众工具,还不够成熟,无法与可用的 C 编译器的效率相匹配。这些语言的调试工具也往往比 C/汇编语言更难找到。

您还提到了机顶盒。这种规模的嵌入式系统可以提供与 7 到 8 年前台式计算机相当的功能。它们可用的 RAM、存储空间和处理能力使它们能够运行功能齐全的操作系统和高级语言的解释器。在这些更强大的系统上,您仍然会看到 C 和汇编语言被使用(用于驱动程序代码,如果没有别的),但其他语言(如 Java、Lua、Tcl、Ruby 等)正变得越来越普遍。只要平台有足够的资源来处理语言解释器的开销,使用解释语言就可以更容易地将代码从一个平台移植到另一个平台。任何直接与硬件(驱动程序)接口的低级代码仍然通常使用汇编或 C,因为高级语言不' t总是有能力做这种事情。在嵌入式操作系统之上作为应用程序运行的任何东西通常都可以在模拟器或虚拟机中进行开发和测试,因此您会看到很多代码是用开发人员碰巧熟悉的任何语言开发的。

TLDR 版本: C 之所以流行,是因为它是一种几乎所有开发人员都熟悉的通用语言。组装很受欢迎,因为它允许以其他方式困难或不可能的方式进行低级硬件访问。Java 等解释/脚本语言正变得越来越流行,但是这些语言的解释器对资源的要求可能对于某些嵌入式系统来说过于庞大,无法处理。C 和汇编语言的开发/调试工具的质量和多样性也使这些选项具有吸引力。

于 2009-07-31T20:35:58.107 回答
3

也许不是您正在寻找的 C 的一大步,但 C++ 在嵌入式项目中也相当受欢迎。

于 2009-03-01T00:44:51.777 回答
1

我自己没用过,但是Bascom对于 AVR 微控制器来说非常流行。它是一个基本 IDE,可让您非常轻松地与外围设备进行交互。我遇到了成功使用它的硬件人员。

于 2009-02-27T22:54:00.447 回答
1

是的。Java 变得越来越流行 - 许多处理器添加了主要与 Java 和类似语言 (.net) 相关的指令。此外,uclinux 在微控制器上运行,因此对于一些较大的微控制器,您几乎可以使用任何语言。

基本仍然很常见,组装也是如此。

你会在某些政府项目中看到 Ada。

一些工程师甚至将 Lua 和其他解释器放在他们的微控制器上,以便他们的客户可以扩展功能。

但是C仍然占主导地位。

-亚当

于 2009-02-28T00:15:13.667 回答
1

在 90 年代初期,我使用 Intel PLM51 和 DCX51 操作系统在 8051 上进行了大量嵌入式开发。

PLM 是一种非常简单的语言,但功能非常强大

我们现在使用 C

于 2009-03-05T22:53:30.990 回答
1

如果您在智能卡领域工作,您可以使用Java Card。是的,Java,在 8 位微控制器上。其实挺好玩的 我可以在 Eclipse 中进行开发,在 PC 模拟器上进行测试(和调试!),并且可以确信它会在卡上运行相同的程序。可惜Java对于嵌入式应用程序来说是一种糟糕的语言:)

于 2009-05-12T22:08:13.030 回答
0

我已经非常广泛地使用了EC++嵌入式 C++)。

此外,PICBasic已经在PIC'ers中流行了很久。

于 2009-03-03T22:36:53.277 回答
0

由于客户的要求,我在军用航空电子设备的嵌入式项目中使用了 Ada。有很多用于嵌入式开发的 Ada 工具,但其中大部分都非常昂贵。就个人而言,我只会使用C。

于 2009-03-05T11:00:19.893 回答
0

8051有一个Pascal编译器

于 2009-03-05T22:21:29.180 回答
0

日航

于 2009-03-13T20:53:36.610 回答
0

一群人致力于使 Lua 成为嵌入式工作的可行选择。他们主要针对具有 256K 闪存和 64K RAM 或更高的 32 位 ARM,并且似乎对他们目前的工作感到满意。

它们的部分灵感来自经典的BASIC-Stamp,这是一个在中等强大的 PIC 中运行的 BASIC 解释器,程序本身存储在串行 EEPROM 设备中。

在工作中,我仍在维护客户的嵌入式系统,该系统是用编译的 BASIC 风格编写的,在 Zilog Z180 CPU 中运行。1980 年代的技术无处不在,大部分系统仍由 24 位 DIP 封装在插槽中构建而成。编译器在 Z80 模拟器中运行的 CP/M-80 下运行,该模拟器本身在 Windows 内置的 MS-DOS 模拟器中运行。除了惊讶于任何有生产力的事情都可以通过这种方式完成(而且你仍然可以购买 27C256 UV 可擦除 EPROMS,而且我将近 20 年的数据/IO PROM 编程器仍然可以工作)之外,我真的希望客户能够负担得起搬到新的硬件设计,以便系统可以用可维护的语言重写。

于 2009-03-14T02:34:13.157 回答
0

取决于微控制器,它们中的许多都有 C,但编译器非常糟糕,汇编程序通常很简单,性能最好,效率最高等。像 msp、avr 和 arm 这样的编译器对 C 编译器和我想要的编译器都有好处使用C(取决于问题)。

我会坚持使用 C 或汇编程序,您使用其他任何东西都在浪费内存、性能和资源。

于 2009-03-14T02:54:56.227 回答
0

Pascal,Modula2 也可以正常工作。从本质上讲,它们几乎等同于 C,除了无法执行 alloca(尽管有些将其作为扩展)。

但核心问题将是任何 !C 编译器的问题:您更喜欢什么,更好的编译器/工具链或偏好的语言。

尽管我最喜欢 Wirthian 语言,但我只是使用 C,并且忍受后果,仅仅是因为工具链更好。

过去有过示例(Pascals,甚至是紧密编译的 Basics),但 C 语言主要是规范。我一直不明白为什么。

于 2009-05-08T13:31:57.363 回答
0

我在一个设备上工作,该设备运行了一些非常旧的 python 版本(1.4 或其他版本)。没有办法调试它(除了打印调试消息),所以当你的代码遇到异常时,一切都会停止,你挠头一个小时。每当您对正在运行的代码进行更改和升级时,都需要大约 10 分钟来解释和编译它。

不用说,我们放弃了它并用运行 C 的微控制器替换了微控制器。

于 2009-05-09T15:34:00.440 回答
0

请参阅此相关问题:

什么语言用于实时系统编程

在回答您的“为什么”问题时,从政府/军方采购的角度来看,有一种看法认为 Java(语言、平台等)是当今的通用语言,并且该语言的规模经济将减少购置和维护成本。还有一个希望是,与要求他们学习一门新语言相比,可以有效地训练一个称职的 Java 程序员成为一个合理的 RT/嵌入式 Java 程序员。在我看来,这个理由是可疑的,但它确实回答了“为什么”的问题。

于 2009-05-12T22:16:15.323 回答
0

如果您将 iPhone 作为嵌入式平台包括在内,那么 Objective-C

于 2009-07-31T20:48:08.647 回答
0

考虑到我有多少次在我的手机上遇到 Java 内存不足异常(大多数时候我会做一些非常有趣的事情),我会像蝙蝠一样逃离 Java。

我听说 Erlang 是为手机设计的。我认为 Lisp 是一个很好的远程设备支持架构——如果设备可以处理运行时。

于 2009-07-31T21:03:05.760 回答
0

许多需要廉价解决方案的自制用户和小公司发现 Tiny Tiger 和 Basic STAMP(使用 BASIC)可以满足他们的需求。

于 2010-06-15T19:45:40.610 回答