购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

任务2.1 多文件编程

C语言在1972年前后诞生于美国AT&T公司的贝尔实验室。在随后的数年内,C语言与UNIX系统相辅相成、不断完善,伴随着UNIX系统一起成长。后来,C语言作为一个被广泛采用的语言,独立于UNIX系统,可以在各种机器上使用。

微控制器的编程语言通常有汇编语言、BASIC语言、C51语言等,近年来还有一些微控制器使用Python语言进行编程。汇编语言的机器代码生成效率很高,但可读性并不强,复杂一点的程序就更难读懂。在大多数情况下,C语言的机器代码生成效率和汇编语言相当,但可读性和可移植性却远超汇编语言,而且C语言还可以嵌入汇编语言来解决高时效性的代码编写问题。

目前,C语言已经成为在微控制器中使用最为广泛的计算机编程语言之一。将C语言向微控制器移植始于20世纪80年代中后期,经过多家公司(KEIL、Franklin、Archmeades、IAR、BSO/Tasking等)坚持不懈的努力,终于在90年代,微控制器C语言编程开始日趋成熟。现在,C语言已成为专业化的微控制器编程的高级语言了。过去长期困扰人们的所谓“高级语言产生的代码太长,运行速度太慢,因此不适合微控制器使用”的缺点已被克服了。

2.1.1 C程序的编译

多文件编程

一般情况下,我们在编写完一个源文件后要对其进行编译。编译器负责将一个源文件转换为可执行文件。C程序的编译如图2-1所示。首先,预处理阶段的主要作用是处理源文件中的“#include”,将两个头文件包含到程序文件中进行编译。其次,编译阶段会检查源文件中代码的语法错误,编译成功后会生成一个目标文件,如led.o。接着,编译器会将多个目标文件(以.o为后缀的文件)链接在一起,并生成可执行文件。最后,将可执行文件下载到微控制器的Flash中运行。

图2-1 C程序的编译

从C程序编译的过程可以发现,这种方法特别适合大规模的程序开发,而Cortex-M系列微控制器的开发就适用这种方法。

2.1.2 模块化编程

到目前为止,我们编写的大部分C程序都只包含一个源文件,并没有将代码分散到多个模块中。这种方式对于只有几百行的小程序来说或许是可以接受的,但对于动辄上万行的中大规模程序来说,将所有的代码都放在一个源文件中简直是一场灾难,后续的阅读和维护都将成为问题。

在C程序中,我们通常将一个.c文件称为一个模块(Module)。所谓的模块化开发,就是指一个程序包含了多个源文件(.c文件)和头文件(.h文件)。C程序代码要通过编译器对这些模块进行编译,并链接生成可执行文件。

我们知道,每个C程序都有一个且只能有一个main.c。如果要进行多文件编程,则需要建立多个.c文件。需要注意的是,一定要建立与.c文件对应的.h文件,.c文件和对应的.h文件的名称必须相同。在main.c中,当需要调用.c文件中的函数时,只要把对应的.h文件包在里面即可。多文件编程如图2-2所示。

图2-2 多文件编程

示例:本示例的函数都在同一个文件中,代码量很少,很容易看懂。

示例运行结果如图2-3所示。

图2-3 示例运行结果

如果代码量很大,就会发现程序的调试很费力。为了体现模块化的编程思想,我们把func1、func2、func3的实现单独放在一个文件中。

在main.c文件中只放主函数,首先建立一个名为myfile.c的源文件,在这个源文件中实现子函数;然后建立一个名为myfile.h的库文件,在myfile.h中声明myfile.c中的子函数;最后在main.c中调用子函数。

main.c中的代码如下:

myfile.c中的代码如下:

myfile.h中的代码如下:

运行后的结果与图2-3所示的结果相同。

多文件编程的工程如图2-4所示,多文件编程工程中的源文件如图2-5所示,多文件编程工程中的库文件如图2-6所示。

图2-4 多文件编程工程

图2-5 多文件编程工程中的源文件

图2-6 多文件编程工程中的库文件 +qVgtEqU4mjkSZrnUHS1FOGltcOG0+p6nUf6EEUrfXMQQoZtWnOK28dBMeEn8T+m

点击中间区域
呼出菜单
上一章
目录
下一章
×