嵌入式操作系统教程第四章课件

上传人:沈*** 文档编号:241255516 上传时间:2024-06-13 格式:PPT 页数:25 大小:221.62KB
返回 下载 相关 举报
嵌入式操作系统教程第四章课件_第1页
第1页 / 共25页
嵌入式操作系统教程第四章课件_第2页
第2页 / 共25页
嵌入式操作系统教程第四章课件_第3页
第3页 / 共25页
点击查看更多>>
资源描述
嵌入式操作系统基础 第四章 嵌入式实时操作系统 第四章 嵌入式实时操作系统 uC/OS-II及其任务uuC/OS-II概述概述uuC/OS-II的任务的任务uuC/OS-II任务的存储结构任务的存储结构uuC/OS-II任务的状态任务的状态u任务的优先级别任务的优先级别u任务控制块任务控制块u任务堆栈任务堆栈u系统任务系统任务u临界区临界区1 第四章 嵌入式实时操作系统 嵌入式操作系统基础 第四章 嵌入式实时操作系统第四章 嵌入式实时操作系统uC/OS-II及其任务一、uC/OS-II的特点4.1 uC/OS-II概述2第四章 嵌入式实时操作系统uC/OS-II及其任务一、u嵌入式操作系统基础 第四章 嵌入式实时操作系统二、uC/OS-II的文件结构1.几个应用程序相关头文件(1)includes.h(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(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(1)os_cpu.hTypedef 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 INT32U52.几个系统硬件相关头文件(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)73.内核相关文件三、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();/*用户代码*/84.2 uC/OS-II任务1.任务的统一性与独立性嵌入式操作系统基础 第四章 嵌入式实时操作系统2.嵌入式实时操作系统对任务的响应异步事件;周期性事件;同时具有异步和周期特性的时间;92.嵌入式实时操作系统对任务的响应异步事件;周期性事件;嵌入式操作系统基础 第四章 嵌入式实时操作系统4.3 uC/OS-II任务的存储结构任务控制块:保存任务属性信息。任务堆栈:保存任务的工作环境。任务程序代码:任务执行的实体。104.3 uC/OS-II任务的存储结构任务控制块:保存任嵌入式操作系统基础 第四章 嵌入式实时操作系统 为了便于管理,相应的任务控制块彼此通过自己的指针彼此连接形成一个链表。11 为了便于管理,相应的任务控制块彼此通过自己的指针彼嵌入式操作系统基础 第四章 嵌入式实时操作系统4.4 uC/OS-II任务状态124.4 uC/OS-II任务状态12嵌入式操作系统基础 第四章 嵌入式实时操作系统睡眠态(DORMANT):指任务驻留在程序空间之中,还没有交给C/OS-管理。就绪态:通过调用两个函数之一:OSTaskCreate()或OSTaskCreateExt()来建立任务,一旦建立任务就进入就绪态准备运行。运行态:调用OSStart()函数可以启动任务,即任务投入运行,它总是启动拥有最高优先级的任务 等待态:正在运行的任务需要延迟一段时间或等待某事件的发生,它将放弃让出处理器进入等待状态。中断态:正在运行的任务是可以被中断的,除非该任务将中断关了,或者C/OS-将中断关了。被中断的任务就进入了中断服务态(ISR)。13睡眠态(DORMANT):指任务驻留在程序空间之中,还没有交嵌入式操作系统基础 第四章 嵌入式实时操作系统4.5 uC/OS-II任务优先级vuC/OS-II为硬实时可剥夺型内核v任务数量一定,且拥有全系统唯一优先级OS_LOWEST_PRIOvuC/OS系统都系统中最低优先级任务默认 144.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;/指向事件控制块的指针#endif1.任务控制块结构定义154.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_RDYOS_STAT_RDY表示任务处于就绪状态表示任务处于就绪状态OS_STAT_SEMOS_STAT_SEM表示任务处表示任务处于等待信号量状态于等待信号量状态OS_STAT_MBOXOS_STAT_MBOX表示任务处于等待消息邮箱状态表示任务处于等待消息邮箱状态OS_STAT_QOS_STAT_Q表示任务处于等待消息队列状态表示任务处于等待消息队列状态OS_STAT_SUSPENDOS_STAT_SUSPEND表示任务处表示任务处于被挂起状态于被挂起状态OS_STAT_MUTEXOS_STAT_MUTEX表示任务处于等待互斥型信号量状态表示任务处于等待互斥型信号量状态16#if(OS_Q_EN&(OS_MAX_QS=嵌入式操作系统基础 第四章 嵌入式实时操作系统2.空闲任务块链表v(空)任务块数量(空)任务块数量:系统初始化时建立,数量由系统初始化时建立,数量由os_cfg.hos_cfg.h中参数中参数OS_MAX_TASKS+OS_N_SYS_TASKSOS_MAX_TASKS+OS_N_SYS_TASKS决定决定.v任务数:任务数:文件文件UCOS_II.HUCOS_II.H中的常数中的常数OS_N_SYS_TASKSOS_N_SYS_TASKS它指明了它指明了系统任务的数目。系统任务的数目。172.空闲任务块链表(空)任务块数量:系统初始化时建立,数量嵌入式操作系统基础 第四章 嵌入式实时操作系统3.任务链表的建立v任务创建函数:任务创建函数:OSTaskCreate()OSTaskCreate()或或OSTaskCreateExtOSTaskCreateExt()()v任务搜索数组:任务搜索数组:OSTCBTb,OSTCBTb,按优先级顺序按优先级顺序存放任务控制块指针。存放任务控制块指针。v全局变量:全局变量:OSTCBCurOSTCBCur,存放当前占用处理,存放当前占用处理器资源的任务器资源的任务v任务删除函数:任务删除函数:OSTaskDel(),OSTaskDel(),任务删除的任务删除的实质就是资源的回收。实质就是资源的回收。183.任务链表的建立任务创建函数:OSTaskCreate(嵌入式操作系统基础 第四章 嵌入式实时操作系统1919嵌入式操作系统基础 第四章 嵌入式实时操作系统4.7 任务堆栈v堆栈:按堆栈:按“先进进出(先进进出(FIFOFIFO)”顺序组织的存储空间。顺序组织的存储空间。v堆栈创建堆栈创建一、任务堆栈的创建static OS_STK MyTaskStackstack_size;OROS_STK MyTaskStackstack_size;OS_STK *pstk;pstk=(OS_STK*)malloc(stack_size);if(pstk!=(OS_STK*)0)/*确认malloc()能得到足够地内存空间*/INTU8U OSTaskCreate(void*pdata);204.7 任务堆栈堆栈:按“先进进出(FIFO)”顺序组织嵌入式操作系统基础 第四章 嵌入式实时操作系统v任务创建任务创建 INT8U OSTaskCreate(void(*task)(void*pd),void*pdata.OS_STK*ptos,INT8U prio );21任务创建21嵌入式操作系统基础 第四章 嵌入式实时操作系统二、任务堆栈的初始化 处理器启动任务时,寄存器需要预置一些与待运行任务相处理器启动任务时,寄存器需要预置一些与待运行任务相关的初始数据的,决定了新任务建立,其与处理器寄存器有关的初始数据的,决定了新任务建立,其与处理器寄存器有关的内容必须先预存在其私有堆栈中。关的内容必须先预存在其私有堆栈中。堆栈初始化函数堆栈初始化函数 OS_STK*OSTaskStkInit(void(*task)(void*pd),void*pdato.OS_STK*ptos,INT8U opt);22二、任务堆栈的初始化 处理器启动任务时,寄存器需要预置嵌入式操作系统基础 第四章 嵌入式实时操作系统4.8 系统任务v空闲任务:多任务系统中,系统为了保持正常的运算,在某个无用户任务运行的时间段运行的一个系统自建任务.void OSTaskIdle(void*pdata)#if OS_CRITICAL_METHOD=3 OS_CPU_SR cpu_sr;#endif pdata=pdata;for(;)OS_ENTER_CRITICAL();OSdleCtr+;OS_EXIT_CRITICAL();临界区临界区234.8 系统任务空闲任务:多任务系统中,系统为了保持正常嵌入式操作系统基础 第四章 嵌入式实时操作系统v统计任务:用来记录处理器使用情况,有系统自身建立的任务。v临界区:系统中,某些代码执行过程中不允许中断其执行,这段代码执行时形成的上下文环境成为临界区。24统计任务:用来记录处理器使用情况,有系统自身建立的任务。24嵌入式操作系统基础 第四章 嵌入式实时操作系统2525
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!