《嵌入式软件开发及C语言实现 MiniGUI剖析》PDF下载

  • 购买积分:13 如何计算积分?
  • 作  者:魏永明著
  • 出 版 社:北京:电子工业出版社
  • 出版年份:2008
  • ISBN:7121063093
  • 页数:400 页
图书介绍:随着高端消费类电子产品(智能手机、便携式移动多媒体终端、可视电话、IPTV等)的广泛应用,嵌入式产品的开发越来越得到开发人员及厂商的关注。本书以嵌入式产品开发中最热门的技术——嵌入式图形中间件技术为例,通过剖析业内广泛使用的嵌入式图形中间件MiniGUI,讲述使用C语言开发嵌入式软件过程中的常见问题及其解决办法,从而帮助读者了解嵌入式软件的开发过程及原理,掌握嵌入式软件开发的常见工具及一般性方法,并学习如何恰当采用设计技巧来提升嵌入式软件的可移植性、性能及可维护性等。

第一篇 使用嵌入式开发工具 2

第1章 综述 2

1.1 常用嵌入式操作系统 2

1.1.1 实时嵌入式操作系统的一般结构 2

1.1.2 常用(实时)嵌入式操作系统 2

1.2 嵌入式Linux/uClinux 4

1.3 eCos操作系统 5

1.4 MiniGUI简介 6

1.4.1 嵌入式产品开发中常用的图形解决方案 6

1.4.2 MiniGUI的起源和发展 7

1.4.3 基于MiniGUI的嵌入式系统软件结构 8

1.4.4 MiniGUI的运行模式 8

1.5 嵌入式软件的开发过程及相关概念 10

1.5.1 一般开发过程 10

1.5.2 交叉编译 10

1.5.3 内核移植 12

1.5.4 驱动程序开发 12

1.5.5 应用软件开发及调试 12

1.6 小结 13

第2章 运行嵌入式操作系统 14

2.1 嵌入式Linux的体系结构 14

2.1.1 Linux系统的构成 14

2.1.2 内核 15

2.1.3 根文件系统 17

2.1.4 函数库和应用程序 18

2.2 嵌入式Linux的开发流程、方法和开发环境 18

2.2.1 基本的开发流程和方法 18

2.2.2 建立开发环境 19

2.2.3 GNU交叉开发工具链 21

2.2.4 终端模拟程序 22

2.3 系统引导 23

2.3.1 嵌入式Linux的启动过程 23

2.3.2 引导装载器 24

2.3.3 系统引导方式 25

2.4 内核的选择、编译与安装 25

2.4.1 选择内核 25

2.4.2 配置和编译内核 26

2.5 准备根文件系统 28

2.5.1 根文件系统的基本结构 29

2.5.2 函数库 29

2.5.3 内核映像和内核模块 30

2.5.4 设备文件 31

2.5.5 安装系统程序 32

2.5.6 系统初始化 32

2.6 选择和安装文件系统 35

2.6.1 存储设备和文件系统 35

2.6.2 各种类型文件系统的特性 36

2.6.3 使用NFS 37

2.6.4 CRAMFS 38

2.6.5 JFFS2 39

2.6.6 ROMFS 39

2.6.7 使用RAM disk 40

2.7 在SkyEye上运行ARM Linux 44

2.7.1 安装SkyEye 45

2.7.2 安装交叉编译工具链 46

2.7.3 配置、编译和运行内核 47

2.7.4 构建根文件系统 51

2.8 在Xcopilot上运行uClinux 59

2.8.1 安装Xcopilot 60

2.8.2 安装交叉编译工具链 60

2.8.3 配置、编译和运行uClinux 60

2.9 运行eCos的Linux Synthetic目标 64

2.9.1 获取并安装eCos及其开发工具 65

2.9.2 配置并编译eCos 65

2.9.3 编译eCos Linux Synthetic应用程序 68

2.10 小结 69

第3章 编译并运行嵌入式应用程序 71

3.1 交叉编译及相关工具 71

3.2 利用Makefile维护嵌入式应用工程 78

3.2.1 make和makefile的简单回顾 78

3.2.2 编写针对交叉编译的Makefile文件 80

3.2.3 将应用程序放到uClinux-dist中编译 83

3.3 利用Automake/Autoconf维护嵌入式软件工程 84

3.3.1 准备源代码树 85

3.3.2 准备configure.in文件 86

3.3.3 准备Makefile.am文件 87

3.3.4 生成configure文件及makefile文件 88

3.3.5 增强configure.in文件使之支持交叉编译 89

3.4 交叉编译开源软件 90

3.4.1 交叉编译zlib函数库 90

3.4.2 交叉编译JPEG函数库 91

3.5 Cygwin环境简介 92

3.6 小结 93

第4章 在PC上运行MiniGUI 94

4.1 了解MiniGUI 94

4.2 在Linux PC上运行MiniGUI 96

4.2.1 安装MiniGUI的Linux PC开发包 96

