嵌入式系统设计与实践
Elecia White
余水清 译
出版时间:2013年05月
页数:282
“对于C程序员,如果想进入充满乐趣(和“钱途”)的嵌入式系统世界,本书就是必读之物。这本书写得非常好,寓教于乐,示例精彩,有大量非常清晰的图示。”
——Jack Ganssle,作家与嵌入式系统专家
“作者在这本书中分享了她多年的开发经验,包含了大量信息和智慧,揭示了嵌入式开发过程中许多不为人知的秘密,并给出了清晰的解读和最佳解决方案。 ”
——James W. Grenning,《Test-Driven Development for Embedded C》的作者
对嵌入式系统的开发感兴趣吗?由于嵌入式系统对效率有很高的要求,所以需要遵循严格的设计原则。本书简单易读,结合传统的软件设计模式和嵌入式程序设计领域中新颖、独特的设计模式,帮助你建立良好的程序设计实践技巧,学习如何针对处理器而非操作系统建立系统架构,以及处理硬件难题与制造需求的特殊技能。本书作者是嵌入式系统专家,创建过各种嵌入式系统,从城市道路监控系统到DNA扫描仪再到儿童玩具。
本书主要内容:
· 深入分析嵌入式系统的架构设计步骤和架构设计模式。
· 介绍嵌入式系统中独有的设计模式,如环形缓冲区、中断和定时器、硬件调试、PID控制、系统优化等。
· 如何优化系统以降低成本并提高性能。
· 如何在资源有限的环境中建立健壮的软件架构。
· 探讨了扫描仪、电机以及其他I/O设备。
· 介绍事半功倍的方案:降低内存消耗、代码空间占用、处理器周期以及功耗。
· 学习如何在处理器中直接更新嵌入式程序代码。
· 掌握如何在小型处理器上实现复杂的数学计算。
· 提供了招聘嵌入式工程师的面试题,以及回答这些面试题的独到
思路。
Elecia White 资深嵌入式系统设计专家,Logical Elegance公司的创办人,获得美国FAA和FDA认证。她有多年的管理经验,但是更加热爱技术产品设计并醉心于创造优秀的产品。她喜欢创建新奇的小装置,包括小型医疗器材、飞机和赛车的惯性测量单元、教育玩具以及射击定位系统,开发并设计了各种优秀的嵌入式系统,擅长信号处理、硬件集成、复杂系统设计、演示系统等。
  1. 前言
  2. 第1章 导论
  3. 1.1 编译器、编程语言以及面向对象编程
  4. 1.2 嵌入式系统开发
  5. 1.2.1 调试
  6. 1.2.2 更多挑战
  7. 1.2.3 解决问题的原则
  8. 1.3 延伸阅读
  9. 第2章 创建系统架构
  10. 2.1 构建系统框图
  11. 2.1.1 架构框图
  12. 2.1.2 控制层级图
  13. 2.1.3 层次图
  14. 2.2 从框图到架构
  15. 2.2.1 封装模块
  16. 2.2.2 分派任务
  17. 2.2.3 驱动程序接口:打开(Open)、关闭(Close)、读(Read)、写(Write)和输入输出控制(IOCTL)
  18. 2.2.4 适配器模式
  19. 2.2.5 开始设计其他接口
  20. 2.2.6 例子:一个日志接口
  21. 2.3 一个可以实践的沙盒
  22. 2.4 延伸阅读
  23. 第3章 检视硬件
  24. 3.1 硬件/软件集成
  25. 3.1.1 理想的项目流程
  26. 3.1.2 电路板调试
  27. 3.2 阅读数据表
  28. 3.2.1 遇到问题时需要查找的数据表部分
  29. 3.2.2 对软件开发者比较重要的内容
  30. 3.2.3 用数据表评估元器件
  31. 3.3 处理器是一门语言
  32. 3.4 阅读原理图
  33. 3.5 调试工具箱(和灭火器)
  34. 3.5.1 保管好电路板
  35. 3.5.2 工具箱
  36. 3.5.3 数字万用表
  37. 3.5.4 示波器和逻辑分析仪
  38. 3.6 测试硬件(和软件)
  39. 3.6.1 构建测试
  40. 3.6.2 闪存测试范例
  41. 3.6.3 命令和响应
  42. 3.6.4 命令模式
  43. 3.7 处理错误
  44. 3.7.1 一致的方法
  45. 3.7.2 错误处理库
  46. 3.7.3 调试时序错误
  47. 3.8 延伸阅读
  48. 第4章 输入、输出和定时器
  49. 4.1 触发输出
  50. 4.1.1 从寄存器开始
  51. 4.1.2 将引脚设置为输出
  52. 4.1.3 点亮LED
  53. 4.1.4 LED闪烁
  54. 4.1.5 故障诊断
  55. 4.2 将硬件和动作分离
  56. 4.2.1 特定于电路板的头文件
  57. 4.2.2 I/O处理代码
  58. 4.2.3 主循环
  59. 4.2.4 门面模式
  60. 4.3 I/O中的输入
  61. 4.3.1 按钮的简单接口
  62. 4.4 瞬间按钮动作
  63. 4.4.1 按钮按下时的中断
  64. 4.4.2 配置中断
  65. 4.4.3 去抖动开关
  66. 4.5 运行时不确定性
  67. 4.5.1 依赖注入
  68. 4.6 使用定时器
  69. 4.6.1 时间片
  70. 4.6.2 数学计算
  71. 4.6.3 定时器节拍之间的漫长等待
  72. 4.6.4 使用定时器
  73. 4.7 使用脉冲宽度调制
  74. 4.8 产品发货
  75. 4.9 延伸阅读
  76. 第5章 任务管理
  77. 5.1 调度和操作系统基础
  78. 5.1.1 任务
  79. 5.1.2 任务间通信
  80. 5.1.3 避免竞争条件
  81. 5.1.4 优先级倒置
  82. 5.2 状态机
  83. 5.2.1 状态机范例:信号灯控制器
  84. 5.2.2 以状态为中心的状态机
  85. 5.2.3 具有隐式迁移的以状态为中心的状态机
  86. 5.2.4 以事件为中心的状态机
  87. 5.2.5 状态模式
  88. 5.2.6 表格驱动的状态机
  89. 5.2.7 选择状态机的实现
  90. 5.3 中断
  91. 5.3.1 中断请求
  92. 5.3.2 保存上下文
  93. 5.3.3 从向量表中获得ISR
  94. 5.3.4 调用ISR
  95. 5.3.5 恢复上下文
  96. 5.3.6 何时使用中断
  97. 5.4 怎样不使用中断
  98. 5.4.1 轮询
  99. 5.4.2 系统节拍
  100. 5.4.3 基于时间的事件
  101. 5.4.4 一个极小型调度器
  102. 5.5 监控程序(看门狗)
  103. 5.6 延伸阅读
  104. 第6章 外设通信
  105. 6.1 应用广泛的外设
  106. 6.1.1 外部存储器
  107. 6.1.2 按钮和按键矩阵
  108. 6.1.3 传感器
  109. 6.1.4 执行器
  110. 6.1.5 显示器
  111. 6.2 种类繁多的通信方式
  112. 6.2.1 串行通信
  113. 6.2.2 并行
  114. 6.2.3 以太网和WiFi
  115. 6.3 将外设和通信结合
  116. 6.3.1 数据处理
  117. 6.3.2 增强通信的健壮性
  118. 6.3.3 修改数据
  119. 6.3.4 修改算法
  120. 6.4 延伸阅读
  121. 第7章 更新代码
  122. 7.1 板载启动装载器
  123. 7.2 构建自己的更新程序
  124. 7.2.1 修改驻留的更新程序
  125. 7.3 砖块装载器
  126. 7.3.1 将装载器复制到内存
  127. 7.3.2 运行装载器
  128. 7.3.3 复制新代码到暂存空间
  129. 7.3.4 危险时刻:擦除和编程
  130. 7.3.5 重置到新代码
  131. 7.4 安全
  132. 7.5 链接器脚本
  133. 7.6 总结
  134. 第8章 事半功倍
  135. 8.1 代码空间
  136. 8.1.1 读映射文件(第1部分)
  137. 8.1.2 简化的过程
  138. 8.1.3 库
  139. 8.1.4 函数和宏
  140. 8.1.5 常量和字符串
  141. 8.2 RAM
  142. 8.2.1 释放和分配
  143. 8.2.2 读映射文件(第2部分)
  144. 8.2.3 寄存器和局部变量
  145. 8.2.4 函数链
  146. 8.2.5 全局变量的优点和缺点
  147. 8.2.6 内存覆盖
  148. 8.3 速度
  149. 8.3.1 程序性能分析
  150. 8.3.2 优化
  151. 8.4 总结
  152. 8.5 延伸阅读
  153. 第9章 数学运算
  154. 9.1 区别快、慢运算
  155. 9.1.1 求平均值
  156. 9.2 使用已知的算法
  157. 9.3 设计与修改算法
  158. 9.3.1 多项式因式分解
  159. 9.3.2 泰勒级数
  160. 9.3.3 除以常数
  161. 9.3.4 放大输入
  162. 9.3.5 查找表
  163. 9.4 伪浮点数
  164. 9.4.1 有理数
  165. 9.4.2 精度
  166. 9.4.3 加法(和减法)
  167. 9.4.4 乘法(和除法)
  168. 9.4.5 决定误差
  169. 9.5 延伸阅读
  170. 第10章 降低功耗
  171. 10.1 理解功耗
  172. 10.2 离开房间的时候请关灯
  173. 10.2.1 关掉外围设备
  174. 10.2.2 关掉不用的I/O设备
  175. 10.2.3 关掉处理器子系统
  176. 10.2.4 降速节能
  177. 10.3 让处理器休眠
  178. 10.3.1 基于中断的代码流模型
  179. 10.3.2 深度研究主循环
  180. 10.3.3 处理器看门狗
  181. 10.3.4 避免频繁唤醒
  182. 10.3.5 处理器链
  183. 10.4 延伸阅读
