第二章_uCOS-II程序设计基础.ppt_第1页
第二章_uCOS-II程序设计基础.ppt_第2页
第二章_uCOS-II程序设计基础.ppt_第3页
第二章_uCOS-II程序设计基础.ppt_第4页
第二章_uCOS-II程序设计基础.ppt_第5页
已阅读5页,还剩133页未读 继续免费阅读

下载本文档

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

文档简介

本文重点介绍了C/OS-II程序设计的基础、September、2007、C/OS-II程序设计的基础、绪论、本章重点介绍了C/OS-IIV2.52版本中嵌入的实时操作系统常用函数的基本使用方法,其最大特征电路也非常简单(下图),为了让初学者一眼就能理解和学习,想达到快速开始的目的。 注意:本章的应用例子都默认采用这张图,主要是为了尽量简化程序样品,提高可读性,使用简单明快的语言和方法来分析复杂的理论知识,是作者多年来在学习、工作和教育中提出的风格和习惯行为,同时本书、目录、任务设计、使用系统函数时,系统函数概要、时间管理、事件的一般使用规则、系统管理、互斥信号量、事件标志组、邮箱、动态存储器管理、消息队列、C/OS-II专业在任务分类、任务优先级、任务划分、任务设计|C/OS-II程序设计基础、任务设计基于实时操作系统的应用程序设计中,任务设计是整个应用程序的基础,其他软件设计工作以任务设计为中心展开。 设计、任务设计、应用程序、“任务函数”和相关数据结构,任务设计|C/OS-II程序设计基础,任务分类,任务,执行方式分类,任务设计|C/OS-II程序设计基础,任务分类,1 .集群任务实体代码调用任务删除函数,任务设计|C/OS-II程序设计的基础,任务的分类,执行状态,待机状态,准备状态,voidMyTask(void*pdata)进行准备工作的代码; while(1)任务实体代码; 调用系统延迟函数,延迟时间,2 .周期执行任务,任务优先级足够高,任务设计|C/OS-II程序设计基础,任务分类,3 .事件触发执行任务,voidMyTask(void*pdata) while(1)调用获取事件的函数的任务实体代码,任务优先级足够高,任务设计|C/OS-II程序设计的基础,任务的区分,1 .任务区分的目标是,在对具体的嵌入式应用程序进行任务区分时为了选择最合适的划分方案,需要知道任务划分的目标。 高效的系统,1 .第一个目标是满足“实时性”的指标:即使在最坏的情况下,系统中实时性所要求的功能都可以正常实现,3 .简化软件系统:一个任务是要实现其功能, 除了支持操作系统的调度功能之外,还需要支持操作系统的其他服务功能,能够合理地分割任务,减少对操作系统的服务要求,简化软件系统, 4 .减少资源需求:合理划分任务,减少或简化任务间的同步和通信需求,可以减少相应数据结构的存储器规模,降低系统资源需求。 2 .任务数合理:对相同的应用系统,合理地合并几个任务,适当地减少或有利地减少任务数,任务设计|C/OS-II程序设计的基础、任务的划分、2 .任务的划分方法、任务的划分方法,请参见下一章“LPC2000” 传递性:信息传递的上游任务的优先级高于下游任务的优先级。 例如,信号收集任务的优先级高于数据处理任务的优先级。 紧迫性:紧迫任务对应答时间要求很严格,所以在所有紧迫任务中,按应答时间要求排序,越紧迫任务优先级越高。 紧迫的任务通常与ISR相关:任务越是重要的调度优先级越高,执行机会就越得到保证;中断关联性:与中断服务程序(ISR )相关的任务可以实时处理异步事件,提高系统的实时性优先级低的话,CPU有可能长期被优先级高的任务占有,发生第二次中断时直到第一次中断为止都不处理,信号丢失的现象发生的频度:对于周期性的任务,频繁执行越短的周期,允许延迟时间也变短,因此预定保证及时执行的迅速性:在前面的各条件接近的情况下,越快(时间短)的任务计划的优先级越高,就越能缩短其他准备任务的延迟,任务设计|C/OS-II编程基础、任务的优先级、任务优先级、任务优先级、重要度、 传递性、C/OS-II编程基础、系统函数概要、基本原则、系统函数分类、系统函数概要|C/OS-II编程基础、基本原则、1 .完整性原则,对C/OS-II来说,大部分API是成对的,一当然,查询状态的系统函数不需要通常成对使用,并且一些API也不需要与延迟或成对使用。 配对的函数如下表所示。 系统函数概述|C/OS-II编程的基础、基本原则、2 .中断服务程序调用函数的限制、中断服务程序不能调用可能引起任务调度的函数,这些主要有几种注意:未在表中注册的函数OSTaskCreate ()、OSTaskCreate扩展()、OSTaskDel ()、OSTaskResume ()、OSTaskChangePrio ()、OSTaskSuspend ()、OSTimeDly (),OSTimeDly () 系统函数的概要|C/OS-II编程的基础、基本原则、1 .事件创建和事件删除的函数。 此外,虽然一些函数没有明确规定不能调用中断服务程序,但由于中断服务程序的特性,一般不使用。 2 .与任务相关的函数OSTaskChangePrio ()、OSTaskDelReq ()、OSTaskStkChk ()、OSTaskQuery ()。 OSSchedLock ()和OSSchedUnlock ()函数在中断服务的过程中没有意义。 系统函数的概要|C/OS-II程序设计的基础、基本原则、3 .任务需要调用某个系统函数。 因为C/OS-II是完全基于优先级的操作系统,所以必须拥有在一定条件下CPU能够执行优先级比自己低的任务的权利。 这是通过调用某些系统函数实现的,这些函数请参照下表。 典型的任务必须调用表中的至少一个函数。 例外情况是只执行一次的任务,如果任务被删除,一定会转让CPU,所以不需要调用表中的函数。 典型的操作系统都提供时间管理函数,最基本的是延迟函数,C/OS-II也不例外,C/OS-II的时间管理函数如下表所示。 C/OS-II具有简单的动态内存管理能力。 C/OS-II的动态内存管理函数如下表所示。 任务管理函数是操作与任务相关功能的函数。 有关详细信息,请参见下表。 系统管理函数是C/OS-II内核或与功能相关的几个函数,请参见下表。 C/OS-II的初始化函数有OSInit ()和OSStart ()两种。 OSStart ()函数不能用于任何任务或中断服务程序,仅在main ()函数中以一定的规格调用。 其中,OSInit ()函数初始化C/OS-II内部变量,OSStart ()函数启动多任务环境。 另外,C/OS-II将信号量等称为事件,管理它们的是事件管理函数。 C/OS-IIV2.52具有的事件是正常信号量、互斥信号量、事件标志组、邮箱和消息队列,它们是C/OS-II进行同步和通信的工具,在本章中进行详细说明。系统函数概述|C/OS-II编程基础、系统函数分类、功能分类、C/OS-II编程基础、使用系统函数时、时间管理、行为同步、资源同步、使用系统函数时|C/OS-II编程基础、 while(1)任务实体代码; 调用系统延迟函数,注意:延迟函数OSTimeDly ()以系统节拍数为参数,延迟函数OSTimeDlyHMSM ()以实际的时间值为参数,但在执行中也被转换成系统节拍数。 如果实际时间不是系统节拍的整数倍,就进行舍入处理。 系统节拍为50毫秒,调用OSTimeDly(20 )的效果延迟了1秒,调用ostimedlyhmsm (0,1,27,620 )的实际时间延迟了1分钟27秒600毫秒。 通过在任务函数代码中插入延迟函数,可以控制任务的周期性执行,将空闲时间的CPU用于其他任务。 另外,当使用系统函数时|C/OS-II程序设计的基础、时间管理和2 .还可以通过将延迟函数插入任务函数代码中来控制任务的执行节奏。 voidMyTask(void*pdata)进行准备工作的代码; while(1)调用获取事件的函数的第一部分操作代码调用系统延迟函数的第二部分操作代码调用系统延迟函数的第三部分操作代码,各种时间序列控制任务可以通过这样的结构的任务函数实现。 使用、系统函数的情况下|C/os-II程序设计的基础,时间管理,3 .状态查询,查询程序是无限循环程序,只有在出现希望的状态后,在实时OS管理下不允许退出该无限循环,优先级低的任务的执行解决这个问题的方法是“使用定时查询代替连续查询”。 voidMyTask(void*pdata)进行准备工作的代码; while(1)while (查询条件不成立) 调用系统延迟函数的其他处理代码,使用系统函数时|C/OS-II程序设计的基础,资源同步,任务1,任务2,释放,释放,1 .“资源同步”图表1 .通过调用中断禁止函数OS_ENTER_CRITICAL ()和中断允许函数OS_EXIT_CRITICAL ()来实现。 2 .使用调度:通过调用禁止任务调度函数OSSchedLock ()和许可任务调度函数OSSchedUnlock ()来实现,禁止调度违反了多任务的本来目的,所以不推荐给用户。 3 .使用信号量和排他信号量:通过等待信号量和发送信号量实现共享资源的垄断。 使用系统函数时|C/OS-II程序设计基础,资源同步,2 .“资源同步”实现方式,使用系统函数时|C/OS-II程序设计基础,行动同步,任务1,任务2,一个任务的执行过程和其他任务的执行过程任务优先级足够高,1 .行为同步、信号量、事件标志群、邮箱、消息队列、任务间的通信、同步、 使用系统函数的情况|C/OS-II程序设计基础,行为同步,2 .数据通信,注意:指针可能是局部变量,但是只要指针指向的变量是全局变量,对指针指向的变量进行操作的情况也需要作为全局变量处理。 取得C/OS-II编程基础、时间管理、系统延迟函数OSTimeDly ()、强制延迟的任务结束延迟OSTimeDlyResume ()、系统延迟函数OSTimeDlyHMSM ()、系统时间ostimemegaet (),并取得系统时间管理|C/OS-II编程基础、概要、C/OS-II提供了几种时间管理服务函数,可以满足任务执行中的时间管理需求。 在使用时间管理服务函数时,时间管理服务函数应该以系统节拍为处理单位,并且应该充分理解实际时间和期望时间之间存在误差,最糟糕的是误差接近系统节拍的事实。 因此,只能在不要求时间精度的情况下或时间间隔长的情况下使用时间管理服务函数。时间管理|C/OS-II编程基础,ostimaly (),系统延迟函数ostimaly ()调用图表,当前任务优先级是就绪状态中最高的,延迟时间,延迟时间的长度由时钟节拍的数量决定。 时间管理|C/OS-II编程基础,ostimaly (),以下,设计一个LED以50个时钟节拍为单位发光,说明ostimaly ()函数的用途的任务。 由于纸张宽度的关系,只给出了任务的主要处理代码。 voidtaskled (void * pdata ) while (1) io0clr=le D1; OSTimeDly(25) IO0SET=LED1; OSTimeDly(25) ,注意:上述设计还可以用于控制任务的周期性执行和任务的执行速度。 时间管理|C/OS-II编程基础、OSTimeDlyHMSM ()、|C/OS-II提供了OSTimeDlyHMSM ()系统延迟函数,该函数用四个参数(小时(h )、分钟(m )、秒(s )和毫秒(m )定义延迟时间因为函数在内部将这些参数转换成时钟节奏,并且通过调用一个或多个ostimemedly ()来进行延迟和任务调度,所以延迟原理与调用ostimely ()的原理相同。 OSTimeDlyHMSM ()的详细情况如下表所示。 时间管理|C/OS-II编程的基础,OSTimeDlyHMSM ()为了说明OSTimeDlyHMSM ()函数的使用方法,下面设计一个LED以2Hz的频率发光的任务。 任务的主要处理代码如下所示。 voidtaskled (void * pdata ) while (1) io0clr=le D1; ostimedlyhmsm (0,0,250 ) io0set=le D1; OSTimeDlyHMSM (0,0,250 ) ,注意:上述设计通过ostimedlyhmsm ()控制任务的周期性执行,也可以控制任务的执行速度。 时间管理|C/OS-II编程基础,OSTimeDlyResume (),现在的任务的优先顺序在准备完毕状态中最高,OSTimeDlyResume (),c/OS-ii中用户可以结束延期中的任务, 延期中的任务可以不等待延期,通过取消其他任务的延期,成为准备完成状态,可以通过调用OST

温馨提示

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

评论

0/150

提交评论