出版时间:2010-12 出版社:西安电子科大 作者:张勇 页数:306
Tag标签:无
内容概要
《嵌入式操作系统原理与面向任务程序设计:基于μC/OS-2 v2.86和ARM920T》由张勇编著,基于μC/OS-Ⅱ v2.86和ARM920T芯片讲述嵌入式操作系统的工作原理以及面向任务应用程序设计方法,阐述基于μC/OS-Ⅱ系统的用户应用程序的工作流程。全书共分八章,主要内容包括嵌入式实时操作系统概述、嵌入式实时操作系统原理、μC/OS-Ⅱ内核、μC/OS-Ⅱ组件、μC/OS-Ⅱ应用实例、μC/OS-Ⅱ最小系统、面向任务程序设计(TOP)以及TOP设计实例等。《嵌入式操作系统原理与面向任务程序设计:基于μC/OS-2 v2.86和ARM920T》的特色在于理论讲解透彻、实例丰富且针对性强。 《嵌入式操作系统原理与面向任务程序设计--基于μC\OS-Ⅱv2.86和ARM920T》是作者近几年来从事嵌入式系统教学与研究的成果结晶,重点讲述μC/OS-Ⅱv2.86原理与应用,同时给出了裁剪的μC/OS-Ⅱ最小系统,对学习嵌入式操作系统设计具有较强的指导作用。本书是作者已出版的(μC/OS-Ⅱ原理与ARM应用程序设计》(西安电子科技大学出版社2010年出版)一书的姊妹篇,偏重于嵌入式操作系统工作原理与设计方法。 《嵌入式操作系统原理与面向任务程序设计:基于μC/OS-2 v2.86和ARM920T》可作为电子通信、软件工程、自动控制、智能仪器等相关专业高年级本科生或研究生学习嵌入式操作系统的教材,也可作为从事嵌入式应用和嵌入式操作系统开发的电子工程师、软件工程师以及嵌入式爱好者的参考书。
书籍目录
第一章 嵌入式实时操作系统概述1.1 操作系统的概念1.2 嵌入式操作系统1.3 嵌入式实时操作系统举例1.3.1 WindowsCE1.3.2 VxWorks1.3.3 嵌入式Linux1.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.h6.1.2 最小系统头文件ucos_ii.h6.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》:嵌入式系统设计与开发系列丛书
图书封面
图书标签Tags
无
评论、评分、阅读与下载