微控制器编程需要学习哪种语言?

时间:2009-12-21 04:24:47

标签: c embedded microcontroller

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

P.S。:我希望答案不是汇编语言。

10 个答案:

答案 0 :(得分:38)

根据我的经验,你绝对必须知道C,汇编语言也有帮助。

答案 1 :(得分:13)

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

随着项目的扩展,您将遇到C ++(或受限制的子集)。

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

答案 2 :(得分:12)

你听到了什么'对比'的观点?在某种程度上,它将取决于微控制器和应用程序。但是C几乎适用于所有架构(我不愿意说所有,但可能是你将遇到的所有内容);所以在这一点上,学习C会给你最大的报道。

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

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

有很多myths about C++ in embedded systems;虽然语言大于C并且具有可能损害系统性能或容量的结构,但您只需为使用C ++的内容付费。但是当然如果你使用的只是C子集,那么C在任何情况下都是足够的。

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

我建议它可能取决于微控制器的原因之一是,例如它是一个带有几Mb外部SDRAM的ARM9,至少说4Mb Flash(通常也是外部 - 内存占用很多然后你可以运行一个“重量级”操作系统,如Linux,WinCE或Symbian,甚至是大型RTOS,如QNX或VxWorks。然后你选择的语言(一旦你的操作系统工作),将受到操作系统的影响,但对于实时应用程序,C和C ++仍然占主导地位(或者通常是军事,航空电子设备和一些传输应用程序中的Ada)。 / p>

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

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

  

最常用的语言是什么   微控制器行业   编程?

然后确定的答案是C;由于我给出的原因。对于任何可能选择对这一断言提出异议的人here are the statistics(注意2004年后文中解释的不同调查方法)。然而,为了增加备选方案的集合,我曾经在Forth上花了两年时间在嵌入式系统上进行编程,我知道人们仍在使用它,但它有点利基。

答案 3 :(得分:11)

我已成功使用C和C ++,但在几乎所有的微控制器项目中,您都需要熟悉目标微型的汇编语言。如果仅用于调试低级硬件问题,汇编将是必不可少的,即使它是粗略熟悉的。

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

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

答案 4 :(得分:9)

关于汇编程序:

  • 尽可能多地使用C / C ++而不是汇编程序。通过在C或C ++中尽可能多地编写,您将获得更高的工作效率。这包括能够在PC上运行您的一些代码,这有助于开发更高级别的代码(应用程序层功能)。
  • 在许多嵌入式平台上,让项目中的某个人对一个小型汇编程序感到满意是件好事。主要是为了获得启动代码和中断,以及可能用于中断启用/禁用的功能。这与完全了解它并不相同 - 只需要基本的工作知识就足够了。
  • 如果您要将RTOS(例如µC/OS-II)移植到新平台,那么您必须更多地了解您的汇编程序。但希望您的RTOS已经很好地支持您的平台。
  • 如果您要提高CPU性能限制,您可能需要更彻底地了解汇编程序。但希望你没有太多地推动性能限制,因为这可能会拖累项目的可行性。
  • 如果你正在为DSP写作,你可能需要相当彻底地了解DSP的汇编程序。

答案 5 :(得分:3)

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

许多微控制器如此古怪,以至于它们有效地需要自己的非标准C语言,例如8051的SDCC,即使对于与硬件功能无关的代码,它也会阻止使用标准工具(例如代码库或静态分析工具) 。口译员经常被用来隐藏这种低级别的怪癖。

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

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

答案 6 :(得分:2)

你需要了解汇编语言编程。你需要具备C语言和C ++方面的知识。所以要努力学习微控制器编程的专业知识。

答案 7 :(得分:2)

不要忘记VHDL。

答案 8 :(得分:2)

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

一些微控制器的汇编程序不太理想,ARM正在接管这个市场。对于更少的资金,更少的功耗和更少的占用空间,您可以拥有一个拥有更多资源的32位处理器。这才有意义。很多,如果你的代码仍然没有移植,但你可以用C语言。

底线,汇编程序和C.如果他们宣传BASIC或Java或类似的东西,请在黑名单上标记该公司并继续。在那里,做到了,有伤疤来证明它。

答案 9 :(得分:0)

第一次集会。在C之后。

我认为谁知道集会和C比谁只知道C更好。