嵌入式驱动开发培训手册.doc

上传人:创****公 文档编号:1031348 上传时间:2018-11-21 格式:DOC 页数:27 大小:360.50KB
下载 相关 举报
嵌入式驱动开发培训手册.doc_第1页
第1页 / 共27页
嵌入式驱动开发培训手册.doc_第2页
第2页 / 共27页
嵌入式驱动开发培训手册.doc_第3页
第3页 / 共27页
嵌入式驱动开发培训手册.doc_第4页
第4页 / 共27页
嵌入式驱动开发培训手册.doc_第5页
第5页 / 共27页
点击查看更多>>
资源描述

1、嵌入式驱动开发培训手册1.0 版本海尔软件有限公司地址:青岛市宁夏路 288 号市南区软件园 G3 楼 3 楼电话:053288038188 传真:053288038111Email:1. 简介本文档是根据海尔“T-模式”制定的嵌入式驱动开发培训手册,适用于新进入嵌入式驱动领域的开发人员。本文档涵盖了从嵌入式开发入门,到完成一个完整的嵌入式驱动开发所涉及的基本原理及内容。1.1. 目的本文档明确了对接受嵌入式驱动开发培训的人员,各个阶段所要达到的目标。1.2. 范围接受嵌入式驱动开发培训的人员。对接受培训人员的要求:a) 精通并能熟练运用c语言b) 熟悉C51或ARM等汇编语言c) 能够掌握基

2、本的电路原理d) 会使用万用表、示波器等仪器e) 能够读懂英文资料手册1.3. 定义、首字母缩写词和缩略语ARM Advanced RISC MachinesI2C Inter-Integrated CircuitSPI Serial Peripheral Interface1.4. 引用a) 高质量C+/C编程指南.docb) C程序设计 第二版 清华大学出版社 谭浩强1.5. 资源周立功2104或2210开发板HDT-300L设备1.6. T-模式培训时长:30 天。培训目标:使受培训人员具有能够独立开发并完善嵌入式设备的驱动程序的能力。2. 基础篇本章主要介绍编写嵌入式驱动程序与编写Wi

3、ndows软件的区别,并着重讲解了编写嵌入式驱动程序所需要的基础知识。时间:10天目标:能够看懂原理图,并能根据数据手册对小型模块进行编码。2.1. 与编写 Windows 软件的区别在此先打一个比方,可以把嵌入式平台中的FLASH、ROM等存储设备,比作PC机上的硬盘,其特点就是掉电数据不丢失,但是读写速度相对慢;RAM就相当于PC机上的内存,读写速度快,但是掉电后数据丢失。a) 硬件平台及开发环境一般如Windows形式的软件编程,硬件平台基本上都是固定的,那就是PC机。开发人员可以通过一些开发工具,如VB、Delphi、C#等,在PC机上编写出各式各样的应用程序。而实现这些应用程序功能的

4、主要依靠,就是这些开发工具提供的比较完善的控件及库函数等。因此,往往学习这类开发工具的着重点是放在控件及库函数的学习和使用上。另外如,控制显示器显示、键盘鼠标输入等功能,都已经是系统已经实现好的了,在PC平台上编写软件,根本就不需要深究这类问题。不同于一般形式的软件编程,嵌入式系统编程建立在特定的硬件平台上,而且硬件平台多种多样,没有固定性。在嵌入式系统编程过程中,一般都是白手起家,从代码空间及数据空间的配置,到控制液晶屏的显示都需要自己来解决,更不用指望有什么控件可以使用了。当然,现在有些比较完善的嵌入式平台,囊括了嵌入式操作系统、文件系统以及GUI等,使用者只需要在指定位置添加相应的硬件驱

5、动就可以了,其他的操作如同调用Windows的库函数。但要想真正做好嵌入式开发,还是要从底层入手,从实际的硬件情况入手。例如,在Windows编程中,分配一个几十k或几百k的内存空间看来是很正常的事,但很可能实际的嵌入式硬件平台上总共也只有几百k的内存空间,有的甚至不到1k。b) 调试开发人员在Windows平台上通过C#等开发工具,编写出的应用程序,不但可以直接运行,无需更换平台,而且还可以边编写边调试,开发起来非常方便。而由于嵌入式系统的目标机资源受限,不可能在其上建立庞大、复杂的开发环境,因而其开发环境和目标运行环境相互分离。嵌入式系统在Windows下需要良好的软件开发环境的支持,例如

