0

请张贴在为嵌入式系统设计或编码时应牢记的要点。

我没有提供编译器或平台详细信息,因为我想要通用信息。但是,也欢迎任何有关基于 Linux 的操作系统的具体信息。

4

4 回答 4

2

取决于你想得到多低。我目前正在为财务打印机编码,没有操作系统,主要规则是没有动态内存分配。有趣的是,我仍然说服工作人员编写完全现代的 C++ ;)。

实际上,我们决定了一些规则:

  • 没有动态分配
  • 因此,没有 STL
  • 没有异常处理(明显的原因)
于 2010-01-19T16:12:11.300 回答
1

没有一般的答案,只有特定于语言/平台的答案......但是

内存占用小...

  1. 不要使用 Java、C#/mono、PHP、Perl、Python 或任何带有垃圾收集的东西
  2. 尽可能靠近金属,使用 C
  3. 如果您使用动态分配,请进行大量分析以查看内存分配的位置
  4. 确保通过分配合理的块和堆大小来防止堆碎片
  5. 避免使用递归函数,尤其是那些使用 malloc() 的函数。更好地分配一个块并传递一个指针。
  6. 使用免费();)
  7. 确保您的类型不大于要求
  8. 打开编译器优化

还会有更多。

于 2010-01-19T16:14:02.087 回答
1

对于真正的低占用空间,请考虑直接进行组装。

我们都知道 C 或 C++ 中的 Hello World 是 20kb+(因为所有链接的默认库)。在组装中,这个开销已经消失了。正如评论中指出的那样,可以大大减少标准库。然而,事实仍然是,在编写汇编代码时可以获得的代码密度远高于编译器从高级语言生成的代码密度。因此,对于每个字节都很重要的代码,请使用汇编。

同样,当在处理器能力较差的设备上编程时,用汇编语言编程可能是使程序足够快以使其足够实时以(例如)控制机器的唯一方法

于 2010-01-19T16:14:49.090 回答
0

当面临这样的限制时,建议预先分配内存以保证系统在负载下工作。诸如“对象池”之类的设计模式可用于在系统内共享资源。

C语言支持严格的资源(即内存和计算周期)控制。应该强烈考虑。

避免递归,因为它很容易被滥用并且可能导致堆栈溢出情况。

于 2010-01-19T16:16:25.830 回答