最新第5章 嵌入式C语言程序设计基础
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
● 头文件可分为标准头文件和自定义头文件。
● 尖括号内的头文件为标准头文件,由开发环 境或系统提供。
● 双引号内的头文件为用户自定义头文件。搜 索时,首先在当前目录中搜索,其次按环境 变量include指定的目录顺序搜索。
● 搜索到头文件后,就将该伪指令直接用头文 件内容替换。
____________________________ ______________________
第5章 嵌入式C语言程序设计基础
5.1 嵌入式C语言的预处理伪指令 5.2 嵌入式C语言的基本数据类型 5.3 程序的控制结构 5.4 函 数 5.5 数组 5.6 指 针 5.7 构造数据类型 5.8 汇编语言与C/C++的混合编程 5.9 嵌入式Linux下C语言编程——文件的操作
____________________________ ______________________
____________________________ ______________________
5.1 嵌入式C语言的预处理伪指令
2.宏定义伪指令 宏定义伪指令分为:简单宏、参数宏、条件宏、预定义宏及 宏释放。 (1)简单宏 格式如下: # define 宏标识符 宏体 ● 宏体是由单词序列组成。宏体超长时,允许使用续行符 “\”进行续行,续行符和其后的换行符 \n 都不会进入宏体。 ● 在定义宏时,应尽量避免使用C语言的关键字和预处理器 的预定义宏,以免引起灾难性的后果。 ● 在源文件中,用预处理器伪指令定义过宏标识符之后, 就可用宏标识编写程序。当源文件被预处理器处理时,每遇到 该宏标识符,预处理器便将___宏___展___为____宏___体___。_________
/*ADC通道号与预标值合成一个字*/
#define ADC_WRITE_GETCH(data) (((data)>>16)&0x7)
/*获得ADC通道号*/ #define ADC_WRITE_GETPRE(data) ((data)&0xff)
/*获得ADC的预定标值*/
____________________________ ______________________
5.1 嵌入式C语言的预处理伪指令
例5.5 在Linux下ARM S3C2410X芯片的A/D转换的驱动程 序实现代码s3c2410-adc.c中的系统资源和宏定义。
#define DEVICE_NAME "s3c2410-adc“
/*定义ADC设备的名字*/
#define ADCRAW_MINOR 1
# include “头文件名.h” ;自定义头文件
# include 宏标识符 ____________________________ ______________________
5.1 嵌入式C语言的预处理伪指令
(2)包含文件伪指令的说明
● 常在头文件名后用.h作为扩展名,可带或不 带路经。
#define bNAND_CTL(Nb) __REG(0x4e000000 + (Nb))
#define NFCONF bNAND_CTL(0x00) #define NFCMD bNAND_CTL(0x04) #define NFADDR bNAND_CTL(0x08) #define NFDATA bNAND_CTL(0x0c) #define NFSTAT bNAND_CTL(0x10) #define NFECC _____b__N___A___N___D_____C___T__L__(_0x14)
______________________
5.1 嵌入式C语言的预处理伪指令
(2)参数宏
格式如下:
# define 宏标识符(形式参数表) 宏体
形式参数表为逗号分割的形式参数。
● 宏体是由单词序列组成。宏体超长时,允许使用 续行符“\”进行续行,续行符和其后的换行符 \n 都 不会进入宏体。
● 使用参数宏时,形式参数表应换为同样个数的实 参数表,这一点类似于函数的调用。参数宏与函数 的区别在于参数宏的形参数表中没有类型说明符。
● 预处理器在处理参数宏时使用2遍宏展开。第1遍
展开宏体,第2遍对展开后的宏体用实参数替换形
式参数。
源自文库
____________________________ ______________________
5.1 嵌入式C语言的预处理伪指令
例5.3 在Linux系统的/include/asm-arm/archs3c2410/S3C2410.h头文件中定义了各Nand Flash控制寄 存器,其源代码如下:
5.1 嵌入式C语言的预处理伪指令
例5.1 标准头文件定义 # include <string.h> # include <stdio.h> string.h和stdio.h是标准头文件,按环境变量 include指定的目录顺序搜索string.h和stdio.h。 例5.2 用户自定义头文件定义 # include “s3c2410-adc.h” s3c2410-adc.h头文件是用户自定义有关三星 s3c2410的ARM处理器的A/D转换器各寄存器。
5.1 嵌入式C语言的预处理伪指令
1.文件包含伪指令 文件包含伪指令可将头文件包含到程序中,
头文件中定义的内容符号常量,复合变量原型、 用户定义的变量原型和函数的原型说明等。编 译器编译预处理时用文件包含的正文件内容替 换到实际程序中。
(1)文件包含伪指令的格式
# include <头文件名.h> ;标准头文件
______________________
5.1 嵌入式C语言的预处理伪指令
例5.4 在Linux下ARM S3C2410X芯片的A/D转换的驱动 程序的头文件s3c2410-adc.h中定义了下面三个宏。
#define ADC_WRITE(ch, prescale) ((ch)<<16|(prescale))
static int adcMajor = 0; /*定义ADC设备的主设备号*/
typedef struct {
struct semaphore lock; /*内核信号量,当多个用户程序同时 访问一个ADC控制器时,用lock 进行同步*/
● 尖括号内的头文件为标准头文件,由开发环 境或系统提供。
● 双引号内的头文件为用户自定义头文件。搜 索时,首先在当前目录中搜索,其次按环境 变量include指定的目录顺序搜索。
● 搜索到头文件后,就将该伪指令直接用头文 件内容替换。
____________________________ ______________________
第5章 嵌入式C语言程序设计基础
5.1 嵌入式C语言的预处理伪指令 5.2 嵌入式C语言的基本数据类型 5.3 程序的控制结构 5.4 函 数 5.5 数组 5.6 指 针 5.7 构造数据类型 5.8 汇编语言与C/C++的混合编程 5.9 嵌入式Linux下C语言编程——文件的操作
____________________________ ______________________
____________________________ ______________________
5.1 嵌入式C语言的预处理伪指令
2.宏定义伪指令 宏定义伪指令分为:简单宏、参数宏、条件宏、预定义宏及 宏释放。 (1)简单宏 格式如下: # define 宏标识符 宏体 ● 宏体是由单词序列组成。宏体超长时,允许使用续行符 “\”进行续行,续行符和其后的换行符 \n 都不会进入宏体。 ● 在定义宏时,应尽量避免使用C语言的关键字和预处理器 的预定义宏,以免引起灾难性的后果。 ● 在源文件中,用预处理器伪指令定义过宏标识符之后, 就可用宏标识编写程序。当源文件被预处理器处理时,每遇到 该宏标识符,预处理器便将___宏___展___为____宏___体___。_________
/*ADC通道号与预标值合成一个字*/
#define ADC_WRITE_GETCH(data) (((data)>>16)&0x7)
/*获得ADC通道号*/ #define ADC_WRITE_GETPRE(data) ((data)&0xff)
/*获得ADC的预定标值*/
____________________________ ______________________
5.1 嵌入式C语言的预处理伪指令
例5.5 在Linux下ARM S3C2410X芯片的A/D转换的驱动程 序实现代码s3c2410-adc.c中的系统资源和宏定义。
#define DEVICE_NAME "s3c2410-adc“
/*定义ADC设备的名字*/
#define ADCRAW_MINOR 1
# include “头文件名.h” ;自定义头文件
# include 宏标识符 ____________________________ ______________________
5.1 嵌入式C语言的预处理伪指令
(2)包含文件伪指令的说明
● 常在头文件名后用.h作为扩展名,可带或不 带路经。
#define bNAND_CTL(Nb) __REG(0x4e000000 + (Nb))
#define NFCONF bNAND_CTL(0x00) #define NFCMD bNAND_CTL(0x04) #define NFADDR bNAND_CTL(0x08) #define NFDATA bNAND_CTL(0x0c) #define NFSTAT bNAND_CTL(0x10) #define NFECC _____b__N___A___N___D_____C___T__L__(_0x14)
______________________
5.1 嵌入式C语言的预处理伪指令
(2)参数宏
格式如下:
# define 宏标识符(形式参数表) 宏体
形式参数表为逗号分割的形式参数。
● 宏体是由单词序列组成。宏体超长时,允许使用 续行符“\”进行续行,续行符和其后的换行符 \n 都 不会进入宏体。
● 使用参数宏时,形式参数表应换为同样个数的实 参数表,这一点类似于函数的调用。参数宏与函数 的区别在于参数宏的形参数表中没有类型说明符。
● 预处理器在处理参数宏时使用2遍宏展开。第1遍
展开宏体,第2遍对展开后的宏体用实参数替换形
式参数。
源自文库
____________________________ ______________________
5.1 嵌入式C语言的预处理伪指令
例5.3 在Linux系统的/include/asm-arm/archs3c2410/S3C2410.h头文件中定义了各Nand Flash控制寄 存器,其源代码如下:
5.1 嵌入式C语言的预处理伪指令
例5.1 标准头文件定义 # include <string.h> # include <stdio.h> string.h和stdio.h是标准头文件,按环境变量 include指定的目录顺序搜索string.h和stdio.h。 例5.2 用户自定义头文件定义 # include “s3c2410-adc.h” s3c2410-adc.h头文件是用户自定义有关三星 s3c2410的ARM处理器的A/D转换器各寄存器。
5.1 嵌入式C语言的预处理伪指令
1.文件包含伪指令 文件包含伪指令可将头文件包含到程序中,
头文件中定义的内容符号常量,复合变量原型、 用户定义的变量原型和函数的原型说明等。编 译器编译预处理时用文件包含的正文件内容替 换到实际程序中。
(1)文件包含伪指令的格式
# include <头文件名.h> ;标准头文件
______________________
5.1 嵌入式C语言的预处理伪指令
例5.4 在Linux下ARM S3C2410X芯片的A/D转换的驱动 程序的头文件s3c2410-adc.h中定义了下面三个宏。
#define ADC_WRITE(ch, prescale) ((ch)<<16|(prescale))
static int adcMajor = 0; /*定义ADC设备的主设备号*/
typedef struct {
struct semaphore lock; /*内核信号量,当多个用户程序同时 访问一个ADC控制器时,用lock 进行同步*/