嵌入式系统开发(代码的力量)(附赠DVD-ROM光盘1张)
分類: 图书,计算机与互联网,硬件/嵌入式开发,嵌入式计算机,
品牌: 陈卓
基本信息·出版社:电子工业出版社
·页码:388 页
·出版日期:2009年
·ISBN:7121085763/9787121085765
·条形码:9787121085765
·包装版本:1版
·装帧:平装
·开本:16
·正文语种:中文
·丛书名:代码的力量
·附带品描述:附赠DVD-ROM光盘1张
产品信息有问题吗?请帮我们更新产品信息。
内容简介《嵌入式系统开发》介绍了嵌入式开发多个方面的内容,涵盖面较为广泛。整《嵌入式系统开发》分为3个部分:第1部分介绍嵌入式系统开发必须具备的软硬件基础。这一部分虽然是相对基础的内容,但在介绍重要内容的时候着重从应用的角度加以描述,在简单说明原理之后,回答了这些基础内容到底是怎么用的问题。由于涉及了不少实际系统,所以第1部分的内容是有一定深度的。第2部分讨论基于μC/OSII的嵌入式系统开发,由于μC/OSII系统的内核相对简单,所以这部分重点是说明μC/OSII的程序设计框架及它的移植应用。在第3部分中,全面讨论了嵌入式Linux开发的各个重要方面,其中包括嵌入式Linux的驱动程序设计,这部分介绍了多种外设的驱动设计实例。另外,《嵌入式系统开发》还讨论了Qt的程序设计和核心机制,以及Linux的网络实现的实例。最后还讨论了对一个嵌入式Linux系统移植所需要做的工作,分别介绍了BootLoader、内核及驱动程序的移植方法。
《嵌入式系统开发》的读者对象包括:刚接触嵌入式开发的人员,以及有一定嵌入式开发基础,希望参考各种开发项目的工程人员。《嵌入式系统开发》在编写的时候尽量做到了按知识需求组织,以方便不同的读者按需阅读。
编辑推荐《嵌入式系统开发》由电子工业出版社出版。
目录
第1部分 嵌入式开发必备基础
第1章 软件开发基础1
1.1 嵌入式环境下的C语言使用技巧1
1.1.1 重要的位(bit)操作1
1.1.2 正确使用数据指针2
1.1.3 函数等价于指令的集合3
1.1.4 操作有限的存储空间4
1.1.5 理解栈空间(Stack)和堆空间(Heap)5
1.1.6 关键词const的使用6
1.1.7 关键词volatile7
1.1.8 处理器字长与内存位宽不一致处理7
1.1.9 struct{ }结构体的使用8
1.2 ARM汇编语言10
1.2.1 学习方法介绍10
1.2.2 ARM微处理器的指令的分类与格式11
1.2.3 指令的条件域12
1.2.4 指令的寻址方式12
1.2.5 ARM汇编的指令分类讲解及示例14
1.2.6 GNU ARM汇编的格式29
1.3 ARM汇编和C语言的混合编程的实例30
1.3.1 在C语言程序中内嵌汇编实例30
1.3.2 在汇编中使用C语言程序定义的全局变量实例31
1.3.3 在C语言程序中调用汇编的函数实例32
1.3.4 在汇编中调用C语言的函数实例33
1.4 本章小结33
第2章 嵌入式开发的软件结构35
2.1 轮询方式的嵌入式软件结构及实例35
2.2 带中断处理的软件结构及实例37
2.2.1 中断37
2.2.2 中断处理程序及中断向量38
2.2.3 软件结构及实例40
2.3 本章小结42
第3章 嵌入式操作系统43
3.1 嵌入式操作系统概述43
3.1.1 嵌入式操作系统的发展43
3.1.2 嵌入式操作系统选型44
3.1.3 几种典型的嵌入式操作系统45
3.2 嵌入式操作系统的重要概念47
3.2.1 代码的临界区47
3.2.2 进程及进程结构体48
3.2.3 进程的状态51
3.2.4 可剥夺的内核51
3.3 进程调度程序实例解析52
3.3.1 基于映射表(Mapping Table)的μC/OSⅡ进程调度程序实例解析52
3.3.2 Linux 2.6.X的0(1)进程调度程序实例解析54
3.4 嵌入式文件系统实例57
3.4.1 yaffs 文件系统数据在NAND 上的存储方式58
3.4.2 SuperBlock结构59
3.4.3 文件在内存中的组织方式59
3.4.4 yaffs2文件系统实例解析60
3.5 板级支持包(BSP)72
3.6 本章小结74
第4章 嵌入式开发的硬件基础75
4.1 常用的电子元器件75
4.1.1 电阻76
4.1.2 电容77
4.1.3 二极管77
4.1.4 电感77
4.1.5 三极管78
4.1.6 运算放大器79
4.2 IC与硬件框图分析80
4.2.1 IC及封装方式80
4.2.2 电路框图及分析81
4.3 嵌入式处理器86
4.4 S3C2410/2440处理器介绍90
4.5 ARM嵌入式微处理器的选型91
4.6 本章小结92
第2部分 μC/OSII嵌入式开发
第5章 μC/OSII开发基础93
5.1 嵌入式实时操作系统93
5.2 μC/OSII开发要点及程序框架95
5.2.1 任务设计结构95
5.2.2 重要的μC/OSII函数96
5.2.3 μC/OSII的多任务机制98
5.3 μC/OSII的启动初始化过程实例解析99
5.4 本章小结100
第6章 μC/OSII的移植及应用实例101
6.1 ARM平台的μC/OSII移植实例101
6.1.1 移植需要的文件101
6.1.2 移植文件代码分析102
6.2 基于μC/OSII的网络协议栈Lwip移植实例109
6.2.1 Lwip简介110
6.2.2 Lwip的进程模型(process model)110
6.2.3 移植Lwip到μC/OSII实例111
6.3 μC/OSII的系统优化118
6.3.1 任务切换要保存的数据119
6.3.2 C语言编译器中变量在堆栈中的位置119
6.3.3 μC/OSII对任务栈的处理方法与缺陷119
6.3.4 共用空间的堆栈处理方法120
6.4 本章小结122
第3部分 嵌入式Linux开发
第7章 嵌入式Linux开发基础123
7.1 使用开发套件提供的编译环境123
7.1.1 Linux的交叉编译器123
7.1.2 使用开发套件提供的交叉编译环境124
7.2 自建交叉编译环境128
7.2.1 设置环境变量,准备源码及相关补丁128
7.2.2 准备源码包128
7.2.3 准备补丁128
7.2.4 编译GNU binutils129
7.2.5 准备内核头文件129
7.2.6 译编glibc头文件129
7.2.7 编译gcc第一阶段130
7.2.8 编译完整的gcc131
7.2.9 GNU交叉工具链的下载131
7.3 GNU交叉工具链的介绍与使用131
7.4 编译和配置BootLoader132
7.4.1 什么是BootLoader132
7.4.2 BootLoader启动方式132
7.4.3 常见的BootLoader134
7.4.4 vivi的编译与配置134
7.4.5 U-Boot的编译与配置137
7.5 Makefile文件及编写实例139
7.5.1 什么是Makefile139
7.5.2 程序的编译及链接140
7.5.3 Makefile编写要点141
7.5.4 Makefile的实例145
7.5.5 Makefile的编写规则147
7.5.6 Makefile中命令的编写实例153
7.5.7 正确在Makefile中使用变量156
7.5.8 使用条件判断162
7.5.9 make命令的执行165
7.6 本章小结168
第8章 嵌入式Linux系统的驱动程序开发169
8.1 Linux内核简介169
8.2 Linux重要的内核机制171
8.2.1 Linux的时钟机制171
8.2.2 Linux的软中断机制177
8.3 Linux的内核模块181
8.3.1 什么是内核模块(Kernel Model)181
8.3.2 内核模块编写方法181
8.3.3 内核模块实例183
8.3.4 内核模块常用的资源184
8.4 Linux驱动程序开发概要及基本流程186
8.5 字符设备驱动开发及实例192
8.5.1 LED的驱动程序实例192
8.5.2 键盘驱动程序实例194
8.5.3 串口驱动程序实例199
8.6 音频设备驱动开发及实例202
8.6.1 数字音频介绍202
8.6.2 音频信号的硬件接口203
8.6.3 Linux音频的编程接口204
8.6.4 Linux OSS音频设备驱动实例说明207
8.7 网络设备驱动开发及实例215
8.7.1 Linux核心数据结构sk_buff{ }215
8.7.2 Linux核心数据结构net_device{ }221
8.7.3 Linux网络驱动设计流程及开发实例228
8.8 Nand Flash驱动程序的编写实例235
8.8.1 Nand Flash原理介绍235
8.8.2 Nand Flash的驱动程序编写237
8.9 本章小结244
第9章 嵌入式Linux的Qt开发245
9.1 Qt/Embedded和Qtopia简介245
9.2 建立Qt/Embedded的开发环境246
9.2.1 安装与建立Qt 桌面运行环境246
9.2.2 对Qt/Embedded 进行交叉编译248
9.2.3 建立本机Qtopia 虚拟平台250
9.3 Qt程序设计基础及简单实例251
9.3.1 Qt程序的简单例子251
9.3.2 连接信号和响应函数252
9.3.3 排列控件253
9.3.4 建立对话框254
9.3.5 主窗口的创建257
9.4 Qt的信号和槽机制及实例260
9.4.1 信号和槽机制概述260
9.4.2 信号(signals)260
9.4.3 槽(slots)261
9.4.4 连接信号和槽261
9.4.5 元对象工具介绍263
9.4.6 信号和槽实例解析263
9.4.7 使用信号和槽之注意事项265
9.5 Qt的显示机制分析267
9.6 本章小结272
第10章 嵌入式Linux系统的网络协议栈273
10.1 TCP/IP协议及Linux协议栈概述273
10.1.1 TCP/IP协议概述273
10.1.2 Linux的网络协议栈274
10.2 ARP协议的实例276
10.3 IP协议及路由机制的实例283
10.3.1 数据结构分类283
10.3.2 邻接表(Neighbor Table)283
10.3.3 对路由缓存的分析285
10.3.4 网络层的重要函数285
10.3.5 IP层的辅助函数讨论307
10.4 Linux网络的QoS的支持308
10.4.1 Linux对QoS支持概述308
10.4.2 QoS重要数据结构309
10.4.3 QoS队列策略FIFO的分析310
10.4.4 复杂的QoS队列策略Token-Bucket Filter的分析313
10.4.5 注册一个QoS_ops319
10.4.6 创建一个Qdisc结构319
10.5 ICMP协议的实例分析323
10.5.1 重要的数据结构323
10.5.2 发送一个ICMP报文324
10.5.3 接收一个ICMP报文327
10.5.4 回应一个ICMP报文329
10.5.5 处理ICMP重定向数据包330
10.5.6 处理ICMP请求回应数据包330
10.5.7 处理ICMP时间请求数据包331
10.5.8 处理ICMP不可达数据包332
10.6 TCP协议的实例分析335
10.6.1 Linux中TCP的初始化335
10.6.2 TCP路径MTU的发现机制336
10.6.3 Linux的重传机制实现340
10.6.4 TCP的滑动窗口协议实现344
10.6.5 接受一个TCP连接346
10.6.6 TCP定时器机制实现348
10.7 本章小结350
第11章 嵌入式Linux系统的移植351
11.1 引导系统BootLoader的移植实例351
11.1.1 U-Boot的实现351
11.1.2 移植U-Boot356
11.2 uCLinux的移植实例360
11.2.1 BootLoader及内核解压360
11.2.2 几种内核启动方式介绍360
11.2.3 内核启动地址的确定360
11.2.4 系统入口分析361
11.2.5 内核引导过程分析362
11.3 Linux 2.6内核的移植实例373
11.3.1 准备Linux2.6.X内核373
11.3.2 修改Makefile文件374
11.3.3 设置Flash分区结构374
11.3.4 配置嵌入式Linux2.6内核377
11.4 Linux中网络驱动程序的移植实例382
11.4.1 移植步骤382
11.4.2 移植过程中的问题及解决方法385
11.5 本章小结388
……[看更多目录]
序言本书是讲解嵌入式系统开发的一本著作,完整地讨论了嵌入式开发必备的软、硬件基础知识,并且重点讲解了嵌入式开发的两个主要应用:驱动程序开发和嵌入式GUI程序开发。由于嵌入式系统开发有别于“一台PC就可以搞定”的纯软件开发,因此需要开发者有良好的软件开发技能,如:C/C++、汇编语言、操作系统等,同时还需要具备一定的硬件方面的知识,如:数字电路、计算机组成原理、接口电路等。而往往进入嵌入式开发领域的开发者要么以前是做软件开发的,对电路图、硬件驱动的原理等知识知之甚少,要么以前是一名硬件工程师,不太了解软件开发方面的基本要领,这些原因导致目前合格的嵌入式开发人员比较少。虽然已有不少关于嵌入式开发方面的优秀著作,但要么是针对水平较高的开发者编写,要么就是对嵌入式开发的某一个方面做深入的分析。这对刚涉及嵌入式开发的读者来说,会总觉得自己欠缺点什么,无法透彻理解其中的知识。
本书为了解决这个问题,特地提供给希望涉足嵌入式开发的朋友们以必要的、系统的知识,这也是本书的一个特色。在本书的第1部分中,比较详细地讨论了软件方面和硬件方面的必需了解和掌握的基本内容。第1章讨论嵌入式开发的最基本最重要的开发语言——C语言的基本技能,特别是在嵌入式环境下的一些使用方法。第2章讨论嵌入式开发的硬件基础,包括对必要的数字电路方面知识的介绍及以ARM为核心的S3C2410/S3C2440处理器的介绍。阅读完本章后,读者首先应该能够分析一个电路的基本作用,并且能够对以ARM为核心的系列处理器有个比较深刻的认识。对于只有一定程序设计经历的读者,建议深入阅读整个第1部分;对硬件方面已经比较熟悉的读者则可以只阅读第1章。本书的第2部分讨论如何构建一个比较简单的嵌入式软件,并以实时嵌入式操作系统μC/OSII为背景,首先分析其基本原理,然后结合具体的实例讨论其移植和相关应用。第3部分讨论比较复杂的嵌入式Linux系统,第7章着重讨论做嵌入式Linux的基础知识,包括重要的命令、开发环境的建立、交叉编译工具的建立与使用等。第8章在具备第1部分的软硬件基础的情况下讲解Linux驱动编写的基本方法,并且以几个典型的示例从基本的实现分析到驱动编写完整的向读者展示嵌入式Linux的驱动软件开发的基本流程及实现方法。第9章讨论采用Qt为嵌入式GUI的嵌入式软件开发,由于Qt的开发涉及的内容很广不可能全面去叙述,所以本书先讨论Qt程序设计的基本方法,然后重点讨论了Qt实现的一些核心机制,这些机制的学习对于深入理解Qt开发是很有必要的。由于通信和网络领域为嵌入式系统应用最广泛和成熟的领域之一,所以本书在第8章详细地分析了Linux平台下的部分重要的协议及网络控制机制,如TCP、UDP、IP、QoS、Congestion Control等,这也算本书的另一个特色。
文摘插图:
第1部分嵌入式开发必备基础
第3章嵌入式操作系统
在比较系统的介绍了开发语言和嵌入式操作系统的软件结构组织后,需要进一步深入的理解嵌入式操作系统。在单片机开发项目中,由于单片机的计算和处理能力,以及存储空间有限,一般很少涉及到使用嵌入式操作系统。但是随着应用的复杂程度不断提高,如:带触摸屏的PDA、智能手机、智能监控终端等复杂应用不断涌现,必须使用嵌入式操作系统来处理多任务、多应用。所以,嵌入式操作系统已经成为比较复杂的嵌入式系统极为重要的组成部分。本章,主要从原理的角度介绍嵌入式操作系统,向读者说明一个嵌入式操作系统的内部运作机制。而与嵌入式操作系统相关的开发实践,如:驱动设计,网络协议,图形界面及系统内核移植等本书将在后面以专门的章节加以详细的介绍。
3.1嵌入式操作系统概述
3.1.1嵌入式操作系统的发展
作为嵌入式系统(包括硬、软件系统)极为重要的组成部分,嵌入式操作系统通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、网络协议、图形界面、标准化浏览器等。嵌入式操作系统具有通用操作系统的基本特点,如能够有效管理越来越复杂的系统资源;能够把硬件虚拟化,使得开发人员从繁忙的驱动程序移植和维护中解脱出来;能够提供库函数、驱动程序、工具集,以及应用程序。与通用操作系统相比较,嵌入式操作系统在系统实时高效性、硬件的相关依赖性、软件固态化,以及应用的专用性等方面具有较为突出的特点。
嵌入式操作系统伴随着嵌入式系统的发展经历了4个比较明显的阶段。
第一阶段:无操作系统的嵌入算法阶段。以单芯片为核心的可编程控制器形式的系统,具有与监测、伺服、指示设备相配合的功能。应用于一些专业性极强的工业控制系统中,通过汇编语言编程对系统进行直接控制,运行结束后清除内存。系统结构和功能都相对单一,处理效率较低,存储容量较小,几乎没有用户接口。