




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
淮阴工学院 DSPDSP 技术与应用技术与应用课程设计报告课程设计报告 选题名称选题名称: uCOS-II 多任务实验 系(院)系(院): 计算机工程学院 专专 业业: 计算机科学与技术 班班 级级: 计算机 1073 姓姓 名名: 学学 号号: 指导教师指导教师: 学年学期学年学期: 2009 2010 学年 第 2 学期 2010年 5 月 30 日 摘要: 多任务是操作系统的一项基本功能。在 DSP 系统上引入操作系统后,我们可 以非常方便的使用它的多任务功能。实时嵌入式操作系统 uCOS-II 是基于优先级的抢 占式实时多任务操作系统,包含了实时内核、任务管理、时间管理、任务间通信同步 和内存管理等功能。C/OS-II 共有 64 个优先级,优先级的高低按编号从 0(最高) 到 63(最低)排序。通过定义系统常量 OS_LOWEST_PRIO 的值来限制优先级编号的 范围,当最低优先级为定为 18(共 19 个不同的优先级)时,定义如下: defineOS_LOWEST_PRIO18 C/OS-II 实时操作系统总是将最低优先级 OS_LOWEST_PRIO 分配给“空闲任务”,将次低优先级 OS_LOWEST_PRIO1 分配给 “统计任务”。 关键词:C/OS-操作系统;DSP 仿真器;汇编语言;多任务内核;任务优先级 目目录录 1 多任务描述.1 2 C/OS-操作系统.1 2.1 C/OS-简介.1 2.2 C/OS-工作原理.1 3 基础知识.2 3.1 STASKCREATE().2 3.2 任务控制块(TASK CONTROL BLOCKS,OS_TCBS).2 4 软件设计.3 4.1 程序设计.3 5 周期性执行任务.6 6 优先级安排.6 6.1 任务的优先级资源.6 6.2 优先级安排原则.7 总 结.8 参考文献.9 DSP 技术与应用课程设计报告 1 1 多任务描述多任务描述 多任务是操作系统的一项基本功能。在 DSP 系统上引入操作之后,我们可以非常 方便的使用它的多任务功能,多任务系统中,内核负责管理各个任务,或者说为每个 任务分配 CPU 时间,并且负责任务之间的通讯。内核提供的基本服务是任务切换。 只所以使用实时内核可以大大简化应用系统的设计,是因为实时内核允许将应用分成 若干个任务,由实时黑河来管理它们。内核本身也增加了应用程序的格外负荷,代码 空间增加 ROM 的用量,内核本身的数据结构增加了 RAM 的用量,内核本身对 CPU 的占用时间一般在 2 到 5 个百分点之间。C/OS-有一个精巧的内核调度算法,实时 内核精小,实行效率高,算法巧妙,代码空间很少 2 C/OS-操作系统操作系统 2.1 C/OS-简介简介 c/os-ii 是由 jean j.labrosse 于 1992 年编写的一个嵌入式多任务实时操作系统。最 早这个系统叫做 c/os,后来经过近 10 年的应用和修改,在 1999 年 jean j.labrosse 推 出了;c/osii,并在 2000 年得到了 美国联邦航空管理局对用于商用飞机的、符合 rtca do178b 标准的认证,从而证明 c/osii 具有足够的稳定 性和安全性。 c/os-ii 是一个可裁减、源代码开放、结构小巧、可抢占式的实时多任务内核,是 专为微控制器系统和软 件开发而设计的,是控制器启动后首先执行的背景程序,并 作为整个系统的框架贯穿系统运行的始终。它具有执行效率高、占用空间小、可移植 性强、实时性能良好和可扩展性强 等特点。采用 c/os-ii 实时操作系统可以有效地对 任务进行调度;对各任务赋予不同的优先级可以保证任务 及时响应,而且采用实时 操作系统,降低了程序的复杂度,方便程序的开发和维护 2.2 C/OS-工作原理工作原理 uC/OS-II 是一种基于优先级的可抢先的硬实时内核。要实现多任务机制,那么目 标 CPU 必须具备一种在运行期更改 PC 的途径,否则无法做到切换。不幸的使,直接设 置 PC 指针,目前还没有哪个 CPU 支持这样的指令。但是一般 CPU 都允许通过类 JMP,CALL DSP 技术与应用课程设计报告 2 这样的指令来间接的修改 PC。我们的多任务机制的实现也正是基于这个出发点。事 实上,我们使用 CALL 指令或者软中断指令来修改 PC,主要是软中断。但在一些 CPU 上, 并不存在软中断这样的概念,所以,我们在那些 CPU 上,使用几条 PUSH 指令加上一 条 CALL 指令来模拟一次软中断的发生。再 uC/OS-II 里,每个任务都有一个任务控制 块(Task Control Block),这是一个比较复杂的数据结构。在任务控制快的偏移为 0 的地 方,存储着一个指针,它记录了所属任务的专用堆栈地址。事实上,再 uC/OS-II 内,每个 任务都有自己的专用堆栈,彼此之间不能侵犯。这点要求程序员再他们的程序中保证。 一般的做法是把他们申明成静态数组。而且要申明成 OS_STK 类型。当任务有了自己 的堆栈,那么就可以将每一个任务堆栈再那里记录到前面谈到的任务控制快偏移为 0 的地方。以后每当发生任务切换,系统必然会先进入一个中断,这一般是通过软中断或 者时钟中断实现。然后系统会先把当前任务的堆栈地址保存起来,仅接着恢复要切换 的任务的堆栈地址。由于哪个任务的堆栈里一定也存的是地址(还记得我们前面说过 的,每当发生任务切换,系统必然会先进入一个中断,而一旦中断 CPU 就会把地址压入 堆栈),这样,就达到了修改 PC 为下一个任务的地址的目的。 3 基础知识基础知识 3.1 STaskCreate()() 想让 C/OS-管理用户的任务,用户必须要先建立任务。用户可以通过传递任务 地址和其他参数到以下两个函数之一来建立任务:OSTaskCreate()或 OSTaskCreateExt() 。OSTaskCreateExt()是 OSTaskCreate 的扩展版本,提供了一些 附加的功能。用两个函数中的任何一个都可以建立任务。任务可以在多任务调度前建 立,也可以在其它任务的执行过程中被建立。在开始多任务调度(即调用 OSSstar() ) 前,用户必须建立至少一个任务。任务不能由中断服务程序(ISR)来建立。 3.2 任务控制块(任务控制块(Task Control Blocks,OS_TCBs) 一旦任务建立了,任务控制块 OS_TCBs 将被赋值。任务控制块是一个数据结构, DSP 技术与应用课程设计报告 3 当任务的 CPU 使用权被剥夺时,C/OS-用它来保存该任务的状态。当任务重新得到 CPU 使用权时,任务控制块能确保任务从当时被中断的那一点斯堡不差地继续执行。 OS_TCBs 全部驻留在 RAM 中。读者将会注意到笔者在组织这个数据结构时,考虑到了 各 成员的逻辑分组。任务建立的时候,OS_TCBs 就被初始化了。 4 软件设计软件设计 4.1 程序设计程序设计 typedef struct os_tcb OS_STK *OSTCBStkPtr; #if OS_TASK_CREATE_EXT_EN void *OSTCBExtPtr; OS_STK *OSTCBStkBottom; INT32U OSTCBStkSize; INT16U OSTCBOpt; INT16U OSTCBId; #endif struct os_tcb *OSTCBNext; struct os_tcb *OSTCBprev; DSP 技术与应用课程设计报告 4 #if (OS_Q_EN #endif #if (OS_Q_EN % (OS_MAX_QS =2) | OS_MBOX_EN void *OSTCBMsg; #endif INT16U OSTCBDly; INT8U OSTCBStat; INT8U OSTCBPrio; INT8U OSTCBX; INT8U OSTCBY; INT8U OSTCBBitX; INT8U OSTCBBitY; #if OS_TASK_DEL_EN BOOLEAN OSTCBDELReq; #endif OS_TCB; OSTCBStkPtr 是指向当前任务栈顶的指针。C/OS-允许每个任务有自己的栈,尤为 DSP 技术与应用课程设计报告 5 重要的是,每个任务的栈的容量可以是任意的。有些商业内核要求所有任务栈的容量 都一样,除非用户写的一个复杂的接口函数来改变之。这种限制浪费了 RAM,当各 任务需要的栈空间不同时,也得按任务中预期栈容量需求最多的来分配栈空间。 OSTCBStkPt 是 OS_TCB 数据结构中唯一一个能用汇编语言来处置的变量。 OSTCBExtPtr 指向用户定义的任务控制块扩展。用户可以扩展任务控制块而不必修改 C/OS-的源代码。OSTCBExtPtr 只在函数 OstaskCreateExt()中使用,故使用时 要将 OS_TASK_CREAT_EN 设为 1,以允许建立任务函数的扩展。 OSTCBStkBottom 是指向任务底栈的指针。如果微处理器的栈指针是递减的,即栈存储 器从高地址想低地址方向分配,则 OSTCBStkBottom 指向任务使用的栈空间的最低地 址。 OSTCBStkSize 存有栈中可容纳的指针元数目而不是用字节表示的栈容量总数。 OSTCBOpt 把选择项传给 OSTaskCreateRxt() ,只有在用户 OS_TASK_CREATE_EXT_EN 设为 1 时,这个变量才有效。 OSTCBId 用于存储任务的识别码。 OSTCBNext 和 OSTCBPrev 用于任务控制块 OS_TCBa 的双重链接,该链表在诗中节拍函 数 OSTimeIick()中使用,用于刷新各个任务的任务迟延变量,在任务删除的时候从链 表中被删除。双中链接的链表使得任一称冠都能被快速插入或删除。 OSTCBMsg 是指向传给任务的消息的指针。 OSTCBDly 当需要把任务延迟若干时钟节拍时要用到这个变量,或者需要把任务挂起一 DSP 技术与应用课程设计报告 6 段时间以等待某事件的发生,这种等待是有超时限制的。 OSTCBStat 是任务的状态字。当 OSTCBStat 为 0,任务进入就绪态。 OSTCBPrio 是任务优先级。高优先级任务的 OSTCBPrio 值小。也就是说, 这个值越小,任务的优先级越高。 5 周期性执行任务周期性执行任务 周期性执行的任务函数也由三部分组成:第一部分“进行准备工作的代码”和第 二部分“任务实体代码”的含义与单次执行任务的含义相同,第三部分是“调用系统 延时函数”,把 CPU 的控制权主动交给操作系统,使自己挂起,再由操作系统来启 动其它已经就绪的任务。当延时时间到后,重新进入就绪状态,通常能够很快获得运 行权。通过合理设置调用 OSTimeDly( )或 OSTimeDlyHMSM( )时的参数值可以 调整任务的执行周期。当任务执行周期远大于系统时钟节拍时,任务执行周期的相对 误差比较小;当任务执行周期只有几个时钟节拍时,相邻两次执行的间隔时间抖动不 能忽视,任务的执行周期的相对误差比较大,只适用于对周期稳定性要求不高的任务 (如键盘任务);当任务执行周期只有一个时钟节拍时,可将该任务的功能放到 OSTimeTickHook( )(时钟节拍函数中的钩子函数)中去执行;当任务执行周期小于 一个时钟节拍或者不是时钟节拍的整数倍时,将无法使用延时函数对其进行周期控制, 只能采用独立于操作系统的定时中断来触发。采用独立定时器触发的任务具有很高的 周期稳定性。 6优先级安排优先级安排 6.1 任务的优先级资源任务的优先级资源 任务的优先级资源由操作系统提供,C/OS-II 共有 64 个优先级,优先级的高 低按编号从 0(最高)到 63(最低)排序。由于用户实际使用到的优先级总个数通 常远小于64为节约系统资源,可以通过定义系统常量 OS_LOWEST_PRIO 的值来限制优 先级编号的范围,当最低优先级为定为 18(共 19 个不同的优先级)时,定义如下: DSP 技术与应用课程设计报告 7 defineOS_LOWEST_PRIO18 C/OS-II 实时操作系统总是将最低优先级 OS_LOWEST_PRIO 分配给“空闲任务”,将次低优先级 OS_LOWEST_PRIO1 分配给 “统计任务”。在此例中,最低优先级为定为 18,则“空闲任务”的优先级为 18,“统计任务”的优先级为 17,用户实际可使用的优先级资源为 0 到 16,共 17 个。C/OS-II 实时操作系统还保留对最高的四个优先级(0、1、2、3)和 OS_LOWEST_PRIO3 与 OS_LOWEST_PRIO2 的使用权,以备将来操作系统升级时使 如果用户的应用程序希望在将来升级后的操作系统下仍然可以不加修改地使用,则用 户任务可以放心使用的优 先级个数为 OS_LOWEST_PRIO7。在本例中,软件优先级资源为 18711 个,即 可使用的优先级为 4、5、6、7、8、9、10、11、12、13、14。实际可使用的软件优 先级资源数目应该留有余地,以便将来扩充应用软件的功能(增加新任务)时不必对 优先级进行大范围的调整。 6.2 优先级安排原则优先级安排原则 任务的优先级安排原则如下:中断关联性:与中断服务程序(ISR)有关联的任 务应该安排尽可能高的优先级,以便及时处理异步事件,提高系统的实时性。如果优 先级安排得比较低,CPU 有可能被优先级高一些的任务长期占用,以致于在第二次中 断发生时连第一次中断还没 有处理,产生信号丢失现象。 紧迫性:因为紧迫任务对响应时间有严格要求,在所有紧迫任务中,按响应 时间要 求排序,越紧迫的任务安排的优先级越高。紧迫任务通常与 ISR 关联。 关键性:任务越关键安排的优先级越高,以保障其执行机会。 频繁性:对于周期性任务,执行越频繁,则周期越短,允许耽误的时间也越 短,故应该安排的优先级也越高,以保障及时得到执行。 快捷性:在前面各项条件相近时,越快捷(耗时短)的任务安排的优先级越 高,以使其他就绪任务的延时缩短。 例如一个应用系统中安排有键盘任务、显示任务、模拟信号采集任务、数据处理 任务、串行口接收任务、串行口发送任务。在这些任务中,模拟信号采集任务、串行 口接收任务和串行口发送任务均与 ISR 关联,实时性要求比较高。其中,串行口接 DSP 技术与应用课程设计报告 8 收任务是关键任务和紧迫任务,遗漏接收内容是不允许的;模拟信号采集任务是紧迫 任务,但不是关键任务,遗漏一个数据还不至于发生重大问题;在串行口发送任务中, CPU 是主动方,慢一些也可以,只要将数据发出去就可以。键盘任务和显示任务是人 机接口任务,实时性要求很低。数据处理任务根据其运算量来决定,运算量很大时, 优先级安排最低,运算量不大时,优先级可安排得比键盘任务高一些。根据以上分析, 最低优先级 OS_LOWEST_PRIO 定为 18,各个任务的优先级安排如下:串行口接收任 务(优先级 2),模拟信号采集任务(优先级 4),串行口发送任务(优先级 6), 数据处理任务(优先级 9),显示任务(优先级 12),键盘任务(优先级 13)。当 优 先级的安排比较宽松时,以后增加新任务就比较方便,在不改变现有任务优先级的情 况下,很容易根据需要找到一个合适的空闲优先级。 DSP 技术与应用课程设计报告 9 总结 经过一周的 DSP 课程设计,我终于顺利的完成了本学期所做的 uCOS-II 多任务实 验,本次的实验让自己受益匪浅,虽然不是很顺利很完美,但是还是让自己感到满意 了 课程设计是培养我们的综合能力,运用所学的知识用于实践,去发现,提出,分 析解决实际出现的问题,充分调动自己的积极性于动手的能力,本次实验所做的是 uCOS-II 多任务实验,在接到这个题目的时候,首先我要对这个课程设计的原理要有 一个细致的了解,了解它工作的意义,然后要对它的代码进行分析编写,弄懂其工作 原理,对于 uCOS-II 多任务实验,自己查阅了很多资料,对其有了很深的了解,在了 解的同时也想到了它真正的实际作用,对我们的日常生活都有着很大的作用。初步做 这个实验的时候,自己遇到了很多的问题和困难,通过查阅资料,向马岱老师,常波 老师进行请教和通过和同学的沟通交流,一点一点的解决问题,最后顺利的完成了课 程设计。 本次课程设计不仅让我对课本上的知识得到了巩固,更是让我学到了很多课本上 没有的新知识,让自己受益匪浅,感觉自己真的学到了许多。课程设计是对我们经验 的积累,光学书本知识虽然对理论的理解加深,但是实际操作才是更重要
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 贵州省仁怀市2025年上半年事业单位公开遴选试题含答案分析
- 灞桥垃圾分类知识培训课件
- 2025年加工安全知识面试题解
- 数字孪生在金属材料失效分析中的应用-洞察及研究
- 知识图谱在教育培训课件
- 铁路事故规则课件
- 知识付费培训赛道课件
- 知识付费培训线上学习课件
- 铁建建筑基础知识培训课件
- 含山辅警考试题库2025(有答案)
- 二零二五年度汽车销售商与汽车电子设备供应商合作协议范本
- GB/T 17421.3-2009机床检验通则第3部分:热效应的确定
- 人教版小学一年级上册道德与法治作业
- 全国2017年4月自学考试00149国际贸易理论与实务试题答案
- 2023年农村留守女童性侵状况综合调查报告
- 空压机验证方案(拟定)
- 客户报修记录表
- 电液伺服控制阀和比例阀课件
- 教育培训机构保密协议范本
- 《西方史学史》课件第一章
- 中学英语校本课程教材(Word)
评论
0/150
提交评论