基本信息出版社:高等教育出版社
页码:234 页
出版日期:2008年04月
ISBN:7040161052
条形码:9787040161052
版本:第1版
装帧:平装
开本:16
正文语种:中文
外文书名:Fundamentals of Embedded Software:Where C and Assembly Meet
附带品描述:附VCD光盘1张
内容简介 《嵌入式软件基础:C语言与汇编的融合(翻译版)》是对高等院校本科二年级计算机组成原理与汇编语言程序设计的传统教材的全新替代版。《嵌入式软件基础:C语言与汇编的融合(翻译版)》以实践中最常运用的方式讲解汇编语言——实现小型、快速或特殊目的的例程,这些例程由主程序(高级语言编写,如C)调用。通过运用嵌入式软件环境,《嵌入式软件基础:C语言与汇编的融合(翻译版)》介绍多线程程序设计、可抢占式系统与非可抢占式系统、共享资源和调度,从而为操作系统、实时系统、计算机网络及基于多处理器的设计等后续课程提供了坚实的基础。
《嵌入式软件基础:C语言与汇编的融合(翻译版)》适用于高等院校工科各专业本科嵌入式计算机系统程序设计、C语言程序设计及汇编语言程序设计类课程,也可供相关技术人员学习参考。
编辑推荐 《嵌入式软件基础:C语言与汇编的融合(翻译版)》由高等教育出版社出版。
目录
序言
第1章 导论
1.1 什么是嵌入式系统
1.2 嵌入式软件设计目标有何独特之处
1.3 “实时”意味着什么
1.4 “多任务”意味着什么
1.5 嵌入式处理器的功能有多强
1.6 使用哪些编程语言
1.7 什么是“实时内核”
1.8 如何构建独特的嵌入式应用程序
1.9 典型的嵌入式程序有多大
1.10 本书中使用的软件
习题
第2章 数据表示
2.1 固定精度的二进制数字
2.1.1 按位记数制
2.1.2 二进制一十进制转换
2.1.3 十进制一二进制转换
2.1.4 计数
2.1.5 固定精度和翻转
2.1.6 十六进制表示
2.2 整数的二进制表示
2.2.1 带符号整数
2.2.2 同一个值的正的表示和负的表示
2.2.3 解释2的补码数的值
2.2.4 关于范围和溢出的进一步说明
2.2.5 2的补码和硬件复杂性
2.3 实数的二进制表示
2.3.1 定点表示
2.3.2 使用通用的16.16格式的定点表示
2.3.3 使用通用的32.32格式的定点表示
2.3.4 浮点表示
2.4 文本的ASCII表示
2.5 二进制编码的十进制表示
习题
第3章 充分利用C语言
3.1 整型数据类型
3.2 混合数据类型
3.3 有用的typedef和define
3.4 操纵内存中的位
3.4.1 测试位
3.4.2 设置、清除和反转位
3.4.3 提取位
3.4.4 插入位
3.5 操纵:I/O端口中的位
3.5.1 只写I/O端口
3.5.2 通过读/写区分的端口
3.5.3 通过顺序访问区分的端口
3.5.4 通过写入数据中的位区分的端口
3.6 访问内存映射的I/O设备
3.6.1 通过指针访问数据
3.6.2 数组、指针和“取地址”运算符
3.7 结构
3.7.1 打包的结构
3.7.2 位域
3.8 变型访问
3.8.1 强制转换对象的地址
3.8.2 使用共用体
习题
第4章 程序员眼中的计算机结构
4.1 内存
4.2 中央处理器
4.2.1 运算器
4.2.2 其他寄存器
4.2.3 控制器
4.3 输入/输出
4.4 Intel架构介绍
4.4.1 指令格式
4.4.2 指令操作数
4.4.3 操作数限制
4.4.4 寄存器
4.4.5 栈
4.5 Intel实模式架构
4.5.1 分段寻址
4.5.2 寻址模式
4.6 Intel保护模式架构:
4.6.1 段寄存器和全局描述符表
4.6.2 平坦内存模型
4.6.3 寻址模式
4.7 操作数与地址长度覆盖前缀
4.8 Intel数据操纵指令
4.8.1 数据移动、栈和I/O指令
4.8.2 算术指令
4.8.3 按位指令
4.8.4 移位指令
习题
第5章 C语言与汇编语言的融合
5.1 用汇编语言编程
5.2 寄存器使用约定
5.3 寻址选项的典型应用
5.3.1 访问地址为常量的数据
5.3.2 访问地址为变量的数据
5.4 指令序列
5.4.1 复合条件
5.4.2 If-Then-Else语句
5.4.3 建立循环
5.4.4 带字符串指令的更快的循环
5.5 过程调用和返回
5.6 参数传递
5.7 获取参数
5.8 一切都是按值传递
5.9 临时变量
习题
第6章 输入/输出编程
6.1 IntelI/O指令
6.2 同步、传送速率和等待时间
6.3 轮询的等待循环
6.4 中断驱动的I/O
6.4.1 硬件响应
6.4.2 中断服务例程
6.4.3 可编程中断控制器
6.4.4 缓冲区与队列
6.4.5 用汇编语言编写中斯服务例程
6.4.6 用C语言编写中断服务例程
6,4.7 不可屏蔽的中断
6.4.8 软件中断
6.4.9 异常
6.5 直接存储器存取
6.5.1 双缓冲
6.6 几种方法的比较
习题
第7章 并发软件
7.1 前台/后台系统
7.1.1 线程状态和串行化
7.1.2 管理等待时间
7.1.3 防止中断越界
7.1.4 将工作转移到后台
7.2 多线程编程
7.2.1 独立线程的并发执行
7.2.2 环境切换
7.2.3 非抢先式(协作式)多任务处理
7.2.4 抢先式多任务
7.3 共享资源和临界区
7.3.1 禁用中断
7.3.2 禁用任务切换
7.3.3 自旋锁
7.3.4 互斥对象
7.3.5 信号量
习题
第8章 调度
8.1 线程状态
8.2 挂起线程
8.3 环境切换
8.4 循环调度
8.5 基于优先级的调度
8.5.1 优先级倒置
8.5.2 优先级继承协议
8.5.3 优先级最高限度协议
8.6 分配优先级
8.6.1 截止期限驱动的调度
8.6.2 速率单调调度
8.7 死锁
8.8 监视计时器
习题
第9章 内存管理
9.1 C语言中的对象
9.2 作用域
9.2.1 进一步认识局部作用域
9.2.2 进一步认识全局作用域
9.3 生存期
9.4 自动分配
9.4.1 存储类“寄存器”
9.5 静态分配
9.6 用于区分静态与自动的3个程序
9.6.1 对象创建
9.6.2 对象初始化
9.6.3 对象析构
9.7 动态分配
9.7.1 内存碎片
9.7.2 内存分配池
9.8 可变大小的自动分配
9.8.1 可变大小的数组
9.9 递归函数与内存分配
习题
第10章 共享内存
10.1 识别共享对象
10.1.1 共享全局数据
10.1.2 共享私有数据
10.1.3 共享函数
10.2 可重入函数
10.3 只读数据
10.3.1 类型限定符const
10.4 应避免的编码习惯
10.4.1 在局部静态对象中保持内部状态的函数
10.4.2 返回局部静态对象地址的函数
10.5 访问共享内存
10.5.1 处理器字长的影响
10.5.2 只读和只写访问
10.5.3 类型限定符volatile
习题
第11章 系统初始化
11.1 内存布局
11.2 CPU
11.2.1 建立平坦内存模型
11.2.2 切换到保护模式
11.3 C运行时环境
11.3.1 从ROM复制到RAM户
11.3.2 将未初始化数据置
11.3.3 建立堆
11.4 系统计时器
11.4.1 计时器0:计时器滴答信号
11.4.2 计时器1:内存刷新
11.4.3 计时器2:扬声器频率
11.5 中断系统
11.5.1 初始化IDT
11.5.2 初始化8259PIC
11.5.3 安装新的中断服务例程
附录A 配书光盘上的内容
附录B DJGPPC/C++编译器
附录C NAsM汇编器
附录D 编程项目
附录E Libepe库
附录F 引导加载程序
附录G 词汇表
……
序言 你的家中有多少台计算机?大多数人可能会回答有两台或三台。你家中有多少个微处理器?在你回答前仔细考虑一下(提示:不止两三个!事实上,甚至会有10多个或20多个!)。今天,微处理器已嵌入到几乎所有你能想到的以及许多你可能想不到的电器中。它们已变得非常普及——不仅在我们家中,而且在我们的工作场所、我们的汽车、飞机、停车灯、超市、手机中——总之,在我们生活的几乎所有方面。
嵌入式系统为学生表达他们的创造力提供了一个令人兴奋的机会,他们梦想设计出下一代新的小器具,迎合大众的需要。作为教育工作者,我们的挑战是抓住这个激动人心的机会,并弓!导年轻人的精神活力,以激励他们掌握这个主题。目标
本书的最终目标是打下一个基础,为学生掌握多线程编程风格和嵌入式软件的高可靠性要求提供支持。在本教材中,我们建立了以下目标:
1.理解如何在机器级表示数据,认识到这些表示的后果和局限。
2.掌握嵌入式系统最常用的语言特有的特性,如位操纵和变量访问。
3.了解程序员如何看待处理器体系结构以及如何在汇编级编程,有时是必要的或合适的。
4.了解多种不同风格的I/O编程,并且最终了解如何通过事件驱动方法把数据处理隔离到许多独立的计算线程中。
5.了解非抢先式和抢先式多线程编程、共享资源和临界区,以及如何使用调度来管理系统响应时间。
6.复习作用域、参数传递、递归和内存分配这类主题,以强化基本的编程技能。
7.了解与共享内存对象有关的问题、内存分配如何影响共享内存以及可以使用哪些编程实践来最小化共享内存的发生。目标读者
本书打算用作计算机科学、计算机工程或电子王程专业课程二年级教材,用来代替计算机组织和汇编语言编程的传统教材。
本书介绍了实践中最常用的汇编方法——以实现小型、快速或专用例程供主程序调用,这些主程序是用诸如C之类的高级语言编写的。因此,本书仅从“须知”的观点出发来介绍处理器组织和汇编语言,而不是将其作为一个主要目标来讲解。这种方法为用本书讲授嵌入式软件环境中的汇编语言提供了时间保证。
文摘 插图:

当你想运行一个桌面应用程序时,就会通过操作系统的一部分(称为加载程序),把它的可执行映像从磁盘上加载到内存中。操作系统自身已经在内存中,它是在引导过程中加载到其中的”。
桌面系统用于运行许多不同的应用程序。因而,会使用读/写主内存,以使完全不同的应用程序能够快速、容易地加载到内存中,无论何时都可根据需要来替换先前的应用程序。
与通用的桌面系统不同的是,嵌入式系统被设计成为服务于单一目的。如果嵌入式软件已位于内存中,通常没有理由改变它。这使得使用价格低廉的只读存储器来永久性地存储该程序成为可能。由于没有必要把程序存储到磁盘上,因此可以显著削减软件数量,而这些软件可能是支持文件系统所必要的。
嵌入式应用的软件和实时内核都作为单一的程序映像存储在只读存储器中。由于不需要文件系统,因而其内核比常规的操作系统要小得多,并且能够很容易地连接到作为另一种对象文件的程序中。