我有20多年的嵌入式系统,主要是8和16微米。对您问题的简短回答与其他任何软件开发都一样-不要优化,直到您知道自己需要,然后再优化,直到您知道自己需要优化的东西。编写代码,使其首先可靠,易读且可维护。在嵌入式系统中,过早的优化同样是一个问题,如果不是更多的话
当您在“不浪费任何资源”的情况下进行编程时,您是否认为您的时间是一种资源?如果没有,那是谁在为您付出时间;如果没有人,您是否有更好的办法来做。一旦选择,任何嵌入式系统设计人员必须要做的是硬件成本与工程时间成本。如果您要出货100个单位,使用更大的微型产品,则为100,000个单位,每单位节省1.00美元与1人年的软件开发相同(忽略上市时间,机会成本等),如果您以100万个单位开始,因为对资源的使用着迷而获得投资回报,但要小心,因为许多嵌入式项目从未设计出100万个大关,因为他们打算出售100万个(初期投资高,生产成本低),然后倒闭。
就是说,(小型)嵌入式系统需要考虑和注意的事情,因为它们会以意想不到的方式使它停止工作,而不仅仅是使其运行缓慢。
a)堆栈-您通常只有很小的堆栈大小,并且堆栈框架的大小通常很有限。您必须时刻了解堆栈利用率。请注意,堆栈问题会导致一些最隐蔽的缺陷。
b)堆-同样,堆大小较小,因此请注意不要分配的内存。碎片成为一个问题。有了这两个,您需要知道用尽时要做什么-由于OS提供分页,因此在大型系统上不会发生这种情况。即,当malloc返回NULL时,您是否检查它以及做什么。每个锦葵都需要检查和处理程序,代码膨胀吗?作为指导-如果有其他选择,请不要使用它。由于这些原因,大多数小型系统不使用动态内存。
c)硬件中断-您需要知道如何安全,及时地处理这些中断。您还需要知道如何制作安全的重入代码。例如,C标准库通常不能重入,因此不应在中断处理程序中使用。
d)组装-几乎总是过早的优化。为了达到C不能做的事情,最多只需要少量(内联)。作为练习,编写一个手工组装的小方法(从头开始)。在C中执行相同的操作。测量性能。我敢打赌C会更快,我知道它将更加可读,可维护和可扩展。现在,在练习的第二部分-用汇编和C语言编写一个有用的程序。
作为另一个练习,请看一下Linux内核是多少汇编程序,请阅读下面有关linux内核的段落。
值得知道如何去做,甚至可能精通一两个常见的微型语言。
e)早在70年代初(40年前),“ register unsigned int variable_name”,“ register”一直是向编译器的提示,而不是指令,这一直很有意义。在2012年,这是浪费键击的,因为编译器非常智能,而micros指令集却如此复杂。
回到您的linux注释-这里的问题是,我们谈论的不是仅仅100万个单位,我们谈论的是数以亿计的生命,它的寿命是永远的。为了使它尽可能地人性化而付出的工程时间和成本是值得的。尽管这是最佳工程实践的一个很好的例子,但对于大多数嵌入式系统开发人员来说,像linux内核所要求的那样脚是商业自杀。