书名:嵌入式系统设计与实践
作者:Elecia White
译者:余水清 译
国内出版社:机械工业出版社
出版时间:2013年05月
页数:282
书号:978-7-115-41584-8
原版书书名:Making Embedded Systems
原版书出版商:O'Reilly Media
Elecia White
 
Elecia White曾经设计过DNA扫描仪、飞机和赛车的惯性测量单元、学龄前儿童玩具、抓捕罪犯的射击定位系统以及其他种类繁多的医疗和消费类设备。她是Logical Elegance的创办人,这是一家位于圣何塞(San Jose)的嵌入式系统咨询公司。艾丽西亚在信号处理、硬件集成、复杂系统和性能设计等方面有着很强的背景和经验。在经过美国联邦航空局(FAA)和美国食品药品监督局(FDA)认证过程后,她理解了高质量设计的重要性,以及高质量的设计如何引领高质量的实现。
作者拥有多年的管理经验,但是她仍然很享受动手实践的工程设计工作以及交付优秀产品的兴奋和快感。在继续领导和指导工作的同时,她更倾向于专注在项目的技术方面。作为一名哈维穆德学院(位于加利福尼亚州克莱尔蒙特市)的毕业生,艾丽西亚热衷于分享她对于科学、工程以及有趣小发明的激情,特别是如何利用这一切让世界变得更美好。
 
 
本书封面上的动物是一只大耳朵夜鹰。
大耳朵夜鹰是夜鹰科家族中的成员,俗称欧夜鹰。夜鹰的称谓来自于一段不那么确切的传说——这种鸟喝山羊的奶。这不应该和“卓柏卡布拉”(Chupacabra,一种传说中存在于美洲专门吸食山羊血的野兽)混为一谈。因此,现在人们通常叫它“大耳欧夜鹰”。
大耳欧夜鹰生活在东南亚的亚热带和热带潮湿的低湿林地区,包括印度、孟加拉国、缅甸、泰国、马拉西亚、印度尼西亚、老挝、柬埔寨、越南、菲律宾以及中国。它们喜欢在光线昏暗的时候活动,通常是在黄昏或者晚上。这时,它们就会捕食一些飞行的小昆虫和蛾子,同时发出自己独特的叫声:一声尖锐的“啾”,跟着两个节拍的“吧呃”。
大耳夜鹰以突出的耳毛著称,相对于夜鹰平均16英寸的长度来说,这让它们在整个夜鹰家族中更加与众不同。它们灰褐相间的羽毛与其偏爱的栖息场所、落叶和欧洲蕨十分相似。它们常常把蛋下在光秃秃的地上或者由落叶做成的窝里。据观察,欧夜鹰的雏鸟非常安静,这让它们在落叶色的羽毛之外又多了一层保护,可以在哺乳的时候避免危险。