在(!C)中的嵌入式平台开发

16
我很好奇在嵌入式开发领域中,除了C语言之外的替代语言有多受欢迎,比如Ada等等。我只用过C语言(还加上了一点汇编),但我的目标资源非常有限。在这个领域里是否有向其他语言的转移?在机顶盒领域中哪种语言最流行?
如果不使用C,是什么原因呢?
- 目标编译器的支持 - Trace\静态分析工具 - 其他原因
谢谢。

3
我不明白为什么会有人投反对票,更别说将其标记为冒犯了。我猜他们希望你坚持使用C :) - Ed S.
1
我不会这样反应。让他渐渐淡去就好。 - Svante
1
lol,又是一个冒犯性的标记。有些人很生气。 - Ed S.
@OV:这个网站可以被受信任的用户进行维基编辑,问题将会被编辑以提高清晰度、拼写和语法等。这是为了整体改进网站,而不是针对你个人的攻击。请不要把它当成个人问题。 - Adam Lassek
相关内容:http://stackoverflow.com/questions/3047192/alternative-languages-for-embedded-programming - David Cary
显示剩余8条评论
19个回答

6

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

Smalltalk虽然可能不受嵌入式社区欢迎,但嵌入式开发在Smalltalk社区中绝对很受欢迎。


5
当你谈到“嵌入式开发”时,请记住你必须考虑项目的规模。在微控制器或ASIC固件这样的规模上编程时,你会看到C和汇编语言主导着场景。嵌入式开发人员倾向于“专门化”这些语言,因为几乎每个嵌入式目标平台都有针对它们的编译器。如果你的项目从一个带有PowerPC内核的芯片迁移到一个带有ARM内核的芯片,你可以相当自信地认为你的C代码不会过于难以移植。一些芯片确实有其他语言的编译器可用,但通常它们的效率不如C编译器。由于嵌入式系统通常资源紧缺,系统设计师希望使他们的代码尽可能高效(也是为什么你会看到很多汇编语言代码的原因之一)。我见过针对C ++,Pascal,Basic等语言的开发工具,但它们通常是不成熟的专业工具,无法与可用的C编译器的效率相匹配。这些语言的调试工具也往往比C / 汇编可用的工具更难找到。
你还提到了机顶盒。这种规模的嵌入式系统可以具备7-8年前台式计算机的相当功率。它们可用的RAM,存储空间和处理能力使它们能够运行全功能操作系统和高级语言的解释器。在这些更强大的系统上,你仍然会看到使用C和汇编语言(至少用于驱动程序代码),但其他语言(如Java,Lua,Tcl,Ruby等)变得越来越普遍。使用解释型语言使从一个平台移植代码变得更容易,只要该平台有足够的资源来处理语言解释器的开销。任何直接与硬件接口的低级代码(驱动程序)通常仍将使用汇编或C,因为高级语言并不总是具备执行此类操作的能力。在嵌入式操作系统之上运行为应用程序的任何内容通常都可以在模拟器或虚拟机中开发和测试,因此你会看到很多代码使用开发人员熟悉的任何语言进行开发。
简而言之,C很受欢迎,因为它是一种通用语言,几乎所有开发人员都熟悉。汇编很受欢迎,因为它允许以其他方式难以或不可能实现的低级硬件访问。解释/脚本语言(如Java)变得越来越受欢迎,但这些语言的解释器的资源要求可能对某些嵌入式系统来说太大。C和汇编语言可用的开发/调试工具质量和种类也使这些选项更具吸引力。

3
也许C++并不是你所期望的跨越式进展,但在嵌入式项目中也相当受欢迎。

1
那要看情况……如果你使用C++的多态和泛型编程方面,它开始看起来不太像“标准C”了。如果你只是使用类来封装数据和方法(很好,但在C中也可以做到),那么你就处于使用C++的第一层次。 每当我看到一份简历上写着“C/C++”,我首先开始探究的是对C++知识的深度。通常它相当肤浅。 - Dan

1
如果你在智能卡领域工作,你可以使用Java Card。没错,在8位微控制器上使用Java。实际上,这有点有趣。我可以在Eclipse中开发,在PC模拟器上测试(和调试!),并且可以确信它在卡上运行的方式相同。只是很遗憾,Java对于嵌入式应用程序来说是一种糟糕的语言 :)

1

我自己没有使用过,但Bascom在AVR微控制器领域非常受欢迎。它是一个基本的IDE,可以让您非常轻松地与外设交互。我曾经遇到过一些硬件工程师成功地使用它。


1

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

Basic仍然很常见,汇编语言也是如此。

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

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

但C仍然是主导语言。

-Adam


嘲笑那些踩票的人 - 如果您认为这是错误的,请发表评论,我很乐意找出我说错了什么并加以修正或辩护! - Adam Davis
@Adam- 给了你一个赞... 必须为我们的RT/embedded Java兄弟站出来... JA - andersoj

1
在90年代初,我使用Intel PLM51和DCX51操作系统在8051上进行了大量的嵌入式开发。
PLM是一种非常简单但非常强大的语言。
现在我们使用C。

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

0

请参考以下相关问题:

用于实时系统编程的语言有哪些

针对您的“为什么”问题,从政府/军事采购的角度来看,现在认为Java(语言、平台等)是通用语言,而且该语言的规模经济将降低采购和维护成本。也有人希望可以快速有效地培训出一名合格的Java程序员成为一名合理的RT/嵌入式程序员,而不是要求他们学习一门新语言。我认为这种推理是值得怀疑的,但它确实回答了“为什么”的问题。


0

Pascal和Modula2也很好用。从本质上讲,它们与C几乎相当,除了不能使用alloca(尽管有些人将其作为扩展功能)。

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

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

过去曾有过一些例子(如Pascals或紧密编译的Basics),但C通常是规范。我从来没有理解为什么。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接