本帖最后由 zhongpeng123 于 2013-10-28 14:04 编辑
最近发现这本书非常不错,但全是pdf之类的,整理一下,做成word的。慢慢来,打字和查错很费力的。如果有人已经完成这个工作,我也歇歇,哈哈
目录
前言 3 6
序言 3 6
绪 言 3 8
第1章什么是时间触发的嵌入式系统 3 8
1.1 引言 3 8
1.2 信息系统 3 9
1.3 桌面系统 5 9
1.4 实时系统 5 10
1.5 嵌入式系统 7 10
1.6 事件触发系统 8 10
1.7 时间触发系统 10 10
1.8 小结 11 11
第2章使用模式来设计嵌入式系统 12 11
2.1 引言 12 11
2.2 现有软件设计技术的局限 14 11
2.3 模式 17 11
2.4 时间触发嵌入式系统模式 20 11
2.5 小结 20 11
第1篇硬件基础 25 11
第3章8051系列微控制器 25 11
引言 25 11
标准8051 25 11
精简8051 34 11
扩展8051 38 11
第4章振荡器硬件 44 11
引言 44 11
晶体振荡器 44 11
陶瓷谐振器 52 11
第5章硬件复位 55 11
引言 55 11
阻容复位 55 11
可靠的复位 62 11
第6章存储器问题 66 11
引言 66 11
片内存储器 66 11
片外数据存储器 75 11
片外程序存储器 81 11
第7章直流负载驱动 88 11
引言 88 11
直接LED驱动 88 11
直接负载驱动 93 11
IC缓冲放大器 95 11
BJT(双极结型三极管)驱动器 100 11
IC驱动器 109 11
MOSFET驱动器 113 11
固态继电器驱动(直流) 117 11
第8章交流负载驱动 121 11
引言 121 11
电磁继电器驱动 121 11
固态继电器驱动(交流) 127 11
第2篇软件基础 133 11
第9章基本的软件体系结构 133 11
引言 133 11
超级循环 133 11
项目头文件 138 11
第10章使用端口 142 11
引言 142 11
端口输入/输出 142 11
端口头文件 150 11
第11章延迟 158 11
引言 158 11
硬件延迟 158 11
软件延迟 167 11
第12章看门狗 175 11
引言 175 12
硬件看门狗 176 12
第3篇单处理器系统的时间触发结构 187 12
第13章调度器的介绍 187 12
13.1 引言 187 12
13.2桌面操作系统 187 12
13.3对超级循环结构的评价 188 12
13.4更好的解决方案 190 12
13.5例子:闪烁LED 194 12
13.6在不同的时间间隔执行多个任务 196 12
13.7什么是调度器 198 12
13.8合作式调度和抢占式调度 199 12
13.9抢占式调度器详解 202 12
13.10小结 204 12
13.11进阶阅读 204 12
第14章合作式调度器 206 12
引言 206 12
合作式调度器 206 12
第15章学会以合作的方式思考 240 12
引言 240 12
循环超时 240 12
硬件超时 245 12
第16章 面向任务的设计 255 12
引言 255 12
多级任务 255 12
多状态任务 259 12
第17章混合式调度器 267 12
引言 267 12
混合式调度器 267 12
第4篇用户界面 289 12
第18章通过RS-232与PC通信 289 12
引言 289 12
PC连接(RS-232) 289 12
第19章开关接口 317 12
引言 317 12
开关接口(软件) 318 12
开关接口(硬件) 326 12
通断开关 329 12
多状态开关 335 12
第20章键盘接口 343 12
引言 343 12
键盘接口 343 12
第21章多路复用LED显示 355 12
引言 355 12
多路复用LED显示 355 12
第22章控制LCD显示面板 367 12
引言 367 12
字符型LCD 板 368 12
第5篇使用串行外围模块 389 12
第23章使用I2C外围模块 389 12
引言 389 12
I2C外围模块 389 12
第24章使用SPI外围模块 410 13
引 言 410 13
SPI外围模块 410 13
第6篇 多处理器系统的时间触发体系结构 425 13
第25章共享时钟调度器的介绍 425 13
251 引言 425 13
25.2额外 CPU性能和外围硬件 425 13
25.3模块化设计的优点 426 13
25.4 怎样连接多个处理器 428 13
25.5 为什么增加处理器并不一定能改善可靠性 434 13
25.6小结 436 13
第26章使用外部中断的共享时钟调度器 437 13
引言 437 13
共享时钟中断调度器(时标) 437 13
共享时钟中断调度器(数据) 467 13
第27章使用UART(通用异步收发器)的共享时钟调度器 479 13
引言 479 13
使用UART的共享时钟调度器(本地) 479 13
使用UART的共享时钟调度器(RS-232) 504 13
使用UART的共享时钟调度器(RS-485) 507 13
第28章使用CAN的共享时钟调度器 530 13
引言 530 13
共享时钟CAN调度器 531 13
第29章多处理器系统的设计 557 13
引言 557 13
数据联合 557 13
长任务 560 13
多米诺骨牌任务 563 13
第7篇监视与控制组件 569 13
第30章脉冲频率检测 569 13
引言 569 13
硬件脉冲计数 569 13
软件脉冲计数 575 13
第31章脉冲频率调制 580 13
引言 580 13
硬件脉冲频率调制 580 13
软件脉冲频率调制 585 13
第32章模拟-数字转换器(ADC)的应用 591 13
引言 591 13
单次模数转换 591 13
模数转换前置放大器 606 13
序列模数转换 610 13
A-A滤波器 618 13
电流传感器 625 13
第33章脉冲宽度调制 629 13
引言 629 14
硬件脉宽调制 629 14
脉宽调制信号平滑滤波 637 14
3级脉宽调制 640 14
软件脉宽调制 646 14
第34章数模转换器的应用(DAC) 653 14
引言 653 14
数模转换输出 653 14
数模转换平滑滤波 663 14
数模转换驱动 666 14
第35章进行控制 669 14
引言 669 14
PID控制器 669 14
第8篇特殊的时间触发结构 695 14
第36章减少系统开销 695 14
引言 695 14
255-时标调度器 695 14
单任务调度器 707 14
一年调度器 712 14
第37章提高调度的稳定性 722 14
引言 722 14
稳定调度器 722 14
结 论 731 14
第38章本书试图实现的目标 731 14
38.1 引言 731 14
38.2本书试图实现的目标 731 14
38.3 小结 732 14
第39章收集的参考文献和书目 733 14
39.1 出版书刊一览表 733 14
39.2其他模式 739 14
39.3实时嵌入式系统设计技术 739 14
39.4高可靠性系统设计技术 740 14
39.5 805 1微控制器 741 14
39.6作者的相关著作 741 14
附 录 745 14
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
第13章调度器的介绍 187
本章将介绍对应于许多现代桌面系统中的“Windows”(或其他操作系统),调度器将在嵌入式系统中扮演类似的角 {MOD}。
13.1 引言 187
在前面第1篇和第2篇的基础之上,我们现在能够详细讨论为8051系列微控制器创建时间触发系统的方法。
为了实现这种系统,将使用调度器。这是一种用于嵌入式系统的非常简单的运行环境。在这个介绍性的章节中,我们将说明什么是调度器以及合作式调度和抢占式调度之间的区别。同时将说明为什么使用合作式调度器将有助于使即便是最小的嵌入式系统也易于开发而且运行得更加可靠。
首先简要地回顾桌面系统使用操作系统的原因,并说明为什么这样的操作系统不适用于奉书所讨论的嵌入式系统,并以此作为本章其余部分的讨论基础。
13.2 桌面操作系统 187
正如在序言里说明的,本书假定读者已经具有台式机应用软件开发的经验。在第1章中已讨论过,在许多信息系统中,桌面/工作站环境和诸如文字处理软件的通用桌面应用程序占主导地位。现代桌面环境的普遍特征是:用户通过高分辨率的图形屏幕加上键盘和鼠标与应用程序交互。操作系统以及相关的程序库为这种复杂的用户界面提供了支持。
在这样的一个平台上,通常用户所需要的程序(诸如文字处理软件)及全部数据(诸如文字处理软件处理的文件)都在需要时从磁盘实时读取。图13.1显示了这种文字处理软件的典型运行环境。在这里应用和底层硬件被隔离开来。例如,当用户想要将最新的小说保存在磁盘上时,文字处理软件将大多数必要的工作交给操作系统完成。随后,操作系统将许多硬件相关的命令交给BIOS(基本输入,输出系统)。
操作系统(或BIOS)对于台式PC机来说并不是必不可少的。然而,对于大多数用户来说,个人电脑的主要优点是它的灵活性。换句话说,同样的设备可以运行成千上万不同的程序。
page 188
如果PC没有操作系统,那么这些程序中的每一个都将需要能够独立实现所有的底层功能。这样。其效率将非常低,而且将使系统更加昂贵。周时也很可能将导致错误,因为即使是最小的程序也必须复制许多功能。
想象一下没有Windows(或UNIX)的世界会是个什么样子,可以加深对这个问题的认识,考虑一个曾经在Pc上广泛使用的早期操作系统-DOS。用过DOS应用程序的读者可能会记得,每个程序都必必须提供合适的打印机驱动程序。如果打印机后来有所变化,通常意味着必须升级PC上的每个应用程序来使用新的硬件。有了Windows后,就不会出现这样的问题,当购买了新打印机时.只需要一个驱动程序。安装了驱动程序之后,计算机上的每个程序都可以直接使用这个新的硬件。
对桌面操作系统的一种看法是:它用来运行多个程序,并且提供这些程序需要的“公共代码”(用于打印、文件存储、图形显示等等)。这减少了相同程序模块的复制,降低了出错的机会,从而使整个系统更加可靠并易于维护。
图13.1运行文字处理软件的桌面计算机系统的BIOS/OS多层结构的原理示意图
图13.2桌面系统中操作系统的作用的原理示意图
13.3 对超级循环结构的评价 188
现代桌面操作系统的许多特性(诸如图形显示、打印以及磁盘存取)对于嵌入式系统价值不大。嵌入式系统中没有很复杂的图形屏幕、打印机和磁盘。
page 189
因此,正如在第9章看到的,许多简单的嵌入式系统所使用的软件结构都是一种超级循环。
(源程序清单13.1)的形式。
/*************** Main.C简单的超级循环应用的结构***********/
#include "x.h "/*--------------*/
void main(void)
{
//准备任务x
X_Init();
while (1)//“死循环”(超级循环)
{
x( ); //执行任务
}
}
/*文件结束*/
源程序清单13.1 简单超级循环的部分演示
源程序清单13.1中展示的超级循环结构的主要优点是:
(1)简单,因此易于理解;
(2)几乎不占用系统存储器或CPU资源。
然而,“没有投入也就没有回报”。超级循环占用很少的存储器和处理器资源是因为它们几乎不为开发人员提供什么功能。尤其是这种结构,它很难在精确的时间间隔执行任务X。正如我们将看到的,这种限制是一个非常大的缺点。
例如:考虑从一系列不同的嵌入式项目汇集的许多要求(没有特别的前后顺序):
● 必须以0.5s间隔测量汽车的当前速度。
● 每秒必须刷新显示40次。
● 计算出来的新的油门位置必须每隔0.5s输出。
● 必须每秒执行20次时间-频率变换。
● 如果已经发出警报,则必须在20分钟之后关掉(法律上的要求)。
● 当前门被打开时,如果在30s内没有输入正确的口令,则必须发出警报。
● 必须每秒采样1000次发动机振动数据。
● 必须每秒执行20次频域数据分类。
● 必须每200ms扫描一次键盘。
● 主机(控制)节点必须每秒与所有其他节点(传感器节点和发出警报节点)通信一次。
page 190
● 必须每0.5s计算一次新的油门位置。
● 传感器必须每秒采样一次。
总结这个列表可以发现,许多嵌入式系统必须在某些时刻执行任务。更具体地说,需要执行的任务分为两种:
● 周期性任务,(比方说)每l00ms执行一次
● 单次任务,(比方说)在50ms的延迟之后执行一次
利用源程序清单13.1所示的基本结构很难实现上述任务。例如,假设必须每隔200ms起动任务X,而完成该任务需要10ms。源程序清单13.2说明了修改源程序清单13.1中的代码以实现这个要求的一种方法。
/*--------------------------------------------------------*/
void main(void)
(
Init_System ();
while(1) //“死循环”(超级循环)
{
x(); //执行任务(耗时10ms;)
Delay_190ms(); //延迟190ms
}
}
源程序清单13.2使用超级循环结构来每隔一段时间执行一次任务
源程序清单13.2中说明的方法通常是难以实际运用的,因为只有当满足以下条件时它才能工作:
1.知道任务X的精确的运行时间
2.这个运行时间永不变化
在实际系统中.很难确定任务的精确运行时间。假设有一个非常简单的任务,不与外界相互作用,而仅仅执行某些内部计算。即使在这种相当有限的情况下,改变编译程序优化设置,或者即使是改变一些表面上不相关的程序部分,也可能改变任务运行的速度。这使得调节定时的过程非常乏味并且易于出错。
第二种条件更是问题多多。在嵌入式系统中,任务往往需要以复杂的方式与外界相互作用。在这种情况下,任务的运行时间将随着外界行为的变化而变化,而程序员极难控制这种变化。
一周热门 更多>