第5章 嵌入式C语言程序设计基础.ppt

上传人:资****亨 文档编号:127763538 上传时间:2020-04-05 格式:PPT 页数:118 大小:277.50KB
返回 下载 相关 举报
第5章 嵌入式C语言程序设计基础.ppt_第1页
第1页 / 共118页
第5章 嵌入式C语言程序设计基础.ppt_第2页
第2页 / 共118页
第5章 嵌入式C语言程序设计基础.ppt_第3页
第3页 / 共118页
第5章 嵌入式C语言程序设计基础.ppt_第4页
第4页 / 共118页
第5章 嵌入式C语言程序设计基础.ppt_第5页
第5页 / 共118页
点击查看更多>>
资源描述

《第5章 嵌入式C语言程序设计基础.ppt》由会员分享,可在线阅读,更多相关《第5章 嵌入式C语言程序设计基础.ppt(118页珍藏版)》请在金锄头文库上搜索。

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 标准头文件 include 头文件名 h 自定义头文件 include宏标识符 5

2、1嵌入式C语言的预处理伪指令 2 包含文件伪指令的说明 常在头文件名后用 h作为扩展名 可带或不带路经 头文件可分为标准头文件和自定义头文件 尖括号内的头文件为标准头文件 由开发环境或系统提供 双引号内的头文件为用户自定义头文件 搜索时 首先在当前目录中搜索 其次按环境变量include指定的目录顺序搜索 搜索到头文件后 就将该伪指令直接用头文件内容替换 5 1嵌入式C语言的预处理伪指令 例5 1标准头文件定义 include includestring h和stdio h是标准头文件 按环境变量include指定的目录顺序搜索string h和stdio h 例5 2用户自定义头文件定义 i

3、nclude s3c2410 adc h s3c2410 adc h头文件是用户自定义有关三星s3c2410的ARM处理器的A D转换器各寄存器 5 1嵌入式C语言的预处理伪指令 2 宏定义伪指令宏定义伪指令分为 简单宏 参数宏 条件宏 预定义宏及宏释放 1 简单宏格式如下 define宏标识符宏体 宏体是由单词序列组成 宏体超长时 允许使用续行符 进行续行 续行符和其后的换行符 n都不会进入宏体 在定义宏时 应尽量避免使用C语言的关键字和预处理器的预定义宏 以免引起灾难性的后果 在源文件中 用预处理器伪指令定义过宏标识符之后 就可用宏标识编写程序 当源文件被预处理器处理时 每遇到该宏标识符

4、预处理器便将宏展为宏体 5 1嵌入式C语言的预处理伪指令 2 参数宏格式如下 define宏标识符 形式参数表 宏体形式参数表为逗号分割的形式参数 宏体是由单词序列组成 宏体超长时 允许使用续行符 进行续行 续行符和其后的换行符 n都不会进入宏体 使用参数宏时 形式参数表应换为同样个数的实参数表 这一点类似于函数的调用 参数宏与函数的区别在于参数宏的形参数表中没有类型说明符 预处理器在处理参数宏时使用2遍宏展开 第1遍展开宏体 第2遍对展开后的宏体用实参数替换形式参数 例5 3在Linux系统的 include asm arm arch s3c2410 S3C2410 h头文件中定义了各Nan

5、dFlash控制寄存器 其源代码如下 definebNAND CTL Nb REG 0 x4e000000 Nb defineNFCONFbNAND CTL 0 x00 defineNFCMDbNAND CTL 0 x04 defineNFADDRbNAND CTL 0 x08 defineNFDATAbNAND CTL 0 x0c defineNFSTATbNAND CTL 0 x10 defineNFECCbNAND CTL 0 x14 5 1嵌入式C语言的预处理伪指令 5 1嵌入式C语言的预处理伪指令 例5 4在Linux下ARMS3C2410X芯片的A D转换的驱动程序的头文件s3c2

6、410 adc h中定义了下面三个宏 defineADC WRITE ch prescale ch 16 0 x7 获得ADC通道号 defineADC WRITE GETPRE data data 0 xff 获得ADC的预定标值 例5 5在Linux下ARMS3C2410X芯片的A D转换的驱动程序实现代码s3c2410 adc c中的系统资源和宏定义 defineDEVICE NAME s3c2410 adc 定义ADC设备的名字 defineADCRAW MINOR1staticintadcMajor 0 定义ADC设备的主设备号 typedefstruct structsemapho

7、relock 内核信号量 当多个用户程序同时访问一个ADC控制器时 用lock进行同步 wait queue head twait 等待队列 intchannel ADC通道号 intprescale 预定标值 ADC DEV 5 1嵌入式C语言的预处理伪指令 staticADC DEVadcdev defineSTART ADC AIN ch prescale do ADCCON PRESCALE EN PRSCVL prescale ADC INPUT ch ADCCON ADC START while 0 设置S3C2410X的ADC的通道为ch 预定标值为prescale PRESCA

8、LE EN宏对应ARMS3C2410X芯片的A D转换控制寄存器的第14位PRSCEMN 即A D转换器预标器使能 PRSCVL宏对应ARMS3C2410X芯片的A D转换控制寄存器的第6位 设置预定标值 ADC INPUT宏对应ARMS3C2410X芯片的A D转换控制寄存器的第3 5位 选择通道号 ADCCON ADC START ADCCON0为置1 准备采集数据 5 1嵌入式C语言的预处理伪指令 5 1嵌入式C语言的预处理伪指令 3 条件宏定义格式如下 格式1 ifdef宏标识符 undef宏标识符 define宏标识符宏体 else define宏标识符宏体 endif 格式2 if

