上篇 3
第一章 概况 3
1.1嵌入式系统的基本概念 3
1.1.1嵌入式系统的概念和基本组成 3
1.1.2嵌入式系统发展新趋势和新技术 5
1.2嵌入式处理器 6
1.2.1冯·诺依曼结构与哈佛结构 7
1.2.2 CISC与RISC 8
1.2.3流水线技术 12
1.2.4信息存储的字节顺序 14
1.2.5基于ARM架构的嵌入式处理器 16
1.2.6基于MIPS架构的嵌入式微处理器 17
1.2.7基于PowerPC架构的嵌入式微处理器 18
1.2.8数字信号处理器(DSP) 19
1.2.9嵌入式微控制单元(MCU) 20
1.2.10嵌入式SoC 21
1.2.11嵌入式处理器的发展趋势 22
1.3嵌入式系统中的操作系统(EOS) 22
1.3.1嵌入式Linux操作系统 22
1.3.2 Windows CE操作系统 24
1.3.3 VxWorks操作系统 26
1.3.4其他嵌入式操作系统 27
1.3.5嵌入式实时操作系统的发展前景 27
1.4嵌入式系统的性能评价 28
1.4.1度量项目 28
1.4.2评价方法 30
1.4.3嵌入式系统处理器评估的主要指标 31
思考题 32
第二章 系统设计与实现的方法 33
2.1嵌入式系统总体设计方案 33
2.1.1嵌入式系统开发流程及特点 33
2.1.2嵌入式硬件系统开发 36
2.1.3嵌入式软件系统开发 37
2.2嵌入式系统中的调试与测试技术 42
2.2.1嵌入式系统硬件的调试与测试技术 43
2.2.2嵌入式系统软件的调试与测试技术 50
思考题 59
第三章ARM体系结构与编程方法 61
3.1 ARM处理器概述 61
3.1.1 ARM处理器特点 61
3.1.2 ARM处理器的版本简介 62
3.1.3 ARM处理器的应用选型 67
3.2 ARM体系结构 69
3.2.1 ARM处理器的工作模式和指令状态 69
3.2.2 ARM寄存器 71
3.2.3 ARM体系的异常中断 75
3.2.4 ARM处理器的寻址方式 78
3.3 ARM编程方法 81
3.3.1 ARM指令概述 81
3.3.2 ARM汇编程序设计 91
3.3.3 ARM混合编程 101
思考题 111
第四章 X86体系结构 112
4.1 X86的发展历程 112
4.2 X86体系结构的特点 113
4.2.1 X86的体系组成 113
4.2.2微处理器的类型和特点 116
4.2.3主板和芯片组的类型和特点 125
4.2.4存储器的类型和特点 131
4.2.5外部接口的类型和特点 134
4.3 X86的指令体系 138
4.3.1 X86代码段类型和存储地址 138
4.3.2指令的格式 138
4.4 X86的发展趋势 139
思考题 140
第五章 嵌入式系统中的硬件设计技术 141
5.1嵌入式系统硬件设计概述 141
5.2嵌入式系统的数字技术基础 141
5.2.1组合逻辑电路基础 142
5.2.2时序逻辑电路 146
5.2.3总线电路及信号驱动 150
5.2.4电平转换电路 153
5.2.5可编程逻辑器件基础 155
5.3电路硬件设计基础 158
5.3.1电路设计 158
5.3.2 PCB电路设计 160
5.4嵌入式系统电源设计技术 165
5.4.1电源接口技术 165
5.4.2电源管理技术 167
5.5嵌入式系统中的存储系统设计 170
5.6嵌入式系统中的总线技术 183
5.6.1 UART与RS-232C 184
5.6.2 USB总线及其体系结构 192
5.6.3 PCI局部总线介绍 200
5.6.4 VME总线 210
5.7 EDA技术在嵌入式系统硬件设计中的应用 213
5.7.1 EDA设计技术 213
5.7.2 ESDA技术的基本特征 213
5.7.3 EDA技术的基本设计方法 215
5.8电路可测性设计与抗干扰设计 216
5.8.1电路测试原理与可测性设计 216
5.8.2硬件抗干扰设计 217
思考题 220
第六章 嵌入式处理器与SoC设计技术 221
6.1 SoC片上系统简介 221
6.1.1 SoC的定义及特点 221
6.1.2 SoC的结构特点 225
6.1.3 SoC设计简介 227
6.1.4 SoC的发展展望 231
6.2处理器的SoC设计 233
6.2.1主要的设计语言 233
6.2.2 Leon系列处理器的设计 242
思考题 247
第七章 嵌入式Linux操作系统 248
7.1 Linux内核介绍 248
7.1.1操作系统和内核概述 249
7.1.2 Linux内核特点 249
7.1.3 Linux内核版本 250
7.2 Linux进程 251
7.2.1 Linux进程管理 251
7.2.2 Linux进程调度 257
7.3 Linux系统调用 261
7.3.1应用编程接口 262
7.3.2系统调用 263
7.4 Linux中断机制 266
7.4.1 Linux中断机制介绍 266
7.4.2中断处理上半部 268
7.4.3中断处理下半部 271
7.5 Linux内核同步机制 277
7.5.1内核同步基础 277
7.5.2内核同步方法 282
7.6 Linux内存管理 293
7.6.1页和区 293
7.6.2 slab分配器 297
7.6.3栈上静态内存分配 299
7.7虚拟文件系统 299
7.7.1文件系统抽象层 300
7.7.2 VFS对象及其数据结构 301
7.7.3 Linux的文件系统 307
思考题 307
第八章 WindRiver VxWorks实时操作系统 308
8.1 WindRiver VxWorks简介 308
8.2 VxWorks与wind内核 309
8.2.1实时系统 309
8.2.2 VxWorks实时内核与任务 311
8.3 VxWorks的设备驱动程序 325
8.3.1 VxWorks下的设备与设备驱动程序 325
8.3.2 VxWorks下常用设备驱动程序简要描述 330
8.3.3 VxWorks下中断处理 336
8.3.4高速缓存的一致性问题 339
8.4 VxWorks的板级支持包 340
8.4.1 VxWorks的板级支持包BSP概述 340
8.4.2 BSP的职责 341
8.5 VxWorks启动过程介绍 343
思考题 345
第九章 嵌入式GUI系统 346
9.1嵌入式GUI系统概述 346
9.1.1嵌入式GUI的基本特征 346
9.1.2嵌入式系统常用GUI 347
9.1.3嵌入式GUI的发展趋势 348
9.2嵌入式GUI实现 349
9.2.1嵌入式GUI总体设计 349
9.2.2 MiniGUI体系结构分析 350
9.2.3 Qtopia Core体系结构分析 354
9.2.4其他嵌入式GUI 359
9.3关于嵌入式GUI的其他 363
问题 363
9.3.1多语言支持 363
9.3.2嵌入式高级图形窗口处理技术 364
9.3.3触摸屏操作 366
思考题 368
下篇 371
实验一ARM-Linux开发工具链的建立 371
1.1MX1ADS的ARM-Linux开发工具链 371
1.2实验表单 371
1.3附加说明 372
实验二MX1ADS硬件测试实验 374
2.1背景知识 374
2.1.1 Bootstrap模式 374
2.1.2程序编写和测试流程 375
2.2 PWM测试实验 377
2.2.1 PWM背景知识 377
2.2.2实验表单 378
2.2.3附加说明 380
2.3 UART测试实验 381
2.3.1 UART背景知识 381
2.3.2实验表单 383
2.3.3附加说明 385
2.4 LCD测试实验 387
2.4.1背景知识 387
2.4.2实验表单 388
2.4.3附加说明 390
实验三 嵌入式Linux基本实验 391
3.1 Bootloader的编译和下载 391
3.1.1背景知识 391
3.1.2实验表单 405
3.1.3附加说明 408
3.2 Linux内核配置与编译 408
3.2.1背景知识 408
3.2.2 ARM-Linux内核启动分析 425
3.2.3实验表单 444
3.2.4附加说明 445
3.3基本Linux程序编译实验 447
3.3.1背景知识 447
3.3.2实验表单 448
3.4移植MP3播放软件 449
3.4.1背景知识 449
3.4.2实验表单 450
3.4.3附加说明 452
实验四Qt/Embedded程序设计 454
4.1嵌入式GUI简介 454
4.2 Qt的分析与移植 455
4.2.1 Qt的基本概念和特点 455
4.2.2 Qt Embedded的应用程序开发 460
4.3基于Qt/Embedded的实验 466
4.3.1基于Qt的Hello World实验 466
4.3.2简单的正弦波动画演示程序 474
4.3.3基于Qt/Embedded的串口通信程序 483
实验五 嵌入式Linux驱动程序 489
5.1引言 489
5.2基础知识 489
5.2.1 Linux驱动程序简介 489
5.2.2设备的分类 490
5.2.3内核模块基本实现函数介绍 492
5.3 Linux串口驱动程序 504
5.3.1终端设备和控制台 504
5.3.2代码分析 505
5.4 MX1 ADS的I2C驱动程序 509
5.4.1 MX1ADS上的I2C总线 509
5.4.2 MC9328MX1中的I2C模块编程模型 510
5.4.3 I2C总线驱动与基于I2C总线的设备驱动 515
5.4.4 MC9328MX1的I2C总线驱动程序 515
5.4.5 I2C设备驱动程序的设计 527
5.5 Framebuffer驱动程序 534
5.5.1 Framebuffer 534
5.5.2 Framebuffer驱动程序 535
5.5.3向内核添加Framebuffer设备 540
5.5.4测试Framebuffer设备驱动程序 541
5.6触摸屏驱动程序设计 543
5.6.1触摸屏的基本工作原理 543
5.6.2触摸屏驱动程序 544
5.7实验表单 549
5.8附加说明 550
实验六 SDL图形编程 552
6.1引言 552
6.2基础知识 552
6.2.1子系统的功能 552
6.2.2 SDL编程示例 553
6.3实验表单 565
6.4附加说明 567
实验七 VoIP语音通信实验 569
7.1引言 569
7.2基础知识 570
7.2.1 VoIP的技术特点 570
7.2.2 VoIP的基本传输过程 570
7.2.3 VoIP协议体系 572
7.2.4基于OpenH323的VoIP系统实现方案 576
7.3 VoIP协议栈及语音通信应用程序的移植实现 579
7.3.1系统库移植 579
7.3.2网络库移植 580
7.3.3音频库移植 583
7.3.4跨平台的应用程序PWlib库的移植 584
7.3.5 OpenH323移植 585
7.4 VoIP语音通信试验的验证 586
7.5实验表单 587
7.6附加说明 588
实验八Linux根文件系统的移植 590
8.1引言 590
8.2基础知识 591
8.2.1 Linux文件系统简介 591
8.2.2 Linux文件类型 592
8.2.3 Linux文件系统目录结构 593
8.2.4基于Flash的文件系统类型简介 595
8.3根文件系统在嵌入式系统中的移植 596
8.3.1内核配置 596
8.3.2必要的顶层根文件系统目录创建 598
8.3.3应用程序链接库/lib的创建 598
8.3.4设备文件的创建 599
8.3.5主要的系统命令集创建 600
8.3.6系统初始化脚本创建 601
8.3.7生成根文件系统映像 603
8.4实验表单 603
实验九 专题实验——电子飞行仪表系统 605
9.1概述和系统方案论证 605
9.1.1题目概述 605
9.1.2性能指标 606
9.1.3方案论证 607
9.2电子综合显示和告警系统 608
9.2.1设计指标 608
9.2.2电子综合显示与告警系统的框架分析 609
9.2.3电子综合显示系统的图形设计 610
9.2.4告警系统的设计 615
9.3飞行数据采集系统软硬件设计 616
9.3.1数据采集系统技术指标的提出 616
9.3.2对飞行参数数据源的分析 617
9.3.3方案论证和比较 617
9.3.4采集系统的硬件设计 619
9.3.5采集系统的软件设计 619
9.4数据通信系统的设计与实现 622
9.4.1概述 622
9.4.2数据通信的方案设计 622
9.4.3数据通信的实现原理 622
9.4.4帧格式和数据的提取 623
9.5传感器和信号调理系统的实现 626
9.6 EFIS系统的扩展功能——黑匣子 626
9.7 EFIS系统测试和分析 627
9.7.1测试方案概述 627
9.7.2测试设备 627
9.7.3测试方案和结果分析 628
9.8总结 633
实验十 专题实验——智能家居综合系统 635
10.1系统需求分析 635
10.2系统开发平台 635
10.3系统架构设计 636
10.4系统级实现 637
10.5软件实现 639
10.5.1移植Qt/Embedded 639
10.5.2图形界面实现 641
10.5.3无线音乐点播 643
10.5.4中文化以及短信收发 644
10.6驱动程序实现 647
10.6.1嵌入式系统驱动程序概述 647
10.6.2驱动程序开发策略 648
10.6.3 U盘驱动开发 649
10.6.4无线网卡驱动开发 650
10.6.5 MMC卡驱动程序开发过程 652
10.6.6蓝牙传输卡开发过程 655
10.7外围硬件系统实现 656
10.7.1外围硬件方案论证以及设计目标 656
10.7.2外围硬件实现原理 656
10.7.3外围硬件系统软件实现 657
10.7.4功能总述 660
10.7.5程序运行热点分析 661
附录 371
附录一 MX1ADS Linux系统使用手册 665
1.1前言 665
1.2 MX1 ADS使用须知 665
1.2.1软件资源 665
1.2.2硬件资源 666
1.2.3电缆连接 666
1.2.4 Linux系统安装方法 666
1.2.5网络配置 672
1.2.6挂载NFS分区和RAMFS分区 673
1.2.7加载QTOPIA应用程序 673
1.2.8 USB Client 674
1.2.9键盘 675
1.2.10立体声音频 675
1.2.11 MMC卡 675
1.2.12电源管理 676
1.2.13 CMOS传感器 676
1.2.14 MMA模块 677
1.2.15 PWM模块 679
1.2.16演示程序清单 680
1.2.17设备文件清单 680
1.3构建MX1 ADS平台的Linux系统 681
1.3.1安装工具链 681
1.3.2由源代码建立MX1 ADS启动加载程序 682
1.3.3由源代码编译Linux内核 682
1.3.4创建JFFS2文件系统镜像 683
附录二 MX1ADS硬件使用手册 685
2.1概述 685
2.1.1总述 685
2.1.2功能部件 685
2.1.3系统与使用需求 685
2.1.4 MX1 ADS结构图 686
2.1.5 LCD显示屏板结构图 687
2.1.6规格说明 687
2.2 MX1ADS结构与操作 688
2.2.1板级开关 688
2.2.2 MX1ADS使用方法 690
2.2.3板上接口的使用 697
2.2.4附加模块的接口和使用 698
2.3配套信息 698
2.3.1 UART接口 698
2.3.2 MultiICE接口 699
2.3.3以太网接口 700
2.3.4 USB接口 701
2.3.5 LCD显示屏接口 701
2.3.6 SIM卡接口 702
2.3.7记忆棒接口 703
2.3.8 SD/MMC接口 704
2.3.9蓝牙接口 705
2.3.10 CSI图像传感器接口 705
英文缩略语对照表 707
参考文献 711