您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 嵌入式操作系统教程-第四章
嵌入式操作系统基础第四章嵌入式实时操作系统1第四章嵌入式实时操作系统uC/OS-II及其任务uC/OS-II概述uC/OS-II的任务uC/OS-II任务的存储结构uC/OS-II任务的状态任务的优先级别任务控制块任务堆栈系统任务临界区嵌入式操作系统基础第四章嵌入式实时操作系统2第四章嵌入式实时操作系统uC/OS-II及其任务一、uC/OS-II的特点§4.1uC/OS-II概述嵌入式操作系统基础第四章嵌入式实时操作系统3二、uC/OS-II的文件结构1.几个应用程序相关头文件(1)includes.h#includestdio.h#includestring.h#includectype.h#includestdl.h#includeconio.h#includedos.h#includesetjmp.h/*与应用程序相关*/#include“\software\ucosii\ix86\bc31\os_cpu.h”#include“os_cfg.h”#include“software\uscos-ii\source\ucos_ii.h”#include“software\blocks\pc\bc31\pc.h”由具体应用环境决定嵌入式操作系统基础第四章嵌入式实时操作系统4(2)os_cfg.h#defineOS_MAX_EVENTS2//事件总数#defineOS_MAX_FLAGS5//信号量集总数#defineOS_MAX_MEM_PART5//内存块数量#defineOS_MAX_QS2//消息队列数量#defineOS_MAX_TASKS50//任务数量#defineOS_LOWEST_PRIO52//用户任务数量#defineOS_TASK_IDLE_STK_SIZE512//空闲任务堆栈长度……#defineOS_TASK_CHANGE_PRIO_EN1//优先级修改功能可用#defineOS_TASK_CREATE_ENABLE1//任务创建功能可用……系统裁剪性的实现:#ifOS_TASK_CREATE_EXE_EN……//用户可代码#endif嵌入式操作系统基础第四章嵌入式实时操作系统52.几个系统硬件相关头文件(1)os_cpu.hTypedefunsignedcharBOOLEAN;TypedefunsignedcharINT8U;TypedefsignedcharINT8S;TypedefunsignedintINT16U;TypedefsignedintINT16S;TypedefunsignedlongINT32U;TypedefsignedlongINT32U;TypedeffloatFP32;TypedefdoubleFP64;TypedefunsignedintOS_STK;TypedefunsignedshortOS_CPU_SR;#defineBYTEINT8S#defineUBYTEINT8U#defineWORDINT16S#defineUWORDINT16U#defineLONGINT32S#defineULONGINT32U嵌入式操作系统基础第四章嵌入式实时操作系统6#defineOS_CRITICAL_METHOD2#ifOS_CRITICAL_METHOD==1#defineOS_ENTER_CRITICAL()asmCLI#defineOS_EXIT_CRITICAL()asmSTI#endif#ifOS_CRITICAL_METHOD==2#defineOS_ENTER_CRITICAL()asm(PUSHF;CLI)#defineOS_EXIT_CRITICAL()asmPOPF#endif#ifOS_CRITICAL_METHOD==3#defineOS_ENTER_CRITICAL()(cpu_sr=OSCPUSaveSR())#defineOS_EXIT_CRITICAL()(OSCPURestoreSR(cpu_sr))#endif与系统处理器相关的宏定义:嵌入式操作系统基础第四章嵌入式实时操作系统73.内核相关文件三、uC/OS-II的裁剪性typedefstructos_tcb{OS_STK*OSTCBStkPtr;#ifOS_TASK_CREATE_EXT_ENvoid*OSTCBExtPtr;OS_STK*OSTCBStkBottom;INT32UOSTCBStkSize;INT16UOSTCBOpt;INT16UOSTCBId;#endif……#if(OS_Q_EN&&(OS_MAX_QS=2))||OS_MBOX_EN||OS_SEM_ENOS_EVENT*OSTCBEventPtr;#endif#if(OS_Q_EN&&(OS_MAX_QS=2))||OS_MBOX_ENvoid*OSTCBMsg;#endif……#ifOS_TASK_DEL_ENBOOLEANOSTCBDelReq;#endif}OS_TCB;由cfg.h设定编译与否(值为1)由cfg.h设定编译与否(值为0)嵌入式操作系统基础第四章嵌入式实时操作系统8§4.2uC/OS-II任务1.任务的统一性与独立性——总任务与分任务任务就是一个无限循环的C函数voidYourTask(void*pdata)(1){for(;;){(2)/*用户代码*/调用uC/OS-II的某种系统服务:OSMboxPend();OSQPend();OSSemPend();OSTaskDel(OS_PRIO_SELF);OSTaskSuspend(OS_PRIO_SELF);OSTimeDly();OSTimeDlyHMSM();/*用户代码*/}}嵌入式操作系统基础第四章嵌入式实时操作系统92.嵌入式实时操作系统对任务的响应异步事件;周期性事件;同时具有异步和周期特性的时间;嵌入式操作系统基础第四章嵌入式实时操作系统10§4.3uC/OS-II任务的存储结构任务控制块:保存任务属性信息。任务堆栈:保存任务的工作环境。任务程序代码:任务执行的实体。嵌入式操作系统基础第四章嵌入式实时操作系统11为了便于管理,相应的任务控制块彼此通过自己的指针彼此连接形成一个链表。嵌入式操作系统基础第四章嵌入式实时操作系统12§4.4uC/OS-II任务状态嵌入式操作系统基础第四章嵌入式实时操作系统13睡眠态(DORMANT):指任务驻留在程序空间之中,还没有交给μC/OS-Ⅱ管理。就绪态:通过调用两个函数之一:OSTaskCreate()或OSTaskCreateExt()来建立任务,一旦建立任务就进入就绪态准备运行。运行态:调用OSStart()函数可以启动任务,即任务投入运行,它总是启动拥有最高优先级的任务等待态:正在运行的任务需要延迟一段时间或等待某事件的发生,它将放弃让出处理器进入等待状态。中断态:正在运行的任务是可以被中断的,除非该任务将中断关了,或者μC/OS-Ⅱ将中断关了。被中断的任务就进入了中断服务态(ISR)。嵌入式操作系统基础第四章嵌入式实时操作系统14§4.5uC/OS-II任务优先级uC/OS-II为硬实时可剥夺型内核任务数量一定,且拥有全系统唯一优先级——OS_LOWEST_PRIOuC/OS系统都系统中最低优先级任务默认嵌入式操作系统基础第四章嵌入式实时操作系统15§4.6任务优控制块(TCB)typedefstructos_tcb{OS_STK*OSTCBStkPtr;//指向任务堆栈栈顶的指针#ifOS_TASK_CREATE_EXT_ENvoid*OSTCBExtPtr;//指向任务控制块扩展的指针OS_STK*OSTCBStkBottom;//指向任务堆栈栈底的指针INT32UOSTCBStkSize;//任务堆栈的长度INT16UOSTCBOpt;//创建任务时的选择项INT16UOSTCBId;//目前,该域未被使用#endifstructos_tcb*OSTCBNext;//指向后一个任务控制块的指针structos_tcb*OSTCBPrev;//指向前一个任务控制块的指针#if(OS_Q_EN&&(OS_MAX_QS=2))||OS_MBOX_EN||OS_Sem_ENOS_EVENT*OSTCBEventPtr;//指向事件控制块的指针#endif1.任务控制块结构定义嵌入式操作系统基础第四章嵌入式实时操作系统16#if(OS_Q_EN&&(OS_MAX_QS=2))||OS_MBOX_ENvoid*OSTCBMsg;//指向传递给任务消息的指针#endifINT16UOSTCBDly;//任务等待的时限(节拍数)INT8UOSTCBStat;//任务的当前状态标志INT8UOSTCBPrio;//任务的优先级别INT8UOSTCBX;//用于快速访问就绪表的数据INT8UOSTCBY;//用于快速访问就绪表的数据INT8UOSTCBBitX;//用于快速访问就绪表的数据INT8UOSTCBBitY;//用于快速访问就绪表的数据#ifOS_TASK_DEL_ENBOOLEANOSTCBDelReq;//请求删除任务时用到的标志#endif}OS_TCB;等到中断到来减1值说明OS_STAT_RDY表示任务处于就绪状态OS_STAT_SEM表示任务处于等待信号量状态OS_STAT_MBOX表示任务处于等待消息邮箱状态OS_STAT_Q表示任务处于等待消息队列状态OS_STAT_SUSPEND表示任务处于被挂起状态OS_STAT_MUTEX表示任务处于等待互斥型信号量状态嵌入式操作系统基础第四章嵌入式实时操作系统172.空闲任务块链表(空)任务块数量:系统初始化时建立,数量由os_cfg.h中参数OS_MAX_TASKS+OS_N_SYS_TASKS决定.任务数:文件UCOS_II.H中的常数OS_N_SYS_TASKS它指明了系统任务的数目。嵌入式操作系统基础第四章嵌入式实时操作系统183.任务链表的建立任务创建函数:OSTaskCreate()或OSTaskCreateExt()任务搜索数组:OSTCBTb[],按优先级顺序存放任务控制块指针。全局变量:OSTCBCur,存放当前占用处理器资源的任务任务删除函数:OSTaskDel(),任务删除的实质就是资源的回收。嵌入式操作系统基础第四章嵌入式实时操作系统19嵌入式操作系统基础第四章嵌入式实时操作系统20§4.7任务堆栈堆栈:按“先进进出(FIFO)”顺序组织的存储空间。堆栈创建一、任务堆栈的创建staticOS_STKMyTaskStack[stack_size];OROS_STKMyTaskStack[stack_size];{OS_STK*pstk;pstk=(OS_STK*)malloc(stack_size);if(pstk!=(OS_STK*)0){/*确认malloc()能得到足够地内存空间*/INTU8UOSTaskCreate(void*pdata);}}嵌入式操作系统基础第四章嵌入式实时操作系统21任务创建INT8UOSTaskCreate(void(*task)(void*pd),void*pdata.OS_STK*ptos,INT8Uprio);嵌入式操作系统基础第四章嵌入式实时操作系统22二、任务堆栈的初始化处理器启动任务时,寄存器需要预置一些与待运行任务相关的初始数据的,决定了新任务建立,其与处理器寄存器有关的内容必须先预存在其私有堆栈中。堆栈初始化函数OS_STK*OSTaskStkInit(void(*task)(void*pd),void*pdato.OS_STK*ptos,INT8Uopt);嵌入式操作系统基础第四章嵌入式实时操作系统23§4.8系统任务空闲任务:多任务系统中,系统为了保持正常的运算,在某个无用户任务运行的时间段运行的一个系统自建任务.voidOSTaskIdl
本文标题:嵌入式操作系统教程-第四章
链接地址:https://www.777doc.com/doc-3263237 .html