嵌入式平台开发(!C)

时间:2009-02-27 22:33:04

标签: embedded development-environment

我很想知道C的替代品在嵌入式开发者世界中的受欢迎程度,例如:阿达...

我只使用过C(带有一点汇编程序),但是我的目标资源非常有限。在这个空间还有什么其他的东西吗?什么赢得了机顶盒中的商品?

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

  • 编译器支持目标
  • 跟踪\静态分析工具
  • 其它...

感谢。

19 个答案:

答案 0 :(得分:5)

Forth非常适合嵌入式开发。

此外,虽然Smalltalk可能在嵌入式社区中不受欢迎,但embedded development在Smalltalk社区中肯定很受欢迎。

答案 1 :(得分:5)

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

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

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

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

答案 2 :(得分:2)

或许不是你想要的C大步,但C ++在嵌入式项目中也很受欢迎。

答案 3 :(得分:1)

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

Basic仍然很常见,就像汇编一样。

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

一些工程师甚至将Lua和其他口译员放在他们的微型计算机上,这样他们的客户就可以扩展功能。

但C仍占主导地位。

- 亚当

答案 4 :(得分:1)

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

答案 5 :(得分:1)

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

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

我们现在使用C

答案 6 :(得分:1)

如果您在智能卡领域工作,则可以使用Java Card。是的,Java,8位微型。实际上,这很有趣。我开始在Eclipse中开发,在PC模拟器上进行测试(& debug!),并且可以确信它在卡上运行相同。对于嵌入式应用来说,Java是一种可怕的语言,真是太可惜了:)

答案 7 :(得分:0)

很多家庭酿酒用户和需要廉价解决方案的小公司都发现Tiny Tiger和Basic STAMP(使用BASIC)满足了他们的需求。

答案 8 :(得分:0)

考虑到我手机上有多少次Java内存异常(大部分时间我都做了很多有趣的事情),我就像蝙蝠一样从热门的地方逃离Java。

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

答案 9 :(得分:0)

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

答案 10 :(得分:0)

请参阅此相关问题:

What languages are used for real-time systems programming

在回答你的“为什么”问题时,从政府/军队收购的角度来看,人们认为Java(语言,平台等)是现在的通用语言,而且规模经济语言将降低购置和维护成本。人们也希望能够有效地训练有能力的Java程序员成为一名合理的Java /嵌入式程序员,而不是学习新语言。在我看来,这个理由是可疑的,但它确实回答了“为什么”的问题。

答案 11 :(得分:0)

我在一台设备上运行了一些令人难以置信的旧版本的python(1.4或者其他东西)。没有办法调试它(除了打印调试消息),所以当你的代码遇到异常时,一切都会停止,你抓了一个小时。无论何时进行更改并升级其运行的代码,都需要大约10分钟来解释和编译它。

毋庸置疑,我们取消了这一点,并将微控制器替换为运行C的微控制器。

答案 12 :(得分:0)

Pascal,Modula2也能正常工作。基本上它们几乎等同于C,除了无法做alloca(虽然有些将它作为扩展)。

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

尽管我最喜欢Wirthian语言,但我只是简单地使用C语言,并且因为工具链更好而生活在后果中。

过去曾有过一些例子(Pascals,甚至是紧密编译的Basics),但C主要是常态。我从来不明白为什么。

答案 13 :(得分:0)

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

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

答案 14 :(得分:0)

有一个group of folks致力于使Lua成为嵌入式工作的可行选择。他们主要针对具有256K FLASH和64K RAM或更好的32位ARM,并且对他们迄今为止的工作感到满意。

它们部分受到经典BASIC-Stamp的启发,这是一个BASIC解释器,运行在中等强大的PIC中,程序本身存储在串行EEPROM器件中。

在工作中,我仍在维护客户的嵌入式系统,该系统是在Zilog Z180 CPU中运行的BASIC编译版本中编写的。 1980年代的技术,大部分系统仍然使用插槽中的24-bin DIP封装。编译器在运行于Z80模拟器的CP / M-80下运行,该模拟器本身在Windows内置的MS-DOS模拟器中运行。除了剪切惊奇,任何生产都可以通过这种方式完成(并且您仍然可以购买27C256 UV可擦除EPROMS,并且我将近20年的Data / IO PROM程序员仍然可以工作)我真的希望客户能够负担得起一种新的硬件设计,因此可以用可维护的语言重写系统。

答案 15 :(得分:0)

JAL

答案 16 :(得分:0)

8051有一个Pascal编译器

答案 17 :(得分:0)

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

答案 18 :(得分:0)

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

此外,PICBasic现在已经受到PIC'ers的欢迎。