资源预览内容
第1页 / 共25页
第2页 / 共25页
第3页 / 共25页
第4页 / 共25页
第5页 / 共25页
第6页 / 共25页
第7页 / 共25页
第8页 / 共25页
第9页 / 共25页
第10页 / 共25页
第11页 / 共25页
第12页 / 共25页
第13页 / 共25页
第14页 / 共25页
第15页 / 共25页
第16页 / 共25页
第17页 / 共25页
第18页 / 共25页
第19页 / 共25页
第20页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
点击查看更多>>
资源描述
第一章 操作系统的基本概念,*,*,*,嵌入式操作系统基础 第四章 嵌入式实时操作系统,第四章 嵌入式实时操作系统 uC/OS-II及其任务,uC/OS-II概述,uC/OS-II的任务,uC/OS-II任务的存储结构,uC/OS-II任务的状态,任务的优先级别,任务控制块,任务堆栈,系统任务,临界区,1,第四章 嵌入式实时操作系统,第四章 嵌入式实时操作系统uC/OS-II及其任务,一、uC/OS-II的特点,4.1 uC/OS-II概述,2,第四章 嵌入式实时操作系统uC/OS-II及其任务一、u,二、uC/OS-II的文件结构,1.几个应用程序相关头文件,(1)includes.h,#include,#include,#include,#include,#include,#include,#include,/*与应用程序相关*/,#include“softwareucosiiix86bc31os_cpu.h”,#include“os_cfg.h”,#include“softwareuscos-iisourceucos_ii.h”,#include“softwareblockspcbc31pc.h”,由具体应用环境决定,3,二、uC/OS-II的文件结构1.几个应用程序相关头文件(1,(2)os_cfg.h,#define OS_MAX_EVENTS 2 /事件总数,#define OS_MAX_FLAGS 5 /信号量集总数,#define OS_MAX_MEM_PART 5 /内存块数量,#define OS_MAX_QS 2 /消息队列数量,#define OS_MAX_TASKS 50 /任务数量,#define OS_LOWEST_PRIO 52 /用户任务数量,#define OS_TASK_IDLE_STK_SIZE 512 /空闲任务堆栈长度,#define OS_TASK_CHANGE_PRIO_EN 1 /优先级修改功能可用,#define OS_TASK_CREATE_ENABLE 1 /任务创建功能可用,系统裁剪性的实现:,#if OS_TASK_CREATE_EXE_EN,/用户可代码,#endif,4,(2)os_cfg.h#define OS_MAX_EVE,2.几个系统硬件相关头文件,(1)os_cpu.h,Typedef unsigned char BOOLEAN;,Typedef unsigned char INT8U;,Typedef signed char INT8S;,Typedef unsigned int INT16U;,Typedef signed int INT16S;,Typedef unsigned long INT32U;,Typedef signed long INT32U;,Typedef float FP32;,Typedef double FP64;,Typedef unsigned int OS_STK;,Typedef unsigned short OS_CPU_SR;,#define BYTE INT8S,#define UBYTE INT8U,#define WORD INT16S,#define UWORD INT16U,#define LONG INT32S,#define ULONG INT32U,5,2.几个系统硬件相关头文件(1)os_cpu.hTypede,#define OS_CRITICAL_METHOD 2,#if OS_CRITICAL_METHOD=1,#define OS_ENTER_CRITICAL()asm CLI,#define OS_EXIT_CRITICAL()asm STI,#endif,#if OS_CRITICAL_METHOD=2,#define OS_ENTER_CRITICAL()asm(PUSHF;CLI),#define OS_EXIT_CRITICAL()asm POPF,#endif,#if OS_CRITICAL_METHOD=3,#define OS_ENTER_CRITICAL()(cpu_sr=OSCPUSaveSR(),#define OS_EXIT_CRITICAL()(OSCPURestoreSR(cpu_sr),#endif,与系统处理器相关的宏定义:,6,#define OS_CRITICAL_METHOD 2,3.内核相关文件,三、uC/OS-II的裁剪性,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,#if(OS_Q_EN&(OS_MAX_QS=2)|OS_MBOX_EN|OS_SEM_EN,OS_EVENT *OSTCBEventPtr;,#endif,#if(OS_Q_EN&(OS_MAX_QS=2)|OS_MBOX_EN,void *OSTCBMsg;,#endif,#if OS_TASK_DEL_EN,BOOLEAN OSTCBDelReq;,#endif,OS_TCB;,由cfg.h设定编译与否(值为1),由cfg.h设定编译与否(值为0),7,3.内核相关文件三、uC/OS-II的裁剪性typedef,4.2 uC/OS-II任务,1.任务的统一性与独立性总任务与分任务,任务就是一个无限循环的C函数,void YourTask(void*pdata)(1),for(;)(2),/*用户代码*/,调用uC/OS-II的某种系统服务:,OSMboxPend();,OSQPend();,OSSemPend();,OSTaskDel(OS_PRIO_SELF);,OSTaskSuspend(OS_PRIO_SELF);,OSTimeDly();,OSTimeDlyHMSM();,/*用户代码*/,8,4.2 uC/OS-II任务1.任务的统一性与独立性,2.嵌入式实时操作系统对任务的响应,异步事件;周期性事件;同时具有异步和周期特性的时间;,9,2.嵌入式实时操作系统对任务的响应异步事件;周期性事件;,4.3 uC/OS-II任务的存储结构,任务控制块:保存任务属性信息。,任务堆栈:保存任务的工作环境。,任务程序代码:任务执行的实体。,10,4.3 uC/OS-II任务的存储结构任务控制块:保存任,为了便于管理,相应的任务控制块彼此通过自己的指针彼此连接形成一个链表。,11,为了便于管理,相应的任务控制块彼此通过自己的指针彼,4.4 uC/OS-II任务状态,12,4.4 uC/OS-II任务状态12,睡眠态(DORMANT):,指任务驻留在程序空间之中,还没有交给C/OS-管理。,就绪态,:,通过调用两个函数之一:OSTaskCreate()或OSTaskCreateExt()来建立任务,一旦建立任务就进入就绪态准备运行。,运行态:,调用OSStart()函数可以启动任务,,即任务投入运行,它总是启动拥有最高优先级的任务,等待态:正在运行的任务需要延迟一段时间或等待某事件的发生,它将放弃让出处理器进入等待状态。,中断态:,正在运行的任务是可以被中断的,除非该任务将中断关了,或者C/OS-将中断关了。被中断的任务就进入了中断服务态(ISR)。,13,睡眠态(DORMANT):指任务驻留在程序空间之中,还没有交,4.5 uC/OS-II任务优先级,uC/OS-II为硬实时可剥夺型内核,任务数量一定,且拥有全系统唯一优先级OS_LOWEST_PRIO,uC/OS系统都系统中最低优先级任务默认,14,4.5 uC/OS-II任务优先级uC/OS-II为硬实,4.6 任务优控制块(TCB),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;,/指向前一个任务控制块的指针,#if(OS_Q_EN&(OS_MAX_QS=2)|OS_MBOX_EN|OS_Sem_EN,OS_EVENT*OSTCBEventPtr;/指向事件控制块的指针,#endif,1.任务控制块结构定义,15,4.6 任务优控制块(TCB)typedef struc,#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;,等到中断到来减1,值说 明OS_STAT_RDY表示任务处于就绪状态OS_STAT_SEM表示任务处于等待信号量状态OS_STAT_MBOX表示任务处于等待消息邮箱状态OS_STAT_Q表示任务处于等待消息队列状态OS_STAT_SUSPEND表示任务处于被挂起状态OS_STAT_MUTEX表示任务处于等待互斥型信号量状态,16,#if(OS_Q_EN&(OS_MAX_QS=,2.空闲任务块链表,(空)任务块数量,:,系统初始化时建立,数量由os_cfg.h中参数OS_MAX_TASKS+OS_N_SYS_TASKS决定.,任务数:,文件UCOS_II.H中的常数OS_N_SYS_TASKS它指明了系统任务的数目。,17,2.空闲任务块链表(空)任务块数量:系统初始化时建立,数量,3.任务链表的建立,任务创建函数:OSTaskCreate()或OSTaskCreateExt(),任务搜索数组:OSTCBTb,按优先级顺序存放任务控制块指针。,全局变量:OSTCBCur,存放当前占用处理器资源的任务,任务删除函数:OSTaskDel(),任务删除的实质就是资源的回收。,18,3.任务链表的建立任务创建函数:OSTaskCreate(,19,19,4.7 任务堆栈,堆栈:按“先进进出(FIFO)”顺序组织的存储空间。,堆栈创建,一、任务堆栈的创建,static OS_STK MyTaskStackstack_size;,OR,OS_STK MyTaskStackstack_size;,OS_STK *pstk;,pstk=(OS_STK*)malloc(stack_size);,if(pstk!=(OS_STK*)0),/*确认malloc()能得到足够地内存空间*/,INTU8U OSTaskCreate(void*pdata);,20,4.7 任务堆栈堆栈:按“先进进出(FIFO)”顺序组织,任务创建,INT8U OSTaskCreate(,void(*task)(void*pd),void*pdata.,OS_STK*ptos,
点击显示更多内容>>

最新DOC

最新PPT

最新RAR

收藏 下载该资源
网站客服QQ:3392350380
装配图网版权所有
苏ICP备12009002号-6