9、ndef宏标识符 define宏标识符宏体 else undef宏标识符 define宏标识符宏体 endif其中 格式1是测试存在 格式2是测试不存在 else可有 也可没有 5 1嵌入式C语言的预处理伪指令 5 1嵌入式C语言的预处理伪指令 4 宏释放用于释放原先定义的宏标识符 经释放后的宏标识符可再次用于定义其他宏体 格式如下 undef宏标识符例5 6 defineSIZE512 buf SIZE blks 宏扩展为buf 512 blks undefSIZE defineSIZE128 buf SIZE blks 宏扩展为buf 128 blks 5 1嵌入式C语言的预处理伪指令 3

10、 条件编译伪指令格式如下 if 条件表达式1 elif 条件表达式2 elif 条件表达式3 elif 条件表达式n else endif 5 1嵌入式C语言的预处理伪指令 例5 7 if B0SIZE B0SIZE BYTEtypedefunsignedcharPB0SIZE elif B0SIZE B0SIZE SHORTtypedefunsignedshortPB0SIZE elif B0SIZE B0SIZE WORDtypedefunsignedlongPB0SIZE endif 5 2嵌入式C语言的基本数据类型 5 2 1数据类型与表达式 5 2嵌入式C语言的基本数据类型 1 类型

11、修饰符 5 2嵌入式C语言的基本数据类型 2 访问修饰符 C语言有两个用于控制访问和修改变量方式的修饰符 分别是常量 const 和易变量 volatile 带const修饰符定义出的常量在程序运行过程中始终保持不变 例如 constintnum 例如 constintnum 100 volatile修饰符用于提醒编译程序 该变量的值可以不通过程序中明确定义的方法来改变 const和volatile可以同时使用 例如 假设0 x30是一个只随外部条件而变化的口地址值 那么就恰好需要用下述说明来避免偶然因素所产生的副作用的影响 constvolatileunsignedchar port 0 x

12、30 5 2嵌入式C语言的基本数据类型 2 构造数据类型数组是一组连续 有序的存放在一起的具有相同类型的数据 结构体是将不同类型的数据按一定顺序存放在一起的数据结构 共用体是将不同类型的数据都存放在同一起始地址的内存单元中 共用一段内存以节省内存单元 枚举是只有几种可能的值 将其一一列举出来 实际是用符号来表示若干个可取的整型值 它是整型的一个子集 5 2嵌入式C语言的基本数据类型 3 指针类型指针可以有效地表示复杂的数据结构 能动态分配内存 能方便地使用字符串 有效而方便地使用数组 在调用函数时能得到多于一个的值 能直接处理内存地址等 指针类型迥异于前述各种数据类型 不管是简单类型的数据 还

13、是构造类型数据 均是代表数据的 而指针类型是代表地址的 5 2嵌入式C语言的基本数据类型 5 2 2常量1 数值常量 1 整型常量 整型常量也称为整型常数或整数 C整型常量按进制分可分为十进制整数 八进制整数和十六进制整数 2 实型常量实型常量有单精度实型常量和双精度实型常量 可用小数形式或指数形式表示 3 字符常量 5 2嵌入式C语言的基本数据类型 5 2嵌入式C语言的基本数据类型 2 字符串常量字符串常量简称字符串 是用一对双引号括起来的字符序列 例如 China 就是一个字符串常量 若数字被定义为字符型之后就不能参与数值运算 如 5 和5是不同的 5 是字符常量 不能直接参与运算 而只能

14、以其ASCII码值 0 x35 来参与运算 5 2嵌入式C语言的基本数据类型 3 符号常量 1 不带参数的宏定义 宏定义命令 define的一般形式是 define宏名字符串用来终止宏名作用域命令 undef的一般形式是 undef宏名 例5 8 definePI3 14159 定义PI为常量 其值是3 14159 main undefPI 终止宏名PI的作用域 f1 5 2嵌入式C语言的基本数据类型 2 带参数的宏定义 它不是进行简单的字符串替换 还要进行参数替换 其定义的一般形式为 define宏名 参数表 字符串 其中字符串中包括参数表中所指定的参数 在使用时 要将程序中宏名后的实际参数

15、代入字符串中参数的位置 例如 defineS a b a b area S 3 2 经编译预处理 该语句被展开成 area 3 2 5 2嵌入式C语言的基本数据类型 说明 1 宏名和参数表左括号之间不能有空格 否则按不带参宏替换了 2 字符串中应注意括号的使用 以保证运算次序 如上例改成area S 1 2 2 经展开后变成 area 1 2 2 这就不合要求了 此时 可改写成 defineS a b a b area S 1 2 2 经展开后变成 area 1 2 2 就不会出现错误了 5 2嵌入式C语言的基本数据类型 5 2 3变量1 变量的定义变量定义的一般形式如下 存储类型 类型说明符

16、 修饰符 标识符 初值 标识符 初值 变量的定义由5部分组成 方括号中的可有可无 变量定义的具体情况而定 5 2嵌入式C语言的基本数据类型 1 类型说明符 对于数字与字符 其常用的类型主要有8种 char unsignedchar int unsigned long unsignedlong float double void类型 抽象型 在具体化时可用类型强制来指定类型说明符中的任意一类 通过typedef定义的类型别名 为了增加程序的可读性和移植程序时的方便 C语言允许用户为C语言固有的类型用typedef起别名 格式如下 typedefC固有的简单类型或复合类型别名标识符 用别名代替原来的类型 在说明中用作类型说明符 别名一般用大写字符 例如 typedeflongBIGBIGx 80000 5 2嵌入式C语言的基本数据类型 2 标识符 变量名可以是C语言中允许的合法标识符 每一个变量都必须进行类型说明 也就是变量要先定义 后使用 当一个变量被指定为某一确定类型时 将为它分配若干相应字节的内存空间 如在32位体系的ARM系统中 char型为1字节 int型为4字节 float为4

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号