4

由于C在微控制器中常用,并且可以用C进行面向对象的编程,是否建议使用C实现面向对象的微控制器编程?优缺点都有什么?

4

6 回答 6

4

我的简短回答是否定的。微控制器在程序代码内存、执行速度和 RAM 方面受到高度限制。建议使用 C 使事情尽可能简单。C 并不是一种面向对象的语言。您应该考虑做的最多的事情是使用指针和结构,但不要尝试伪造多态性或类似的任何花哨的东西。

于 2010-12-28T15:04:10.270 回答
3

只要您不需要多态性,就可以传递结构。但是,一旦您使用多态性/虚拟函数并将函数放入这些结构中,它可能会变得非常神秘。

这也取决于您需要做什么。对于不需要 OO 的驱动程序,也许是应用程序。请记住,微控制器的 RAM 很小,任何情况下您都需要始终保持较低的 RAM 占用空间。

如果您不打算编写超过 40k 行的应用程序,纯 C 就足够了,而且没有花哨的 OO 技巧。

于 2010-12-28T15:03:47.443 回答
3

是的,这不仅是可能的,而且在我看来有时是可取的。

在小型系统上,您需要非常清楚您选择做事方式的成本。同时,“轻量级”面向对象对于组织代码可能有一些真正的优势,特别是如果您需要制作一个灵活的工具包来快速实现自定义,甚至允许运行时热插拔。C 中自己动手的轻量级对象实现(例如使用结构和函数指针完成)可能是一个很好的折衷方案。

也许最著名的例子是 linux 内核。

于 2010-12-28T17:40:02.130 回答
3

是的,但如果你的工具链支持 C++,你最好使用它。如果微控制器特别受资源限制,或者应用程序具有严格的实时要求,那么您在使用 C++ 时需要相当保守,尤其是标准库,但如果设计需要,您仍然应该使用它而不是 C和实现是面向对象的。

于 2010-12-28T18:56:07.247 回答
2

确实,您可以将 OOP 与 C 一起使用。您还可以使用 #define 更改关键字,使其看起来更像 Python。但是,我不建议这样做。

当我看到有人尝试用 C 做更复杂的 OOP 时,它总是以不可读的代码告终。当我看到 C 代码时,我希望它看起来像 C,而不是有人认为 C 中的 OOP 应该如何工作。

如果您想在微型计算机上使用 OOP,请使用 C++。许多/大多数新的微支持它。忽略那些说 micros 没有足够的内存或速度的人,因为他们不知道你的 micro 有多快,它有多少内存,以及你的性能限制是什么。写得好的 C++ 每天都会在大小和速度上击败写得不好的 C。

于 2010-12-28T16:16:49.347 回答
-2

对于我的下一个嵌入式项目,我肯定会使用C++ 的一部分,并构建一个干净的基于接口/类/静态对象的应用程序,其中包含 typedef、定义和所有其他讨厌的 c。我计划使用的东西是:

  • 。这允许我通过配置的方式用存根对象封装代码和单元测试。
  • 接口。与人们倾向于将 c 头文件用作各种类型定义、定义和东西的垃圾箱相比,给了我在每个类上明确契约的力量。此外,接口使我能够分离定义和实现,并允许使用存根对象进行单元测试。
  • 静态对象。我预见没有动态内存,所以所有对象都是静态的。可能一个应用程序类将定义和初始化所有内容,从而成为应用程序的配置。

总而言之,它将编译成与 c 一样高效的东西,但具有更好的概述。

于 2011-01-10T19:04:17.183 回答