搜索
高级检索
高级搜索
书       名 :
著       者 :
出  版  社 :
I  S  B  N:
文献来源:
出版时间 :
嵌入式软件
0.00    
图书来源: 浙江图书馆(由图书馆配书)
  • 配送范围:
    全国(除港澳台地区)
  • ISBN:
    9787121084447
  • 作      者:
    (美)Jean Labrosse等著
  • 出 版 社 :
    电子工业出版社
  • 出版日期:
    2009
收藏
内容介绍
  《嵌入式软件》涵盖了当前嵌入式软件领域的基本理论、研究动态、开发技巧和工具。为加深读者对内容的理解,书中还配备了大量的实例证明、分析及指导。通过对《嵌入式软件》的学习,读者不仅可以学会如何选择适当的技术和方法开发嵌入式软件,而且可以掌握如何从总体的角度,来全面规划和设计嵌入式软件系统。《嵌入式软件》体系完整、内容翔实,注重实用经验和技巧的分析、讨论,各章各有侧重又相辅相成,主要面向具有嵌入式系统基础知识的、从事嵌入式软件设计与开发的专业技术人员,对其他嵌入式技术领域的从业人员也颇具参考价值,也可供高等院校相关专业的师生学习。
展开
精彩书摘
  第1章 嵌入式编程的蒸本概念
  Keith Curtis
  本章的目的是为软件设计者介绍
  中出现的一些基本概念和术语,包括二进制数字系统、数据存储、基本通信协议、数学运算、条件语句、状态机和基本掩码等。这些概念不仅为了让设计者理解它们的操作,而且为设计者提供了充分的知识,在必要的情况下,设计者可以自己实现这些操作。尽管本章对理解全书并非必须的,但是仍然建议阅读。
  很容易理解为什么需要回顾状态机和掩码,而为什么不包含其他内容呢?为什么一个设计者会用“自己动手”的例程呢?这是一个高级语言应该做的事情。这是因为,在一个嵌入式系统中,运行速度、内存规模都是需要考虑的关键问题。了解一条指令是如何工作的,有助于设计者创建比语言内置的函数更小和/或更快更优化的函数。它也为设计者判定一条指令的实现是否高效提供了一个判断依据。因此,尽管为了编写一段掩码代码并不需要了解一条指令是怎样工作的,但是在嵌入式环境下编程时,这还是有价值的。
展开
目录
第1章 嵌入式编程的基本概念
1.1 数字系统
1.2 符号二进制数
1.2.1 定点二进制数
1.2.2 浮点二进制数
1.2.3 交互数字系统
1.2.4 二-十进制编码
1.2.5 ASCII
1.2.6 错误检测
1.3 数据结构
1.3.1 简单数据类型
1.3.2 复杂数据类型
1.4 通信协议
1.4.1 简单数据广播
1.4.2 事件驱动简单传输
1.4.3 事件驱动多元传输
1.5 数学
1.5.1 二进制加法和减法
1.5.2 二进制乘法
1.5.3 二进制除法
1.6 数值比较
1.6.1 条件语句
1.6.2 循环
1.6.3 其他流控制语句
1.7 状态机
1.7.1 数据索引状态机
1.7.2 执行索引状态机
1.7.3 混合状态机
1.8 多任务

第2章 设备驱动
2.1 本章梗概
2.2 实例1:中断处理的设备驱动程序
2.2.1 中断优先级
2.2.2 上下文切换
2.2.3 中断设备驱动程序的伪代码实例
2.2.4 中断处理和性能
2.3 实例2:存储器设备驱动程序
2.4 实例3:板级总线设备驱动程序
2.5 板级I/O驱动程序实例
2.5.1 实例4:初始化一个以太网驱动程序
2.5.2 实例5:初始化一个RS?驱动程序
2.6 本章小结

第3章 嵌入式操作系统
3.1 本章梗概
3.2 什么是进程
3.3 多任务和进程管理
3.3.1 进程执行
3.3.2 进程调度
3.3.3 任务间通信和同步
3.4 内存管理
3.4.1 用户内存空间
3.4.2 内核内存空间
3.5 I/O和文件系统管理
3.6 操作系统标准实例:POSIX(可移植操作系统接口)
3.7 操作系统性能指南
3.8 操作系统和板级支持包(BSP)
3.9 本章小结