4.2.2 建立MiniGUI的PC运行环境 96

4.2.3 运行MiniGUI示例程序 101

4.3 维护MiniGUI应用软件工程 103

4.3.1 MiniGUI应用程序的链接选项 103

4.3.2 利用Automake/Autoconf脚本维护MiniGUI工程 103

4.4 快速掌握MiniGUI应用软件开发 108

4.4.1 “Hello,world”程序版本一:直接输出屏幕 108

4.4.2 “Hello,world”程序版本二:主窗口版本 110

4.4.3 “Hello,world”程序版本三:使用控件 114

4.4.4 “Hello,world”程序版本四:使用对话框模板 115

4.5 定制编译MiniGUI GPL版本 118

4.5.1 MiniGUI-GPL源代码包的组成 118

4.5.2 定制MiniGUI-GPL版本 118

4.6 小结 121

第5章 在嵌入式操作系统上运行MiniGUI 122

5.1 在嵌入式操作系统中访问设备 122

5.1.1 再论“Hello,world”程序 122

5.1.2 访问图形设备 122

5.1.3 访问输入设备 128

5.2 在SkyEye的EP7312模拟器上运行MiniGUI 131

5.2.1 确认内核配置 131

5.2.2 SkyEye EP7312模拟器的MiniGUI输入引擎 133

5.2.3 为SkyEye的EP7312模拟器交叉编译MiniGUI 134

5.2.4 在SkyEye的EP7312模拟器上运行MiniGUI示例程序 136

5.3 在Xcopilot模拟器上运行MiniGUI 140

5.3.1 确认内核及uClibc配置 140

5.3.2 Xcopilot模拟器的MiniGUI输入引擎 142

5.3.3 为Xcopilot模拟器交叉编译MiniGUI 143

5.3.4 在Xcopilot模拟器上运行MiniGUI示例程序 146

5.4 小结 149

第二篇 嵌入式应用软件开发的特殊性 152

第6章 嵌入式软件和桌面软件的主要不同 152

6.1 嵌入式软件的特殊性 152

6.2 嵌入式软件开发中的常见问题 153

6.2.1 程序入口 153

6.2.2 避免命名污染 155

6.2.3 编译器的兼容性问题 157

6.2.4 采用宏实现的标准库函数 159

6.2.5 在嵌入式系统中应慎用的标准C函数 161

6.3 嵌入式软件开发中的其他重要问题 162

6.4 小结 162

第7章 嵌入式处理器的特殊性 164

7.1 处理器和字节序 164

7.2 识别目标系统的字节序 166

7.3 编写字节序无关程序 168

7.4 字节对齐 171

7.5 小结 173

第8章 嵌入式系统中的内存管理 174

8.1 虚拟内存技术介绍 174

8.1.1 虚拟内存模型 174

8.1.2 内存映射和需求分页 176

8.13 写时复制 176

8.2 Linux中的虚拟内存技术 177

8.2.1 Linux的进程地址空间 177

8.2.2 Linux进程虚拟地址空间的使用 178

8.2.3 Linux提供的内存相关系统调用 180

8.2.4 基于虚拟内存技术的共享内存 180

8.3 嵌入式操作系统中的内存管理 181

8.3.1 堆的概念 181

8.3.2 嵌入式操作系统的堆 181

8.3.3 C程序的栈 184

8.4 uClibc提供的三种堆实现算法 185

8.4.1 基于“匿名映射”的堆实现算法 185

8.4.2 标准堆实现算法 186

8.4.3 其他堆实现算法 187

8.5 栈的管理 187

8.5.1 多任务环境下的栈 187

8.5.2 uClinux进程的栈 188

8.5.3 POSIX线程的栈 188

8.6 小结 189

第9章 浮点运算和定点运算 190

9.1 浮点支持的软件实现 190

9.1.1 浮点仿真器 191

9.1.2 浮点运算的纯软件实现 192

9.1.3 浮点数的类型及存储格式 192

9.1.4 浮点数的字节序 194

9.2 将浮点运算转化成整数运算 194

9.2.1 触摸屏校正 195

9.2.2 计算机图形学中的插补算法 202

9.3 定点数 207

9.3.1 定点数的概念 207

9.3.2 MiniGUI中的定点数实现 207

9.4 小结 210

第10章 外部数据的处理 211

10.1 嵌入式操作系统中的文件系统 211

10.1.1 Linux的文件系统组织方式 211

10.1.2 其他嵌入式操作系统中的文件系统组织 215

10.1.3 嵌入式系统中常用的文件系统 215

10.2 嵌入式操作系统提供的文件系统及文件操作 221

10.2.1 ISO C定义的标准I/O接口 221

10.2.2 POSIX标准定义的文件系统及文件操作 225

10.2.3 uC/OS-II提供的文件系统及文件操作 228

10.3 外部文件的特殊处理方法 229

10.3.1 Linux中的内存映射 229

10.3.2 将文件数据内嵌到程序中 231

10.3.3 压缩数据 231

10.4 小结 232

