我是固件开发人员,我通常用C或汇编开发固件.但是,我在嵌入式库中遇到了一个完全用C++实现的项目.现在我知道面向对象的语言可以在硬件层面上使用,但我想知道它们在开发嵌入式系统时不那么受欢迎.
真正的原因:因为概念的复杂性.C和程序集提供了一个简单的心智模型来跟踪系统中发生的事情.面向对象的程序需要一个更复杂的模型,这使得更难以推断正在发生的事情.
嵌入式系统往往是需要对系统中发生的事情进行非常严格控制的环境,而不是更开放的服务器和PC环境.这需要简单和透明的编程结构.C和汇编都可以在最低硬件级别上提供对系统实际运行情况的高度可见性.
一般而言,面向对象的语言,特别是C++,抽象出代码执行时系统中发生的许多细节,从而使得更难以推断系统的内部工作.
这是一个解释我的意思的例子.请考虑以下代码段:
i++;
Run Code Online (Sandbox Code Playgroud)
在C程序中看到这一点,我们可以大致准确地了解它的作用以及使用了多少CPU周期,涉及多少寄存器等等的数量级.
现在,同一行在C++程序中会做什么?这得看情况.取决于我是什么类型以及++运算符是如何重载的.明白了吗?
这些都不是说C++或面向对象是坏的.它不是.如果人们对系统中真正发生的事情的细节感兴趣,那么它确实需要一个更复杂的心智模型,就像许多嵌入式开发人员认为他们需要的那样.