任哲-嵌入式实时操作系统μCOS-II原理及应用-北航出版社前言有人说嵌人式系统的应用和发展是计算机技术自桌面系统和网络技术之后,T产业和IT技术的又一个新的重大进展。事实的确如此。就现在的情况来看,在当今人们的生产和生活中,嵌入式系统的应用和影响无处不在。暂且不论火箭地球卫星汽车生产线,也不论先进的武器装备系统,就是在日常生活中人们几乎天天离不开的移动电话、空调器数码相机、洗衣机、电饭锅电热水器等装置和设备中,都有嵌入式系统暗暗地在发挥者控制作用从而使这些装置和设备具有了较高的自动化水平,甚至体现出了某种智能性,为人们提供了更为体贴更为周到的服务。可以期望,就在不远的将来,普通百姓还会用到地球卫星定位系统、高级音像系统、智能可视电话、智能采暖设备、个人医疗保健设备家用机器人等更为人性化的装置和设备,从而使人们的生活更舒适,工作效率更高。然而这一切无不依赖于嵌人式系统技术的发展和应用。众所周知,我国经济建设正处在一个高速发展时期我国正在成为世界电字制造业的重要基地之一,从而形成了对嵌人式系统技术及相关技术人才的巨大需求。面对这种日益广泛而迫切的需求,各高等院校和培训机构都纷纷开设了与嵌入式系统技术相关的专业和课程,以期学生在校学习期间就能受到嵌入式系统技术方面的教育和训练。但是,如何进行这方面的工作却遇到了挑战。从目前的情况来看,至少有两个主要的困难:一是不论哪个专业都不可能投入较大量的教学时数来专门用于嵌入式系统的教学;二是掌握嵌入式系统的技术和设计方法对学生的基础要求较高,任何一个专业都不可能以嵌入式系统为培养目标设置该专业的基础课程(至少目前是这样)。因此作者认为,在目前的情况下,嵌入式系统的教学应该依托于各专业的现有课程体系,选准切人点,以学生初步掌握嵌人式系统的基本概念、基本理论基本应用、基本设计方法和基本待点为教学目标,设置1~2门小型课较为合适。作为嵌入式系统这种比较特殊的计算机系统,其基本构成仍然是硬件和软件两部分。对于硬件部分的教学,各专业可在原教学内容基础上根据嵌入式系统的硬件特点加以适当的修改和补充(这样不会增加过多的课时)。而软件部分(主要是嵌入式操作系统),作为计算机专业可以把原有的操作系统课程在内容上进行延伸,比如把一个实际的嵌入式操作系统(例如C/OS-I)当作一个实例来介绍,同时也避免了原来操作系统课程过于空洞的弊端。当然,也可以把嵌入式操作系统单独作为一门小课来讲授。因为计算机专业学生已学过操作系统课程所以单独设置的这门小课的内容就可以适当丰富一些(比如, Clinux和kC/Os-ID)。嵌入式实时操作系统μC/OS-原理及应用由于非计算机专业原来就没有操作系统课程,于是就应该单独设置一门嵌入式操作系统的课程。课程的内容应以系统简单、概念清晰且有较强实用性的嵌入式操作系统为宜。本书就是为使学生了解和初步掌握嵌入式操作系统特点、体系结构及实际应用而编写的教学用书。本书的特点及内容如下:●以源码公开的嵌入式实时操作系统μC/OS-Il为核心,介绍了嵌入式操作系统在任务、任务的调度和管理、任务之间的通信和同步、内存管理等方面的实现和应用特点。语言文字通俗易懂,尽量避免了大量程序源代码的剖析讲解而代之以插图和例题力求重点突出。●在μC/Os-Ⅱ系统的移植的讲解方面,尽量避免读者可能不太熟悉的计算机硬件系统,从而冲击读者学习的重点,而以大多数读者都比较了解和熟悉的51系列单片机为硬件系统(尽管μC/Os-在51单片机上应用有些嫌大),以使读者可以集中精力学习和掌握系统移植方面的知识和方法。另外,鉴于基于ARM核的嵌入式处理器在国内嵌入式系统应用占有相当大的份额,并且发展态势也越来越猛因此本书也单独用了一章的篇幅介绍了pC/OS-1在ARM上的移植。●由于实验条件的限制,也为了学习操作系统这类软件的方便,大多数读者通常还是要以PC机为学习工具的,因此本书的例题几乎都可在PC机中调试和运行。另外,为了使读者更好地使用例题代码和了解pCOS-Ⅱ在PC机中的移植,作者把相关内容作为附录收到本书中。◆本书的教学时数以不超过30学时为宜,其中应有6学时左右的实验和8学时左右的大型作业。本书是为教学目的编写的教材,适用于高等院校计算机技术及应用、自动化、生产过程控制仪器仪表、电子技术等专业高年级的教学,同时也可用于工程技术人员的自学和培训。阅读和学习本书的内容,须在C语言程序设计汇编语言程序设计和微型计算机原理(最好学习过片机原理)等方面具有一定的基础。全书共9章。参加本书编写的有房红征、李益民、刘德华、胡晓红和任哲。由任哲担任主编并负责全书的统稿工作。在本书的策划和编写过程中,得到了很多同仁的关心、指导和帮助。特别是本书有关pC/Os-Ⅱ移植的第7章和第8章分别采用了杨屹先生和周立功先生的方法和程序代码,另參器袭前言外本书还用到了 Jean J. Labrosse先生书中的部分例题代码。为此,向为本书做过贡献的人们表示衷心的感谢!由于作者在嵌入式系统知识方画的欠缺,尤其是在嵌入式系统教学经验方面的不足,因此本书无论是在教学内容的选取编排上例题的选用上,还是对于难点、重点的讲解上,一定会有很多不足甚至错误,在此诚挚希望读者批评指正。作者的电子邮箱为renzhe7@sina.com另外,对C/OS-在51单片机上的移植感兴趣的读者可与杨吃先生沟通探讨,其网址为www.armecos.com,电子邮箱为asdj@163.cm。对pC/Os-Ⅱ在ARM核上的移植感兴趣的读者可与周立功先生联系,其电子邮箱为zlg3@zlgmcu.com。作者2005年5月8日目录第1章嵌入式实时操作系统的基本概念1.1计算机操作系统…1.11什么是计算机操作系统…………………………………………………………11.1.2操作系统的作用和功能1.2嵌入式系统和嵌人式操作系统……………31.2.1嵌入式系统的基本概念1.2.2嵌入式操作系统1.2.3实时操作系统需要满足的条件…1.2.4嵌入式系统的任务及嵌入式实时操作系统……………………………………111.3嵌入式实时操作系统C/OS-简介121.4小结………………………………………………………………………………131.5练习题……………………………………………………………………14第2章pC/s-I中的任务2.1任务的基本概念………………152.1.1任务的状态……1172.1.2用户任务代码的一般结构………182.1.3系统任务…………………··,中鲁、·节·202.1.4任务的优先权及优先级别………………………………………………………212.2任务堆栈……………………212.2.1任务堆栈的创建…………………………………………………………………222.2.2任务堆栈的初始化…………….242.3任务控制块及任务控制块链表…2.3.1任务控制块的结构……252.3.2任务控制块链表……………………………………262.3.3任务控制块的初始化……………2824任务就绪表及任务调度………………292.4.1任务就绪表的结构…………………………129入式实时探作系统COS-Ⅱ原理及应用2.4.2对任务就绪表的操作312.4.3·任务的调度………………………………………………………………322.5任务的创建372.5,1用函数 OSTaskCreate()创建任务……………………372.5,2用函数 OSTaskCreateExt()创建任务…………………,·,,,,,·,,,32.5.3创建任务的一般方法…392.6任务的挂起和恢复…………………………………………………………462.6.1挂起任务………………………462.6,2恢复任务……………472.7其他任务管理函数………………………………………………………………532.7.1任务优先级别的修改…532.7.2任务的删除…532.7.3查询任务的信息602.8gC/Os-Ⅱ的初始化和任务的启动602.8.1pC/Os-Ⅱ的初始化602.8.2pC/Os-T的启动…622.9一个示例…………………………………………………………642.10小结722.11练习题…………173第3章pC/OS-I的中断和时钟3.1pC/OS-I的中断……7431.1pC/OS-Ⅱ的中断过程…………743.1.2中断级任务切换函数………………783.1.3应用程序中的临界段…………………………783.2C/Os-II的时钟…1803.3时问管理…33.1任务的延时……………883.3.2取消任务的延时…1893.33获取和设置系统时间…………………9334小结……93.5练习题…一目录第4章任务的同步与通信4.1任务间的同步和事件控制块……984.1.1任务间的同步…手·非中信、4“a984.1.2事件……………………994.1.3事件控制块…………………112生.1:4操作事件控制块的函数………"…………………1134.1.5空事件控制块链表1154.2信号量及其操作…4.2.1信号量…………1154,2.2信号量的操作………1164.3互斥型信号量和任务优先级反转………………1244.3.1任务优先级的反转现象…………1244.3.2互斥型信号量……………1304.4消息郎箱及其操作……中垂日aaaa4b,由4,1334.4.1消息邮箱……1334.4.2消息邮箱的操作…………………11335消息队列及其操作……………………………41394.5.1消息队列……………1394.52消息队列的操作…1424.6小结……………………………………1484.7练习题……149第5章信号量集51信号量集的结构……"“…………,”…1505.1.1信号量集的标志组……11505.1.2等待任务链表1525.1.3对等待任务链表的操作…·着a1545.2信号量集的操作……………15552.1创建信号量集………1555.2.2请求信号量集…1565.2.3向信号量集发信号……………1575.2.4查询信号量集的状态…1635.2.5删除信号量集…………………………166嵌入式实时操作系统pC/0s-Ⅱ原理及应用5.3小结…………………………………………………1675.4练习题…………………………167第6章内存的动态分配6.1内存控制块…………………58166.1.1可动态分配内存的划分……………186.1.2内存控制块 OS MEM的结构……1696.1.3空内存控制块链表…1706.2动态内存的管理……………………………………""…"1706.2.1创建动态内存分区……1T16.2.2请求获得一个内存块1736,2.3释放一个内存块………………………"…1756.2.4查询一个内存分区的状态……1796.3小结………………1846.4练习题…………………………………"…………"……184第7章在51单片机上移植μC/os-n7.1μC/OS-Il移植的一般性问题…………………1857.1.1可重人函数……1857.1,2时钟节拍的产生…1867.1,3任务堆栈的设计…·,,,,;、话中·,··1867.2在51系列单片机上移植pC/Os-lI1877.2.1改写文件OS_CPU.H·“画、,?,,,.于,平.果…1877.2.2任务堆栈的设计…………………1887.2.3文件 OS CPU C, C的改写………1947.2.4几点必须注意的事项1967.3应用举例…………………………1967.3.1LED数码显示器的驱动程序…1967.3.251单片机串行接口的应用………1987.4小结……………………………………2067.5练习题……………"…206第8章在ARM7上移植μC/OS-18.1移植规划4………207目录8.1.1编译器的选择2078.1.2ARM7工作模式的选择……………………………………………2078.2移植………2088.2.1文件OS_CPU.H的编写…288.2.2文件OS_CPUC.C的编写2108,23文件 OS CPU A.S的编写…………………………………………………2168.2.4关于中断及时钟节拍…2198.3移植pC/Os-ⅡI到LPC2000……………………2218.3.1挂接SWI软件中断2228,3.2中断及时钟节拍中断………………………………………2228.33一个基于pC/OS-Ⅱ和ARM的应用程序实例………2238.4小结………………………2258.5练习题…225第9章C/os-I可剪裁性的实现9.1文件 OS CFG.H中用于系统裁剪的常量22692配置常量的解释…2289.2.1 OS MAX EVENTS +9.2.2 OS MAX MEM PARTS……………………………………………………2299.2.3 S MAX QS…9.2.4 OS MAX MEM TASKS………2299.2.5Os_ LOWEST PRIO……………………………………………42299. 2. 6 OS TASK IDLE STK SIZE .2309.2.7 OS TASK_ STAT EN…………………………………2309.2.8 OS TASK STAT STK SIZE…2309.2.9 OS CPU HOOKS EN………………………………………………12309.2.10 OS MBOX EN………4…2319.2.11 OS MEM EN2319.2.120s_QEN……………2319.2,13OS_ SEM EN………………………………………………………2319. 2. 14 OS TASK CHANGE PRIO EN2319.2.15 OS TASK CREATE EN2319.2.160 S TASK CREATE EXT EN“…………………2329. 2. 17 OS TASK DEL EN………232