第11章 在C程序中内嵌汇编 233

11.1 内嵌汇编的概念 233

11.2 GCC的内嵌汇编语法 233

11.2.1 内嵌汇编的基本规则 233

11.2.2 内嵌汇编语法 234

11.2.3 操作数约束 236

11.2.4 约束的修饰词 237

11.3 常见内嵌汇编例程 237

11.3.1 strcpy的内嵌汇编版本 237

11.3.2 memcpy的特殊版本 238

11.3.3 memset的两个特殊版本 238

11.3.4 反向复制 239

11.4 小结 240

第三篇 MiniGUI剖析 242

第12章 MiniGUI的体系结构 242

12.1 MiniGUI体系概览 242

12.2 MiniGUI-Threads运行模式 244

12.2.1 线程的概念和POSIX线程接口 244

12.2.2 基于POSIX线程的微客户-服务器结构 250

12.2.3 多线程通信的关键数据结构——消息队列 251

12.3 MiniGUI-Processes运行模式 254

12.3.1 MiniGUI-Processes的多进程模型 255

12.3.2 UNIX域套接字简介 256

12.3.3 简单请求/应答处理 257

12.3.4 UNIX域套接字封装 259

12.4 MiniGUI窗口管理 262

12.4.1 窗口Z序 262

12.4.2 窗口剪切算法 262

12.5 小结 267

第13章 灵活运用设计模式 268

13.1 什么是设计模式 268

13.2 有效隔离数据和代码 270

13.2.1 对话框模板 270

13.2.2 界面封装接口 276

13.2.3 组合框的整数输出格式 285

13.3 回调函数 285

13.3.1 窗口过程函数 285

13.3.2 通知回调函数 287

13.3.3 曲线生成器 288

13.4 使用句柄隐藏内部实现 292

13.5 面向对象技术 292

13.6 小结 292

第14章 面向对象技术的运用 293

14.1 控件和控件类 293

14.1.1 控件和控件类的概念 293

14.1.2 MiniGUI控件类的实现 296

14.1.3 MiniGUI中控件数据结构 297

14.2 逻辑字体及对多种字体和字符集的支持 299

14.2.1 逻辑字体、设备字体及字符集之间的关系 300

14.2.2 MiniGUI中的字符集支持 302

14.2.3 字符集的实现举例 305

14.2.4 MiniGUI中的字体支持 309

14.2.5 MiniGUI的设备字体支持 310

14.2.6 设备字体的实现举例 313

14.3 其他使用面向对象技术的模块 317

14.4 小结 317

第15章 可移植性及其实现 318

15.1 图形抽象层和输入抽象层 318

15.2 旧的图形抽象层 319

15.3 Native图形引擎的实现 325

15.3.1 Native引擎的子驱动程序 328

15.3.2 Native引擎的fbcon子引擎 330

15.3.3 Native引擎的qvfb子引擎 331

15.4 新的图形抽象层(NEWGAL) 333

15.5 输入抽象层 335

15.6 典型的输入引擎实现 340

15.6.1 Linux控制台输入引擎 340

15.6.2 针对iPAQ的输入引擎实现 344

15.7 编写可移植代码的其他考虑 349

15.7.1 MiniGUI的字节序相关读写函数 349

15.7.2 利用条件编译编写可移植代码 350

15.8 小结 352

第16章 降低程序的资源占用 353

16.1 两种位图装载的实现方法 353

16.1.1 位图相关的基本概念 353

16.1.2 设备相关位图和设备无关位图 355

16.1.3 MiniGUI-GPL版本位图装载接口的实现 359

16.1.4 MiniGUI V2.0.4版本位图装载接口的实现 365

16.2 巧用mmap 368

16.3 小结 372

第17章 抽象数据源接口 373

17.1 MiniGUI的抽象数据源接口 373

17.2 利用抽象数据源实现灵活的数据处理接口 376

17.3 MiniGUI的抽象数据源实现 382

17.4 自定义抽象数据源 384

17.5 小结 386

附录A 安装开发用Linux PC 387

A.1 安装Ubuntu Linux 7.04 387

A.2 安装常用软件包 388

附录B MiniGUI-GPL版本的配置选项 390

B.1 MiniGUI-GPL的编译配置选项 390

B.1.1 通用配置选项 391

B.1.2 MiniGUI-GPL配置选项 392

B.1.3 支持中文显示的最小MiniGUI-GPL函数库配置选项 394

B.2 MiniGUI-GPL的运行时配置文件——MiniGUI.cfg 395

B.2.1 system段 396

B.2.2 fbcon和qvfb段 396

B.2.3 systemfont段 396

B.2.4 rawbitmapfonts和varbitmapfonts段 397

B.2.5 mouse和event段 398

B.2.6 cursorinfo、iconinfo和bitmapinfo段 398

B.2.7 bgpicture段 398

B.2.8 mainwinmetrics和windowelementcolors段 398

B.2.9 只支持英文显示的最小配置文件 398