由于现在越来越多的产品都采用单片机开发,所完成的计算和控制工作也日趋复杂,但是单片机系统是一种资源十分有限的系统,这主要表现在程序存储器资源的不足,因此在程序设计时如何使用好这些有限的资源就显得十分重要。用 C 语言编程虽然具有许多的优点,但是生成的代码相对要长,要是编程技术不好,生成的代码甚至有可能比汇编语言生成的代码长几倍, 因此对编程者来说, 应该注意到单片机 C 语言和一般意义上的标准 C 语言的区别,对程序进行适当的优化
单片机 C 语言编程不同于一般的 C 语言编程的显著的一个特点, 就是要和程序存储器资源结合起来,虽然其提供的数据据类型十分丰富,但是只有 bit 和 char 等数据类型是是机器语言直接支持的数据类型,用此类数据类型的语句所生成的代码较短;而其它的数据类型如整型、浮点型等数据要有一定的内部程序或内部函数的支,相对来说用该类数据类型的语句生成的代码要长。有些 C 语言程序表面上看起来十分的简单,但在在实际编译,生成的代码却相当长。因此我们要按照实际需要,合理地选用数据,可以大大的减少所生成的代码长度。
单片机 C 语言和标准 C 语言存在着很大差别, 在计算机上进行 C 语言程序设计时由于不必考虑程序代码的长短,只需考虑程序功能实现,但是在单片机上进行 C 语言程序设计就必须考虑系统的硬件资源。有时并不是程序的算法越简单、长度越短越好,因为有一些算法要调用一些内部的子程序和函数,生成的机器代码长度非常长。不同的算法对程序代码长度影响十分大,因此在进行程序设计时,就尽量采用程序生成代码短的算法,在不影响程序功能实现的情况下可以采用一些优化算法
在单片机 C 语言编译成机器代码时,不同的运算生成的机器代码的长度相差很大,尽可能地减少程序中对某种数据类型的运算种类,越复杂的数据类型效果越明显。在进行数据计算时,在一定的精度范围内,可以用一些近似的计算来完成一些运算,既不损失精度又能减少大量的代码。比如:用逻辑 AND/&取模比 MOD/%操作更有效。