14

我正在进入微控制器编程并且一直在听到不同的观点。业界最常使用哪种语言进行微控制器编程?这是你在自己的工作中使用的吗?如果不是,为什么不呢?

PS:我希望答案不是汇编语言。

4

10 回答 10

38

根据我的经验,您绝对必须了解 C,而汇编语言也有帮助。

于 2009-12-21T04:28:20.730 回答
13

除非您正在处理非常简单的微控制器(如 RS08 系列),否则 C 是目前首选的语言。了解 C,了解 volatile 和 const 等功能。还要了解架构——什么是高效的,什么不是,CPU 能做什么。这些将与“桌面”环境大不相同。学会爱上 stdint.h。

随着项目规模扩大,您将遇到 C++(或受限子集)。

但是,您需要了解 CPU 以及如何将基本程序集作为调试工具来阅读。如果没有这些技能,您将无法成为出色的嵌入式开发人员。

于 2009-12-21T05:25:19.320 回答
13

你听过哪些“对比鲜明”的观点?在某种程度上,它将取决于微控制器和应用程序。然而,几乎所有架构都可以使用 C(我不敢说全部,但可能是您将遇到的所有架构);仅就这一点而言,学习 C 将为您提供最大的覆盖范围。

对于所有体系结构,汇编器和 C 编译器的可用性几乎是给定的。对于 32 位和大多数 16 位架构,C++ 也将可用。我遇到的值得注意的例外是 Microchip 的 PIC24/dsPIC 部件,Microchip 自己的基于 GNU 的编译器不支持 C++(尽管第 3 方编译器可能会这样做)。

虽然有用于 8 位微控制器的 C++ 编译器,但 C++ 在此类平台上并不普遍,而且编译器通常是完整语言的子集。对于通常使用 8 位的应用程序的类型(或更具体地说是大小),C++ 可能有用,但在更大的应用程序上并不适用,因此 C 通常就足够了。

嵌入式系统中有很多关于 C++ 的神话;虽然该语言比 C 更大,并且具有可能损害系统性能或容量的结构,但您只需为使用 C++ 的内容付费。但是当然,如​​果您使用的只是 C 子集,那么 C 在任何情况下都足够了。

C(和 C++)的关键在于它是一种系统级语言。它将在您的微处理器上运行,无需额外支持,只需非常简单的运行时启动即可初始化处理器(可能还有外部 SDRAM)、初始化静态数据、建立堆栈,以及在 C++ 的情况下调用静态构造函数。这就是为什么它与目标特定的汇编程序一起用于构建操作系统和内核 - 它不需要操作系统或内核本身即可运行。

我建议它可能取决于微控制器的原因之一是,例如,如果它是带有几 Mb 外部 SDRAM 的 ARM9,并且至少说 4Mb 闪存(通常也是外部的 - 存储器占用大量芯片空间) ,然后您可以在其上运行“重量级”操作系统,例如 Linux、WinCE 或 Symbian,甚至是大型 RTOS,例如 QNX 或 VxWorks。然后你选择的语言(一旦你让操作系统工作)会受到操作系统的影响,尽管对于实时应用程序,C 和 C++ 仍然占主导地位,(或者在军事、航空电子和一些运输应用程序中通常是 Ada)。

对于中型应用程序 - 几百 KB 的代码和数据空间 - 在 .NET-Micro 平台上运行 C# 是可能的;然而,几年前我在英国的嵌入式系统展上参加了这个演示,就在它刚刚发布的时候。当我问“但它是实时的”这个问题,并被告知“不,你需要 WinCE”时,许多观众都倒吸一口凉气,有些人不再浪费时间离开了演示文稿那里然后(包括我)。

所以我仍然对你听到的“对比”意见感兴趣;因为虽然可以使用其他语言;你的问题的答案:

业界最常使用哪种语言进行微控制器编程?

那么最终答案是C;因为我已经给出的原因。对于任何可能选择对这一断言提出质疑的人,这里有统计数据(请注意文中解释的 2004 年之后的不同调查方法)。然而,只是为了增加替代品的集合,我曾经在Forth上花了两年时间在嵌入式系统上编程,我知道有人仍在使用它,但它有点小众。

于 2009-12-22T10:07:24.623 回答
11