第4章 组网
4.1 RCM3200 Rabbit Core的介绍
4.2 Dynamic C开发环境介绍
4.2.1 开发
4.2.2 调试
4.3 Dynamic C库简介
4.4 Dynamic C的内存空间
4.4.1 Rabbit的内存分段
4.4.2 Dynamic C中无独立的指令和数据空间时的内存使用
4.4.3 把函数放入XMEM
4.4.4 独立的指令和数据内存
4.4.5 综合所有内容
4.5 代码是如何编译和运行的
4.5.1 在传统开发环境下代码是如何被构建的
4.5.2 代码是如何在Dynamic C下构建的
4.6 将一台电脑设置为RCM开发系统
4.7 开始编写代码
4.7.1 项目:第一个Rabbit程序
4.7.2 Dynamic C的调试特性
4.7.3 Dynamic C帮助
4.7.4 单步调试
4.7.5 增加断点
4.7.6 监视表达式
4.7.7 Dynamic C不是ANSI C
4.7.8 Dynamic C存储空间
4.8 嵌入式网络
4.9 Dynamic C对于网络协议的支持
4.9.1 通用网络协议
4.9.2 Dynamic C库的可选模块
4.10 典型的网络设置
4.10.1 典型的企业网络
4.10.2 典型的家庭网络
4.11 建立核心模块的网络设置
4.11.1 设置IP地址
4.11.2 链路层的选择
4.11.3 在编译时定义TCP/IP
4.11.4 程序运行时的TCP/IP定义
4.11.5 调试网络宏命令
4.12 项目1:建立用于网络的Rabbit核心模块
4.12.1 静态地址的配置
4.12.2 配置动态地址
4.12.3 动态地址分配的特殊情况
4.13 客户端/服务器范例
4.14 Berkeley Sockets接口
4.15 嵌入式应用程序中TCP和UDP的比较
4.16 Socket编程中重要的Dynamic C库函数
4.16.1 用于通信初始化或通信终止的函数
4.16.2 用于确定Socket状态的函数
4.16.3 用于发送和接收数据的函数
4.16.4 阻塞函数和非阻塞函数
4.17 项目2:实现Rabbit TCP/IP服务器
4.17.1 服务器的TCP/IP状态机
4.17.2 和通用TCP工具一起工作
4.17.3 和Java TCP/IP客户端一起工作
4.17.4 和C++ TCP/IP客户端一起工作
4.18 项目3:实现一个Rabbit TCP/IP客户端
4.18.1 关闭Windows XP防火墙
4.18.2 检查客户端代码
4.18.3 与Java TCP/IP服务器一起工作
4.18.4 与使用C#实现的TCP/IP服务器一起工作
4.19 项目4:实现一个Rabbit UDP服务器
4.19.1 与Java UDP客户端一起工作
4.19.2 与C++ UDP客户端一起工作
4.20 一些有用(并免费)的网络工具
4.20.1 Ping
4.20.2 Traceroute
4.20.3 Ethereal
4.20.4 Netcat
4.20.5 在线工具
4.21 最后的思考

第5章 错误处理和调试
5.1 嵌入式系统开发和故障排除之道
5.1.1 开发者
5.1.2 回归测试——早测试、常测试
5.1.3 案例分析——一次性集成和无回归测试套件
5.1.4 发现者
5.1.5 修复者
5.2 避免集中调试——灵巧地编码
5.2.1 准则#1:使用小函数
5.2.2 准则#2:使用指针格外小心
5.2.3 准则#3:良好的注释代码
5.2.4 准则#4:避免“幻数”
5.3 主动调试
5.4 栈和堆
5.5 植入内存
5.6 逃逸代码
5.7 专用解码器
5.8 MMU
5.9 小结
5.10 用闪存实现可下载固件
5.11 微程序器
5.12 微程序器的优点
5.13 微程序器的不足
5.14 接收一个微程序器
5.15 基本的微程序器
5.16 常见问题及其解决方案
5.16.1 调试者不喜欢可写的代码空间
5.16.2 调试者不喜欢自我重定位的代码
5.16.3 无法生成位置独立的代码
5.16.4 启动时无固件
5.16.5 无限的看门狗超时
5.16.6 意外断电
5.17 硬件上的选择
5.17.1 隔离代码和数据
5.17.2 灵活安全
5.18 内存诊断
5.19 ROM测试
5.20 RAM测试
5.21 非易失性存储器
5.22 监督电路
5.23 多字节写
5.24 测试
5.25 小结
5.26 构建一个强大的看门狗
5.27 内部WDT
5.28 外部WDT
5.29 强大WDT的特征
5.30 使用内部WDT
5.31 使用外部WDT
5.32 用于多任务的WDT
5.33 总结和其他思路

