专业嵌入式软件开发 全面走向高质高效编程PDF电子书下载
- 电子书积分:18 积分如何计算积分?
- 作 者:李云著
- 出 版 社:北京:电子工业出版社
- 出版年份:2012
- ISBN:9787121147838
- 页数:620 页
硬件篇 2
第1章 处理器的基本概念 2
1.1区分微处理器与微控制器 2
1.2寄存器 2
1.3处理器是如何启动的 4
1.4输入与输出 4
1.5指令与数据 5
1.6中断 6
1.7字节序 8
1.8边界对齐 10
1.9程序断点和数据断点 15
1.10内存管理单元 16
1.11缓存 17
1.12小结 18
第2章开发活动中的硬件问题 19
2.1两个案例 19
2.2案例的背后——信号完整性 19
2.3应对方法 21
2.4小结 21
工具篇 24
第3章make,开发环境全能管家 24
3.1从最简单的Makefile中了解规则 24
3.2创建基本的编译环境 29
3.2.1将规则运用于程序编译 30
3.2.2让Makefile更专业 34
3.3提高编译环境的实用性 48
3.3.1让编译环境更加有序 48
3.3.2提升依赖关系管理 51
3.4打造更专业的编译环境 67
3.4.1规划项目目录结构 68
3.4.2增进复用性 72
3.4.3支持头文件目录的指定 75
3.4.4实现库链接 77
3.4.5增强可使用性 82
3.4.6管理对库的依赖关系 84
3.4.7改善编译效率 87
3.4.8恰当地书写注释 89
3.5理解make的解析行为 90
3.6 Makefile的调试 91
3.7 make的常用选项 92
3.8活用make 92
3.9小结 94
第4章gcc,C语言编译器 96
4.1什么是交叉编译器 96
4.2 gcc幕后工作揭示 97
4.3实用的gcc选项 99
4.3.1解决宏错误的好帮手 99
4.3.2辅助编写汇编程序的好方法 100
4.3.3获取系统头文件路径 101
4.3.4产生映射文件 102
4.3.5通过选项定义宏 102
4.3.6生成依赖关系 103
4.3.7指定链接库 104
第5章binutils工具集,软件开发利器 107
5.1 addr2line,指令地址翻译器 108
5.2 ar,静态库生成器 111
5.3 nm,符号显示器 113
5.4 objdump,信息查看器 115
5.5 objcopy,段剪辑器 119
5.6 ranlib,库索引生成器 120
5.7 size,段大小观察器 121
5.8 strings,字符串窥视器 122
5.9 strip,程序文件瘦身器 124
第6章Id,链接器 125
6.1重定位的概念 125
6.2链接脚本 126
6.2.1段 128
6.2.2符号 129
6.2.3存储区域 130
6.2.4常用命令 131
6.3常用选项 137
6.3.1指定程序的入口点 137
6.3.2生成可重定位的中间文件 137
6.3.3指定链接脚本 138
练习与思考 138
第7章gdb,程序调试助手 139
7.1启动和退出gdb 139
7.2获取帮助 140
7.3调试程序 142
7.3.1断点设置 142
7.3.2控制程序运行 144
7.3.3检查程序 147
7.3.4提高调试效率 151
7.4查看符号表 152
7.5控制gdb的行为 153
编程语言篇 156
第8章掌握必要的汇编知识 156
8.1 as的语法 156
8.1.1宏 157
8.1.2汇编命令 157
8.1.3符号和标签 157
8.1.4汇编指令 158
8.2嵌入汇编的语法 158
第9章深入理解程序的结构 161
9.1段 161
9.1.1指令段 161
9.1.2数据段 162
9.2栈 166
9.3堆 168
9.4小结 169
第10章ABI/EABI规范,缔造程序兼容合约 170
10.1定义基本数据类型 171
10.2规范字节对齐处理 171
10.3分配寄存器的功能 173
10.4规定栈帧结构 174
10.4.1栈帧的含义和作用 175
10.4.2函数参数的传递方法 182
10.4.3函数返回值的返回方法 184
10.5小结 187
练习与思考 187
第11章 混淆指针与数组所导致的问题 188
11.1问题示例 188
11.2问题分析 189
11.2.1数组的内存模型 189
11.2.2指针的内存模型 190
11.3问题成因 191
11.4预防措施 193
11.5小结 194
第12章volatile,让我保持原样 195
设计篇 200
第13章设计,软件质量之本 200
13.1软件设计是什么 200
13.2软件质量的概念 201
13.3阻碍改善设计的常见观念 203
13.3.1测试是替罪羊或救命稻草 203
13.3.2资源永远不足 204
13.3.3不改变就可以规避风险 204
13.4如何提高设计能力 205
13.5设计模式、设计原则和设计思想 206
13.6放之四海皆适用的设计原则 207
13.6.1以人为本 207
13.6.2追求简单性 210
13.6.3让模块善始善终 211
13.6.4重视收集统计信息 212
13.6.5借助命名传达设计意图 213
13.6.6消除“审美告警” 215
13.6.7通过机制解决问题 215
13.6.8防止他人犯错 218
13.6.9考虑可查错性 220
13.7小结 221
第14章 模块管理,保障系统有序运行 222
14.1管理参照系 222
14.2设计思路 224
14.3程序实现 226
14.3.1引入模块标识 226
14.3.2实现层与级的表达 226
14.3.3系统状态和回调函数原型定义 228
14.3.4模块注册 228
14.3.5系统启动 230
14.3.6系统关闭 232
14.4 module示例程序 233
14.5模块管理的一些思考 235
14.6小结 235
练习与思考 235
第15章错误管理,不可或缺的用户需求 236
15.1表达错误的通用方法 236
15.1.1错误码格式 237
15.1.2定义方法 238
15.1.3使用示例 239
15.1.4提高可使用性 240
15.1.5定义和使用错误码的准则 246
15.2优化错误日志的输出 246
15.2.1传统方法 246
15.2.2更有效的方法 249
15.3平台和框架层的错误处理 251
15.4小结 251
第16章 目录结构管理,使项目进展更顺利 252
16.1规划目录结构的意义 252
16.1.1书架功能 252
16.1.2意识引导 252
16.1.3加速新手上手 253
16.2出色目录结构的特点 253
16.3一个示例 253
16.4小结 254
第17章 平台与框架开发,高质量软件打造之路 255
17.1区分系统库、平台和框架 255
17.1.1系统库 255
17.1.2平台 256
17.1.3框架 256
17.2本质和优点 257
17.3确立架构模型 258
17.4小结 259
第18章 可开发性设计,一种高效且经济的开发模式 260
18.1可开发性问题一瞥 260
18.2可开发性设计的内涵 261
18.3引入设备抽象层 261
18.4更复杂的设备抽象层 263
18.5图形界面的可开发性设计 264
18.5.1增强设备抽象层 264
18.5.2提供可视化编辑环境 264
18.6其他可开发性设计 264
18.7小结 265
操作系统篇 268
第19章引导加载器,系统启航者 268
19.1功能 268
19.2文件存储布局 269
19.3程序加载原理 270
19.4优点 274
19.5小结 274
练习与思考 275
第20章 任务,软件基本调度单元 276
20.1任务情景 278
20.1.1情景内容 278
20.1.2情景保存 279
20.1.3情景恢复 281
20.1.4情景切换 282
20.2任务调度 286
20.2.1调度算法 286
20.2.2调度器 290
20.3任务的生命周期 293
20.4任务控制 295
20.4.1任务创建 297
20.4.2任务启动 306
20.4.3任务删除 307
20.4.4任务挂起 309
20.4.5任务恢复 310
20.4.6任务睡眠 311
20.5竞争问题与中断控制 313
20.5.1竞争问题的产生 314
20.5.2通过中断控制解决竞争问题 315
20.5.3中断控制的嵌套问题 316
20.6任务与中断状态 317
20.7任务栈溢出检测 318
20.8滴答与空闲任务 320
20.9多任务环境控制 323
20.10任务模块管理 324
20.11taskv 1示例程序 326
20.12任务钩子函数 330
20.13任务变量 334
20.13.1 taskv2示例程序 334
20.13.2原理 336
20.13.3实现 337
20.14其他概念与思考 340
20.14.1抢占式任务与实时系统的关系 340
20.14.2影响任务切换效率的因素 341
20.14.3避免直接删除任务 341
20.14.4小心多任务设计被滥用 342
20.15小结 343
练习与思考 343
第21章 任务同步与通信,实现协同工作 345
21.1信号量 345
21.1.1应用场合 345
21.1.2程序实现 347
21.1.3 semaphore示例程序 358
21.2互斥锁 360
21.2.1应用场合 361
21.2.2程序实现 361
21.2.3 mutex示例程序 365
21.2.4优先级反转与继承 367
21.2.5递归锁 375
21.3事件 379
21.3.1应用场合 379
21.3.2程序实现 379
21.3.3 event示例程序 384
21.4消息队列 386
21.4.1应用场合 386
21.4.2程序实现 387
21.4.3实现消息队列 390
21.4.4 queue示例程序 396
21.4.5使用指南 398
21.5死锁及预防 399
21.6小结 399
练习与思考 400
第22章内存管理,协调动态内存的使用 401
22.1堆管理 401
22.1.1 heapvl示例程序 401
22.1.2程序实现 406
22.1.3设计改进 416
22.1.4支持内存泄漏检测 421
22.1.5实现内存溢出检测 431
22.1.6内存碎片问题 431
22.2内存池管理 432
22.2.1 mpool示例程序 432
22.2.2程序实现 436
22.2.3缓冲区泄漏检测 444
22.3小结 444
练习与思考 444
第23章 设备管理,方便与外设交互 445
23.1字符设备管理 445
23.2中断管理 447
23.2.1中断向量表 447
23.2.2中断控制 448
23.2.3中断状态管理 450
23.2.4设备与中断 451
23.2.5模块管理 451
23.3实现设备管理 452
23.3.1安装驱动程序 454
23.3.2注册设备 455
23.3.3打开设备 456
23.3.4关闭设备 458
23.3.5设备读写与控制 458
23.4设备驱动程序实现 459
23.4.1“滴答”设备 460
23.4.2控制台设备 462
23.4.3终止程序运行设备 464
23.5驱动安装与设备注册 466
23.6小结 468
练习与思考 468
第24章定时器,程序闹钟 469
24.1软件定时器分类 469
24.2设计思路 469
24.3中断回调定时器 470
24.3.1程序实现 470
24.3.2 tinmerv l示例程序 481
24.4定时误差 484
24.5提高遍历效率 484
24.6改善实时性 489
24.6.1实时性分析 490
24.6.2改进实时性 491
24.7任务回调定时器 494
24.7.1程序实现 494
24.7.2 timerv3示例程序 497
24.8小结 498
练习与思考 48
第25章CIearRTOS“实时”操作系统 499
25.1设计原则 499
25.2源程序目录管理 499
25.3让Makefile体现概念 502
25.4实现集中配置 503
25.5改进与移植 504
质量保证篇 508
第26章 质量保证导言 508
26.1软件开发的特点 508
26.1.1脑力密集型工作 508
26.1.2实现不具唯一性 508
26.1.3隐性成本高 509
26.1.4忽视的细节很容易被放大 509
26.1.5质量难以评估 509
26.2保证质量的关键要素 509
26.2.1完备的需求分析 510
26.2.2高质量的设计 510
26.2.3编程好习惯 510
26.2.4充分的验证 510
26.2.5必要的流程 511
26.2.6合适的工具 512
26.2.7言简意赅的文档 512
26.3质量保证需要系统性的方法论 512
26.3.1方法论=流程+工具 513
26.3.2构建有效方法论的核心手段 516
26.4走出质量困境的指导性思想 518
26.4.1从管理者的角度 518
26.4.2从工程师的角度 519
26.4.3从组织的角度 519
26.5小结 520
第27章编程好习惯,质量保证的基本条件 521
27.1终生受用的编程好习惯 521
27.1.1判断失败而非成功 521
27.1.2采用sizeof减少内存操作失误 522
27.1.3屏蔽编程语言特性 524
27.1.4恰当使用goto语句 527
27.1.5合理运用数组 529
27.1.6以逆序方式释放资源 530
27.1.7在模块对外接口中防范错误 531
27.1.8避免出现魔数 532
27.1.9利用编程语言特性提高效率 533
27.1.10复用代码提高维护性 534
27.1.11借助隐式初始化简化程序逻辑 536
27.1.12青睐小粒度锁 538
27.1.13精确包含头文件 539
27.1.14让模块的对外头文件保持简洁 541
27.1.15只暴露必要的变量和函数 542
27.1.16清除编译器报告的所有警告 542
27.2小结 543
第28章单元测试,被忽视的质量保证方法 544
28.1警惕单元测试无用论 544
28.2一个简单但不完善的单元测试例子 545
28.3构建单元测试框架 548
28.4无缝整合单元测试 555
28.4.1维护规则 557
28.42目录规划 557
28.4.3更改Makefile 559
28.4.4检查整合效果 566
28.5几个实施问题 569
28.6桩函数和打桩 570
28.7错误注入,一种可测试性设计 571
28.8平台开发与单元测试 576
28.9被测行为的确定性 576
28.10测试用例的有效性 577
28.11小结 578
第29章代码覆盖,单元测试效果的衡量指标 579
29.1了解代码覆盖工具 580
29.2无缝整合代码覆盖 584
29.2.1更改Makefile 584
29.2.2检查整合效果 586
29.3三个代码覆盖程度指标 587
29.4小结 588
第30章 静态分析,防止将失误带给用户 589
30.1认识静态分析工具 589
30.2无缝整合静态分析 596
30.2.1更改Makefile 596
30.2.2检查整合效果 601
30.3小结 602
第31章动态分析,使程序更健壮 603
31.1结识动态分析工具 604
31.2无缝整合动态分析 607
31.2.1更改Makefile 607
31.2.2检查整合效果 609
313小结 609
第32章 性能分析,让优化程序有的放矢 610
32.1初探性能分析工具 610
32.2无缝整合性能分析 612
32.2.1更改Makefile 613
32.2.2检查整合效果 614
32.3小结 615
第33章qBench,一个开发高质软件的工作台 616
参考资料 618
- 《2013数学奥林匹克试题集锦 走向IMO》2013年IMO中国国家集训队教练组编 2013
- 《区块链DAPP开发入门、代码实现、场景应用》李万胜著 2019
- 《软件工程》齐治昌,谭庆平,宁洪编著 2019
- 《高含硫气藏开发腐蚀控制技术与实践》唐永帆,张强 2018
- 《中国经典文化走向世界丛书 学术卷 2》龚海燕译 2019
- 《物联网与嵌入式技术及其在农业上的应用》马德新 2019
- 《新闻走向科学》吴勤如著 1992
- 《主题公园开发与管理》梁增贤编著 2019
- 《中南高校档案文化资源开发综合研究》涂上飙 2019
- 《普通高等职业教育计算机系列规划教材 Android Studio移动应用开发基础》(中国)吴绍根 2019
- 《往事与情怀》李云著 2019
- 《美丽城镇 台州实践》王岱霞,庞乾奎,毛丽云著 2019
- 《收官》庄逸云著 2019
- 《当代印尼棉兰华人社会发展研究:基于华人社团与社团领袖的田野考察》杨宏云著 2018
- 《远方有炊烟》张碧云著 2019
- 《中国著名学者律师 李云龙办案手记》李云龙 2018
- 《乐黛云讲比较文学》乐黛云著 2018
- 《海洋生物活性物质》迟玉森,张付云著 2017
- 《中国新经济》韩秀云著 2020
- 《一本万殊:《山海经》文化寻踪》汪晓云著 2019
- 《电子测量与仪器》人力资源和社会保障部教材办公室组织编写 2009
- 《少儿电子琴入门教程 双色图解版》灌木文化 2019
- 《指向核心素养 北京十一学校名师教学设计 英语 七年级 上 配人教版》周志英总主编 2019
- 《北京生态环境保护》《北京环境保护丛书》编委会编著 2018
- 《指向核心素养 北京十一学校名师教学设计 英语 九年级 上 配人教版》周志英总主编 2019
- 《通信电子电路原理及仿真设计》叶建芳 2019
- 《高等院校旅游专业系列教材 旅游企业岗位培训系列教材 新编北京导游英语》杨昆,鄢莉,谭明华 2019
- 《电子应用技术项目教程 第3版》王彰云 2019
- 《中国十大出版家》王震,贺越明著 1991
- 《近代民营出版机构的英语函授教育 以“商务、中华、开明”函授学校为个案 1915年-1946年版》丁伟 2017