- 6
- 0
- 约5.1千字
- 约 56页
- 2018-10-09 发布于浙江
- 举报
第34章 embest简介加c语言程序设计基础补充和7段led模块和键盘概述
开发流程 调试配置 控制程序执行 上次实验内容 1. 完成数学运算: 结果存入R10寄存器中。 要求:定义变量x=45,y=32,z=7 2. 完成将src:处的数据拷贝到dst:处。 src: .long 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4 dst: .long 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 实验3: C语言程序实验 实验内容 1. 编写7-led程序,完成7-led模块循环显示0-F的程序. 2. 要求在程序中设置断点,位置在显示’0’的程序之前。 3. 在软件仿真环境中存储器窗口中观察结果并记录 实验准备 掌握7段数码管的工作原理 知道数码管的地址空间 知道各位与各段的对应关系 第五章 基于ARM的嵌入式应用程序设计 5.3 嵌入式C语言程序设计基础 嵌入式C语言程序设计是利用基本的C语言知识,面向实际嵌入式工程应用进行程序设计。 5.3 嵌入式C语言程序设计基础 通过7段LED模块程序开发的实例介绍C语言的基本语法及知识点在嵌入式程序开发中的应用。 软件源文件的形式(功能) …… bl Main # jump to Main() …… 启动代码说明 应用程序文件 main.c main.c文件 main.c文件结构 头文件包含 函数声明 main主函数 包含的头文件 1、头文件包含伪指令 格式: #include 头文件名.h ;标准头文件 #include “头文件名.h” ;自定义头文件 头文件中包含的内容 包含了程序中所需的S3C44B0x芯片各模块中寄存器的宏定义 宏定义伪指令 格式: # define 宏标识符 宏体 如 #define ULONG unsigned long 程序中ULONG代表的意思是unsigned long,程序编译时,预处理器会将程序中所有的ULONG用unsigned long替换 分类: (1) 简单宏 (2) 参数宏 (3) 宏释放 (4) 条件宏 (1) 简单宏 #define rULCON0 \ (*(volatile unsigned *)0x1d00000) Volatile的使用 编译器优化 当读取一个变量或存储器内容时,为提高存取速度,编译器在优化程序时有时会先把变量或存储器内容读取到一个寄存器中,以后在取变量或存储器内容时,就直接从寄存器中取值; 但是当变量或存储器内容在本程序里改变时,会同时把新值copy到该寄存器中,以便保持一致; 但当变量或存储器内容在别的程序中改变时,该寄存器的值不会相应改变,从而造成应用程序读取的值和实际的当前值不一致。 Volatile的使用 告诉优化器在读该寄存器值时必须每次都小心地从实际地址空间中重新读取,而不能使用保存在寄存器里的备份。 (1) 简单宏 #define rULCON0 \ (*(volatile unsigned *)0x1d00000) (2) 参数宏 # define SQR(x,y) sqrt((x)*(x)+(y)*(y)) 源文件中有: z=SQR(a+b,a-b); /*替换为z=sqrt((a+b)*(a+b)+(a-b)*(a-b));*/ 参数宏类似于函数的调用。事实上,许多库函数是用参数宏写的。 参数宏和函数的区别: 宏的形式参数表中没有类型说明符; 参数宏在时空开销上比函数都要小。 (3) 宏释放 作用:用于释放原先定义的宏标识符。 格式:#undef 宏标识符 #undef ULONG 左边是先测试是否已定义,右边是先测试是否未定义,这样根据测试决定如何处理,是为了避免重复定义。 extern “C”{}的作用就是说明这在{}范围之内的变量或函数要按C标准来编译。 对于C++写的变量或函数,如果C要调用,就必须在C++定义变量或函数时加以声明, 否则就不能调用. 头文件中包含的内容 包含了程序中所需的S3C44B0x芯片各模块中寄存器的宏定义 为什么要使用文件包含命令呢? 2 Main函数部分 数码管工作原理 数码管程序设计 7段数码管工作原理 数码管工作原理 ‘共阳极’数码管:7个发光二极管的阳极都连在一起的; ‘共阴极’数码管:7个发光二极管的阴极都连在一起的 分类及驱动方式 数码管工作原理(1) --各位与各段的对应关系: 对应规则: a-----D7 b-----
原创力文档

文档评论(0)