商家名称 | 信用等级 | 购买信息 | 订购本书 |
嵌入式操作系统原理与面向任务程序设计:基于μC/OS-Ⅱ v2.86和ARM920T [平装] | |||
嵌入式操作系统原理与面向任务程序设计:基于μC/OS-Ⅱ v2.86和ARM920T [平装] |
《嵌入式操作系统原理与面向任务程序设计:基于μC/OS-Ⅱ v2.86和ARM920T》:嵌入式系统设计与开发系列丛书
第一章 嵌入式实时操作系统概述
1.1 操作系统的概念
1.2 嵌入式操作系统
1.3 嵌入式实时操作系统举例
1.3.1 WindowsCE
1.3.2 VxWorks
1.3.3 嵌入式Linux
1.3.4 Android系统
1.4 μC/OS-Ⅱ和μC/OS-Ⅲ的特点
1.4.1 μC/OS-Ⅱ的特点
1.4.2 μC/OS-Ⅲ的特点
1.5 小结
习题一
第二章 嵌入式实时操作系统原理
2.1 进程与线程
2.1.1 进程
2.1.2 线程
2.1.3 任务
2.2 任务调度与优先级
2.2.1 任务状态
2.2.2 任务优先级
2.2.3 任务切换
2.2.4 任务调度算法
2.2.5 中断与实时性
2.3 资源
2.3.1 共享资源
2.3.2 变量
2.3.3 可重入函数
2.3.4 死锁
2.4 内存管理
2.4.1 堆
2.4.2 栈
2.4.3 内存碎片
2.5 内核与时钟节拍
2.5.1 不可抢先型内核
2.5.2 可抢先型内核
2.5.3 时钟节拍
2.5.4 空闲任务
2.6 信号量与互斥信号量
2.6.1 信号量
2.6.2 互斥信号量
2.7 消息邮箱
2.8 小结
习题二
第三章 μC/OS-Ⅱ内核
3.1 μC/OS-Ⅱ初始化
3.2 空闲任务控制块链表
3.3 空闲事件控制块链表
3.4 空闲内存控制块链表
3.5 任务就绪组和任务就绪表
3.6 空闲任务
3.7 统计任务
3.8 定时器任务
3.9 空闲事件标志组链表
3.10 空闲消息队列链表
3.11 时钟节拍
3.12 任务状态
3.13 任务调度与内核函数
3.13.1 内核管理函数
3.13.2 延时管理函数
3.13.3 移植管理函数
3.14 多任务启动
3.15 小结
习题三
第四章μC/OS-Ⅱ组件
4.1 任务管理
4.1.1 创建任务
4.1.2 删除任务
4.1.3 堆栈检查
4.2 信号量管理
4.2.1 信号量使用方法
4.2.2 信号量创建函数
4.2.3 信号量请求函数
4.2.4 信号量释放函数
4.2.5 信号量赋值函数
4.3 互斥信号量管理
4.3.1 互斥信号量使用方法
4.3.2 互斥信号量创建函数
4.3.3 互斥信号量请求函数
4.3.4 互斥信号量释放函数
4.4 事件标志组管理
4.4.1 事件标志组使用方法
4.4.2 事件标志组创建函数
4.4.3 事件标志组请求函数
4.4.4 事件标志组释放函数
4.5 消息邮箱管理
4.5.1 消息邮箱使用方法
4.5.2 消息邮箱创建函数
4.5.3 消息邮箱请求函数
4.5.4 消息邮箱释放函数
4.6 消息队列管理
4.6.1 消息队列使用方法
4.6.2 消息队列创建函数
4.6.3 消息队列请求函数
4.6.4 消息队列释放函数
4.7 多事件请求管理
4.7.1 多事件请求函数使用方法
4.7.2 多事件请求函数工作原理
4.8 中断管理宏函数
4.9 定时器管理
4.9.1 定时器任务
4.9.2 定时器使用方法
4.9.3 定时器创建函数
4.9.4 定时器启动函数
4.9.5 定时器停止函数
4.9.6 定时器刷新函数
4.1 0动态内存管理
4.1 0.1 动态内存使用方法
4.1 0.2 动态内存创建函数
4.1 0.3 动态内存请求函数
4.1 0.4 动态内存释放函数
4.1 1小结
习题四
第五章 μC/OS-Ⅱ应用实例
5.1 BodandC++5.02与实例一
5.1.1 在BorlandC++上实现实例一
5.1.2 实例一程序解释
5.1.3 μC/OS-View与实例一
5.2 实例二
5.3 实例三
5.4 实例四
5.5 小结
习题五
第六章 μC/OS-Ⅱ最小系统
6.1 内核裁剪
6.1.1 配置文件O_Cfg.h
6.1.2 最小系统头文件ucos_ii.h
6.1.3 最小系统文件与执行流程
6.2 最小系统实例
6.3 小结
习题六
第七章 面向任务程序设计(TOP)
7.1 程序设计方法
7.2 任务与函数
7.3 任务构造方法
7.3.1 指示层任务设计
7.3.2 输入/输出层任务设计
7.3.3 计算层和输入/输出层任务联合设计
7.4 任务优先级与堆栈
7.5 任务调度与切换
7.6 任务间同步与通信
7.7 任务挂起与恢复
7.8 小结
习题七
第八章 TOP设计实例
8.1 硬件平台
8.2 工程框架与实例一
8.2.1 工程框架
8.2.2 LED灯闪烁与实例一
8.3 实例二
8.3.1 串口驱动
8.3.2 串口通信实例
8.4 实例三
8.4.1 数码管驱动
8.4.2 数码管秒表实例
8.4.3 数码管显示实例
8.5 实例四
8.5.1 模/数变换驱动
8.5.2 模/数变换实例
8.5.3 中值滤波实例
8.6 小结
习题八
附录 μC/OS-Ⅲ和Cortex-M3简要说明
附录1 μC/OS-Ⅲ文件组织结构
附录2 Cortex-M3处理器和EMSTM32V100实验平台
附录3 μC/OS-Ⅲ实例说明
后记
版权页:
插图:
(1)任务被创建后会进入到就绪态,此时有一个入栈的操作,即把该任务的执行入口地址入栈,因为此时没有运行环境,故运行环境的入栈值是随机数。
(2)就绪态的最高优先级任务获得CP[J使用权后,由就绪态进入到执行态,此时原执行态的任务有一个入栈的操作,将其运行环境保存在其独立的堆栈中;而进入执行态的任务有一个出栈操作,恢复其运行环境,如果是第一次执行,只有程序计数器指针(PC)是有意义的,其他的运行环境值(即CP[J寄存器值)没有意义,将在运行中被覆盖掉。
(3)任一时刻,仅可能有一个任务处于执行态,执行态的任务可以被中断信号中断,从而将CPU使用权转让给中断服务程序,此时有一个入栈操作,保存当前任务的执行环境,从而该任务进入中断态。所谓中断信号,是指定时器中断、外部中断等外设中断输入,当某个中断发生后,程序计数器指针(PC)将指向中断向量表,从而跳转到中断服务程序。中断服务程序(ISR)仅是一段代码或一个函数,可以实现实时性要求高的异步操作,中断服务程序不是任务。
(4)处于中断态的任务相当于一种特殊的就绪态,当中断服务程序执行完成后,系统会调度,从处于中断态的任务和所有就绪态的任务中选择优先级最高的任务执行。如果中断态任务优先级最高,当然就会从中断态恢复到执行态了;如果有比中断态任务优先级高的就绪态任务,则中断态任务将进入就绪态。
(5)当执行态的任务运行完毕后,CPU使用权会移交出去,此时有一个入栈操作,该任务将进入到等待态,即等待一定时间的延时或等待某个事件的发生。
(6)等待态任务将不断地请求某个事件或查询延时情况,直到满足其执行条件后,才从等待态进入到就绪态。任何一个任务都不是每时每刻地执行着,都是按照一定的时钟节律在执行,理论上,总可以把一个整体的不间断执行的工作,分成这种节律性的任务来完成。例如在单CPU系统下,连续不断地执行一万行代码,某个时刻只可能有一条代码在执行,其他代码在排队等待中,因此,将代码细分为小段后,各小段代码看上去是有节律地交替执行着,即可以被设计成任务。
(7)就绪态、等待态和执行态是任务的三个正常调度状态,当任务仍然驻留在内存中,但是已不再受系统调度时,就进入了休眠态。任务的休眠态和等待态是不同的,任务一旦进入休眠态,不会有堆栈操作,堆栈内原有的运行环境也没有意义了。休眠态的任务可以再次启动进入到就绪态,这一过程和创建一个新的任务类似。
由上所述,正常任务的切换都会伴随着两个堆栈操作,即放弃CPU占有权的任务入栈操作和获得CPU使用权的任务出栈操作。因此,一个任务切换到另一个任务,并不是一蹴而就的,而是中间需要有一些时间,这些必需的时间开销实际上是任务执行的额外开销,即和任务执行代码无关的。由于这个原因,那些具有快速堆栈操作的CPU芯片在任务切换时效率更高,而且这部分开销和嵌入式实时操作系统无关,完全取决于硬件。因此,一般地,无论有多少个任务,任务切换时间都是固定的。
喜欢嵌入式操作系统原理与面向任务程序设计:基于μC/OS-Ⅱ v2.86和ARM920T [平装]请与您的朋友分享,由于版权原因,读书人网不提供图书下载服务