uCOS2精华快速掌握.ppt_第1页
uCOS2精华快速掌握.ppt_第2页
uCOS2精华快速掌握.ppt_第3页
uCOS2精华快速掌握.ppt_第4页
uCOS2精华快速掌握.ppt_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Operating System 的发展,人工操作:无os,资源独占,利用率低,效率低; 批处理(弹道和多道):磁盘。作业周转长,无交互能力; 分时系统:文件系统,前后台。交互,共享。 AT 分布式操作系统:无主从关系,资源共享; ,嵌入式操作系统 Embedded Operating System,Linux,WinCE,VxWorks,OSE,Nucleus,uC/OS-II, eCos, uTTRON ,80年代开始: WinCE Microsoft VxWorks WindRiver,WinCE,支持针对小内存体积占用进行的优化 :200k “硬”实时内核 :由于支持256个优先级别和嵌套中断 强健的内存管理 :虚拟地址空间从32MB扩展到当前的64MB。另外还支持内存映射文件。这些基于Win32的文件映射API除了允许数据文件映射到内存当中并建立类似于内存指针的引用之外,还可以用来分配能够在多个进程之间进行共享的内存。 开放的通信平台:TCP/IP ,IPv6 远程和系统管理 对标准的支持 广泛的存储和文件系统 ,VxWorks,VxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),是嵌入式开发环境的关键组成部分。良好的持续发展能力、高性能的内核以及友好的用户开发环境,在嵌入式实时操作系统领域占据一席之地。它以其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,如卫星通讯、军事演习、弹道制导、飞机导航等。在美国的 F-16、FA-18 战斗机、B-2 隐形轰炸机和爱国者导弹上,甚至连1997年4月在火星表面登陆的火星探测器上也使用到了VxWorks。,C/OS-是一种免费公开源代码、结构小巧、具有可剥夺实时内核的实时操作系统。其内核提供任务调度与管理、时间管理、任务间同步与通信、内存管理和中断服务等功能。适合小型控制系统,具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点,最小内核可编译至2KB。抢占式内核。 UClinux则是继承标准Linux的优良特性,针对嵌入式处理器的特点设计的一种操作系统,具有内嵌网络协议、支持多种文件系统,开发者可利用标准Linux先验知识等优势。其编译后目标文件可控制在几百KB量级。无MMU,采用时间片轮番调度算法。 RT_Linux,C/OS-和 UClinux免费且公开源码的E0S,C/OS-,MicroC/OS-II is a highly portable, ROMable, scalable, preemptive real-time, multitasking kernel (RTOS) for microprocessors and microcontrollers with performance comparable to - and in some cases exceeding - commercially available kernels.,无操作系统-有操作系统区别,?,无操作系统,CPU,Task,Interface,有操作系统,Interface,Task0,Task1,CPU,无操作系统: 1 严格按所规定的顺序执行 2 程序执行的封闭性 3 独占资源,执行过程和结果不受其它程序的影响 4 程序结果的可再现性(结果的确定性) 5 只要初始状态相同,程序多次重复运行,其结果与程 序执行速度无关(连续或间断),结果都应相同。 有操作系统:多任务系统可以充分的利用系统资源,在对Interface进行操作时,其他任务可以在CPU中运行。,特点: 可靠性 实时性 可裁减性,要求: 多任务 抢占式调度 任务的通讯与同步 任务与中断之间的通讯,RTOS,Dormant,Ready,Running,ISR,Waiting/Suspend,OSTaskCreate() OSTaskCreateExt(),OsTaskDel(),OSMBoxPost() OSQPost() OSSemPost() OSTaskResume() OSTimeDlyResume() OSTimeTick(),OSMBoxPend() OSQPend() OSSemPend() OSTaskSuspend() OSTimeDly() OSTimeDlyHMSM(),OS_TASK_SW() OSIntExit() OSTart(),Task is preempted,OsTaskDel(),OsTaskDel(),Interrupt,OsIntExit(),OSSched(),时钟节拍(Clock Tick),C/OS是系统心脏的脉动,需要用户提供周期性信号源,用于实现时间延时和确认超时。节拍率应在每秒10次到100次之间,或者说10到100Hz。时钟节拍率越高,系统的额外负荷就越重。时钟节拍的实际频率取决于用户应用程序的精度。时钟节拍源可以是专门的硬件定时器,也可以是来自50/60Hz交流电源的信号。 用户必须在多任务系统启动以后再开启时钟节拍器 OS_TICK_PER_SEC 设定时钟节拍 OSTimeISR() 在每一个时钟节拍时发生中断。 OSTimeTick(),void OSTimeTick (void) #if OS_CRITICAL_METHOD = 3 /* Allocate storage for CPU status register */ OS_CPU_SR cpu_sr; #endif OS_TCB *ptcb; OSTimeTickHook(); /* Call user definable hook */ #if OS_TIME_GET_SET_EN 0 OS_ENTER_CRITICAL(); /* Update the 32-bit tick counter */ OSTime+; OS_EXIT_CRITICAL(); #endif if (OSRunning = TRUE) ptcb = OSTCBList; /* Point at first TCB in TCB list */ while (ptcb-OSTCBPrio != OS_IDLE_PRIO) /* Go through all TCBs in TCB list */ OS_ENTER_CRITICAL(); if (ptcb-OSTCBDly != 0) /* Delayed or waiting for event with TO */ if (-ptcb-OSTCBDly = 0) /* Decrement nbr of ticks to end of delay */ if (ptcb-OSTCBStat ,void main(void) . . OSInit(); /* 初始化uC/OS-II */ . . /* 应用程序初始化代码 . OSTaskCreate(TaskStart,(void*)0, ,OSInit(),void OSInit (void) #if OS_VERSION = 204 OSInitHookBegin(); /* Call port specific initialization code */ #endif OS_InitMisc(); /* Initialize miscellaneous variables */ OS_InitRdyList(); /* Initialize the Ready List */ OS_InitTCBList(); /* Initialize the free list of OS_TCBs */ OS_InitEventList(); /* Initialize the free list of OS_EVENTs */ #if (OS_VERSION = 251) /* Call port specific init. code */ #endif ,Task Control Blocks,typedef struct os_tcb OS_STK *OSTCBStkPtr; /* Pointer to current top of stack */ #if OS_TASK_CREATE_EXT_EN 0 void *OSTCBExtPtr; /* Pointer to user definable data for TCB extension */ OS_STK *OSTCBStkBottom; /* Pointer to bottom of stack */ INT32U OSTCBStkSize; /* Size of task stack (in number of stack elements) */ INT16U OSTCBOpt; /* Task options as passed by OSTaskCreateExt() */ INT16U OSTCBId; /* Task ID (065535) */ #endif struct os_tcb *OSTCBNext; /* Pointer to next TCB in the TCB list */ struct os_tcb *OSTCBPrev; /* Pointer to previous TCB in the TCB list */ . INT16U OSTCBDly; /* Nbr ticks to delay task or, timeout waiting for event */ INT8U OSTCBStat; /* Task status */ INT8U OSTCBPrio; /* Task priority (0 = highest, 63 = lowest) */ INT8U OSTCBX; /* Bit position in group corresponding to task priority (07) */ INT8U OSTCBY; /* Index into ready table corresponding to task priority */ INT8U OSTCBBitX; /* Bit mask to access bit position in ready table */ INT8U OSTCBBitY; /* Bit mask to access bit position in ready group */ #if OS_TASK_DEL_EN 0 BOOLEAN OSTCBDelReq; /* Indicates whether a task needs to delete itself */ #endif OS_TCB;,INT8U OSTaskCreate (void (*task)(void *pd), void *pdata, OS_STK *ptos, INT8U prio) #if OS_CRITICAL_METHOD = 3 /* Allocate storage for CPU status register */ OS_CPU_SR cpu_sr; #endif OS_STK *psp; INT8U err; #if OS_ARG_CHK_EN 0 if (prio OS_LOWEST_PRIO) /* Make sure priority is within allowable range */ return (OS_PRIO_INVALID); #endif OS_ENTER_CRITICAL(); if (OSTCBPrioTblprio = (OS_TCB *)0) /* Make sure task doesnt already exist at this priority */ OSTCBPrioTblprio = (OS_TCB *)1; /* Reserve the priority to prevent others from doing . */ /* . the same thing until task is created. */ OS_EXIT_CRITICAL(); psp = (OS_STK *)OSTaskStkInit(task, pdata, ptos, 0); /* Initialize the tasks stack */ err = OS_TCBInit(prio, psp, (OS_STK *)0, 0, 0, (void *)0, 0); if (err = OS_NO_ERR) OS_ENTER_CRITICAL(); OSTaskCtr+; /* Increment the #tasks counter */ OS_EXIT_CRITICAL(); if (OSRunning = TRUE) /* Find highest priority task if multitasking has started */ OS_Sched(); else OS_ENTER_CRITICAL(); OSTCBPrioTblprio = (OS_TCB *)0;/* Make this priority available to others */ OS_EXIT_CRITICAL(); return (err); OS_EXIT_CRITICAL(); return (OS_PRIO_EXIST); #endif,OSStart(),void OSStart (void) INT8U y; INT8U x; if (OSRunning = FALSE) y = OSUnMapTblOSRdyGrp; /* Find highest prioritys task priority number */ x = OSUnMapTblOSRdyTbly; OSPrio

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论