6、,C51的编译及调试软件KeilC51,ARM的SDT或ADS等。因此,嵌入式应用软件的开发方式一般是,在宿主机(例如,PC机)上建立开发环境,进行应用程序编码和交叉编译,然后宿主机同目标机(例如,开发板)建立连接(通常是通过串口或并口),将应用程序下载到目标机上进行交叉调试,经过调试和优化,最后将应用程序固化到目标机中实际运行。c) 可执行文件开发人员在Windows平台上通过开发工具,编写出的应用程序,多是.exe之类的可执行文件。很多人也都已经习惯的认为可执行文件大多数就是指的.exe文件。在嵌入式系统平台中,最终下载到目标机里的应用程序,就是嵌入式系统平台里的可执行文件,它通常是.bi

7、n或者.hex文件,因为嵌入式平台里的CPU或单片机的指令,就是二进制或十六进制的。底层的硬件芯片只认识二进制指令,并且严格按照这些指令执行。当然,一些嵌入式操作系统也支持将操作系统与应用程序分开编译,并分开下载到目标机上。例如,Symbian操作系统的可执行文件就是.sis文件,它就相当于Windows上的.exe文件,可以下载到基于Symbian的操作系统上运行。2.2. 软件基础说到软件,不得不提的就是 c 语言。不同于一般形式的软件编程,嵌入式系统编程建立在特定的硬件平台上,势必要求其编程语言具备较强的硬件直接操作能力。无疑,汇编语言具备这样的特质。但是,由于汇编语言开发的复杂性,它并

8、不是嵌入式系统开发的一般选择。而与之相比,c 语言-一种“高级的低级“语言,则成为嵌入式系统开发的最佳选择。我们嵌入式编程的工具绝大部分也是用 c 语言,因此,要学好嵌入式编程良好的 c 语言基础是必须的。关于 c 语言学习这里就不多说了,但是要强调的是代码的质量及编码规范,具体内容请看文档 高质量 C+/C 编程指南.doc 。这里要单独拿出来说几点,也是嵌入式编程中常见的几点,没有提到的并不代表不重要,只是在嵌入式编程中跟普通编程中差别不大而已:a) 数据类型:嵌入式编程中,数据类型是必须要注意的。在嵌入式编程中,任何模块或功能的移植,首先要做的事情就是统一数据类型。因为,不同的硬件平台中

9、,字长也是不同的。例如,int 类型的字长是 32 位,这句话并不是绝对的。针对不同处理器体系结构的编译器对于数据类型的字长定义不同,例如:对于 8 位 51 体系,其整型 int 的字长定义为 16 位,而针对 32 位 ARM 体系结构的 C 编译器其整型 int 和 long 的字长都定义为 32 位,short 类型的才是 16 位。b) 关键字volatile:const、static、volatile 等几个关键字,是嵌入式编程面试中经常被问到的问题。用好 const、static、volatile 等关键字很重要,在这里要着重说的是volatile。在英文中 volatile 的

10、意思是,易变的。volatile 关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。当要求使用 volatile 声明的变量的值的时候,系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据。例题:下面的函数有什么错误:int square(volatile int *ptr)return *ptr * *ptr;这段代码的目的是用来返指针*ptr 指向值的平方,但是,由于*ptr 指向一个 volatile 型参数,编译器将产生类似下面的代码:in

11、t square(volatile int *ptr) int a,b;a = *ptr;b = *ptr;return a * b;由于*ptr 的值可能被意想不到地该变,因此 a 和 b 可能是不同的。结果,这段代码可能返不是你所期望的平方值!如上所述,由于 volatile 的特性,在嵌入式编程中,它经常被使用以用来表示硬件的寄存器,如*(volatile unsigned long*)(0x70000008),就是代表一个寄存器,这个寄存器的地址就是地址 0x70000008。c) 位操作:嵌入式系统总是要用户对变量或寄存器进行位操作,尤其是做驱动的时候,位操作的使用频率更高。使用位操

