本书是关于中小型嵌入式系统方面的一本好书,全面而深入地讲解嵌入式微控制器系统的开发、设计、建造,直至最终产品的形成。本书并不拘泥于具体器件,而是分析一般性概念和方法,理论与实际相结合,阐述了汇编语言编程方法,并采用伪C语言描述;而且还以相当篇幅讨论C的编程方法。无论对于初学者还是有经验者,本书均提供了实际与深邃的启迪。
本书特点
●理论与实际相结合,作者在这一领域具有丰富的实践经验。
●不仅研讨在开发工具监控程序控制下的应用开发技术,而且还阐述了最终自立系统的开发和构筑。
●所列举实例,既可作为概念与方法的展示,也可用于实际系统开发的参考。
●专业人士潜心译就,行文流畅,具有专业水准的译者注释颇具启发性。
无
本书适合所有希望掌握中小型嵌入式系统技术的读者,原先本书是为电子工程技术专业学生而撰写的,但也适用于大多数工程专业的学生和实践工程师。目前本书正用作电子工程技术专业中两门一学期课程的教材。第一门是基于微处理器的应用方面的低年级必修课程;第二门是嵌入式系统方面的高年级选修课程。第一门只运用汇编语言编程;第二门则运用C语言。
学习本书的先修课程是电子电路、基本数字逻辑,及C语言基础编程。C语言编程课程仅对本书第四和第五部分是必要的。本书并没有包含C语言编程基础内容,因此读者需具有C或C++方面的基础知识,书中只讨论基于微控制器的嵌入式系统所必需的C语言概念和方法。
本书所用软件与硬件
在撰写关于嵌入式系统的书籍时,是强调硬件软件的某种具体产品,还是强调不偏于实践的一般原理,乃是难以权衡处理的问题。本书作者力图强调设计与调试中所用到的概念、过程、规范及方法。
本书重点使用Motorola的M68HC12微控制器,但也已成功地用于使用M68HC11系列的课程。本书旨在对供应商的文档资料加以补充,而不是替代。作者希望学生握有他们所用MCU和开发板的完整资料。若使用M68HC12,学生应有《CPU12参考手册》和相应部件的技术规格书。若使用M68HC11,著名的M68HC11参考手册》也是必要的。
全书所用的开发硬件是Motorola 68HC912B32 EVB。本书前半部分只需要用单板机开发,所有代码都加载入RAM。书的后半部分则需用后台调试系统,代码加载入目的机闪存(Flash ROM)。这要求或者使用两个EVB;或者使用一个EVB作为目的机,以及一个68HC12 BDM调试槽,诸如Noral 68HC12 BDM调试器。有关于调试过程和测试技术的概念应当适用于大多数现代开发系统。
书中所用的开发软件是IntrolCODE开发系统。除了具体讨论使用IntrolCODE系统进行开发的那些章节不使用C以外,书中还讨论使用C代码进行开发,C代码是符合ANSIC标准的,所以若使用别的C编译器,也是可以的。
本书所用的实时核是Micro C/OSII。它使用得很广泛,也容易获得它的源代码。其中许多概念也适用于其他种类的核,尤其是对典型核服务的应用。
内容梗概
本书分为五部分。书的前半部强调汇编代码,后半部则集中于C代码。全书都涉及硬件,尤其在第三部分。由于从第6章起使用了伪C代码,因此内容以强调C为主而非汇编也是合理的。
第一部分 引言。这部分向读者介绍学习有关嵌入式系统所需的背景知识及展望。
第二部分 汇编语言编程。这部分介绍汇编语言编程,涉及CPU12编程模型和程序的设计。学生在学完第3章后应当能够对预先编写的程序实施建造,并且在学完第6章后能编写由RAM中D-Bug12监控程序所执行的完整程序。第7章包含适合使用汇编程序的某些基本应用。
第三部分 微控制器硬件与I/O。这里介绍实时概念与I/O硬件,包括中断与基本多任务机制。除BDLC未作介绍外,68HC912B32 所有I/O资源均作介绍。第10章和第11章讨论用于自立系统且具有总线扩展的MCU配置。
第四部分 微控制器C编程。其中包括实时嵌入式系统C编程的相关概念。重点放在适用于小型MCU的存储器运用和程序效率问题。
第五部分 实时多任务核。本部分涉及结合使用MicroC/OSII(一个成品的核)的基本多任务设计。
致谢
若无如下所列人们的帮助,本书可能无法完成。他们是:Introl公司的Rich Pennington,Motorola大学和Austin社区学院的Jim Sibigtroth,Micrium的Jean Labrosse,Motorola的Tony Plutino和Dave Hyder,惠普公司的Marsh Faber和Mel Downs,Noral Micrologics的Phil Meek和Harry Erickson,PrenticeHall出版公司的Dave Garza及其同仁,WWU的Kathleen Kitto和Andrew Pace,ITT技术学院的George Sweiss,英国哥伦比亚理工学院的Malvern Phillips,Motorola 68HC11与68HC12资料的提供者,以及我的所有学生。
严隽永:暂无简介
本书是不可多得的一本关于中小型嵌入式系统的好书,也是一本适合用于相关专业教学的教科书。它既适合作为本科必修课程的教材,也适合作为研究生选修课程的教材或参考书。对于多数工程师也很有参考价值。
本书在理论与实际方面结合得很好。作者在这一领域具有丰富的实践经验。这本有价值的著作填补了该方面教科书和参考书的空白。无论对于初学者,还是有经验者,本书均提供了基本的和最新的有关信息,并联系实际应用提出了一些有用的启示。
本书对嵌入式微控制器进行了全面而深入的讨论。嵌入式微控制器是一种专门的集成器件,它用于各种各样的应用。它将存储器、微处理器和I/O接口组成为一体。本书乃是第一批基于Motorola MC68HC12微控制器族的书。
本书虽然以Motorola的CPU12(也提及CPU11)微控制器族为主讨论嵌入式微控制器系统的开发、设计、建造,直至最终产品的形成,但并不拘泥于具体器件,而是从中得出一般性概念和方法,这些也可应用于其他厂商的产品。本书在编程技术方面,不仅阐述了汇编语言编程,并采用伪C语言描述;而且还以相当篇幅讨论了C的编程方法,并指出与通用计算机程序开发之间的差异,这在一般C语言书籍中往往是不涉及的。人们知道,汇编语言不独立于硬件,而C语言是独立于硬件的,所以不失一般性。本书不仅研讨在开发工具监控程序控制下的应用开发技术,而且还阐述最终自立系统的开发和构筑,以及如何从前者过渡到后者。书中列举的实例,既可作为概念与方法的展示,也可用于实际系统开发的参考。
本书后部介绍了嵌入式核的开发与使用。有两类核:协同性核与抢占性核。讨论了自己开发核控程序的方法,还介绍了利用现成核产品MicroC/OS作为预编译库并裁制成产品所需的基本技术。
本书的写作风格严谨、细致,非常易于理解。但由于术语众多,内容广泛,翻译过程颇费斟酌,有时添加一些注释。译者尽可能使译文文字流畅,易于阅读理解,并做到术语前后一致且不失其惯用用法。但是译者水平有限,时间紧迫,不免有疏漏和失误之处,恳望读者不吝赐正。
在此也要感谢机械工业出版社华章分社的同仁和朋友们的积极支持与辛勤劳动,终将本书中译本完成出版。期望本书中译本对于我国的教学科研和生产实践有所裨益。
严隽永
2005年2月22日于法国格勒那勃
jyyan@dhueducn
henryyan@smartwintechcom
第一部分 引 言
第1章 微控制器引言
11 微型计算机
111 微处理器
112 总线系统
113 存储器类型和应用
114 I/O器件
12 68HC11和68HC12微控制器
13 历史概述
14 软件和硬件开发
141 概念与问题定义
142 要求与规格
143 体系结构的设计
144 详细设计和构筑
145 最终原型构筑和整合
146 评审
147 单元测试
148 发布
小结
习题
第二部分 汇编语言编程
第2章 编程基础
21 编程语言
211 机器语言
212 汇编语言
213 高级语言C
22 程序段类型
23 软件构筑
231 代码黑客
232 患有键盘恐惧症的完美主义者
233 成为好的程序员
234 构筑时段
小结
习题
第3章 简单汇编代码构筑
31 汇编源代码
311 程序内容与组织
312 汇编语言语法
313 汇编伪指令
32 基本建造过程
33 运行时调试——教学辅导
331 调试硬件配置
332 调试监控程序
333 加载S记录文件
334 寄存器和存储器内容显示及修改
335 软件断点
336 指令跟踪
337 其他调试工具
小结
习题
第4章 CPU12编程模型
41 CPU寄存器集
42 CPU12寻址方式
421 固有寻址
422 立即寻址
423 扩展与直接寻址
424 68HC11变址寻址
425 CPU12变址寻址
426 常量偏移变址寻址
427 自动递增与递减变址寻址
428 寄存器偏移变址寻址
429 变址间接寻址
4210 8位相对寻址
4211 CPU12长相对寻址方式
4212 大于64KB的寻址
43 CPU12指令集
小结
习题
第5章 基本汇编编程方法
51 数据传送
511 数据传送即数据复制
512 寄存器加载
513 加载有效地址
514 寄存器存入指令
515 传送与交换
516 交换指令
517 清零指令
518 CPU12移动指令
52 栈的运用
521 栈指令
522 CPU12栈操作
523 CPU11栈操作
524 栈的运用规则
53 基本算术编程
531 加法指令
532 8位二进制加法
533 多字节二进制加法
534 BCD加法
535 变址寄存器加法
536 减法指令
537 8位二进制减法
538 多字节二进制减法
539 BCD减法
5310 比较和测试
5311 递减和递增指令
54 移位和旋转
55 布尔逻辑、位测试和位操纵
551 布尔逻辑指令
552 位操纵
553 位测试
554 位测试与操纵指令
56 分支和跳转
561 跳转指令
562 分支
563 条件分支
564 长条件分支
565 位条件分支
57 子程序
571 子程序流程
572 子程序基本方法
58 位置独立性
581 位置不独立代码
582 源可重定位代码
583 目标可重定位代码
小结
习题
第6章 汇编语言程序的设计与结构
61 设计与文档工具
611 流程图
612 伪C语言
62 结构化控制构件
621 顺序构件
622 条件构件
623 循环构件
63 数据存储
631 数据对象
632 寄存器变量
633 全局变量
634 局部变量
64 程序结构
65 参数传递
651 参数传递类型
652 利用CPU寄存器
653 利用栈
654 利用全局变量通信
小结
习题
第7章 汇编应用
71 软件延迟例程
711 指令定时
712 延迟例程设计
72 I/O数据转换
721 ASCII转换
722 BCD与十六进制之间的转换
723 二进制转换
73 基本I/O例程
731 字符型I/O
732 字符串I/O
733 数据输入与输出
734 本节小结
74 定点算术
741 二进制小数与复合数
742 复合数所引起的误差
743 乘法
744 除法
小结
习题
第三部分 微控制器硬件与I/O
第8章 实时I/O与多任务引论
81 实时系统
82 CPU负荷
83 I/O检测和响应
831 无条件I/O
832 事件驱动I/O
833 硬件事件检测
834 基于中断的检测与响应
835 定时事件循环
836 开关去跳动与噪声避免
84 基本协同性多任务
841 任务与核
842 时间片循环性调度器
843 简单计时器举例
844 本节小结
85 CPU12中断的运用
851 CPU12中断源
852 CPU12中断处理过程
853 在DBug12下的中断运用
854 中断潜伏
855 多重中断和优先级
856 临界区
857 外部中断
858 软件中断
859 中断使用要点
86 基本实时调试
861 用DBug12进行实时调试
862 非侵犯性信号观察
863 硬件和软件辅助器
小结
习题
第9章 微控制器I/O资源
91 通用I/O
911 功能评述
912 接口
913 功率耗散限制
914 GPIO定时关系
92 定时器
921 定时器标帜模型
922 实时中断
923 标准定时器模块概述
924 输出比较
925 输出比较7
926 输入截获
927 脉冲累加器
928 脉冲宽度调制器
93 串行I/O
931 串行I/O背景知识
932 串行通信接口
933 串行外围接口
94 A2D转换
941 A2D转换背景知识
942 68HC12芯片内ADC
小结
习题
第10章 最终产品
101 MCU硬件设计
1011 电源
1012 功耗
1013 时钟
102 复位异常处理
1021 确定复位源
1022 外部复位
1023 容错异常处理
1024 复位电路
103 M68HC912B32操作模式
1031 正常单芯片模式
1032 特殊单芯片模式
1033 扩展模式
1034 改变内存分配图
104 配置和起始代码
1041 程序组织与内存分配图
1042 异常处理向量
1043 配置和初始化
105 最终产品开发
1051 传统过程
1052 利用芯片内EEPROM
1053 后台调试系统
1054 基于BDM的调试系统
小结
习题
第11章 系统扩展
111 总线周期
1111 68HC12读周期
1112 68HC12写周期
112 芯片选择逻辑
1121 确定器件块单元
1122 芯片选择逻辑方程与全解码
1123 芯片选择逻辑方程与偏解码
1124 68HC812A4可编程芯片选择
113 总线定时分析
1131 读周期定时
1132 写周期定时
小结
习题
第四部分 微控制器C编程
第12章 模块化与C代码构筑
121 C源代码
1211 C与汇编的比较
1212 C程序组成部分与组织
1213 语法与单词
1214 预处理器命令
1215 头文件
122 模块化建造过程
1221 项目目录
1222 建造过程
1223 节映射
1224 库
1225 执行建造过程
1226 生成的文件
1227 命令行界面
123 源级调试
1231 手工C代码调试
1232 使用源级调试器
小结
习题
第13章 创建与存取C数据
131 数据类型引言
1311 汇编中的数据类型
1312 数据类型检查
132 ANSIC数据类型
1321 对数据的存取
1322 基础性数据类型
1323 存储类修饰符
1324 作用域修饰符
1325 定义新类型
1326 数据类型转换
133 变量与存储常量
1331 变量
1332 存储常量
1333 具有绝对单元的数据
134 指针
1341 对于指针的操作
1342 指向绝对单元的指针
135 数组与串
1351 数组
1352 串
136 结构
137 枚举类型
138 位操作
1381 位测试
1382 位操纵
1383 位操作的可移植性
1384 结构位域
小结
习题
第14章 C程序结构
141 控制结构
1411 条件构件
1412 循环构件
142 函数
1421 main()函数
1422 函数的声明与定义
1423 参数传递
1424 函数与宏
1425 汇编函数
1426 中断服务例程
143 模块
1431 可移植性
1432 可靠性
1433 文件组织
1434 demo2项目举例
144 起始与初始化
1441 起始任务
1442 在DBug12下执行程序的起始代码
1443 自立程序
小结
习题
第五部分 实时多任务核
第15章 用C实现实时多任务
151 实时编程评述
1511 自立任务
1512 事件响应时间
152 实时核概论
1521 任务与核
1522 多任务CPU负荷
153 协同性核设计
1531 自由运行循环性调度器
1532 时间片循环性调度器
1533 互斥
1534 任务分解
1535 计时器实例
小结
习题
第16章 MicroC/OSII抢占性核的使用
161 概述
162 任务与任务切换
1621 任务切换
1622 任务设计
1623 任务栈
1624 任务变量
1625 任务优先级
163 中断服务例程
164 定时器
1641 μC/OS定时器服务
1642 用户设计的定时器事件
165 任务间通信
1651 全局变量
1652 信号量
1653 用信号量和全局变量传送消息
1654 消息信箱
1655 消息队列
166 基于μC/OS的计时器程序
小结
习题
附 录
附录A 编程规范
附录B 基本的I/O
附录C μC/OS参考
参考文献
索引