在嵌入式开发中,C语言的重要性毋庸置疑。嵌入式C语言培训提到,用C语言编写的应用软件,可大大提高软件的可读性,缩短开发周期,便于系统的改进和扩充,这为开发大规模、高性能和高可靠性的应用系统提供了基本保证。今天本文主要讲的是嵌入式C语言的“预处理伪指令”,大家可以跟粤嵌了解一下。
嵌入式C语言程序设计时利用基本的C语言知识,面向嵌入式工程实际应用进行程序设计语言。如何能够在嵌入式系统开发中熟练、正确地运用C语言开发出高质量的应用程序,是学习嵌入式程序设计的关键。
在C语言源程序中常常加入一些“预处理指令”,可以改进程序设计的环境,提高编程效率。它虽然写在源程序中,但不产生程序代码,因此也称为预处理指令。它不是C语言本身的组成部分,因此不能直接进行编译,而必须在编译前预先对这些特殊的指令进行“预处理”。在预处理时用“预处理命令”定义的实际内容代替该命令,因此也称为“编译预处理器”或“编译预处理伪指令”。
C语言所有预处理伪指令都以#号开头,以区别于源文件中的语句行与说明行。与处理伪指令有以下3种:文件包含、宏定义和条件编译。
预处理指令有以下特点:
把文件包含的正文替换进来,如标准头文件和自定义头文件,其内容包括符号常量、符合变量原型、用户定义的变量类型原型和函数的原型说明等。
对宏定义进行宏扩展,减少了编程量,改进源程序的可读性,参数宏更减少了函数调用的开销。
条件编译改善了编程的灵活性,也改善了可移植性。
所有预处理器伪指令都以#号开头,以区别于源文件中的语句行和说明行。
下面分别对预处理伪指令进行详细介绍。
1.文件包含伪指令
文件包含伪指令可将头文件包含到程序中,头文件中定义的内容包括符号常量、符合变量原型、用户定义的变量类型原型和函数的原型说明等。编译器编译预处理时用文件包含的正文内容替换到实际程序中。
1)文件包含伪指令的格式
#include<头文件名.h> ;标准头文件
#include“头文件名.h” ;自定义头文件
#include 宏标识符
2)包含文件伪指令的说明
习惯上头文件名后用.h作为扩展名,可带或不带路径。
头文件可分为标准头文件与自定义文件。
尖括号对内的头文件为标准头文件。标准头文件按DOS系统的环境变量include所指定的目录顺序搜索头文件。
双引号岁“”内的头文件名为用户自定义头文件。搜索时,首先在当前目录中搜索,其次按环境变量include指定的目录顺序搜索。
搜索到头文件后,就将该伪指令直接用头文件内容替换。
第3种格式中的宏标识符预处理器首先对它进行宏扩展。宏扩展后得到的可能是括号内的头文件名或双引号对内的投文件名。其后,就可按前2中格式之一来处理。
3)包含文件伪指令举例
示例 标准头文件定义
#include <string.h>
#include <stdio.h>
string.h和stdio.h是标准头文件,按环境变量include指定的目录顺序搜索string.h和stdio.h。
示例 用户自定义文件
本例以S3CEV40开发板整个系统各个模块的测试程序的主文件main.c为例,详细介绍如何利用用户自定义头文件进行系统资源管理。
File: main.c
Desc : c main entry
/--include files--/
#include”44bilb.h”
#include”44b.h”
#include”rtc.h”
#include”../LCD_Test/bmp.h”
……
……
Main.c中的44b.h和44bilb.h等头文件是S3CEV40开发板测试程序的主文件main.h中用户自定义头文件。这些头文件定义了44BOX芯片及其外围接口的硬件资源。嵌入式SoC芯片已成为高性能嵌入式系统的核心,因此嵌入式软件开发时涉及片内资源较多,为了更好地管理这些资源,利用用户头文件对系统进行定义,可大大提高编程效率,并增加程序的可读性,这是嵌入式软件开发的第一步。
“44bilb.h”对程序开发中的函数进行了声明,并用宏定义对一些常用的表达式或常量进行了预定义。
“44bilb.h”内容如下所示:
File: 44BLIB.H
Desc: Samsung 44BOX CPU function declare and common define