12、作的一个重要因素就是,位操作的执行周期短,也就是代码的执行时间短。通常的嵌入式设备,其 CPU 执行频率远不如 PC 机,但是这些设备却更加追求执行速度和执行效率。这些时候,位操作的优点就表现出来了。另外,还要补充的是关于汇编语言的。熟悉汇编编程对嵌入式编程是有很大好处的,尤其是对于寻址和堆栈操作的理解,它可以帮助我们更深入地了解硬件的工作原理,以便写出执行效率更高更稳定的代码来。d) 中断服务程序:中断是嵌入式系统中重要的组成部分,但是在标准 C 中不包含中断。许多编译开发商在标准 C 上增加了对中断的支持,提供新的关键字用于标示中断服务程序(ISR),类似于_interrupt、#prog

13、ram interrupt 等。当一个函数被定义为 ISR 的时候,编译器会自动为该函数增加中断服务程序所需要的中断现场入栈和出栈代码。中断服务程序需要满足如下要求:(1)不能返回值;(2)不能向 ISR 传递参数;(3) ISR 应该尽可能的短小精悍;2.3. 硬件基础硬件基础中,主要就是对硬件工作原理和原理图的理解。a) 模块分类:以 CPU 为中心,一台简单的嵌入式设备大体分这几个模块:数据处理模块、输入模块、输出模块、存储模块、通信模块。 数据处理模块:能够完成计算任务的模块,一般是指 CPU 或专门的数字信号处理(DSP)模块。 输入输出模块:设备与用户传递交互信息的模块,输入模块是

14、提供给用户向该设备输入信息的模块,如键盘等;输出模块是向用户提供操作和状态信息的模块,如液晶屏等。 存储模块:设备用来存储数据的模块,如 FLASH、EEPROM 等。 通信模块:设备与外界进行信息传递的模块,如串口、并口等。b) 驱动基础:最重要的一句话:CPU 的每一组管脚都有它特定的功能,可能是一种也可能是多种功能,同时每组管脚也对应着一组特殊功能寄存器,就是通过这些特殊功能寄存器,来设定和控制特定的功能,以达到软件对硬件控制的目的。通常,这些特殊功能寄存器都是映射在 CPU 寻址范围内的指定地址上,查阅 CPU 的数据手册就可得到这些寄存器的具体地址和使用方法。这里,操作这些特殊功能寄

15、存器,就用到了上面说的关键字 volatile。常用到的接口及说明,关于这些接口的练习,在开发板上都有对应的例子: GPIO 口:即通用输入输出口,这类接口是最基本也是最常用的一类接口,其特点是:可以设置为输入,此时可以通过相应的寄存器读取该管脚的状态是高或低;也可以设置为输出,此时可以由 CPU 来设置该管脚状态是高还是低。根据该特性,这类接口常用来为外围设备提供片选、复位等操作,也可以用来驱动 LED 等。通过使用 GPIO 口,就可以完成一些简单的液晶屏驱动。 总线接口:主要指地址总线和数据总线,经常用来连接 RAM 和 FLASH。也可以连接一些器件的数据和控制线,如 LCD 等。 U

16、ART 口:即通常说的串口,标准的串口是 9 针的,但是通常用的串口多是只用了其中的 3 根线:地线、收数据线、发数据线。使用串口时需要先进行初始化,主要是设置它的波特率和工作模式,串口初始化成功后,才能正常工作,可以通过 CPU 数据手册中指定的寄存器(可能是一个或多个)来设置波特率。串口初始化好后就可以通过特定的寄存器来对串口接收和发送的数据进行操作。写串口驱动时,只需要按要求读写指定的寄存器就行,至于它是如何接收和发送的数据,是硬件已经做好的。串口用途比较广泛,多用来与 PC 机进行数据传输,modem 等,嵌入式中常用到串口来输出程序运行信息,以达到跟踪调试的目的。 I2C 接口:I2

17、C 也是串口的一种,通过 I2C 总线,可以实现在 CPU 与被控 IC 之间、IC与 IC 之间进行双向传送。I2C 总线在传送数据过程中共有三种类型信号,它们分别是:开始信号、结束信号和应答信号。开始信号:SCL 为高电平时,SDA 由高电平向低电平跳变,开始传送数据。结束信号:SCL 为低电平时,SDA 由低电平向高电平跳变,结束传送数据。应答信号:接收数据的 IC 在接收到 8bit 数据后,向发送数据的 IC 发出特定的低电平脉冲,表示已收到数据。CPU 向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU 接收到应答信号后,根据实际情况作出是否继续传递信号的判断。串行总线上的数据传送顺序

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 实用文档资料库 > 规章制度

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。