操作系统•RTX51实时操作系统•应用示例•μC-OS/II•其它Rtx51-tiny环境下的编程•RTX51是支持MCS-51系列处理器的多任务实时操作系统。•RTX51简化了复杂、对执行时点敏感的任务的编程。•RTX51与中断并行工作。•任务之间通过邮箱传递信号或消息。•标准的C51只作极少的扩展,以指定任务ID和优先级。#includertx51tny.h#includeW77C32.hvoidMainJob(void)_task_0{os_create_task(1);//task1:os_create_task(2);//task2:os_create_task(3);//task3:os_delete_task(0);}程序示例voidm_Trax(void)_task_2{EA=0;Ini_COM1();//3RS-485EA=1;while(1){//Yourcode}}一个任务的示例#includertx51tny.hintcounter0;intcounter1;voidjob0(void)_task_0{os_create(1);//marktask1asreadywhile(1){//loopforevercounter0++;//updatethecounter}}voidjob1(void)_task_1{while(1){//loopforevercounter1++;//updatethecounter}}框架程序#includertx51tny.hintcounter0;intcounter1;voidjob0(void)_task_0{os_create(1);//marktask1asreadywhile(1){//loopforevercounter0++;//updatethecounteros_wait(K_TMO,3);//pausefor3clockticks}}voidjob1(void)_task_1{while(1){//loopforevercounter1++;//updatethecounteros_wait(K_TMO,5);//pausefor5clockticks}}#includertx51tny.hintcounter0;intcounter1;voidjob0(void)_task_0{os_create(1);//marktask1asreadywhile(1){if(++counter0==0)//updatethecounteros_send_signal(1);//signaltask1}}voidjob1(void)_task_1{while(1){os_wait(K_SIG,0,0);//waitforasignalcounter1++;//updatethecounter}}voidjob1(void)_task_1_priority_1{while(1){os_wait(K_SIG,0,0);//waitforasignalcounter1++;//updatethecounter}}Theprioritylevelcanbe0through3.0isthelowest(bydefault)3isthehighestPriority优先级(rtx51-full)RTX51的WAIT函数支持以下事件:·Timeout:越时,正在运行的任务被挂起一定的时间片。·Interval:正在运行的任务被挂起一个时间片。·Signal:任务间传递的信号。EventsofRtx51-tiny函数功能周期数os_create_task将一个任务加入执行队列302os_delete_task将一个任务移出执行队列172os_send_signal从任务中发送信号408withtaskswitch.316withfasttaskswitch71withouttaskswitchos_clear_signal删除已发送信号57isr_send_signal从中断发送向任务发送信号46os_wait等待一个时间68forpendingsignal160forpendingmessageos_create_taskos_delete_taskcharos_create_task(unsignedchartask_id);ReturnValue:0ifthetaskwassuccessfullystarted.-1ifthetaskcouldnotbestarted#includertx51tny.hcharos_delete_task(unsignedchartask_id);ReturnValue:0ifthetaskwassuccessfullystoppedanddeleted.-1indicatesthespecifiedtaskdoesnotexistorhadnotbeenstarted.os_send_signalos_clear_signalcharos_send_signal(unsignedchartask_id);如果指定任务已在等待一个信号,该函数调用使任务进入执行队列。否则,信号被存储为该任务的标志。ReturnValue:0ifsuccessfuland-1ifthespecifiedtaskdoesnotexist.charos_clear_signal(unsignedchartask_id);清除任务task_id的信号标志.ReturnValue:0ifthesignalflagwassuccessfullycleared.-1isreturnedifthespecifiedtaskdoesnotexist.#includertx51tny.hcharisr_send_signal(unsignedchartask_id);从中断向任务task_id发信号,若指定任务已经在等改信号,该系统调用将使对应任务进入就绪状态.否则,信号被存储到对应任务的标志中.ReturnValue:0ifsuccessful-1ifthespecifiedtaskdoesnotexist.isr_send_signal#includertx51tny.hos_wait#includertx51tny.hcharos_wait(unsignedcharevent_sel,/*eventstowaitfor*/unsignedcharticks,/*timertickstowait*/unsignedintdummy);/*unusedargument*/MaybeORed嵌入式操作系统体系结构嵌入式实时操作系统内存管理外围设备管理多任务管理微内核、三项功能进程的概念•进程具有独立功能的程序关于某个数据集合的一次运行活动。•第一,进程是一个实体,有自己的地址空间,可以申请和拥有系统资源;•第二,进程是一个“执行中的程序”,是一个动态的概念,是一个活动的实体。当前活动通过程序计数器的值和一组寄存器的当前内容来表示。•程序是包含代码和初始化数据,是一个没有生命的实体,只有处理器赋予程序生命时,它才能成为一个活动的实体。进程的特征•动态性:进程的实质是程序的一次执行过程,进程是动态产生,动态消亡的。•并发性:任何进程都可以同其他进程一起并发执行•独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位;•异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进•结构特征:进程由程序、数据和进程控制块三部分组成。进程与线程的关系•在一个进程中可以包含若干个线程,它们可以利用进程所拥有的资源。在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位。•由于线程比进程更小,基本上不拥有系统资源,故对它的调度所付出的开销就会小得多,能更高效的提高系统内多个程序间并发执行的程度。•因而近年来推出的通用操作系统都引入了线程,以便进一步提高系统的并发性,并把它视为现代操作系统的一个重要指标。μC/OS-II操作系统1、C/OS—MicroControllerOS,微控制器操作系统2、C/OS简介–美国人JeanLabrosse1992年完成–应用面覆盖了诸多领域,如照相机、医疗器械、音响设备、发动机控制、高速公路电话系统、自动提款机等–1998年C/OS-II–2000年,得到美国航空管理局(FAA)的认证,可以用于飞行器中–目前的版本C/OS-IIV2.82–C/OS–III(带MPU)–网站()6公开源代码可移植性(Portable)源码可移植性很强。微处理器硬件相关的汇编语言部分已经压到最低限度。可以在绝大多数8/16/32/64位微处理器、微控制器、数字信号处理器(DSP)上运行。可固化(ROMable)C/OS-II是为嵌入式应用而设计的,可固化(C编译、连接、下载和固化),C/OS-II可以嵌入到产品中成为产品的一部分。可裁剪(Scalable)可以只使用很少的系统服务,也可以使用几乎所有的功能;这种可剪裁性是靠条件编译实现的。减少产品中的C/OS-II所需的存储器空间(RAM和ROM)。C/OS的性能特点(一)占先式(Preemptive)多任务64/256任务,保留8个给系统。应用程序最多56个可确定性函数调用与服务的执行时间具有可确定性任务栈每个任务有单独的栈,可大可小,压低对RAM的需求。系统服务C/OS-II提供很多系统服务,例如邮箱、消息队列、信号量、块大小固定的内存的申请与释放、时间相关函数等。中断管理中断可以使正在执行的任务暂时挂起,如果优先级更高的任务被该中断唤醒,则高优先级的任务在中断嵌套全部退出后立即执行,中断嵌套层数可达255层。稳定性与可靠性C/OS的性能特点(二)μC/OS-II操作系统•任务和任务状态•任务控制块•任务就绪表•任务的同步与通信–事件–事件控制块•任务切换任务•解决复杂问题的“分而治之”的方法•大的复杂任务划分为一个个简单的任务•解决上述一个个简单问题的程序实体,称为任务•对小的任务的运行进行管理,就是操作系统的工作。•uC/OS-II的任务相当于Windows中的线程任务状态的转换等待状态睡眠状态中断服务状态就绪状态运行状态多任务共享同一个CPU。所以在具体的时段,根据任务是否占有CPU,以及是否处于等待、被中断等情况,任务处于下列5种状态之一。任务状态的转换等待状态睡眠状态中断服务状态就绪状态运行状态任务只是以代码的形式驻留在程序空间(ROM中RAM),任务没有被任务控制块,或被剥夺了任务控制块任务状态的转换等待状态睡眠状态中断服务状态就绪状态运行状态系统为任务配备了任务控制块,且在任务就绪表进行了就绪登记,任务具备运行的充分条件。任务的CPU使用权被剥夺任务被创建获得任务控制块等待的条件满足任务状态的转换等待状态睡眠状态中断服务状态就绪状态运行状态处于就绪状态的任务,经调度器判断获得了CPU的使用权。任何时候只能有一个任务处于运行状态。任务状态的转换等待状态睡眠状态中断服务状态就绪状态运行状态正在运行的任务需要等待一段时间,或等待一个事件发生(条件),该任务会把CPU的使用权让出;调度器再从就绪队列中选优先级最高的任务,并使其进入运行状态。如果找不到一个就绪的任务,就运行空闲任务。任务状态的转换等待状态睡眠状态中断服务状态就绪状态运行状态睡眠状态:任务只是以代码的形式驻留在程序空间(ROM中RAM)任务没有被任务控制块,或被剥夺了任务控制块任务状态的转换等待状态睡眠状态中断服务状态就绪状态运行状态任务的组成•任务控制块•任务的代码•任务堆栈任务控制块的其它信息•是一个数据结构,包含值–OS_STAT_RDY就绪状态–OS_STAT_SEM等待信号量状态–OS