第6章 软/硬件协同验证
6.1 嵌入式系统设计过程
6.1.1 需求
6.1.2 系统架构
6.1.3 选择微处理器
6.1.4 硬件设计
6.1.5 软件设计
6.1.6 软/硬件的整合
6.2 验证和确认
6.2.1 验证
6.2.2 确认
6.3 人际交互
6.4 协同验证
6.4.1 软/硬件协同验证的历史
6.4.2 协同验证的定义
6.4.3 协同验证方法
6.4.4 协同验证法样例
6.4.5 协同验证指标(协同验证参数)

第7章 嵌入式媒体处理技术
7.1 媒体处理系统简介
7.1.1 核心处理过程
7.1.2 输入/输出子系统——外设接口
7.1.3 存储子系统
7.2 系统资源的划分和代码优化
7.3 事件产生和处理
7.4 编程方法
7.5 高效编程的结构特点
7.5.1 单周期多重操作
7.5.2 硬件循环结构
7.5.3 专用寻址模式
7.5.4 联锁指令流水线
7.6 为达到有效编程,编译器的考虑因素
7.7 系统和内核同步
7.7.1 存取同步
7.7.2 排序
7.7.3 原子操作
7.8 存储结构——管理所需
7.8.1 存储器访问权衡
7.8.2 指令存储管理——高速缓存或DMA
7.8.3 数据存储管理
7.8.4 选择DMA和cache的系统方针
7.8.5 内存管理单元(MMU)
7.9 物理数据传输
7.9.1 分组转换到最小化内存总线翻转
7.9.2 了解内核和DMA SDRM的存取
7.9.3 保持SDRAM行开放,实现数据的多通路
7.9.4 优化系统时钟设置,确保刷新率,调整SDRAM运行时的速率
7.9.5 利用系统资源之间的优先权和仲裁策略
7.10 媒体处理框架
7.11 定义框架
7.12 非对称和对称的双核处理器
7.13 编程模型
7.13.1 非对称编程模型
7.13.2 均匀的编程模型
7.14 构建框架的策略
7.14.1 实时处理数据
7.14.2 编程轻便型胜过性能
7.14.3 基于性能的框架
7.14.4 框架提示
7.15 关于媒体框架的其他问题
7.15.1 音频、视频同步
7.15.2 管理系统流
7.15.3 框架和算法的复杂性

第8章 嵌入式系统中的DSP
8.1 嵌入式系统及实时系统概述
8.2 实时系统
8.3 硬件实时系统和软件实时系统
8.3.1 简介
8.3.2 实时系统和分时系统的区别
8.3.3 DSP系统是硬实时系统
8.3.4 实时事件的特点——实时事件的分类
8.4 有效执行和执行环境
8.4.1 效率概述
8.4.2 资源管理
8.5 实时系统设计挑战
8.5.1 响应时间
8.5.2 从故障中恢复
8.5.3 分布式和多处理器的体系结构
8.5.4 嵌入式系统
8.6 总结
8.7 运用DSP的嵌入式系统研发周期概述
8.8 使用DSP的嵌入式系统研发周期
8.8.1 步骤1:研究系统所有的功能需要
8.8.2 步骤2:选择系统需要的硬件组件
8.8.3 硬件门
8.8.4 软件可编程化
8.8.5 通用处理器
8.8.6 微控制器
8.8.7 FPGA解决方案
8.8.8 数字信号处理器
8.8.9 通用信号处理解决方案
8.8.10 DSP加速上的选择
8.8.11 步骤3:了解DSP的基础和体系结构
8.8.12 DSP处理模式
8.8.13 输入/输出选择
8.8.14 计算DSP性能
8.8.15 DSP软件
8.8.16 DSP构架
8.9 优化数字信号处理(DSP)软件
8.10 什么是优化
8.11 处理过程
8.12 加快经常性事件的速度
8.13 加快经常性事件的速度——DSP体系架构
8.14 加快经常性事件的速度——DSP算法
8.15 加快经常性事件的速度——DSP编译器
8.16 DSP优化的深入讨论
8.17 直接存储器访问
8.18 使用DMA
8.18.1 将数据分段
8.18.2 挂起和轮询
8.18.3 管理内部存储器
8.19 循环展开
8.19.1 填充执行单元
8.19.2 减少循环开销
8.19.3 让循环适合寄存器的空间
8.19.4 折中
8.20 软件流水线化
8.20.1 一个例子
8.20.2 使软件流水线化
8.20.3 中断和流水线代码
8.21 更多的关于DSP的编译器和优化
技术
8.21.1 编译器架构和流
8.21.2 编译器优化
8.21.3 编译进行时的选项
8.22 程序员协助编译器
8.22.1 附注
8.22.2 内联函数
8.22.3 关键字
8.22.4 函数内嵌
8.22.5 减少堆栈存取时间
8.22.6 程序员协助编译器
8.22.7 编码建议总结
8.23 基于剖面的编译
8.23.1 优点
8.23.2 调试优化代码的问题
8.23.3 代码优化过程总结
8.23.4 总结

