第3章 单片机C语言与CVAVR编译器C语言参考
3.1 单片机C程序基本知识
本章主要学习和了解AVR单片机C语言编程的一些语法问题。单片机硬件能执行的是二进制的机器代码,这些机器代码都是由人们用汇编语言或C语言等高级语言编制的代码转换得到的。早期的单片机编程都是用汇编语言进行的,汇编语言最突出的优点是它编译成机器语言的效率高,实时性好。但它的缺点也很突出,如开发周期长、可读性差、可移植性差等。而单片机的C语言编程则很好地解决了这些问题,并推动了单片机的广泛应用和长足的发展。单片机的C语言和计算机的C语言类似,基本遵循标准的C语言语法,但一些函数的实现只是标准C语言函数的简化版本。由于单片机编程与硬件联系紧密,所以每一种单片机以及同种单片机不同的C语言编译器的语法可能稍有不同。针对AVR单片机编程的C语言编译器也有很多种,如GCC、IAR、CVAVR等,本书选用的是编译效率较高,功能比较完善的CVAVR编译器。它是HP Info Tech专门为AVR系列单片机设计的C语言编译器。这个完整的集成开发环境(IDE)允许在PC机的Windows应用程序中进行单片机C程序的编辑、编译和调试,支持位变量,对许多常用的单片机外围扩展器件提供了大量的支持和函数。此外,它还有个特别好的优点是可以自动生成一些初始化程序,对初学者来说,十分有用。
下面是一个最简单的单片机C语言程序,通过这个例子,可以学习和了解单片机编程的特点及与PC机C语言编程的区别。
#include <stdio.h> void main() { printf("Hello,world!"); while(1) { }; }
C语言程序是由函数构成的,每个程序至少包含一个函数,即main()函数,它是程序代码执行的起点。上面这段程序与在PC机学习C语言的入门程序类似,主要是向标准输出设备输出一个字符串。不同点是PC机上运行此程序时,字符串是输出到显示器上,而单片机C编译器的库函数通常把它输出到单片机的串行口。另外一个不同点是这段程序一般不能在PC机上运行,原因是程序结尾有一个无限循环结构。不管是计算机还是单片机,程序代码都是由CPU来执行的。计算机上有操作系统,某一程序运行时只是暂时取得了CPU的控制权,程序结束后要把控制权返还给操作系统。而单片机一般没有操作系统,不能任意结束程序。所以,所有的单片机应用程序通常都有一个无限循环,程序最终都要进入到这个死循环中,如上面的While(1),这样可以防止程序(CPU)无事可做或做不可预测的事情。当然,程序在这个无限循环中也不是无事可做,具体应用后面将会介绍。
与计算机C语言编程类似的一些基本语法规则,这里不再重述。下面针对CVAVR编译器,介绍相关的单片机C语言编程的语法参考。