删繁就简-单片机入门到精通
MCU EDU 第 134 页 作者:Dai ShangJu
第四章 单片机 C 语言
终于结束了晦涩枯燥的第三章,我自己也长吁了一口气,现在我真的是非常同情那些教专业基
础课或者工程数学的老师,这里真诚的说一声:“辛苦你们了”。
这一章要轻松不少,相信就算是刚走出校门的雏鸟,多少都有一定的 C 语言基础,大学好象都
要过一个计算机等级考试,所以 C 语言自然是逃不了。你不要指望我给你讲述 C 语言原理和指令这
类基础知识,我更不会给你讲述 C ++那些面对对象编程的高级编程方法,这一章讲述的内容都是 C
语言在单片机上应用会遇到的一些有意思的现象,让你知道 C 在单片机上是怎么工作的。
当然也会告诉你一些 C 的经验技巧,这些对提升你的单片机程序能力还是有一定作用的。
4.1. 单片机 C 语言
早期单片机编程是没有 C 语言支持的,都是汇编甚至是二进制的机器码,随着电脑技术的突飞
猛进,单片机编程不再安于汇编的一亩三分地,也向着 C 语言的方向进发。理论上讲单片机实现 C
语言编程不存在丝毫问题,毕竟和电脑是同根生,于是一批专业或非专业、有着利益目的或无利益
目的的工程师开始了这方面的努力。
和电脑最大的不同是单片机种类繁多,不象电脑只有那么几种芯片,而且电脑 CPU 的发展遵循
着一定的规则,不同 CPU 要求做到指令兼容,单片机做这样的要求显然不现实,厂商不可能接受都
遵循制定标准设定 MCU 的要求。虽然单片机种类繁多,但大部分单片机还是会采用通用构架进行设
计,毕竟遵循一定标准可以不用厂商自己去完成指令系统、编译工具等繁琐工作,所以市面上流行
的单片机内核其实并不多,不少八位的单片机都采用 51 内核,高端的 MCU 内核更是集中在
ARM/MIPS…这几种当中。
厂商设计的 MCU 通常都会沿用某一种构架,也就是厂商产品目录中的 xx 系列,这样做厂商可
以节省开发成本,一套编译器可以为一个甚至多个系列的 M CU 所用,这样新设计 M CU 或编译器有问
题也可以在日后进行改进,如果弄成一种 MCU 就对应一套编译器的方式,神仙也会疯掉。厂商为了
占领更多的市场,自然就会依据市场需求针对 MCU 推出 C 的编译器,不过这种做法所退出的 C 编译
器质量局限于厂商自己技术能力,通常说这类编译器可以用,但不要期望有着很高的效率。如果是
流行面广的内核,会有另外一种方式,就是专业的软件公司针对这种内核的指令系统开发 C 编译器,
象 KEI L C 就是一例,这种软件公司在编译方面经验丰富,所以他们做出来的编译器效率方面相当
不错,只要是他们编译器支持的内核,就很容易让编译器支持。软件公司推出的 C 编译器虽然好,
但要钱,有免费的版本可限制多多,技术世界从来不缺少活雷锋,GCC 这样的组织让免费获取 C 编