欢迎来到天天文库
浏览记录
ID:58404688
大小:322.50 KB
页数:117页
时间:2020-09-07
《嵌入式C语言程序设计基础.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第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语言的预处理伪指令1.文件包含伪指令文件包含伪指令可将头文件包含到程序中,头文件中定义的内容符号常量,复合变量原型、用户定义的变量原型和函数的原型说明等。编译器编译预处理时用文件包含的正文件内容替换到实际程序中。(1)文件包含伪指令的格式#include<头文件名.h>;标准头文件#include“头文件名.h”;自定义
2、头文件#include宏标识符5.1嵌入式C语言的预处理伪指令(2)包含文件伪指令的说明●常在头文件名后用.h作为扩展名,可带或不带路经。●头文件可分为标准头文件和自定义头文件。●尖括号内的头文件为标准头文件,由开发环境或系统提供。●双引号内的头文件为用户自定义头文件。搜索时,首先在当前目录中搜索,其次按环境变量include指定的目录顺序搜索。●搜索到头文件后,就将该伪指令直接用头文件内容替换。5.1嵌入式C语言的预处理伪指令例5.1标准头文件定义#include#includestring.h和stdio.h是标准头文件,按环境变量i
3、nclude指定的目录顺序搜索string.h和stdio.h。例5.2用户自定义头文件定义#include“s3c2410-adc.h”s3c2410-adc.h头文件是用户自定义有关三星s3c2410的ARM处理器的A/D转换器各寄存器。5.1嵌入式C语言的预处理伪指令2.宏定义伪指令宏定义伪指令分为:简单宏、参数宏、条件宏、预定义宏及宏释放。(1)简单宏格式如下:#define宏标识符宏体●宏体是由单词序列组成。宏体超长时,允许使用续行符“”进行续行,续行符和其后的换行符都不会进入宏体。●在定义宏时,应尽量避免使用C语言的关键字和预处理器的预定义宏,以免引起灾难性
4、的后果。●在源文件中,用预处理器伪指令定义过宏标识符之后,就可用宏标识编写程序。当源文件被预处理器处理时,每遇到该宏标识符,预处理器便将宏展为宏体。5.1嵌入式C语言的预处理伪指令(2)参数宏格式如下:#define宏标识符(形式参数表)宏体形式参数表为逗号分割的形式参数。●宏体是由单词序列组成。宏体超长时,允许使用续行符“”进行续行,续行符和其后的换行符都不会进入宏体。●使用参数宏时,形式参数表应换为同样个数的实参数表,这一点类似于函数的调用。参数宏与函数的区别在于参数宏的形参数表中没有类型说明符。●预处理器在处理参数宏时使用2遍宏展开。第1遍展开宏体,第2遍对展开后
5、的宏体用实参数替换形式参数。例5.3在Linux系统的/include/asm-arm/arch-s3c2410/S3C2410.h头文件中定义了各NandFlash控制寄存器,其源代码如下:#definebNAND_CTL(Nb)__REG(0x4e000000+(Nb))#defineNFCONFbNAND_CTL(0x00)#defineNFCMDbNAND_CTL(0x04)#defineNFADDRbNAND_CTL(0x08)#defineNFDATAbNAND_CTL(0x0c)#defineNFSTATbNAND_CTL(0x10)#defineNFECCbN
6、AND_CTL(0x14)5.1嵌入式C语言的预处理伪指令5.1嵌入式C语言的预处理伪指令例5.4在Linux下ARMS3C2410X芯片的A/D转换的驱动程序的头文件s3c2410-adc.h中定义了下面三个宏。#defineADC_WRITE(ch,prescale)((ch)<<16
7、(prescale))/*ADC通道号与预标值合成一个字*/#defineADC_WRITE_GETCH(data)(((data)>>16)&0x7)/*获得ADC通道号*/#defineADC_WRITE_GETPRE(data)((data)&0xff)/*获得ADC的预定标值*/例
8、5.5在Linux下ARMS3C2410X芯片的A/D转换的驱动程序实现代码s3c2410-adc.c中的系统资源和宏定义。#defineDEVICE_NAME"s3c2410-adc“/*定义ADC设备的名字*/#defineADCRAW_MINOR1staticintadcMajor=0;/*定义ADC设备的主设备号*/typedefstruct{structsemaphorelock;/*内核信号量,当多个用户程序同时访问一个ADC控制器时,用lock进行同步*/wait_queue_head_t
此文档下载收益归作者所有