我已经成功地使用了 C 和 C++,但是在几乎任何微控制器项目中,您都需要熟悉目标微控制器的汇编语言。如果只是为了调试低级硬件问题,即使是粗略的熟悉,组装也是必不可少的。

我认为从桌面环境迁移到微型环境对我来说最困难的事情是几乎所有东西都需要静态分配。除非它有外部 RAM,否则你不会经常在 micro 中使用 malloc/new。

我注意到您还用 FPGA 和 Verilog 标记了您的问题,看看Altium,他们有一个 C 到硬件编译器,可以很好地与他们的集成环境一起工作。

于 2009-12-21T04:35:42.863 回答
9

关于汇编程序:

  • 尽可能选择 C/C++ 而不是汇编程序。通过尽可能多地使用 C 或 C++ 编写,您将获得更高的生产力。这包括能够在 PC 上运行您的一些代码,这有助于开发更高级别的代码(应用层功能)。
  • 在许多嵌入式平台上,最好让项目中有人熟悉一点汇编程序。主要是为了让启动代码和中断顺利进行,也许还有中断启用/禁用的功能。这与真正彻底了解它是不一样的 - 只需基本的工作知识就足够了。
  • 如果您要将RTOS(例如µC/OS-II)移植到新平台,那么您必须更了解您的汇编程序。但希望您的 RTOS 已经很好地支持您的平台。
  • 如果您要挑战 CPU 性能限制,您可能需要更彻底地了解汇编程序。但希望您不会过多地推动性能限制,因为这可能会拖累项目的可行性。
  • 如果您正在为DSP编写代码,您可能需要相当彻底地了解 DSP 的汇编程序。
于 2009-12-21T05:57:49.050 回答
3

微控制器最初仅使用汇编语言进行编程,但现在各种高级编程语言也普遍用于针对微控制器。这些语言要么是专门为此目的而设计的,要么是通用语言(例如 C 编程语言)的版本。通用语言的编译器通常会有一些限制以及增强功能,以更好地支持微控制器的独特特性。一些微控制器具有帮助开发某些类型的应用程序的环境。微控制器供应商通常会免费提供工具,以便更轻松地采用他们的硬件。

许多微控制器非常古怪,以至于它们实际上需要自己的非标准 C 方言,例如用于 8051 的 SDCC,即使是与硬件功能无关的代码,也无法使用标准工具(例如代码库或静态分析工具)。解释器经常被用来隐藏这种低级的怪癖。

解释器固件也可用于某些微控制器。例如,早期微控制器 Intel 8052[4] 上的 BASIC;Zilog Z8[5] 以及一些现代设备上的 BASIC 和 FORTH。通常,这些解释器支持交互式编程。

一些微控制器可以使用模拟器,例如在 Microchip 的 MPLAB 环境中。这些允许开发人员分析微控制器及其程序在使用实际部件时的行为。模拟器将显示内部处理器状态以及输出状态,并允许生成输入信号。虽然一方面大多数模拟器将无法模拟系统中的许多其他硬件,但它们可以运行在物理实现中可能难以随意重现的条件,并且可以是调试和分析的最快方式问题。

于 2009-12-21T08:08:26.020 回答
2

您需要了解汇编语言编程。您需要对 C 和 C++ 有很好的了解。所以在这些事情上努力工作以更好地了解微控制器编程。

于 2009-12-21T04:35:18.647 回答
2

不要忘记VHDL。

于 2009-12-21T04:45:06.640 回答
2

对于微控制器而言,汇编程序出现在 C 之前。在 ARM 开始进入这个市场之前,编译器非常糟糕,内存和 ROM 非常小。没有足够的资源或通用性来移植您的代码,因此为了可移植性而用 C 语言编写是没有意义的。

一些微控制器的汇编器不太理想,而 ARM 正在占领这个市场。以更少的钱、更少的功率和更少的空间,您可以拥有一个拥有更多资源的 32 位处理器。这很有意义。如果您的代码仍然无法移植,但您可能可以使用 C 来解决问题。

底线,汇编程序和 C。如果他们宣传 BASIC 或 Java 或类似的东西,请将该公司标记在您的黑名单上并继续前进。去过那里,做过,有伤痕来证明。

于 2010-01-07T03:03:31.960 回答
0

第一次组装。在 C 之后。

我认为知道汇编和 C 的人比只知道 C 的人要好。

于 2010-07-07T19:23:23.557 回答