版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1,第 六 章 嵌入式C/OS-II操作系统及应用,2,1有源代码,COS-源代码是开放的,用户可登录COS-的网站(wwwuCOS-IIcom)下载针对不同微处理器的移植代码。 2可移植(Portable),COS-的源代码中,除了与微处理器硬件相关的部分是使用汇编语言编写的,其绝大部分是使用移植性很强的ANSIC来编写的。 3可固化和可裁剪,COS-是为嵌入式应用而设计的操作系统,只要具备有合适的软、硬件工具,就可将COS-嵌入到产品中去。,6.1.1 COS-操作系统功能和特点,3,。,4可剥夺型和可确定性,COS-是完全可剥夺型的实时内核,运行就绪条件下优先级最高的任务。 5任务栈和多
2、任务, COS-的每个任务都有自己单独的栈和栈空间。 6.系统服务和中断管理。COS-提供了很多系统服务,例如信号量、互斥信号量、消息邮箱、数据队列、块大小固定的内存的申请与释放及时间管理函数等。 7.稳定性与可靠性,COS自1992年以来已有数百个商业应用。COS-与COS的内核是一样的,只是提供了更多的功能。,4,1 任务:一个任务(也称作一个线程)是一个简单的程序,可以认为CPU完全只属该程序自己应用。在COS-中,一个任务通常是一个无限的循环。看起来像其他c语言的函数一样,有函数返回类型,有形式参数变量,但任务是决不会返回的。返回参数必须定义成void,例如: Void YourTas
3、k(void *pdata) for(;) *用户代码* *调用COS-II的某种系统服务:* *用户代码*,6.1.2 COS-操作系统的内核结构,5,2 任务调度 COS-II是一个实时多任务的操作系统,多任务的运行的实现实际上是靠处理器在许多任务之间转换、调度。处理器只有一个,轮番服务于一系列任务中的某一个。多任务运行很像前后台系统,但后台任务有多个。多任务运行使处理器的利用率得到最大的发挥,并使应用程序模块化。在实时应用中,多任务化的最大特点是,开发人员可以将很复杂的应用程序层次化。,6,为了使COS-II能管理用户任务,用户必须在建立一个任务的时候,将任务的起始地址与其他参数一起传给
4、OSTaskCreate()或者OSTaskCreateExt()这两个函数中的任何一个函数。上图是COS-II控制下的任务状态转换图,在任一时刻,任务的状态一定是这五种状态之一。,7,3可剥夺内核 C/OS-以及多数商业上销售的实时内核都是可剥夺型内核。如果是中断服务子程序使一个高优先级的任务进入就绪态,使用可剥夺型内核使得任务级响应时间得以最优化。 4任务间通讯 因为C/OS-是一个典型的实时多任务操作系统,在进行应用开发的过程中有时很需要任务间的或中断服务与任务间的通讯。这种信息传递称为任务间的通讯,任务间信息的传递有通过全程变量和发消息给另一个任务两个途径。,8,1任务管理:C/OS-
5、可以管理多达64个任务,并从中保留了四个最高优先级和四个最低优先级的任务供自己使用,所以用户可以使用的只有56个任务。任务的优先级越高,反映优先级的值则越低。在最新的C/OS-版本中,任务的优先级数也可作为任务的标识符使用。,6.1.3 COS-操作系统的主要功能模块,9,任务管理主要通过以下4个函数来实现: OSTaskCreate()和带有扩展附加功能的OSTaskCreateExt()函数,用于建立一个新的任务。 OSTaskSuspend()函数,来挂起自身或者处空闲任务之外的其他任务。 OSTaskDel()函数,删除一个任务,就是把该任务置于睡眠状态,任务的代码不再被uC/OS-I
6、I使用,而并不是说任务的代码被删除了。 OSTaskChangePrio函数,在任务运行过程中更改任务的优先级。,10,2内存管理: 在ANSI C语言中,一般采用内存分配函数malloc()和内存释放函数free()两个函数动态地分配和释放内存。这样,随着内存空间的不断分配与释放,就会把原来很大的一块连续内存区域逐渐地分割成许多非常小的,但彼此之间又不相邻的内存块,这样也就产生内存碎片的问题。由于存储系统中有大量碎片的存在,是非常危险的现象,应该尽量避免。,11,3时间管理:与大部分内核一样,COS-要求提供定时中断,以实现延时与超时控制等功能。这个定时中断也可以被叫作为时钟节拍。下面再介绍
7、几个可以处理时间问题的函数。 任务延时函数OSTimeDIy() 恢复延时的任务函数OSTimeDlyResume() 按时、分、秒、毫秒延时函数OSTimeDlyHMSM() 系统时间函数OSTimeGet()和OSTimeSet(),12,4COS-II操作系统的文件系统 COS-II操作系统的文件体系结构如图6-2所示,其核心主要可分为以下三个部分: 应用软件层,指的是基于COS-II的应用程序代码。 内核的核心代码层,主要包括8个源代码文件。 系统设置与移植层。系统设置部分的代码由两个头文件OS_CFG.H和INCLUDES.H组成。,13,图6-2 COS-II文件体系结构,14,6
8、.1.4 COS-II 操作系统的初始化,在调用COS-II操作系统的其他服务之前,COS-II操作系统要求用户首先调用系统初始化函数OSInit()。执行OSInit()函数后将初始化COS-II所有的变量和数据结构,另外OSInit()会建立空闲任务,并且这个任务总是处于就绪状态的。空闲任务OSTaskldle()函数的优先级总是设置成为最低级别,即OS_LOWEST_PRIO。,15,移植是指使一个实时操作系统能够在某种微处理器平台上运行,由于COS-II的主要代码都是由标准的C语言写成的,所以一般来说移植过程并不复杂。,6.3 COS-II操作系统在ARM系统中的移植,16,6.3.1
9、 COS-II操作系统的移植条件,本节将介绍如何将COS-II移植到ARM系列的微处理器上。为了要使COS-II可以正常工作,处理器必须要满足如下要求: C编译器能产生可重入代码 可重入的代码指的是一段代码(如一个函数)可以被多个任务同时调用,而不必担心会破坏其内部的数据。,17,程序1:可重入型函数 void Exchange(int a, int b) int nTemp; nTemp = a; a = b; b = nTemp; ,程序2:非可重入型函数 int g_nTemp; void Exchange(int a, int b) g_nTemp = a; a = b; b = g_
10、nTemp; ,18,程序1中使用的是局部变量nTemp。程序2中g_nTemp是全局变量。 在程序中可以打开或者关闭中断 微处理器支持中断,并且能产生定时中断(通常在10Hz-1000Hz之间)。 微处理器支持能够容纳一定量数据的硬件堆栈,并具有将堆栈指针和其他CPU寄存器读写到堆栈(或者内存)的指令。,19,6.3.2 COS-II操作系统的移植步骤,下面将以基于ARM7TDMI的嵌入式微处理器S3C44B0为例,来介绍COS-II操作系统的移植。在COS-II的移植过程中,使用的是基于ARM公司架构的软件开发工具ADS作为编译器,所值得关注的问题是与微处理器相关的代码,这部分主要包括一个
11、头文件OS_CPU.H、一个汇编文件OS_CPU_A.ASM和一个C代码文件OS_CPU_C.C。,20,1设置头文件OS_CPU.H中与处理器和编译器相关的代码 (1)与编译器相关的数据类型 #define INT8U unsigned char #define INTl6U unsigned short #define INT32U unsigned long #define OS_STK unsigned long #define BOOLEAN int #define OS_CPU_SR unsigned long #define INT8S char,21,(2)进入中断屏蔽的宏定义
12、OS_ENTER_CRITICAL()和退出中断屏蔽的宏定义OS_EXIT_CRITICAL() 与所有的实时内核一样,COS-II操作系统在进行任务切换时需要先禁止中断在访问代码的临界区,并且在访问完毕后重新允许中断。 (3)栈增长方向标OS_STK_GROWTH #define OS_STK_GROWTH l #define STACKSIZE 256,22,2. 用汇编语言在OS_CPU_A.ASM文件中编写4个与微处理器相关的函数: (1)调用优先级最高的就绪任务函数 OSStartHighRdy()。 (2)任务级的任务切换函数 OSCtxSw() (3)中断级任务切换函数 OSIn
13、tCtxSw() (4)时钟节拍中断服务函数 OSTickISR(),23,3用C语言编写6个操作系统相关的函数(OS_CPU_C.C) 这里主要涉及6个函数:OSTaskStkInit()、OSTaskCreateHook()、OSTaskDelHook()、OSTaskSwHook()、OSTaskStatHook()及OSTimeTickHook()。 这些函数中,惟一必须移植的是任务堆栈初始化函数OSTaskStkInit()。,24,以下五个Hook函数,又称为钩子函数,使用前必须被声明,但并不一定要包含任何代码。 (1)0STaskCreateHook()函数 :当用OSTaskC
14、reate()函数或OSTaskCreateExt()函数建立任务时,就调用OSTask CreateHook()函数。该函数被调用时中断是禁止的,因此应尽量减少该函数中的代码,以缩短中断的响应时间。 (2)OSTaskDelHook()函数:当任务被删除时,就会调用OSTaskDelHook()函数。该函数在把任务从COS-的内部任务链表中解开之前被调用。当OSTaskDelHook()函数被调用时,会收到指向正被删除任务的OS_TCB的指针,这样它就可访问所有的结构成员了。,25,(3)OSTaskSwHook()函数 在调用OSTaskSwHook()函数期间,中断一直是被禁止的。这时因
15、为代码的多少会影响到中断的响应时间,所以应尽量使代码简化。此函数没有任何参数,也不返回任何值。 (4)OSTaskStatHook()函数 OSTaskStatHook()函数每秒都会被OSTaskStat()函数调用一次,可用OSTaskStatHook()函数来扩展统计功能。,26,(5)OSTimeTickHook()函数 OSTimeTickHook()函数在每个时钟节拍都会被0STimeTick()函数调用。实际上,OSTimeTickHook()函数是在节拍被COS-处理,并在通知用户的移植实例或应用程序之前被调用的。OSTimeTickHook()函数没有任何参数,也不返回任何值
16、。,27,6.4 基于COS-操作系统的应用开发,28,6.4.1 基于COS-操作系统的应用程序结构, 任务:一个任务通常是一个无限循环,也如同其他C的函数一样,具有函数返回类型,有形式参数变量,但是任务是不会返回参数的。 void YourTask(void *pdata) for(;) *用户代码* OSTaskDel(OS_PRIO_SELF); ,29, COS-II的启动 系统多任务的启动是用户通过调用OSStart()函数来实现的。然而,启动COS-II之前,用户至少要建立一个应用任务。 void main(void) OSInit();*初始化COSII * 通过调用OSTas
17、kCreate()或OSTaskCreateExt()创建至少一个任务 OSStart();*开始多任务调度!OSStart()永远不会返回。 ,30,6.4.2 COS-II操作系统的API,任何一个操作系统都会提供大量的应用程序接口API供开发者使用,COS-也不例外。由于COS-面向的是实时嵌入式系统开发,并不要求大而全。所以,内核提供的API也就大多与多任务相关。主要有如下几类:任务类、消息类、同步类、时间类及临界区与事件类。下面介绍几个比较重要的API函数。,31,(1)OSTaskCreate()函数 该函数在使用前,至少应在主函数main()内被调用一次,同时要求是在调用OSInit()函数之后才可再调用该函数,它的作用就是创建一个任务。 (2)OSTaskSuspend()函数 该函数可将指定的任务挂起。如果挂起的是当前任务,那么还会引发系统执行任务切换先导函数OSShed()来进行一次任务切换。,32,(3)OSTaskResume()函数 该函数与OSTaskSuspend()函数的作用正好相反,它用于将指定的已经挂起的函数恢复为就绪状态。 (4)OS_ENTER_CRIT
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 47171-2026烟花爆竹吐珠
- 2026年人形机器人“夏澜”在深圳市养老护理院互动实践案例复盘
- 湖南省长沙市明徳旗舰2025-2026学年初三下学期二模考试生物试题试卷含解析
- 江苏省通州区金郊初级中学2025-2026学年下学期初三生物试题第二次月考考试试卷含解析
- 2026年湖南省怀化市初三下学期(5月)三调化学试题试卷含解析
- 山东省临沂市罗庄区、河东区、高新区三区2026届初三元月调研测试生物试题试卷含解析
- 内蒙古阿拉善2026届初三5月月考(二统模拟)生物试题含解析
- 山西省运城市芮城县2025-2026学年初三中考化学试题系列模拟卷(10)含解析
- 2026年地下空间空气品质保障与通风空调设计
- 2026年浙江省温州市苍南县初三下学期化学试题分类汇编含解析
- T/CECS 10214-2022钢面镁质复合风管
- 绿色船舶拆除-绿色船舶拆除技术
- 马工程西方经济学(精要本第三版)教案
- 北京市朝阳区2024-2025学年高三下学期一模试题化学试卷(含答案)
- 2025年江苏财经职业技术学院高职单招高职单招英语2016-2024历年频考点试题含答案解析
- 2025年江苏农林职业技术学院高职单招(数学)历年真题考点含答案解析
- 企业事故隐患内部报告奖励制度
- 大连重工:中企华评报字(2024)第5436号资产评估报告
- 【人教版化学】选择性必修2 知识点默写小纸条(空白默写版)
- JBT 14449-2024 起重机械焊接工艺评定(正式版)
- 农村土地转让协议正规版范本合集
评论
0/150
提交评论