第9章 实用嵌入式编码技术
9.1 重入
9.2 原子变量
9.3 另两个规则
9.4 保持代码为重入
9.5 递归
9.6 异步硬件/固件
9.7 竞争条件
9.8 选项
9.9 其他RTOS
9.10 亚稳态
9.11 固件,非硬件
9.12 中断延迟
9.13 取数据
9.14 理解C编译器:如何最小化代码大小
9.15 现代的C编译器
9.15.1 编译器的结构
9.15.2 程序的含义
9.15.3 基本转换
9.15.4 寄存器分配
9.15.5 函数调用
9.15.6 函数内联
9.15.7 低级代码压缩
9.15.8 链接器
9.15.9 编译器优化控制
9.15.10 内存模型
9.16 编程建议
9.16.1 使用正确的数据尺寸
9.16.2 使用最好的指针类型
9.16.3 结构和填充
9.16.4 使用函数原型
9.16.5 使用参数
9.16.6 不要取地址
9.16.7 不要使用内联汇编语言
9.16.8 不要写聪明的代码
9.16.9 为跳转表使用switch
9.16.10 在使用位域前先检查
9.16.11 当心库函数
9.16.12 使用额外的提示
9.17 最后说明
9.18 致谢

第10章 开发技术及趋势
10.1 如何为片上系统设计选择CPU
10.1.1 设计复杂度
10.1.2 设计重用
10.1.3 内存架构和保护
10.1.4 CPU性能
10.1.5 功耗
10.1.6 成本
10.1.7 软件因素
10.1.8 多核SoC
10.1.9 小结
10.2 嵌入式系统软件开发的新兴技术
10.2.1 微处理器设备技术
10.2.2 系统架构
10.2.3 设计构成
10.2.4 软件内容
10.2.5 编程语言
10.2.6 软件团队规模和分布
10.2.7 UML和建模
10.2.8 关键技术
10.2.9 小结
10.3 选择开发工具
10.3.1 开发工具链
10.3.2 编译特性
10.3.3 嵌入式系统的扩展
10.3.4 优化
10.3.5 构建工具:关键点重述
10.3.6 调试
10.3.7 调试工具:关键点重述
10.3.8 标准和开发工具的集成
10.3.9 选择建议
10.3.10 小结
10.4 Eclipse——将嵌入式工具集中
10.4.1 Eclipse平台的理念
10.4.2 平台
10.4.3 Eclipse如何变成嵌入式的
10.4.4 小结
10.5 嵌入式软件和UML
10.5.1 为什么使用UML建模
10.5.2 将应用程序和体系结构分离
10.5.3 xtUML代码生成
10.5.4 小结
10.6 用xtUML进行基于模型的系统开发
10.6.1 为什么构建嵌入式系统如此困难
10.6.2 更好的解决方案
10.6.3 经验到此为止
10.7 展望未来
展开
加入书架成功!
收藏图书成功!
我知道了(3)
发表书评
读者登录

请选择您读者所在的图书馆

选择图书馆
浙江图书馆
点击获取验证码
登录
没有读者证?在线办证